从序号和确认号理解TCP三次握手

2022-11-06  本文已影响0人  一颗冰淇淋

头部信息

TCP首部存储的数据和建立连接有关,具体每个字段的用途可以参考这一篇文章,其中序号和确认号决定了发送数据的内容。

1_tcp数据格式.jpeg

三次握手

建立连接的时候会有三步,也就是我们所说的三次握手。

1_建立连接.png

连接时,存在一些状态的变化

抓包数据来看如下所示

2_模拟连接.jpeg

疑问

那么可能有人会问,为什么需要三次握手,两次不就可以互相确认了吗?

三次握手的目的:防止server端一直等待,浪费资源。
如果只有两次握手,第一次发送SYN=1时因网络延迟没发送成功,那么客户端会再发送一次SYN=1的建立请求,此时发送成功,客户端和服务器之间完成通信。
过了一段时间,第一次发送的SYN=1消息才发送到服务器,此时服务器以为是新的建立连接过程,又会回复一个SYN=1,ACK=1的响应。
如果只有两次连接,服务器会以为成功建立连接,但实际上客户端的数据已经获取到,不会再发送请求了,服务器就会处于一直等待的状态。
采用三次握手就可以防止这样的情况,因为第三次请求没发送给服务器,所以它处于同步已接受状态,如果一直没有收到第三条请求则会关闭连接。

那如果第三次握手失败了呢?

此时server的状态为SYN-RCVD,若等不到client的ACK,server会重新发送SYN+ACK包。如果server多次重发SYN+ACK都等不到client的ACK,就会发送RST包,强制关闭连接。

数据传输

当获取连接后,就可以开始真正的传输数据啦

3_传输数据.jpeg

到这里就是完整的【建立连接】,以及发送请求流程。关于【释放连接】,会在下一篇文章中描述。

以上就是关于 从序号和确认号理解TCP三次握手 的内容 , 更多有关 前端网络协议 的内容可以参考我其它的博文,持续更新中~

上一篇下一篇

猜你喜欢

热点阅读