TCP-IP详解:SACK选项(wireshark抓包有SLE和SRE的SACK包)

这篇具有很好参考价值的文章主要介绍了TCP-IP详解:SACK选项(wireshark抓包有SLE和SRE的SACK包)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前言

TCP快速重传和超时重传都会面临到一个重传什么包的问题,因为发送端也不清楚丢失包后面传送的数据是否有成功的送到。主要原因还是对于TCP的确认系统,不是特别的好处理这种不连续确认的状况了,只有低于ACK number的片段都被收到才有进行ACK,out-of-order的片段只能是等待,同时,这个时间窗口是无法向右移动的。

假设服务器给客户端发送了序号为0-1000的数据包,客户端只收到0-800和820-1000的数据,序号为801-819的数据缺失。此时,客户端就会向服务器发送反馈,发送ACK=800并且增加SACK通知服务端收到了SLE=820,SRE=1000的数据包。那么,服务器就知道下次需要从seq=801开始发,并且发801-819这段数据,不需要重复发送820-1000的数据,因为此时已经收到了。
在这个过程中,SACK就能够保证发送端只传输中间丢失的部分数据,不需要重复发送已接收到的数据,提升网络效率。

2. 名词解释

SACK(Selective Acknowledgment)
SACK:selective ACK,即TCP的选项,来允许TCP单独确认非连续的片段,用于告知真正丢失的包,只重传丢失的片段
D-SACK:duplicate selective ACK,即使用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数据的右边界。

3. TCP SACK选项

SACK是一个TCP的选项,来允许TCP单独确认非连续的片段,用于告知真正丢失的包,只重传丢失的片段。要使用SACK,2个设备必须同时支持SACK才可以,建立连接的时候需要使用SACK Permitted的option,如果允许,后续的传输过程中TCP segment中的可以携带SACK option,这个option内容包含一系列的非连续的没有确认的数据的seq range,这些SYN包中SACK Permitted 选项,双方都支持才对。
sack选项,网络,tcp/ip,wireshark,网络

3.1 SACK option格式

Kind 5 Length 剩下的都是没有确认的segment的range了 比如说segment 501-600 没有被确认,那么Left Edge of 1st Block = 501,Right Edge of 1st Block = 600,TCP的选项不能超过40个字节,所以边界不能超过4组。
sack选项,网络,tcp/ip,wireshark,网络

3.2 SACK(RFC2018)

SACK通常是由数据接收方产生,如果在connection建立的时候,SYN包中有SACK-Permitted 的选项为true,同时自身也支持SACK,那么可以在接收异常的时候,产生SACK option. 如果要发送,SACK中需要携带接收队列中所有没有被确认的数据段信息。

如果接收方选择发送带有SACK的ACK,需要遵循如下规则:

  1. 第一个block需要指出是哪一个segment触发SACK option ,我认为就是谁乱序了,才会导致SACK

  2. 尽可能多的把所有的block填满

  3. SACK 要报告最近接收的不连续的数据块

接收端的行为:

  1. 数据没有被确认前,都会保持在滑动窗口内

  2. 每一个数据包都有一个SACKed的标志,对于已经标示的segment,重新发送的时候会忽略

  3. 如果SACK丢失,超时重传之后,重置所有数据包SACKed 标志

3.3 D-SACK(RFC2883)

D-SACK主要是使用了SACK来告诉发送方有哪些数据被重复接收了,如果是D-SACK,那么SACK option的第一个block代表被重复发送的序列片段

需要注意的点:

  1. D-SACK仅仅是接收端报告一个重复的连续的片段

  2. 每个重复的连续片段只能在一个block中

  3. 重复片段的序列号,特别注意右端序号应该是重复报文的最后一个seq + 1。(具体见下方)

  4. 第二个block指的是data没有被确认的

3.4 举例说明

  1. Reporting a Duplicate Segment
    如下图: 发送端发送seg1和seg2,但是接收端的ACK都被drop掉了,超时重传seg1,然后接收端就发了一个D-SACK,告诉发送端3000~3499重复接收,需要接收4000的。
    sack选项,网络,tcp/ip,wireshark,网络
  2. 报告OUT-OF-ORDER段和重传段

从图中可以看出seg4 out-of-order会触发SACK,说明已经收到4500-5000的数据,中间丢了4001-4499的数据。但是这个ACK报文丢掉了。发送方又重传了seg1,接收方此时会生成D-SACK,block1中存放了dup的segment,block2中存放了收到但没有确认(ACK要等于5000才算是确认过)的segment。

sack选项,网络,tcp/ip,wireshark,网络
RFC2883中对D-SACK的解释如下:左端是重复报文的第一个seq,右端是跟在重复报文的最后一个seq后面的序号,即重复报文的最后一个seq + 1。
sack选项,网络,tcp/ip,wireshark,网络
还有比较多的例子,详细的可以参考 RFC2883。

总起来说,D-SACK还是带了诸多的好处,能否让发送方了解是ACK丢了还是发送的数据包丢了,重复发送就说明是ACK丢了呗,同时也能够掌握网络上的一些事情,比如out-of-order,超时重传等,这样了解了网络,才能更好的做流控。

4. wireshark抓包分析

sack选项,网络,tcp/ip,wireshark,网络

