IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 基于Wirshark的TCP三次握手介绍2-2 -> 正文阅读

[网络协议]基于Wirshark的TCP三次握手介绍2-2

1.2.6 保留位和标志位

图2中可以看到,保留位是6bit,标志位是6bit。从图3中可以看出,保留位的值是0b000000;而标志位的值是0b000010,根据图2的标志位示意图可以看出,SYN标志是1,说明该数据包是SYN数据包。

相关链接2 URG是紧急标志位,该标志位是1时,通知接收端应当优先处理;ACK标志是1时表示确认数据包;PSH是推标志位,该标志位是1时,发送端不是将该数据放入缓冲区而是立即向对端发送;而接收端也不是将该数据放入缓冲区而是立即处理;RST是复位标志,该标志是1时,表示是复位数据包,用来复位TCP连接;SYN是同步标志,该标志是1时,表示是同步数据包,使得通信双方同步;FIN是结束标志,该标志是1时,表示是结束数据包,用来结束一个TCP连接。

1.2.7 窗口

窗口指的是一个缓冲区,发送数据的主机在等待接收数据的主机确认应答(参考1.2.4 确认号)之前,可以将已发送的数据保存在这个缓冲区中,如果按时收到确认应答,则清除该缓冲区。而图2中窗口字段表示发送数据的主机A通知对端主机B,当前自己(主机A)能处理的数据字节数,当主机B收到该窗口数据之后,根据该数据设置自己(主机B)的窗口,以便自己(主机B)发送的数据,能够全部被主机A处理。从图3中可以看到,窗口字段的值是0xfaf0,即64240个字节,当主机B收到该SYN数据包后,会将自己的TCP窗口的大小设置64240个字节。

1.2.8 检验和

检验和是对TCP头部数据即图3中的数据和TCP内容进行校验和计算,接收端对收到的TCP头部和内容再次进行校验和计算,与该检验和进行比较,若不相同,则说明收到的TCP数据有误。从图3中可以看出,该TCP头部的校验和字段值是0x05a4。

1.2.9 紧急指针

紧急指针字段与“1.2.6 保留位和标志位”中提到的URG标志结合使用,当URG标志是1时,紧急指针字段有效。此时,由“1.2.3 序号”中提到的序号字段值加上紧急指针字段值,该地址对应的数据将被优先发送。从图3中可以看到,因为SYN数据包中的URG值是0,因此该数据包中的紧急指针值被忽略。

1.2.10 选项

选项字段包含了TCP选项的设置,该字段的长度可变,一般是8bit的整数倍。在该字段中,通过三个部分来表示某一选项,分别是类型、长度和含义。其中,类型的大小是8bit,表示如何设置该选项;长度的大小是8bit,表示某一选项的总长度;含义的大小是长度指定的大小减去2字节(类型大小与长度大小),表示选项的具体值。从图3中可以看出,第一个选项的数据是0x020405b4,其中,0x02表示MSS(Maximum Segment Size)即最大报文段长度,0x04表示第一个选项的总长度,4个字节;0x05b4表示最大报文段长度的值。第二个选项的数据是0x01,0x01表示不设置该选项,因此没有长度和含义的数据,该选项的数据只有1个字节;第三个选项的数据是0x030308,其中0x03表示WS(Window Scale)窗口扩大选项,0x03表示该选项的长度是3字节;0x08表示窗口扩大选项的值是8;接下来的两个0x01表示第四个选项和第五个选项都不进行设置;第六个选项的数据是0x0402,其中0x04表示SACK(Selective Acknowledgment) Permitted,即选择性确认,0x02表示本选项数据的长度是2字节。

1.2.11 填充

TCP头部的总长度应该是4字节的倍数,否则,则需要填充一些无用的数据。从图3中可以看到,本SYN头部的长度是32字节,则无需填充数据。

2 第二次握手

从图1可以看出,客户端与服务端的第二次握手,实际上就是服务端向客户端发送ACK+SYN数据包。该数据包如图4所示。

?图4 ACK+SYN数据包

与“1 第一次握手”中分析分析类似,此时ACK+SYN数据包头部包含了源端口是0x0050,目的端口是0x1908;序号是0xac8bb844;确认序号是0xf1995d88,需要注意的是,在“1 第一次握手”中提到的SYN包的序号是0xf1995d87,而对于SYN包来说,默认的长度是1字节,因此,服务端发送的确认序号是客户端发送的序号数值加1;数据偏移即头部大小是7*4=28字节;保留位和标志位是0x012,此时ACK和SYN标志是1,表示该数据包是ACK+SYN数据包;窗口字段值是0x3908;校验和是0x77c7;紧急指针是0x0000;选项值是0x020405a001030307,含义与“1.2.10 选项”中提到的相同。

3 第三次握手

从图1可以看出,客户端与服务端的第三次握手,实际上就是客户端向服务端发送ACK数据包。该数据包如图5所示。

?图5 ACK数据包

与“1 第一次握手”中分析分析类似,此时源端口是0x1908,目的端口是0x0050,序号是0xf1995d88,与“2 第二次握手”中提到的ACK+SYN包的确认序号相同;确认序号是0xac8bb845,是“2 第二次握手”中提到的ACK+SYN包的序号包的值加1;数据偏移即头部大小是5*4=20字节;保留位和标志位是0x010,ACK标志位是1,表示该数据包是ACK数据包;窗口字段值是0x0205;校验和是0xda81;紧急指针是0x0000,没有选项字段和填充字段。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:48:48  更:2021-08-21 15:50:04 
 
开发: 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年5日历 -2024/5/17 15:06:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码