TCP的三次握手与四次挥手学习笔记

TCP的三次握手与四次挥手学习笔记

参考资料

计算机网络——TCP的三次握手与四次挥手(超详细)

1. 三次握手

1.1 三次握手的流程

SYN为1代表这是一个建立链接的请求
ACK代表确认序号是有效的,即接收到之前报文的序号是正确的
序号、确认序号:
TCP开始,客户端初始化时请求报文随机生成一个序号c

服务端收到序号后,设置确认序号为c+1
同时服务端设置序号为s

客户端收到后,设置确认序号为s+1
设置序号为c+1
此阶段报文可以发送数据,上面两个阶段报文处于未确认连接阶段。

1.2 为什么要三次握手

两次握手,可以证明通信是可达的。

此时服务端已经确认了来自客户端的client-isn序号

但是客户端还未确认来自服务的的server-isn序号

所谓SYN,就是Synchronize的缩写,它之所以只存在在建立连接的阶段,是因为它存在的目的就是为了同步客户端和服务端的初始序号。这个序号是随机生成的,所以需要去确认。

如果未进行第三次握手,这个时候去通信,因为SYNACK报文的缺失,客户端并不知道server-isn,则无法完成通信。

2. 四次挥手

2.1 挥手状态

时间 状态(客/服) 有无发送功能(断开方/被动方)
第一次 FIN1 1/1
第二次 ACK1 0/1
第三次 FIN2 0/1
第四次 ACK2 0/0

在第四次时,主动断开方也收到了被动断开方的断开报文,会回复一个ACK到被动断开方。被动断开方确认后,会释放相关的资源;主动断开方会在发送后等待一段时间(半分钟、一分钟或两分钟),再释放资源。

2.2 为什么要等待一段时间后再释放

  • 因为第三次挥手时,会回送一条报文(第四次挥手)。第四次挥手时,如果出现损坏、丢失或超时,导致被动断开方收不到ACK,那么被动断开方会再次发送一次FIN到主动断开方(重新开始第二次挥手)。如果主动断开方此时已经释放资源,则无法处理这次请求。因此不能立即释放资源!

  • 另一个原因,是在断开之后,可能还会存在一些断开之前还在进行的网络传输。如果此时又建立了一个新的,端口和IP都一样的连接,那么遗留的网络报文此时会被当作新连接的报文做处理,这中不确定性会导致一些不可预估的问题。因此要在断开后,等待所有的传输都死掉,才释放资源。(未释放资源时,无法以同一IP和端口创建新连接)

2.3 为什么需要四次挥手

TCP连接是全双工的,即双方都可以主动发送报文。如果某一方断开连接,代表这一方不会再发送数据到另一方。但是不代表,另一方就不会再发送数据到断开方了。所以,一定要双方都确认断开才行。

posted @ 2021-04-20 15:13  Jennyism丶  阅读(86)  评论(0编辑  收藏  举报