TCP 三次握手与四次挥手?(解释一下三次握手与四次挥手)

版权声明: https://blog.csdn.net/qq_41880190/article/details/85003715

TCP 三次握手与四次挥手?(解释一下三次握手与四次挥手)


三次握手建立连接

1)  主机A发送一个SYN段到主机B告诉B想要连接的主机端口,以及初始的序列号(ISN:x)(报文段1)

2) 主机B应答,服务器发回包含B的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号ACK设置为客户的ISN加1以对A的SYN报文段进行确认。

3)主机A必须将确认序号ACK设置为B的ISN加1以对B的SYN报文段进行确认(报文段3)

四次挥手断开连接


1)现在的网络通信都是基于socket实现的,当客户端将自己的socket进行关闭时,内核协议栈会向服务器自动发送一个FIN置位的包,请求断开连接。

2)服务器端B收到请客端的FIN断开请求后,内核协议栈会立即发送一个ACK包作为应答,表示已经收到客户端的请求

3)服务器运行一段时间后关闭了自己的socket。这个时候内核协议栈会向客户端A发送一个FIN置位的包,请求断开连接

4)客户端A收到服务端B发来的FIN断开请求后,会发送一个ACK做出应答,表示已经收到服务端的请求

为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?


这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。


三次握手与四次挥手

猜你喜欢

转载自blog.csdn.net/qq_41880190/article/details/85003715