TCP三次握手抓包理解
TCP建立连接需要三次握手,分手需要四次握手,平时在网上看到很多次,但是还没有很理解。为什么分手要多一次?可能是刚开始追求女生的时候比较容易,到分手的时候就比较麻烦了吧。。。
了解某个东西要从它的基础开始,我们先看看TCP的报文是怎么回事。
先看下tcp的报文结构,以下内容摘自官方文档,我简单的解释下,由于本人的英语水平主要是靠有道词典,如果解释错了,麻烦指出。。。
Source Port. 16 bits.
源端口,占16位
Destination Port. 16 bits.
目的端口,占16位
Sequence Number. 32 bits.
序列号,占32位
The sequence number of the first data byte in this segment. If the SYN bit is set, the sequence number is the initial sequence number and the first data byte is initial sequence number + 1.
序列号:随机生成一个序列号,如果SYN即同步序号状态设为1,此为当前连接的初始序列号,数据的第一个字节序号为此序列号+1。
Acknowledgment Number. 32 bits.
If the ACK bit is set, this field contains the value of the next sequence number the sender of the segment is expecting to receive. Once a connection is established this is always sent.
确认号:确认序列号,如果ACK即确认序列号状态为1,则确认序列号=序列号+1,一旦连接建立,每次都会发送。
Data Offset. 4 bits.
The number of 32-bit words in the TCP header. This indicates where the data begins. The length of the TCP header is always a multiple of 32 bits.
实际数据偏移量,指出数据的开始位置。
reserved. 3 bits.
Must be cleared to zero.
3个位的保留位
ECN, Explicit Congestion Notification. 3 bits.
Added in RFC 3168.
00 01 02 N C E N, NS, Nonce Sum. 1 bit.
Added in RFC 3540. This is an optional field added to ECN intended to protect against accidental or malicious concealment of marked packets from the TCP sender.C, CWR. 1 bit.
E, ECE, ECN-Echo. 1 bit.
Control Bits. 6 bits.
00 01 02 03 04 05 U A P R S F U, URG. 1 bit.
Urgent pointer valid flag.紧急标志位
A, ACK. 1 bit.
Acknowledgment number valid flag.确认标志位
P, PSH. 1 bit.
Push flag.推送标志位
R, RST. 1 bit.
Reset connection flag.重置连接标志位
S, SYN. 1 bit.
Synchronize sequence numbers flag.同步序列号标志位
F, FIN. 1 bit.
End of data flag.结束标志位
Window. 16 bits, unsigned.
The number of data bytes beginning with the one indicated in the acknowledgment field which the sender of this segment is willing to accept.
滑动窗口,进行流量控制
Checksum. 16 bits.
This is computed as the 16-bit one's complement of the one's complement sum of a pseudo header of information from the IP header, the TCP header, and the data, padded as needed with zero bytes at the end to make a multiple of two bytes. The pseudo header contains the following fields:
校验和(没有细研究)
Urgent Pointer. 16 bits, unsigned.
If the URG bit is set, this field points to the sequence number of the last byte in a sequence of urgent data.
紧急指针(没有细研究)
Options. 0 to 40 bytes.
Options occupy space at the end of the TCP header. All options are included in the checksum. An option may begin on any byte boundary. The TCP header must be padded with zeros to make the header length a multiple of 32 bits.
可选项(没有细研究)
Data. Variable length.
下面我们来了解下传说中的三次握手和四次分:
我们再用wireshark抓包验证下,这里是连Mysql前的三次握手
1:客户端发起连接,设置SYN标志位为1,随机生成一个seq序列号x:
像Wireshark这种工具,通常显示的都是相对序列号/确认号,而不是实际序列号/确认号
如果想要关闭相对序列号/确认号,可以选择Wireshark菜单栏中的 Edit -> Preferences ->protocols->TCP,去掉Relative sequence number后面勾选框中的√即可
参考:https://blog.csdn.net/a19881029/article/details/38091243
2:服务器端收到信息后,设置SYN标志位为1,设置ACK标志位为1,随机生成一个seq序列号y,并生成确认号ack=seq(x)+1
3:客户端返回信息,设置ACK标志位为1,生成确认号ack=seq(y)+1
确认号都是在对方的序列号seq的基础上+1
至此,三次握手完成了啦。
下面我们再看一下,四次分手:
1.客户端设置Sequence number和Acknowledgment number,发送FIN=1给服务器端,表示要关闭连接
2. 服务器端返回Sequence number和Acknowledgment number,发送ACK=1给客户端,表示接收到客户端的请求
3.服务器端返回Sequence number和Acknowledgment number,发送ACK=1,FIN=1给客户端表示可以关闭连接了
4.客户端设置Sequence number和Acknowledgment number,发送ACK=1给服务器端,表示接收到服务端的信息。
服务器收到客户端的信息后,关闭连接;客户端等待2MSL后依然没有收到回复,则证明Server端已正常关闭,所以客户端也关闭了连接。
至此,四次分手圆满结束。
TCP三次握手抓包理解的更多相关文章
- TCP三次握手中SYN,ACK,seq ack的含义
转至:https://www.cnblogs.com/muyi23333/articles/13841268.html 1.TCP 为什么三次握手而不是两次握手 1.防止已失效的连接请求又传送到服务器 ...
- TCP 三次握爪 四次挥手
TCP三次握手和四次挥手过程 1.三次握手 (1)三次握手的详述 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向 ...
- TCP三次握手形象理解
tcp三次握手就像是你用企业微信给人家发信息,首先你得确认别人在不在,你会发 在吗? 这个时候显示的是未读 对方看到之后未读会变成已读 然后他会回复你 在的 你看到这个消息后,他那边也 ...
- 对于 TCP 三次握手的理解
假设名叫 A 和 B 的两个人要进行通信,那么他们两人之间,首先要确保通信顺畅. 而确保通信顺畅,就要从 3 个维度,确定 8 个能力 3 个维度分别是: 1.人知道(A 知道.B 知道) 2.人(A ...
- TCP三次握手中SYN,ACK,Seq含义
TCP(Transmission Control Protocol)传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示 ...
- TCP三次握手中,为什么需要第三次握手?
为什么客户端A还要发送一次确认呢?(为什么需要第三次握手) 这主要是为了防止已失效的连接请求报文段突然又传送到了B(服务器端),因而产生错误. 所谓"已失效的连接请求报文段"是这样 ...
- TCP三次握手简单理解
- 这次一定让你记住 TCP 三次握手、四手挥手!
TCP协议全称为:Transmission Control Protocol,是一种面向链接.保证数据传输安全.可靠的数据传输协议.为了确保数据的可靠传输,不仅需要对发出的每个字节进行编号确认,还需要 ...
- TCP 三次握手与四次挥手
TCP是什么 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的.可靠的. 基于IP的传输层协议. TCP有6种标示: ...
随机推荐
- Windows服务器下的IIS和Apache性能比较
目前最流行的建立网站的服务工具就要属Apache与IIS了.那么他们之间到底哪个性能更好呢?到底哪个工具才是最适合我们的呢?最近我也对这方面的问题进行了一番研究. 如果是基于Linux平台的话,那不必 ...
- Tido 习题-二叉树-树状数组求逆序对
这里给大家提供一个全新的求逆序对的方法 是通过树状数组来实现的 题目描述 样例输入 Copy 5 2 3 1 5 4 样例输出 Copy 3 提示 #include<iostream ...
- 【查虫日志】快速判断一副灰度图像中是否只有黑色和白色值(即是否为二值图像)过程中bool变量的是是非非。
二值图像我们在图像处理过程中是经常遇到的,有的时候我们在进行一个算法处理前,需要判断下一副图像的数据是否符合二值图的需求,这个时候我们可以写个简单的函数来做个判断,比如我写了一个很简单的的代码如下: ...
- 全自动Landsat影像温度反演软件开发
许久没有更新遥感类软件开发了,都有点生疏了,这一次我带来了一个老的算法,新的东西, 为什么这么说呢,我们知道Landat8.Landsat5等影像,单个影像去做温度反演,并没有什么太大的难度, 但是呢 ...
- Junit4使用详解一:测试失败的两种情况
Junit4最佳实践 1.把测试文件夹和代码文件夹分离,这两者的代码互不干扰,代码目录和测试目录是并列的关系 2.Java代码 3.创建单元测试代码文件 4.运行测试代码 5.查看测试结果 现在的情 ...
- 【python3两小时快速入门】入门笔记01:基础
又要我搞爬虫了,这次的源网站使用的ajax加载数据,我用java爬下来的页面内容部分全都是空,虽然java也有插件,但是使用起来感觉很麻烦,所以,python!老子来了. 1. 版本:pytho ...
- java开发工具必备神器——Notepad++和jd-gui下载安装使用
Notepad++是 Windows操作系统下的一套文本编辑器,有完整的中文化接口及支持多国语言编写的功能(UTF8技术).除了可以用来制作一般的纯文字说明文件,也十分适合编写计算机程序代码.Note ...
- 彻底弄懂UTF-8、Unicode、宽字符、locale
目录 Unicode.UCS UTF8 宽字符类型wchar_t locale 为什么需要宽字符类型 多字节字符串和宽字符串相互转换 最近使用到了wchar_t类型,所以准备详细探究下,没想到水还挺深 ...
- 02-三种Bean装配机制(三)
在前两篇中分别介绍了自动化装配机制和通过JavaConfig类进行装配,接下来介绍下通过XML装配bean,其实就目前趋势来看,这种方式用的越来越少(不是我说的,是作者说的,喜欢这种方式的别喷我
- 使用纯js写的一个分页
上图晒效果: 网上确实有很多分页的插件以及开源代码,单本是一个后台开发猿,前台css等样式还驾驭不住,所以就开始自己去写了.其实这个分页原理很简单,就是用ajax往后台传值(当前页码),后台使用lim ...