TCP三次握手
1 TCP三次握手
- 一开始,客户端和服务端都处于
CLOSED状态。先是服务端主动监听某个端口,处于LISTEN状态。
三次握手的第一个报文是SYN报文。
- 客户端会随机初始化序号(
client_isn),将此序号置于 TCP 首部的「序号」字段中,同时把SYN标志位置为1,表示SYN报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于SYN-SENT状态。
三次握手的第二个报文是SYN+ACK报文。
- 服务端收到客户端的
SYN报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入 TCP 首部的「序号」字段中,其次把 TCP 首部的「确认应答号」字段填入client_isn + 1, 接着把SYN和ACK标志位置为1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于SYN-RCVD状态。
三次握手的第三个报文是ACK 报文。
-
客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部
ACK标志位置为1,其次「确认应答号」字段填入server_isn + 1,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于ESTABLISHED状态。 -
服务器收到客户端的应答报文后,也进入
ESTABLISHED状态。
2 wireshark分析三次握手
通过wireshark分析TCP/IP三次握手的过程,结合上面的流程,进一步加深对TCP连接建立的过程的理解。
2.1 SYN报文
TCP三次握手的第一个报文是客户端发起连接建立请求,会发送SYN报文给服务端。根据上面的流程可知,客户端会在SYN报文中发送客户端随机生成的序列号+SYN标志位置1。

通过wireshark看到,客户端生成的随机序列号:331505523。并且Flags字段的SYN标志位被置1。
2.2 SYN+ACK报文
服务端在收到客户端的SYN后,会发送SYN+ACK报文。服务端发送的SYN+ACK报文中,会初始化随机的序列号,并且会在应答号填入client_isn + 1。在2.1分析报文中,客户端的随机序列号为331505523,所以服务端的应答号应该是331505524。Flags字段的SYN和ACK标志位都置1。

2.3 ACK报文
客户端收到服务端发送的SYN+ACK报文后,会发送ACK报文给服务端。客户端会在TCP报文中把应答号填入server_isn + 1,并且会把Flags的ACK标志位置1。


浙公网安备 33010602011771号