TCP连接释放的四次挥手过程?
来源:互联网 发布:excel不显示重复数据 编辑:程序博客网 时间:2024/06/03 11:19
四次挥手过程:
①开始时客户端A和服务器端B都处于“ESTAB-LISHED已建立连接”状态。
②假设Client端A发起中断连接请求,也就是发送FIN报文(FIN=1,seq=u,u是A最后一次发送的字节的序号+1)。Server端接到FIN报文后,意思是说”我Client端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。A发完后A进入“FIN-WAIT-1释放等待1”状态。
③B收到FIN报文,先发送ACK,”告诉Client端,请求收到,但是我还没准备好,请继续你等我的消息”。B收到后向A发送ack(ACK=1,seq = v,ack = u+1),B发完后B进入“COLSE-WAIT释放等待”状态。
④A收到B的确认后进入“释放等待2FIN-WAIT-2”状态。
⑤当B确定数据已发送完成,则向A发送FIN报文,”告诉Client端,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后, “就知道可以关闭连接了。B发完后B进入“LAST-ACK” 状态(FIN=1,ACK=1,seq=w,ack = u+1)。
⑥client还是不相信网络,怕Server端不知道要关闭,所以发送ACK(ACK=1,seq = u+1,ack = w+1)后进入“TIME_WAIT”状态,如果Server端没有收到ACK则可以重传。Server端收到ACK后,”就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。
为什么设置2MSL时间?
①为了保证A发送的最后一个ACK能到达B。因为这个ACK可能丢失,因为使B收不到确认,无法关闭,有个这段时间,B就可以超时重传FIN+ACK,然后A就重传一次ACK,然后重置定时器。最后A,B都能顺利关闭,如果没有这段时间,A发送完ACK就关闭,B不一定能顺利关闭。
②防止“已失效连接请求报文段”出现在本连接中,A在发送完最后一个ACK后,再经过2MSL,就可以使本链接持续的时间内所产生的所有报文段都在网络中消失,这样就可以使下一个连接中不再出现这种旧的请求报文段。
- TCP连接释放的四次挥手过程?
- TCP学习(3)--TCP释放连接的过程(四次挥手)
- TCP四次挥手释放连接
- TCP三次握手,四次挥手(连接及释放过程)
- TCP的四次挥手(TCP的连接释放)
- 剖析TCP/IP协议建立和释放连接的三次握手与四次挥手过程
- socket中TCP的四次挥手释放连接详解
- TCP三次握手和四次挥手过程以及连接为什么使用三次连接,释放使用四次
- tcp/ip四次挥手释放连接详解
- TCP连接的四次挥手
- TCP三次握手(建立连接)和四次挥手(释放连接)过程
- TCP断开连接过程(四次挥手)
- TCP三次握手详解及释放连接过程(三次握手四次挥手)
- TCP 建立连接的三次握手 和释放连接的四次挥手 图解
- 通俗易懂地讲解TCP建立连接的三次握手和释放连接的四次挥手
- TCP建立连接的三次握手和释放连接的四次挥手
- 通俗易懂地讲解TCP建立连接的三次握手和释放连接的四次挥手
- TCP的三次握手建立连接与四次挥手释放连接
- 写测试感悟,获取测试学习视频资料
- skynet底层源码阅读(2)-消息队列
- could not find developer disk image
- Hibernate反向工程出现BigDecimal类型解决办法
- 醒醒吧!深度学习不是AI的未来
- TCP连接释放的四次挥手过程?
- 阿里巴巴摘得LSVC桂冠 打造领先AI视频技术
- 贺!RocketMQ成为Apache软件基金会顶级开源项目
- 对待棘手bug,新手与大牛的差距在哪里?
- AWK
- Android的init过程详解(一)
- JVM内存分配以及对象的创建过程
- 阿里SRE体系如何支撑24小时峰值压力、220+个国家“剁手党”?
- Mybatis Generator 生成的mapper只有insert方法