[TCP] 흐름제어

Coastby·2023년 5월 24일
0

네트워크

목록 보기
3/4

TCP 흐름제어

  • TCP는 받은 것에 대해서 ACK을 반드시 해야한다.
  • 하지만 실제로는 보낼 세그먼트를 계속 보내고, 보내는 중에 ACK이 날라온다.

TCP 버퍼

송신 TCP는 버퍼에 세그먼트를 보관하고 이것들을 순차적으로 전송하고, 수신 TCP는 도착한 세그먼트를 응용 프로세스가 읽을 때까지 버퍼에 보관한다.

TCP 윈도우 크기 (window size)

송신 TCP 윈도우 크기 = 수신 TCP 버퍼의 크기

즉, 송신 TCP는 ACK를 받기 전까지 윈도우 크기 만큼의 세그먼트를 연속해서 보낼 수 있다. ACK를 수신하면 다시 보낼 수 있는 세그먼트의 수 만큼 윈도우 크기를 변경한다. (sliding window flow control)

윈도우 크기가 0이 되면 (zero window) 더 이상 전송을 하지 못하고 ACK를 받을 때까지 대기한다.

재전송

TCP는 ACK를 수신하지 못할 경우 무한정 기다리는 것(deadlock)을 피하기 위해 일정 시간이 지나면 (timeout) 재전송을 한다. 이때 상대방이 ACK를 못 보내는 것이 아직 버퍼에 공간이 없어서라면 상황을 더 악화시킬 수 있다.

이를 알리기 위해 수신 TCP는 현재 남아있는 버퍼 크기를 ACK를 전송할 때 window size 필드를 통해서 알려준다.

참고

https://www.youtube.com/watch?v=3Rm-wIRXh_8

profile
훈이야 화이팅

0개의 댓글