假设客户端收到了 0 到 500、900 到 1100 和 1300 到 2000,ACK 和 SACK 会是什么样子?它看起来像这样 ACK: 500 SACK:900-1100 然后它在新请求中要求数据包 1100 到 1300。
当接收到的数据包中有多个间隙时,SACK 中会发生什么?
网络工程
通讯协议
包分析
数据包丢失
2021-08-02 22:40:13
1个回答
Selective ACK Option 可以指定多个接收流量的“块”。这是选项在线路上的样子(取自RFC 2018,第 3 节):
+--------+--------+ | Kind=5 | Length | +--------+--------+--------+--------+ | Left Edge of 1st Block | +--------+--------+--------+--------+ | Right Edge of 1st Block | +--------+--------+--------+--------+ | | / . . . / | | +--------+--------+--------+--------+ | Left Edge of nth Block | +--------+--------+--------+--------+ | Right Edge of nth Block | +--------+--------+--------+--------+
根据你的例子:
假设客户端收到了 0 到 500、900 到 1100 和 1300 到 2000,ACK 和 SACK 会是什么样子?
您的建议几乎是正确的,除了考虑到接收字节的额外左右边缘。
TCP ACK - 501 (in TCP header, not in SACK Option)
TCP SACK - 1st block Left Edge - 900
TCP SACK - 1st block Right Edge - 1100
TCP SACK - 2nd block Left Edge - 1300
TCP SACK - 2nd block Right Edge - 2000
(all in the same Segment)
RFC 2018 第 7 节中还有其他示例和用例。它们值得通读以充分理解它。