使用Wireshark分析TCP三次握手
TCP握手
- 建立连接时,客户端发送
SYN
到服务器,并进入SYN_SENT
状态。 - 服务器收到请求后,回送
SYN + ACK
到客户端,并进入SYN_RECV
状态。 - 客户端收到
SYN + ACK
后,向服务器发送确认ACK
包,进入ESTABLISHED
状态,服务器接收到确认ACK
包后,也进入ESTABLISHED
状态,此时三次握手完成,TCP连接建立,开始传送数据。
image.png
seq(Sequence):序列号,占
4
个字节,用来标记数据段的顺序,TCP 把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。
ack(Acknowledge):确认号,占4
个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1
即为确认号
ACK(Acknowledge character):确认标志位,占1位,仅当ACK=1
时,确认号字段才有效。ACK=0
时,确认号无效
SYN(Synchronize Sequence Numbers):连接建立时用于同步序号的标志位,当SYN = 1,ACK = 0
时表示这是一个连接请求报文段,若同意连接,则在响应报文中发送SYN = 1, ACK = 1
,因此SYN = 1
表示这是一个连接请求或者连接接受报文,SYN
标志位只有在 TCP 建立连接时候才会置1
,握手完成后SYN
会被置为0
FIN(Finish):连接终止标志位,用来释放一个连接,FIN = 1
表示此报文段的发送方发送结束,并要求释放连接
SYN_SENT:syn package has been sent,序号数据包已经发送
SYN_RECV:syn package has been received,序号数据包已经接受
ESTABLISHED:连接已建立
使用 Wireshare 分析三次握手
随便找个网站测试一下
过滤条件:ip.src==47.95.165.112 or ip.dst==47.95.165.112
先看一下对应的 OSI 模型
第一次握手
ip 为 30.203.52.26
的客户端发送 SYN
到 ip 为 47.95.165.112
的服务器。
此时,客户端进入了SYN_SENT
状态
标志位为SYN
Seq = 0
第二次握手
ip 为 47.95.165.1121
的服务器回送 SYN + ACK
到 ip 为 30.203.53.26
的客户端,此时服务器进入 SYN_RECV
的状态
标志位为 SYN + ACK
Seq = 0
Ack = 客户端的Seq + 1 也就是 0 + 1 = 1
第三次握手
ip 为 30.203.52.26
的客户端发送 ACK
到 ip 为 47.95.165.112
的服务器,客户端进入ESTABLISHED
状态,服务器接受到客户端的发送的ACK
后,也进入ESTABLISHED
状态
标志为 ACK
Ack = 服务器Seq + 1 也就是 0 + 1 = 1
好文推荐:
https://bbs.51cto.com/thread-1558979-1-1.html
https://www.cnblogs.com/moonbaby/p/10528401.html
https://blog.csdn.net/qq_38950316/article/details/81087809