컴퓨터 네트워크
네트워크 11강 - TCP part.2
판교가고싶어요
2020. 8. 10. 10:12
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 이화여자대학교 이미정 교수님의 컴퓨터 네트워크 강의를 듣고 정리한 글임을 밝힙니다.
내용상 틀린 부분이 있을 수도 있으며 이에 대한 책임을 지지 않습니다.
틀린 부분이나 오타 지적은 댓글로 남겨주세요.