Fast Retransmit (빠른 재전송)

 

- 재전송 타이머 값이 종종 상대적으로 길어지므로, 손실된 패킷의 재전송 전에 지연시간이 커진다.

 

- 위의 상항을 해결하고자 중복 ACKs를 통해 손실된 세그먼트를 검출한다.

 

- 송신측에서 바로바로 여러 개의 세그먼트를 전송할 경우, 세그먼트가 손실되면 수신측에서는 중복 ACK를 보내게 되는데, 타임아웃 전에 송신측에서 중복 ACK3받게 되면 세그먼트를 즉시 전송한다. , 수신측이 기다리는 순서번호의 세그먼트보다 큰 순서번호의 세그먼트가 3개 도착할 경우를 의미한다.

 

[ ACK2 의 중복수신 3번 이후 3번 데이터 즉시 전송 ]


 

 

 

 

Flow Control

 

- TCP 송신자가 데이터를 너무 빠르게 또는 너무 많이 전송하여 수신버퍼가 오버플로우(Overflow)하는 것을 방지한다.

 

- TCP의 수신자는 수신버퍼(receive buffer)를 가지는데, 상위 계층으로 세그먼트를 보내는 애플리케이션 프로세스가 수신버퍼로부터 데이터를 읽는 속도가 느릴 수 있다.

 

- 목표 : 애플리케이션 프로세스의 읽는 속도 = 송신자가 데이터를 전송하는 속도

 

- , 흐름제어는 속도를 일치시키는 서비스이다.


 


 

- Receive Window(rwnd) : 수신버퍼의 가용 바이트 수로, 송신 윈도우 크기를 결정한다.


LastByteRcvd - LastByteRead <= RcvBuffer


[밑에서 수신 받은 번호 - 위로 올려 보낸 번호 = 수신했지만 상위계층으로 전송되지 않은 데이터들]


=> 항상 수신 버퍼보다 작아야한다. 초과하면 오버플로우 발생.


rwnd = RcvBuffer - (LastByteRcvd - LastByteRead)

    = RcvBuffer - (수신했지만 상위 계층으로 전송하지 않은 데이터들)




- 수신자는 TCP헤더에 수신버퍼안에 있는 여유공간(Receive Window, rwnd) 값을 포함함으로써 버퍼에 공간이 있음을 송신자에게 알린다.

 

- 수신버퍼의 크기는 소켓의 옵션을 통해 설정되는데 디폴트 값이 4096바이트이다.

 









+ Recent posts