1:41 · nagle · delayed ack · TCP_NODELAY · retransmission

Nagle과 TCP_NODELAY

이 영상에 나오는 용어 17개.

빠른 재전송 (Fast Retransmit)
같은 ACK가 3번 연달아 오면(dup ACK) RTO를 기다리지 않고 빠진 세그먼트를 바로 다시 보내는 방식입니다. 뒤따르는 패킷이 있어야 동작합니다.
세그먼트
TCP가 한 번에 보내는 데이터 단위. IP 패킷 하나에 실린다.
틱
게임 서버가 월드 상태를 갱신하는 주기. 20 Hz면 50 ms마다 한 번.
틱 배칭
한 틱 동안 클라별로 보낼 메시지를 모아 send()를 한 번만 부르는 방식.
ACK
받는 쪽이 "여기까지 받았다"고 알리는 TCP 응답.
ato
ss -i 출력에서 그 연결의 현재 delayed ACK 타임아웃(ms).
CCU
동시 접속자 수.
Delayed ACK
받는 쪽이 ACK를 바로 보내지 않고 잠시 기다려, 보낼 데이터나 다음 세그먼트와 묶어 보내는 동작. Linux 40~200 ms, Windows 기본 200 ms.
dup ACK (중복 ACK)
받는 쪽이 중간 세그먼트가 빠진 채 뒤 세그먼트를 받으면, 빠진 위치를 다시 알리는 같은 ACK를 보냅니다. 보내는 쪽은 이것으로 손실을 빨리 알아챕니다.
MSS
세그먼트 하나에 담을 수 있는 최대 데이터 크기. 이더넷 MTU 1500, 타임스탬프 옵션 사용 시 1448B.
Nagle 알고리즘
ACK를 받지 못한 작은 세그먼트가 있으면 새 작은 데이터를 모아 두었다가 보내는 TCP 송신 규칙. RFC 896. 기본으로 켜져 있음.
p99
값을 작은 순서로 줄 세웠을 때 99% 지점. 가끔 튀는 지연을 볼 때 쓴다.
pps
초당 패킷 수. NIC, 커널 네트워크 처리, 클라우드 인스턴스의 패킷 한도에 직접 걸리는 값.
RTO (Retransmission Timeout)
ACK가 이 시간 안에 안 오면 손실로 보고 다시 보내는 타이머입니다. Linux에서는 최소 200 ms라 RTO로 복구하면 지연이 크게 튑니다.
RTT
패킷이 상대에게 갔다가 응답이 돌아오기까지 걸리는 시간.
TCP_NODELAY
소켓의 Nagle을 끄는 옵션. 보내는 쪽 소켓마다 설정한다.
TcpExtDelayedACKs
Linux가 타이머로 늦춰 보낸 ACK 누적 수. nstat, netstat -s로 확인.