您的位置:首页 > 理论基础 > 计算机网络

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

2015-06-01 20:30 741 查看
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时间可以保证本连接时间内的所有报文段都可以从网络消失。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: