|
楼主 |
发表于 2008-1-23 21:33:42
|
显示全部楼层
回复:关于TCP协议的SACK选项功能详细解读
4. 发送方对SACK的响应
TCP发送方都应该维护一个未确认的重发送数据队列,数据未被确认前是不能释放的,这个从重发送队列中的每个数据块都有一个标志位“SACKed”标识是否该块被SACK过,对于已经被SACK过的块,在重新发送数据时将被跳过。发送方接收到接收方SACK信息后,根据SACK中数据标志重发送队列中相应的数据块的“SACKed”标志,但如果接收不到接收方数据,超时后,所有重发送队列中数据块的SACKed位都要清除,因为可能接收方已经出现了异常。
5. SACK应用举例
发送方发 接收方接 接收方发送的ACK
送的数据 收的数据 (包括SACK)
5.1 SACK累加接收的数据
5000-5499 (该包丢失) 5500-5999 5500-5999 5000, SACK=5500-6000 6000-6499 6000-6499 5000, SACK=5500-6500 6500-6999 6500-6999 5000, SACK=5500-7000 7000-7499 7000-7499 5000, SACK=5500-7500 | 5.2 数据包丢失,ACK丢失
3000-3499 3000-3499 3500 (ACK包丢失) 3500-3999 3500-3999 4000 (ACK包丢失) 4000-4499 (该包丢失) 4500-4999 4500-4999 4000, SACK=4500-5000 (ACK包丢失) 3000-3499 3000-3499 4000, SACK=3000-3500, 4500-5000 ---------此为D-SACK | 5.3 数据段丢失和延迟
500-999 500-999 1000 1000-1499 (延迟) 1500-1999 (该包丢失) 2000-2499 2000-2499 1000, SACK=2000-2500 1000-2000 1000-1499 1500, SACK=2000-2500 1000-2000 2500, SACK=1000-1500 ---------此为D-SACK | 5.4 数据段丢失且延迟
500-999 500-999 1000 1000-1499 (延迟) 1500-1999 (该包丢失) 2000-2499 (延迟) 2500-2999 (该包丢失) 3000-3499 3000-3499 1000, SACK=3000-3500 1000-2499 1000-1499 1500, SACK=3000-3500 2000-2499 1500, SACK=2000-2500, 3000-3500 1000-2499 2500, SACK=1000-1500, 3000-3500 ---------此为部分D-SACK | 6. 结论
通过SACK选项可以使TCP发送方只发送丢失的数据而不用发送后续全部数据,提高了数据的传输效率 |
|