CS Repo/네트워크 - Top-down Approach + @
TCP의 다양한 추가 기능 - TFO, Nagle 알고리즘, 지연 ACK, Early Retransmit, Tail Loss Probe
조금씩 차근차근
2025. 4. 18. 22:04
TCP Fast Open(TFO)
- 3-way handshake를 사용해 애플리케이션 데이터를 교환하는 기능이다.
- 처음부터는 불가능하다.
- 그 대신, 첫 handshake 때 옵션 필드로 TCP Fast Open에 필요한 정보(TFO Cookie)를 교환한다.
- 그 이후, 2번째 Handshake부터 TCP Fast Open을 발동한다.
- 클라이언트는 SYN에서 HTTP 요청을 송신하고, 서버는 SYN/ACK로 HTTP 응답을 반환한다.
Nagle 알고리즘
- 네이글 알고리즘은 작은 데이터가 자주 전송될 경우, 더 큰 세그먼트로 합쳐 전송함으로써 패킷 낭비를 줄이기 위한 방식이다.
- 구체적으로,
- 버퍼에 모은 데이터가 최대 세그먼트 크기(MSS)에 도달하면 즉시 전송한다.
- 이전에 전송한 세그먼트에 대한 ACK를 모두 받으면 즉시 전송한다.
- 그 외에는 버퍼에 계속 데이터를 모은다.
지연 ACK
- TCP는 신뢰성을 보장하기 위해 세그먼트를 전송할 때마다 상대방으로부터 확인응답(ACK)을 받아야 한다.
- 송신자는 정해진 시간 안에 ACK를 받지 못하면, 해당 데이터를 재전송한다.
- ACK 패킷은 매우 작은 크기이므로, 반대 방향으로 전송될 데이터 패킷에 함께 실어 보내는 “piggyback”을 활용하기도 한다.
- 이때 확인응답 지연 알고리즘으로 인해 TCP가 ACK를 일정 시간(일반적으로 0.1~0.2초) 모으고 있다가 데이터를 보낼 기회가 생기면 같이 보낼 수 있다.
- 하지만 요청/응답 위주인 HTTP는 그런 전송 기회가 많지 않아, 이 지연 알고리즘이 오히려 성능을 떨어뜨리는 상황이 생길 수 있다.
- 특정 환경에서는 ACK 지연 기능을 끄고 사용하는 경우도 있다.
네이글 알고리즘 + 지연 ACK의 위험성
- 하지만 HTTP 메시지처럼 크기가 작고 요청-응답 패턴이 잦은 경우, 네이글 알고리즘과 ACK 지연이 동시에 작동하면 지연이 더욱 커질 수 있다.
- 송신이 지연되고, 수신도 함께 지연돼서 서로가 서로를 기다리는 상황이 발생한다.
- 이때 TCP_NODELAY 옵션을 활성화해 네이글 알고리즘을 끄면, 작은 패킷도 즉시 전송이 가능해진다. 단, 그만큼 패킷이 자주 발생하므로, 전송 효율을 관리할 필요가 있다.
Early Retransmit
- Fast Retransmit이 발동하지 않는 특정 TCP 환경에서, 중복 ACK의 임곗값을 낮춰서 Fast Retransmit을 유발하는 기능이다.
- 재전송 타임아웃을 기다리는건 너무 느려서 처리량이 저하될 수 있기 때문에, 동적으로 중복 ACK의 임곘값을 낮춘다.
- 송신하고 싶지만 ACK를 받지 못한 미처리 TCP 세그먼트가 4개 미만이고 3회 이상의
Tail Loss Probe
- 송신자가 일정 시간 동안 ACK을 전혀 받지 못할 때, 마지막으로 전송한 미확인(Outstanding) 세그먼트를 “프로브” 형태로 재전송 타임아웃보다 빠르게 재전송하여 빠르게 손실을 복구하는 기법이다.
- 주로 짧은 요청/응답(예: HTTP 짧은 트랜잭션)에서 tail segment 손실이 발생하면, RTO 대기 없이 빠른 복구를 가능하게 한다.