Nagle + Delayed ACK
Nagle과 지연 ACK는 작은 요청에서 지연 패턴을 만들 수 있다
영구 교착은 아니지만, 송신자와 수신자의 최적화가 겹치면 ACK delay timer가 풀릴 때까지 기다릴 수 있다.
Client작은 세그먼트 A 전송
→
ServerACK를 잠시 지연하고 응답 데이터를 기다림
↔
ClientNagle 때문에 작은 B를 ACK 전까지 보류
→
TimerACK delay timer 만료 후 흐름 재개
증상패킷 캡처나 로그에서 일정한 짧은 지연이 반복된다.
대응 후보TCP_NODELAY, 앱 레벨 배칭, write 크기 조정, corking을
비교한다.
주의무조건 TCP_NODELAY가 정답은 아니다. 작은 패킷 수가 늘 수
있다.
지연 ACK는 ACK 패킷 수를 줄이는 최적화이고, Nagle은 작은 세그먼트 수를 줄이는 최적화다. 둘 다 맞는 일을 하다가 특정 패턴에서 지연을 드러낸다.