一、TCP/IP 三次握手
当客户端想建立TCP连接时,需要先同服务端进行三次握手
![](https://i-blog.csdnimg.cn/blog_migrate/0d4faaf19b4a100f2723e0157525891e.png)
第一次握手:客户端发送一个Flag(标志位)为SYN的报文,该报文的Seq(序列号)假定为X
第二次握手:服务端在收到后,发送一个Flag(标志位)为SYN, ACK的报文,ACK的序号为客户端发来的序列号+1,即为(X+1),同时将第二次握手的报文Seq(序列号)设置为Y
第三次握手:客户端发送一个Flag(标志位)为ACK的报文,ACK的序列号为第二次握手时服务端的序列号+1,即为ACK=Y+1,同时设置本次报文的Seq(序列号)为Z。
二、三次握手在Wireshark抓包中的体现
2.1 第一次握手
![](https://i-blog.csdnimg.cn/blog_migrate/04fd6d4d6c9705e0127280d4d8e2bf93.png)
可以看到第一次握手的:
(1)Flags:0x002(SYN) 表明报文类型是SYN
(2)Sequence number(Seq) 为 0
2.2 第二次握手
![](https://i-blog.csdnimg.cn/blog_migrate/fa0ff9c318040ed66ba13eaa2e46ace4.png)
第二次握手可以看到
(1)Flags: SYN, ACK 表明这是一个 SYN ACK报文
(2)ACK number为 1,即第一次的Seq + 1
(3)Seq number 为0,表明本次报文的序列号为0
2.3 第三次握手
![](https://i-blog.csdnimg.cn/blog_migrate/15c7af05572783b32d56bea5f66567b5.png)
第三次握手可以看到
(1) Flags: ACK 表明这是一个ACK报文
(2) ACK number 为 1: 即是第二次的Seq number + 1
(3)Seq number 为 0 :表明本次报文的序列号为0