컴퓨터통신#5
LeeMir, 30 March 2021
3장 - Transport Layer(이어서)
TCP Segment Structure
- Sequence Numbers
- Segment의 첫번째 Data의 순서 번호
- Acknowledgements(ACKs)
- 수신측에서 기다리는 Data의 번호
- Cumulative
- “ACK 1” => 0번까지 잘 수신했고 1번이 필요하다는 뜻
- 잘 받았을 경우 받은 SN의 다음 번호를 ACK로 보냄
- SN과 AN은 Segment 단위가 아니라 Byte 단위로 표시
- TCP는 ByteStream이기 때문
- 송신 윈도우 크기는 변하지 않음
- 송신측에서의 전송 속도를 제어
- 링크 효율을 결정
TCP Round Trip Time, Timeout
EstimatedRTT = (1 - α) * EstimatedRTT + α * SampleRTT
- Exponential Weighted Moving Average (EWMA)
- 평균을 내는 게 아니라, 가중치(α)를 부여
TCP Reliable Data Transfer
- IP라는 Unreliable Service를 이용해 Reliable한 서비스를 만들어야함
- Pipelined(Sliding Window) Segments
- Cumulative ACKs
- 재전송 Timer
- 재전송(Retransmissions) 조건
- Timeout
- Duplicate ACKs
TCP Sender Events
- Event 1 : 상위 계층(Application Layer)으로부터 전송 요청이 옴
- Seq #(Sequence Number)를 넣어서 Segment를 만듦
- Start Timer(재전송 타이머)
- 가장 오래된, ACK를 받지 않은 Segment에 대한 타이머
- Event 2 : 재전송 타이머 타임아웃
- Segment(Timeout을 야기한)를 재전송
- 타이머를 Restart
- Event 3 : ACK 수신
- ACK를 수신하면 Sliding Window를 이동
TCP ACK Generation(Receiver)
- Event 1 : Segment가 순서대로(Seq #) 도착
- ACK를 바로 재전송하지 않고, 500ms정도 기다리면서 보낼 Segment가 생기면 ACK와 같이 보냄
- Segment가 없으면 별도의 ACK를 만들어 보냄(Without Data, Only Head)
- Event 2 : 다른 보낼 Segment가 생김
- ACK와 같이 보냄
- Event 3 : Segment가 순서대로 도착하지 않음
- Gap 발생
- Duplicate ACK(내가 받아야하는 Segment가 뭔지)를 전송함
TCP Fast Retransmit
- 경험론적으로 3개의 Duplicate ACKs가 도착했을 경우 Timeout이 되지 않았더라도 즉시 재전송함
- 실질적으로 도착한 ACK는 4개가 겹침
TCP Flow Control
- Sender가 Receiver의 Buffer에서 Overflow(Loss)가 발생하지 않게 조절
- Recieve Buffer의 Size는 OS에서 정하며, 일반적으로 4096 Bytes임
- 수신측에서 Free Buffer Space를 TCP Segment Header의 Receive Window 필드에 기록해서 송신측에 전송해 송신측이 이를 넘어서 보내지 않도록 방지함
rwnd = RcvBuffer - [ LastByteRcvd - LastByteRead ]
TCP : Connection Management
- TCP는 연결 설정을 해야함 => “Handshake”
- Connection Parameters를 정함
- 3-way Handshake
- 2-way Handshake는 무수한 단점이 존재
- 예상치 못한 Delay 발생
- Message Loss에 의해 재전송되는 Message 발생
- 송수신측이 서로를 볼 수 없음(잘 받았는지 확인 불가능)
- 연결 요구 => 응답 => 응답에 대한 응답의 3-way가 완성돼야 연결을 완성할 수 있음
- 연결 요구 => 응답의 2-way는 정확하지 않음
- SYNbit : 연결을 하자고 요청하는 bit
- 2-way Handshake는 무수한 단점이 존재