| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 基于Wireshark的TCP SACK重传介绍 -> 正文阅读 |
|
[网络协议]基于Wireshark的TCP SACK重传介绍 |
1 TCP SACK重传简介基于TCP的通信是可靠通信,这种可靠通信是通过重传机制实现的。即如果接收端没有收到发送端发送的数据,则发送端会重新发送。 在《基于Wirshark的TCP三次握手介绍》中提到,接收端会通过向发送端发送ACK数据包来向发送端确认已收到的数据包。当发送端同时向接收端发送多个数据包,例如发送了数据包1-5,而接收端接收到了数据包1、数据包3、数据包4和数据包5,没有接收到数据包2,此时接收端会向发送端发送ACK数据包来提示客户端从数据包2开始发送。 而客户端是怎么知道是只发送数据包2还是发送数据包2-5的呢?这就需要引入SACK,它是TCP重传机制的一种,是(Selective Acknowlegement)即选择确认的简称。SACK将额外信息保存在TCP包头部的选项段中,该信息表示接收端已经收到了哪些数据包,发送端可以根据该信息选择性地向接收端发送数据包。 2 SACK数据包SACK数据包包括两种类型,一种是“Sack-Permitted Option”即Sack许可选项;另一种是“Sack Option”即Sack选项。 2.1 Sack-Permitted Option2.1.1?Sack-Permitted Option格式Sack许可选项的作用是通知对方在建立的TCP连接中使用Sack重传机制。Sack许可选项必须包含SYN包中,不能在其他类型的包中。 Sack许可选项的长度是2字节,包含两部分内容,如图1所示。 ?图1 Sack许可选项 其中,第一个字节表示Sack的类型;第二个字节表示Sack数据的长度。 2.1.2 Wireshark捕获的Sack-Permitted Option在Wireshark的显示过滤语句中输入“tcp.option_kind == 4”,可以过滤显示Sack-Permitted Option数据包,如图2所示。 ?图2 ?Sack许可选项数据 如图2所示,第一部分表示Sack选项的类型,值是0x04,表示其类型是Sack许可选项,而Wireshark的显示过滤语句中的option_kind的含义是选项类型,4表示其类型是Sack许可选项;第二部分表示Sack数据的长度,值是0x02,数据包的长度是2字节。 2.2 Sack OptionSack Option在接收端发送给发送端的TCP数据包头部中,表示已经收到的数据包。 2.2.1 Sack Option结构Sack Option结构如图3所示。 ? 图3 Sack Option结构 如图3所示,Sack Option结构的前两个字节分别表示类型和长度,与“2.1 Sack-Permitted Option格式”中提到的相同,需要注意的是Sack Option的类型值是0x05。 接下来的8个字节分成两部分,分别是“Left Edge of 1st Block”和“Right Edge of 1st?Block”,每个部分4个字节,表示已经接收的数据序号的下限和上限,需要注意的是“Right Edge of 1st Block”实际上表示的是接收到的数据上限序号加1。也就是说,接收端已经接收到了[Left Edge of 1st Block,Right Edge of 1st Block)之间的数据包。当接收端收到该SOCK信息之后,会发送[Left Edge of 1st Block,Right Edge of 1st Block)区间之外的数据包,接收端收到数据之后,会发送修改后的“Left Edge of 1st Block”和“Right Edge of 1st Block”的ACK包。由于每个区间信息的大小是8字节,而TCP头部的选项段最大字节数是40字节,因为2+8*4=34,所以每个TCP头部的选项段最多包含4个SACK区间。 2.2.2 Wireshark捕获的Sack Option将Wireshark的显示过滤语句设置为“tcp.option_kind == 5”,表示只显示选项类型为0x05的数据包,如图4所示。 ?图4 Wireshark捕获的Sack Option从图4中可以看出,该SACK信息中,包含1个SACK区间,[29914,34233),也就是说,接收端通知发送端,已经成功接收了[29914,34233)这个区间内的数据,发送端收到该信息之后,会向接收端重新发送这个区间外的数据。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:39:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |