TCP三次握手和四次挥手过程以及连接为什么使用三次连接,释放使用四次

TCP三次握手:
第一次握手:客户端A发送位码为SYN=1,随机产生序号seq=123的数据包到服务器B,服务器B由SYN=1知道,A  
                    要求建立联机;

第二次握手:服务器B收到请求后要确认联机信息,向A发送ACK=1,SYN=1,ack=(客户端A的seq+1),随机产生
                  seq=321的包;

第三次握手:客户端A收到后,检查服务器中的ack是否为第一次握手中if(seq+1==124),以及位码ACK是否为1,若
                   正确,主机A会再发送ACK=1,ack=322(主机B的seq+1=322),seq=123+1(第一次握手seq+1);主机B收到后确
                    认seq124是否等于第一次seq+1(123+1),与ACK=1则连接建立成功

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

为什么不用两次握手:
    答:两次握手会产生错误,加入A发了两次连接请求a,b(因为服务器回应超时),第二次请求b先到达,然后与服务器建立连接,但是当a到达的时候,服务器以为客户端又发出一条新连接,所以会发送确认,并在服务器上为此次新连接配置资源,但是客户端已经建立连接,并没有发起新的连接,所以会丢掉服务器这次发来的确认,而此时服务器已经配置了资源,所以造成服务器浪费。

TCP四次挥手:
原因:因为tcp通信是全双工状态,所以有两个方向,如果要释放,就要将释放两条线路上的,所以是四次。
步骤:

1、A发送FIN=1,seq=u,则此时A就不可以发送数据了

2、主机B收到A发送的FIN,表示收到了,就会发送ACK=1,seq=v,ack=u+1回复,A->B链路释 放掉了。

3、但这个时候B可能还在发送数据,没有想要关闭数据口的意思,所以等到B数据发送完了,才会发送FIN=1,ACK=1,seq=w,ack=u+1给主机A,此时B就不可以发送数据了。

4、A收到B发来的FIN,知道B的数据也发送完了,回复ACK=1,seq=u+1,ack=w+1, A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。

注意:为什么要等待2MSL时间呢?
答:MSL(最长报文段寿命Maximum Segment Lifetime),建议2分钟,所以要等近4分钟
原因1:保证A发送的最后一个ACK报文段可以到达B,使得B正常关闭。如果不等的话,A发送的ack丢失,则会造成b无法关闭。等待则保证B能正常接收。如果在2MSL时间中,又收到B发送的FIN(超时重传),则A重新发送ACK,并重启定时器。
原因2:防止出现“已失效的连接请求报文段”,经过2MSL时间可以保证本连接时间内的所有报文段都可以从网络消失。

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值