Fast Retransmit (빠른 재전송)
- 타이머의 타임 아웃 기간이 상대적으로 너무 길어 타이머가 종료되기 전이라도 중복된(duplicate) ACK를 3번 받으면 바로 재전송을 하는 기능 → 수신측이 기다리는 순서번호의 세그먼트보다 큰 순서번호의 세그먼트가 3개 도착할 경우를 의미
- 손실된 패킷을 재전송하기 전 발생하는 긴 지연시간을 줄여줌
- Fast Retransmit는 또 다른 말로, Triple-Duplicate-ACK이라고 하며 3개의 중복된 ACK를 받으면 재전송하는 것
- Duplicate ACK 수신을 통해 세그먼트가 손실되었음을 감지 → 손실된 경우 수신 측은 여러 중복 ACK들을 발생시킴
- 송신자는 동일한 데이터에 대해 3개의 ACK를 수신하면 ACK된 데이터 이후의 세그먼트가 손실된 것으로 가정
- Duplicate ACK는 비정상적인 순서(out-of-order)의 패킷이 수신될 시 수신 측에서 발생시킴 → 현재까지 ACK가 완료된 패킷 다음 패킷이 손실 난 상태에서 다음 패킷들이 계속 수신되는 경우
- Host A에서 보낸 2번째 패킷이 손실되어 Host B는 3, 4, 5번째 패킷 수신 시에 duplicate ACK를 보내게 됨
- RTO 타이머가 종료되기까지 시간이 남았지만, Host A는 2번째 패킷이 손실된 것으로 가정하고 재전송함
Flow Control(흐름 제어)
- TCP 송신자가 데이터를 너무 빠르게 또는 너무 많이 전송하여 수신버퍼가 오버플로우(Overflow)하는 것을 방지
- Flow Control(흐름 제어)는 송신측과 수신측의 데이터처리 속도 차이를 해결하기 위한 기법
- 수신측이 송신측보다 속도가 빠른 것은 아무 문제가 되지 않음
- 송신측이 수신측보다 속도가 빠르면 문제가 발생
- 수신측에서 수신된 데이터를 처리해서 윗 계층으로 서비스 하는 속도보다 송신측에서 보내는 데이터 속도가 더 빠르다면, 수신측에서 제한된 저장용량(일반적으로 큐)을 초과하여, 도착하는 데이터의 손실을 가져올 수있음
- 속도 차이로 인해 발생한 데이터의 손실을 복구하기 위해 불필요하게 응답과 재전송의 데이터가 필요 → 다시 송신측과 수신측간에 이동
- 수신측의 저장공간이 초과되어 발생하는 불필요한 재전송을 줄이기 위해 강제로 송신측의 데이터 전송을 줄임
- Flow Control(흐름 제어)는 속도를 일치시키는 서비스 → 애플리케이션 프로세스의 읽는 속도 = 송신자가 데이터를 전송하는 속도
Receive Window(rwnd)
수신버퍼의 가용 바이트 수로, 송신 윈도우 크기를 결정
수신 버퍼보다 작아야함 → 초과하면 오버플로우 발생
LastByteRcvd - LastByteRead <= RcvBuffer [밑에서 수신 받은 번호 - 위로 올려 보낸 번호 = 수신했지만 상위계층으로 전송되지 않은 데이터들] rwnd = RcvBuffer - (LastByteRcvd - LastByteRead) = RcvBuffer - (수신했지만 상위 계층으로 전송하지 않은 데이터들)
수신자는 TCP헤더에 수신버퍼안에 있는 여유공간(Receive Window, rwnd) 값을 포함함으로써 버퍼에 공간이 있음을 송신자에게 알림
수신버퍼의 크기는 소켓의 옵션을 통해 설정되는데 디폴트 값이 4096바이트
1. Stop and wait 방식
- 매번 전송한 패킷에 대해 확인응답을 받아야만 그 다음 패킷을 전송하는 방법
2. 슬라이딩 윈도우 기법
- 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하여 제어하는 기법
- 슬라이딩 윈도우 기법을 통하여 송신 버퍼의 범위는 수신 측의 여유 버퍼 공간을 반영하여 동적으로 바뀜으로써 흐름제어를 수행
Congestion control(혼합 제어)
- 호스트와 네트워크 상의 데이터처리를 효율적으로 하기 위한 기법
- 송신측의 데이터 전달과 네트워크의 처리속도 차이를 해결
- 송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달 → 네트워크 상의 라우터가 항상 바쁜 상태임
- 하나의 라우터에 데이터가 몰려 혼잡한 경우에, 라우터는 자신에게 온 데이터를 모두 처리할 수 없음
- 호스트들은 라우터에서 손실된 데이터를 재전송을 하게 되고 결국 혼잡을 가중시켜 오버플로우나 데이터 손실을 발생
- 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 강제로 줄이게 됨
1. Slow start
- 윈도우 크기를 2배로 늘림
- 혼잡현상이 발생하면 창 크기를 1로 떨어뜨림
- 혼잡현상이 발생했던 창 크기의 절반까지는 이전처럼 지수 함수 꼴로(2배로) 창 크기를 증가시키고 그 이후부터는 완만하게 1씩 증가시킴
2. Fast Recovery
- 혼잡한 상태가 되면 창 크기를 1로 줄이지 않고 반으로 줄이고 선형 증가시키는 방식
참고 URL : https://pcmc.tistory.com/entry/190618-TCP-Retransmission
참고 URL : https://movefast.tistory.com/36
참고 URL : https://dlee0129.tistory.com/204
'Network(네트워크)' 카테고리의 다른 글
Null Routing (Blackhole Routing)이란 (0) | 2022.07.15 |
---|---|
Request 타임아웃(Timeout) 정리 (0) | 2022.06.27 |
Network Ring Buffer Size 설정하기 (0) | 2022.06.26 |
TCP Retransmission와 RTO(Retransmission Timeout)& RTT(Round Trip Time) (0) | 2022.06.26 |
TOE(TCP offload engine) (0) | 2022.06.26 |