Khi đi qua nhiều tuyến hoặc các link được gộp, thứ tự gói tin có thể bị đảo; bên nhận dùng ACK trùng (duplicate ACK) để báo “có gói bị thiếu”, và bên gửi gửi lại cả gói vẫn còn nguyên vẹn.
Vì sao Thiết bị chia tuyến theo từng gói, LAG (gộp link) chia tải theo từng gói, hoặc khoảnh khắc đổi tuyến làm xáo trộn thứ tự → Dẫn đến Gói phía sau đến trước nên dồn đủ 3 ACK trùng → truyền lại nhanh → Trên màn hình Gói game đi lại thưa thớt nên gần như không bị ảnh hưởng. Bản cập nhật trạng thái lớn ở chỗ đông người và việc tải bản cập nhật (patch) bị chậm lại, thỉnh thoảng giật khựng
Phụ trách chính Hạ tầng mạng (Đội hạ tầng) · Phối hợp Hạ tầng server (Đội hạ tầng)
Việc cần làm (Đội hạ tầng)
Mạng: chia tải theo kết nối thay vì theo gói (ECMP và LAG dùng hash địa chỉ và cổng). Thiết bị server·OS: dùng RACK (xác định mất gói dựa trên thời gian, chịu được gói sai thứ tự; khi phát hiện truyền lại không cần thiết qua DSACK sẽ tự nới rộng mức chấp nhận sai thứ tự), kiểm tra mức sai thứ tự mà Linux tự ước tính cho từng kết nối (giá trị reordering trong ss -ti, giá trị khởi đầu tcp_reordering=3).
Trên đồ thị
Luôn cao ngay từ đầu · Số lần phát hiện sai thứ tự, số DSACK nhận được
Chỗ cần xem
TcpExtTCPSACKReorder và TcpExtTCPTSReorder (số lần phát hiện sai thứ tự) cùng TcpExtTCPDSACKRecv trong nstat; theo từng kết nối thì xem reordering (chỉ hiển thị khi khác 3) và reord_seen trong ss -ti. Với bản bắt gói, dùng filter Wireshark tcp.analysis.out_of_order
Đúng nếu
counter sai thứ tự và DSACK tăng đều bất kể khung giờ, giá trị reordering của các kết nối đi qua một tuyến hoặc thiết bị nhất định lớn hơn 3. Trong bản bắt gói phía nhận, gói sau đến trước và gói trước cũng đến ngay sau đó
Loại trừ nếu
counter sai thứ tự không đổi mà TcpExtTCPLostRetransmit tăng → mất gói thật. DSACK chỉ tăng vào lúc RTT vọt lên → “Truyền lại không cần thiết do độ trễ tăng vọt”
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
IP SysctlLinux kernel tcp_reordering khởi đầu là 3 (mỗi kết nối tự điều chỉnh, tối đa đến tcp_max_reordering), cấu hình RACK trong tcp_recovery
misc/ss.ciproute2 ss -ti hiển thị reordering:giá trị khi giá trị reordering của kết nối khác mặc định 3, và reord_seen:số lần nếu kết nối từng gặp gói sai thứ tự
SNMP counterLinux kernel TcpExtTCPSACKReorder, TcpExtTCPTSReorder (phát hiện sai thứ tự), TcpExtTCPDSACKRecv (số DSACK đã nhận), TcpExtTCPLostRetransmit (gói đã gửi lại lại bị mất)
include/uapi/linux/tcp.hLinux kernel tcpi_reord_seen trong tcp_info: số lần kết nối gặp gói sai thứ tự