TCP에 대해 이어서 알아보자.
TCP Sender Events
TCP 세그먼트를 보내는 측에선 무슨 일을 하는지 알아보자.
- 애플리케이션 계층에서 데이터가 도착했다.
- 시퀀스 넘버와 체크섬을 달아서 세그먼트를 만든다.
- 타이머가 동작중이라면?
- 타이머는 가장 오래된 전송 중인(In-Flight) 세그먼트(가장 낮은 시퀀스 번호)에 맞춰져 있다.
- 세그먼트를 보낸지 너무 오래됐으면 도중에 유실된 것으로 판단한다. 이 때 사용하는 시계가 타이머이다.
- 타이머가 동작중이지 않다면?
- 타이머를 켜고 해당 세그먼트에 맞춘다.
- Time Out 발생!
- Time Out된 세그먼트를 다시 전송한다.
- Ack를 받지 못한 가장 작은 시퀀스의 세그먼트에 타이머를 맞춘다.
- Ack를 받았다.
- 받은 Ack에 해당하는 세그먼트를 In-Flight(전송 중)에서 Acked로 변경한다.
- In-Flight 세그먼트가 있으면 타이머를 세팅한다.
- TCP 재전송 시나리오
- 수신 측에서 보내는 ACK가 Loss 되어 재전송된 경우
- 보낸 데이터가 제대로 도착했어도 ACK가 Loss 됐을 수 있다.
- Ack Timeout으로 송신측은 아까 보낸 데이터를 다시 보낸다.
- 수신 측은 Loss 된 ACK를 다시 보낸다.
- ACK를 받기 전에 Time-out 된 경우
- ACK는 잘 도착했으나 ACK받기 전에 Time-out이 됐다면
- 받은 ACK에 해당하는 세그먼트는 ACK가 도착하기 전에 재전송된다.
- 수신 측에서는 받은 데이터를 또 받는다.
- TCP는 누적 ACK를 사용하므로 이전에 받았던 데이터가 다시 도착하더라도 그 데이터에 대한 ACK를 보내는 것이 아니라 최근에 받았던 데이터(Highest Sequence Number)에 대한 ACK를 보낸다.
- Ack가 손실됐지만 Time-out이 발생하기 전에 다음번 데이터의 ACK를 받은 경우
- ACK == 100을 받지 못했어도 ACK ==120을 받았다면 TCP는 누적 ACK를 사용하기 때문에 100번 데이터도 잘 도착한 것으로 인식한다.
- 따라서 재전송은 필요없다.
- 수신 측에서 보내는 ACK가 Loss 되어 재전송된 경우
TCP Receiver Events
TCP 세그먼트를 받는 측에선 무슨 일을 하는지 알아보자
- Ack Generation
- In-Order의 경우
- 매번 Ack를 보내는 것은 낭비다. 따라서 받은 Segment들에 대해 모두 ACK를 보냈다면 다음 In-Order Segment를 500ms동안 기다린다. 500ms동안 오지 않았다면 바로 ACK를 전송한다.
- 500ms 동안 기다릴 때 다음 세그먼트가 오면 바로 ACK를 보낸다.
- Out of Order의 경우
- 받은 Segment들 사이에 누락된 것이 있다면 가장 낮은 값의 ACK를 재전송한다.(Duplicated ACK 전송)
- 누락된 것을 받았다면 기다리지 않고 ACK를 전송한다.
- In-Order의 경우
- TCP Fast Retransmission
- Time out 시간은 상대적으로 길다.
- 3개의 중복된 ACK를 받았을 때 그 세그먼트는 Loss가 발생한 것이라고 생각하고 해당 Segment를 즉시 재전송한다.
TCP Flow Control
- Flow Control은 리시버 버퍼가 가득 차는 일을 방지한다.
- RWND는 리시버 TCP 버퍼의 여유공간이다.
- 리시버가 센더에게 보내는 Segment의 헤더에는 rwnd 값이 포함되어 있다.
- 센더는 In-Flight Segment개수를 rwnd를 를 넘지 않도록 조정한다.
- TCP 연결을 맺을 때 Seq number를 동기화하고 RWND 값을 교환한다.
더보기
본 게시물은 kocw 이화여자대학교 이미정 교수님의 컴퓨터 네트워크 강의를 듣고 정리한 글임을 밝힙니다.
내용상 틀린 부분이 있을 수도 있으며 이에 대한 책임을 지지 않습니다.
틀린 부분이나 오타 지적은 댓글로 남겨주세요.
'컴퓨터 네트워크' 카테고리의 다른 글
네트워크 13강 - Network Layer의 소개 (0) | 2020.08.10 |
---|---|
네트워크 12강 - TCP part.3 (0) | 2020.08.10 |
네트워크 10강 - TCP part.1 (0) | 2020.08.10 |
네트워크 9강 - Transport Layer 개론 (0) | 2020.08.10 |
네트워크 7강, 8강 - Electronic Mail과 DNS, P2P 아키텍쳐 (0) | 2020.08.07 |