TCP三次握手

1 TCP三次握手

TCP 三次握手

  • 一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。

三次握手的第一个报文是SYN报文

  • 客户端会随机初始化序号(client_isn),将此序号置于 TCP 首部的「序号」字段中,同时把 SYN 标志位置为 1 ,表示 SYN 报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态。

第一个报文—— SYN 报文

三次握手的第二个报文是SYN+ACK报文

  • 服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入 TCP 首部的「序号」字段中,其次把 TCP 首部的「确认应答号」字段填入 client_isn + 1, 接着把 SYN 和 ACK 标志位置为 1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD 状态。

第二个报文 —— SYN  ACK 报文

三次握手的第三个报文是ACK 报文

  • 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,其次「确认应答号」字段填入 server_isn + 1 ,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。

  • 服务器收到客户端的应答报文后,也进入 ESTABLISHED 状态。

第三个报文 —— ACK 报文

2 wireshark分析三次握手

通过wireshark分析TCP/IP三次握手的过程,结合上面的流程,进一步加深对TCP连接建立的过程的理解。

2.1 SYN报文

TCP三次握手的第一个报文是客户端发起连接建立请求,会发送SYN报文给服务端。根据上面的流程可知,客户端会在SYN报文中发送客户端随机生成的序列号+SYN标志位置1

image

通过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

image

2.3 ACK报文

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

image

3 Reference

35 张图解:被问千百遍的 TCP 三次握手和四次挥手面试题 - 小林coding - 博客园

posted @ 2025-05-22 09:51  cockpunctual  阅读(69)  评论(0)    收藏  举报