(1)编号为22440-22442为来自发送端的数据。从接收端应答的22443报文可以看出:当前ACK=1935,已经收到seq为3395(SLE)到4855(SRE)的数据,而seq为1935-3395的数据丢失。
(2)发送端继续发送seq为4855-6314的报文,即22445报文,从接收端的应答22446报文可以看到:接收端已经正确接收到
该段数据。因此,报文22446中的SRE就变成了6315(22444的SRE 4855 +22445的数据长度 1460)。
(3)接着发送端有一段数据(6315-7774)没有到达,导致在22451数据包中多了一组SLE +SRE。
(4)接下来可以看到发送端一直在持续的数据,但接收端的第一组SRE不断增大,其他参数一直不变,表明丢失的包一直没有到达。
(5)在22472中又多了一组SLE+SRE,表明中间又缺失了一段数据,分析同上。文章来源地址https://www.toymoban.com/news/detail-724855.html

5. 参考文献

  • https://blog.csdn.net/wdscq1234/article/details/52503315
  • https://blog.csdn.net/season_hangzhou/article/details/48318599

到了这里,关于TCP-IP详解:SACK选项(wireshark抓包有SLE和SRE的SACK包)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机网络学习笔记(二)OSI模型与TCP-IP模型

    7层 物链网输会示用(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层) 消耗流量的各个软件和程序。比如发送邮件的FTTP,发送文件的SMTP、万维网(HTTP) 规定两个通信端间传输数据的表达方式。 具体功能: 数据压缩与解压缩 数据加密与解密 数据格式的

    2024年01月22日
    浏览(50)
  • TCP/IP详解——ICMP协议,Ping程序,Traceroute程序,IP源站选路选项

    Internet 控制消息协议 ICMP(Internet Control Message Protocol)是 网络层 的一个重要协议 。ICMP协议用来在 网络设备间传递各种差错和控制信息 ,并对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。 ICMP通常被IP层或者更高层的协议(TCP/IP)使用 。一些

    2024年02月04日
    浏览(40)
  • wireshark抓包TCP数据包

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 – 文章主要介绍了wireshark抓包步骤和TCP包的简单介绍,可以作为快速了解抓包,了解TCP数据格式的参考。 软件: 1.1硬件连接方式 网线直连 连接同一个路由器 1.2确认硬件连接成功 打开命令行,通过i

    2023年04月09日
    浏览(40)
  • 利用wireshark对TCP抓包分析

    抓包结果已上传可免费下载对应观看: wireshark抓包结果 我的机子192.168.1.131简称A与服务端机子223.166.138.30简称B先三次握手建立TCP连接,再进行HTTP请求,最后四次挥手断开TCP连接 1.三次握手: A先给B发出一个SYN包请求建立连接 B给A发回一个ACK SYN包针对上一个SYN请求且发出请求

    2024年02月09日
    浏览(46)
  • 使用Wireshark抓包分析TCP协议

    wireshark数据包详细栏每个字段对应的分层。 我们点开这个字段,从该字段中可以看到相邻两个设备的MAC地址 本层主要负责将TCP层传输下来的数据加上目标地址和源地址。 这一层用到了TCP协议 tcp包头 每个字段对应的TCP包头 TCP三次握手示意图 第一次握手 :客户端向服务器发

    2023年04月13日
    浏览(45)
  • TCP/UDP协议抓包-工具wireshark与tcp侦听工具

    目录 一、工具下载链接 二、实验 链接:https://pan.baidu.com/s/1nvNdCyET-8JFn_wQXuH2sw?pwd=abcd  提取码:abcd  --来自百度网盘超级会员V1的分享 物理机与虚拟机都需要下载tcp侦听工具,虚拟机还要下Wireshark。 1、先检测网络流通性,物理机与虚拟机双方,各ping一下对方。  物理机与虚

    2024年02月16日
    浏览(53)
  • Wireshark抓包分析TCP的三次握手

    一、TCP三次握手连接建立过程     Step1:客户端发送一个SYN数据包(SYN=1,Seq=X,ACK=0)给服务端,请求进行连接,这是第一次握手;     Step2:服务端收到请求并且允许连接的话,就会发送一个SYN+ACK的数据包(SYN=1,Seq=Y,ACK=X+1)给发送端,告诉它,可以通讯了,并且让客户

    2024年02月08日
    浏览(45)
  • 计算机网络 wireshark TCP抓包实验

    1. 你的客户端电脑传送文件到 192.168.1.70 的 IP 地址和端口是什么?从192.168.1.70 接收文件的 IP 地址和端口是什么? 可以看出 传送文件的地址是192.168.8.90 端口是61588 接受文件的地址是192.168.1.70 端口是80 2. 用来初始化客户端电脑和 192.168.1.70 的 TCP 连接的 TCP SYN 报文段的序号

    2024年02月07日
    浏览(46)
  • 【NVIDIA JETSON AGX XAVIER】与个人笔记本(win11)建立TCP-IP连接传输数据(含源码)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 NVIDIA JETSON AGX XAVIER当作客户端 个人笔记本(win11)当作服务器 首先要将Xavier与笔记本通过网线连接起来,实现Xavier联网(两者 可以相互ping通 就可以)并且需要知道 笔记本的ip地址 (假如现在是192.16

    2024年03月17日
    浏览(56)
  • 使用wireshark抓包理解tcp协议和tls

    首先下载安装wireshark 打开软件 1.选则自己连结的网络; 此时就会捕获的数据 2.加上端口过滤。 3.启动一个本地的 http 服务(这里采用的 nodejs ); node server.js 4. curl http://localhost:3000 一个TCP报文段的最大长度为 65495 字节. TCP封装在IP内,IP数据报最大长度 2^16-1 ,头部最小 20 ,

    2023年04月25日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包