三次握手与四次挥手

三次握手


tcp/ip协议在传输层中有一个协议tcp协议,在tcp协议发送数据之前,会以三次握手的形式来建立 链接,建立链接之后发送数据,数据发送完毕之后会以四次挥手的形式终止链接,用来保证提供相对可靠的连接.第一次,客户机发送数据要求连接,第二次,服务器收到请求后给客户机返回数据进行响应,第三次客户机检查主机的响应是否正确,若正确则发送信息通知服务端,之后俩台机器就能进行数据交互了

俩次握手可能造成死锁,比如客户端发送的数据因为某些原因造成了滞留,知道一段时间后才打到了服务端,这是一个眼睛失效的报文,但次数服务端任然认为这是客户端建立连接时的第一次握手,于是服务端回应了客户端,第二次握手,如果这有俩次握手,那么到这里连接就结束了,但是此时客户端没有任何数据需要发送,而服务端还在傻傻的等着,造成很大的资源浪费.

第一次握手:主机A发送位码为syn=1,随机产生seq number=1第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。

四次挥手

作用:保证数据能够完整的传输

  • 第一次:主动方发送断开连接的请求给被动方,此时代表主动访方,不会再发送报文了,但可以接收报文,被动房次数有可能还有相应的数据报文需要发送,
  • 第二次:被动方告诉对方,我知道你想断开连接的请求了,这样主动方便不会因为没有收到应答而继续发送断开请求
  • 第三次:被动方处理完数据之后,便发送给主动方断开连接的请求
  • 第四次:主动方发送连接中断确认,被动方释放连接,紧跟着主动方也会释放连接

客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

Last modification:October 24, 2022
如果觉得我的文章对你有用,请随意赞赏