1. TCP 三次握手原理
1. 第一次握手
发送方向接收方发送一个 TCP
,标志位为 SYN=1
,序号为 Seq=x
其实一般是 Seq=0
,代表发送方请求建立连接
2. 第二次握手
接收方接收到发送方的请求信号后,向发送方返回一个数据包,SYN=1, ACK=1
的TCP
。同时将确认序号(Acknowledge Number
即 Ack
)设置为第一次握手的报文中 Seq
的数值 +1
,即 x+1
(如果第一次握手的 Seq=0
,则 Ack=0+1=1
)。同时设置 Seq=y
(y
可以是1
,也可以是 其它)
3. 第三次握手
发送方收到接收方发来的包后,检查确认序号(Acknowledge Number
即 Ack
)是否正确,以及标志位 ACK
是否为 1
。若正确,发送方会向接收方发送一个报文(第三次握手的报文),SYN=0, ACK=1
,确认序号(Acknowledge Number` 即 `Ack
)设置为第二次握手报文中的 Seq
+1
,比如第二次报文 Seq=0
,那么这个 Ack=1
,而报文中的 Seq
设置为 第一次握手的Seq
值 +1
。
2. wireshark
抓包测试
- 发送方: (
192.168.0.73
) - 接收方: (
110.242.68.137
)
- 第一次握手: 红的方框中是我在谷歌浏览器刷新一次网站抓到 TCP 的三次握手的过程,可以看到,第一次握手,浏览器发送了
4
次请求,套接字(IP:port
)分别为192.168.0.73:64344
、192.168.0.73:64345
、192.168.0.73:64346
、192.168.0.73:64347
。 - 第二次握手:最后接收方(
110.242.68.137
)也就是我要访问的网站(服务器)先对192.168.0.73:64344
做了回复 - 第三次握手:发送方(
192.168.0.73
)向接收方 (110.242.68.137
)发送确认的报文。(红框最后一行)
(黄色的是其它资源发送的并发的请求)
- 具体一点,可以明确看到,抓包的规律满足上面的理论