Nagle과 TCP_NODELAY
이 영상에 나오는 용어 17개.
- 빠른 재전송 (Fast Retransmit)
- 같은 ACK가 3번 연달아 오면(dup ACK) RTO를 기다리지 않고 빠진 세그먼트를 바로 다시 보내는 방식입니다. 뒤따르는 패킷이 있어야 동작합니다.
- 세그먼트
- TCP가 한 번에 보내는 데이터 단위. IP 패킷 하나에 실린다.
- 틱
- 게임 서버가 월드 상태를 갱신하는 주기. 20 Hz면 50 ms마다 한 번.
- 틱 배칭
- 한 틱 동안 클라별로 보낼 메시지를 모아
send()를 한 번만 부르는 방식. - ACK
- 받는 쪽이 "여기까지 받았다"고 알리는 TCP 응답.
atoss -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로 확인.