TCP三次握手和四次挥手过程以及连接为什么使用三次连接,释放使用四次
来源:互联网 发布:淘宝上找不到的衣服 编辑:程序博客网 时间:2024/05/18 01:34
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时间可以保证本连接时间内的所有报文段都可以从网络消失。
0 0
- TCP三次握手和四次挥手过程以及连接为什么使用三次连接,释放使用四次
- TCP三次握手,四次挥手(连接及释放过程)
- TCP连接和释放(三次握手和四次挥手)
- 【TCP连接】三次握手和四次挥手
- 【TCP连接】三次握手和四次挥手
- TCP连接三次握手和四次挥手
- TCP连接为什么三次握手和四次挥手
- TCP三次握手(建立连接)和四次挥手(释放连接)过程
- TCP三次握手详解及释放连接过程(三次握手四次挥手)
- 剖析TCP/IP协议建立和释放连接的三次握手与四次挥手过程
- TCP 连接管理与释放(三次握手,四次挥手)
- TCP建立连接三次握手和释放连接四次握手
- TCP建立连接三次握手和释放连接四次握手
- TCP建立连接三次握手和释放连接四次握手
- TCP连接的三次握手,四次挥手
- TCP连接三次握手,四次挥手告别
- tcp连接 三次握手+四次挥手
- TCP连接:“三次握手,四次挥手”
- Hibernate HelloWorld-06 单向多对一的映射关系
- 面试题29:数组中出现次数超过一半的数字
- 算法导论(二)堆排序
- hdu 5246 超级赛亚ACMer
- Virtual Box cannot access the kernel driver
- TCP三次握手和四次挥手过程以及连接为什么使用三次连接,释放使用四次
- 一步一步跟我学习lucene(17)---lucene搜索之expressions表达式处理
- 中国计算机学会推荐国际学术期刊 (计算机图形学与多媒体)
- ASP.NET4.0课后习题答案
- Mac OS 下命令行编辑plist的方法
- s3c2440 ADC 应用程序编程
- iOS 内核堆利用技术点之 mach_msg ool
- 面试题30:最小的K个数
- 从多层感知器到卷积网络(一)