여러 경로나 묶인 링크를 지나며 패킷 순서가 바뀌면, 받는 쪽이 중복 ACK로 “빠진 패킷 있음”을 알리고 보내는 쪽은 멀쩡한 패킷을 다시 보냅니다.
왜 패킷 단위로 경로를 나누는 장비, 패킷 단위로 나눠 싣는 LAG(링크 묶음), 경로가 바뀌는 순간이 순서를 뒤섞음 → 그러면 뒤 패킷이 먼저 도착해 중복 ACK 3개가 쌓임 → 빠른 재전송 → 화면에서는 드문드문 오가는 게임 패킷은 거의 영향 없음. 사람 많은 곳의 큰 업데이트와 패치 다운로드가 느려지고 가끔 뚝뚝 끊김
네트워크: 패킷 단위 분산 대신 연결 단위 분산(ECMP·LAG를 주소·포트 해시로). 서버 장비·OS: RACK(시간 기준 손실 판단, 순서 뒤바뀜에 강함. DSACK으로 불필요한 재전송을 감지하면 순서 뒤바뀜 허용 폭을 자동으로 늘림) 사용, 리눅스가 연결마다 자동으로 추정한 순서 뒤바뀜 정도 확인(ss -ti의 reordering 값, 시작값은 tcp_reordering=3).
그래프에서는
처음부터 늘 높음 · 순서 뒤바뀜 감지 수, DSACK 수신 수
확인할 곳
nstat의 TcpExtTCPSACKReorder·TcpExtTCPTSReorder(순서 뒤바뀜을 감지한 횟수)와 TcpExtTCPDSACKRecv를 보고, 연결별로는 ss -ti의 reordering(3이 아니면 표시)·reord_seen을 봄. 패킷 캡처에서는 Wireshark 필터 tcp.analysis.out_of_order를 씀
이러면 맞음
순서 뒤바뀜 카운터와 DSACK이 시간대와 상관없이 꾸준히 오르고 특정 경로·장비를 지나는 연결의 reordering 값이 3보다 커져 있음. 받는 쪽 캡처에서 뒤 패킷이 먼저 오고 앞 패킷도 곧 도착함
이러면 아님
순서 뒤바뀜 카운터는 그대로이고 TcpExtTCPLostRetransmit이 늘면 실제 손실. RTT가 튀는 순간에만 DSACK이 늘면 “지연 급등으로 인한 불필요한 재전송”