wireshark中带有SLE和SRE的SACK包详解

一、名词解释

SLE: Sequence Left Edge of already acknowledged data when Selective Acknowledgments are used. 即已收到tcp数据的左边界。
SRE: Sequence Right Edge of already acknowledged data when Selective Acknowledgments are used. 即已收到tcp数据的右边界。


二、 使用场景


SACK在数据丢包需要重传时起作用。比如,服务器已发送的数据为1~34454个包,但是,客户端只收到了“1~22774,28614~34454”这些序列的包,也就是说“22775~28613”这些包已经丢了。这个时候,客户端会向服务器请求发送回馈包,说我收到了seq为22774的包,同时也乱序收到了"SLE为28614,SRE为34454"的包。那么,服务器就知道,接着从seq=22775的包开始发送,发送到seq=28613的包的时候,就不用在发送seq=28614的包了,因为客户端已经收到了。
如果ACK中不带SLE和SRE会怎样呢?那服务器就会重发从"22775"开始之后的所有的包,包括其实客户端已经收到的"28614~34454"序号的包,那就浪费网络带宽了,不是么。


三、多个乱序段的情况
    实际情况中较少见,因为这代表着隔三差五就有丢包,丢包率应该很大。
    就我们使用的有线链路而言,丢包率不足0.1%,无线链路大约在5%左右。【注 1】
    在RFC2018中详述了SACK包格式。
    有多个数据块乱序的情况下,SLE和SRE也可以有多组,但因为头部字节限制,最多为4组。


sack选项
   选项类型: 5
   选项长度: 可变,但整个TCP选项长度不超过40字节,实际最多不超过4组边界值。
                         +--------+--------+
                         | Kind=5 | Length |
       +--------+--------+--------+--------+
       |      Left Edge of 1st Block       |
       +--------+--------+--------+--------+
       |      Right Edge of 1st Block      |
       +--------+--------+--------+--------+
       |                                   |
       /            . . .                  /
       |                                   |
       +--------+--------+--------+--------+
       |      Left Edge of nth Block       |
       +--------+--------+--------+--------+
       |      Right Edge of nth Block      |

       +--------+--------+--------+--------+

图2是1组边界的抓包截图


注:

【1】无线链路的丢包率不确定,也有20%的情况


参考:

https://ask.wireshark.org/questions/1389/what-are-sre-and-sle?sort=votes

http://blog.chinaunix.net/uid-28387257-id-3624060.html

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值