美文网首页
python-网络-tcp的几种状态介绍(二)

python-网络-tcp的几种状态介绍(二)

作者: 叩丁狼教育 | 来源:发表于2018-12-11 09:38 被阅读16次

本文作者:黎智煊,叩丁狼高级讲师。原创文章,转载请注明出处。

tcp的4次挥手(分手)协议

叩丁狼教育.png

通俗的4次挥手讲解

  1. 第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时自身形成等待结束连接的状态。

  2. 第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句心里话要给客户端说,“我知道你说完了(ACK),我再给你说两句,&*……%¥”。

  3. 第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。

  4. 第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK),因为连接和断开要双方都按下关闭操作才能断开,客户端同时又为自己定义一个定时器,因为不知道刚才说的这句话能不能准确到达服务端(网络不稳定或者其他因素引起的网络原因),默认时间定为两个通信的最大时间之和,超出这个时间就默认服务器端已经接收到了自己的确认信息,此时客户端就关闭自身连接,服务器端一旦接收到客户端发来的确定通知就立刻关闭服务器端的连接。

到此为止双方整个通信过程就此终结。这里要声明一下:断开链接不一定就是客户端,谁都可以先发起断开指令,另外客户端和服务端是没有固定标准的,谁先发起请求谁就是客户端。

详细的介绍

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

数据传输结束后,通信的双方都可释放连接,A和B都处于ESTABLISHED状态。(A、B连接建立状态ESTABLISHED——A终止等待1状态FIN-WAIT-1——B关闭等待状态CLOSE-WAIT——A终止等待2状态FIN-WAIT-2——B最后确认状态LAST-ACK——A时间等待状态TIME-WAIT——B、A关闭状态CLOSED)

  1. A的应用进程先向其TCP发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
  2. B收到连接释放报文段后即发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。
  3. A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
  4. B没有要向A发出的数据,B发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A的确认。
  5. A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态。

想获取更多技术干货,请前往叩丁狼官网:http://www.wolfcode.cn/all_article.html

相关文章

  • python-网络-tcp的几种状态介绍(二)

    本文作者:黎智煊,叩丁狼高级讲师。原创文章,转载请注明出处。 tcp的4次挥手(分手)协议 通俗的4次挥手讲解 第...

  • python-网络-tcp的几种状态介绍(一)

    本文作者:黎智煊,叩丁狼高级讲师。原创文章,转载请注明出处。 之前介绍了很多的udp的原理和例子,现在稍微总结一下...

  • TCP协议详解

    TCP 前言网络模型简图 一、TCP协议结构 二、TCP三次握手与状态流转 三、TCP四次挥手与状态流转 前言 网...

  • TCP常见的几种状态

    CLOSED:初始状态,表示没有任何连接。 LISTEN:Server端的某个Socket正在监听来自远方的TCP...

  • tcp链接的几种状态

    说明: 通常情况下:一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手里面...

  • python-网络编程-tcp/ip认识(二)

    本文作者:黎智煊,叩丁狼高级讲师。原创文章,转载请注明出处。 端口 1 什么是端口 那么TCP/IP协议中的端口指...

  • Centos常用指令

    一、网络 1、查看哪些IP连接本机 2、查看Apache的并发请求数及其TCP连接状态 二、端口 查看TCP监听(...

  • 安卓网络编程系列

    1.网络编程系列第(一)篇---TCP/IP 第一篇主要介绍TCP/IP协议组 2.网络编程系列第(二)篇---h...

  • TCP客户端和服务端相关状态说明

    TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态。TCP连接过程是状态的转换,促使状态发生转换的因素...

  • 【Python入门】39.网络编程

    摘要:网络编程的概念介绍;TCP/IP协议的基本介绍;介绍Python的socket库,在Python中进行TCP...

网友评论

      本文标题:python-网络-tcp的几种状态介绍(二)

      本文链接:https://www.haomeiwen.com/subject/rpfshqtx.html