zoukankan      html  css  js  c++  java
  • TCP有限状态机

    版权声明:本文图片为CSDN博主「狂奔的乌龟」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

    图片原链接:https://blog.csdn.net/xy010902100449/article/details/48274635

    1、TCP的连接建立

     初始状态时,客户端与服务器处于CLOSED(关闭 )状态,在建立连接过程中客户端主动打开建立连接,服务器是被动连接。

    三次握手过程分析:

    (1)客户端向服务器发出请求连接的报文段 ,同步位SYN=1,初始序列号seq=x,期待序列号为x+1,此时,客户端处于SYN-SENT(同步已发送)状态。

    (TCP规定,SYN报文段不能携带数据,但要消耗一个序号。序号指的是TCP报文段首部20字节里的序号,TCP连接传送的字节流的每一个字节都按顺序编号)

    (2)服务器收到来自客户端的请求之后,向客户端发送确认ACK=1,确认客户端的序列号ACK=x+1。服务器向客户端发送请求连接的请求,同步位SYN=1,初始序列号seq=y,期待序列号为y+1。此时客户端处于SYN-RCVD(同步收到)状态。

    (3)客户端收到服务器的确认之后,还要给服务器发送确认。确认收到请求ACK=1,确认序列号ACK=y+1,此时客户端的序列号seq=x+1。这时TCP连接已建立,客户端进入 ESTABLISHED(已建立连接)状态,当服务器收到客户端的确认之后,也会进入ESTABLISHED(已建立连接)状态。

    2、TCP连接释放

     数据传输结束后,客户端与服务器断开连接,初始状态时,客户端与服务器处于ESTABLISHED的状态,客户端在断开连接过程中是主动关闭,服务器则被动关闭。

    四次挥手过程分析:

    (1)客户端向服务器发送请求释放报文段,并停止发送数据。释放连接报文段FIN=1,序列号seq=u,期待序列号seq=u+1,此时客户端处于FIN-WAIT-1(终止等待1)状态。

    (2)服务器确认收到请求ACK=1,确认序列号seq=u+1,向客户端作出回应。此时客户端处于CLOSE-WAIT(关闭等待)状态。

    (3)客户端收到来自服务器的确认之后,就进入了FIN-WAIT(终止等待2)状态,当服务器将客户端的请求全部回应完后才开始请求关闭,服务器向客户端发送请求释放报文段FIN=1,序列号seq=w,期待序列号w+1,此时服务器最后等待客户端的接收。

    (4)客户端确认收到来自服务器的请求ACK=1,确认序列号ACK=w+1,此时客户端处在TIME-WAIT(时间等待),客户端向服务器做出回应,服务器收到回应后立即关闭,服务器关闭后客户端需等待两个最长报文段寿命的时间(2*MSL),防止服务器接收不到来自客户端的回应,以便服务器重新发送请求。

  • 相关阅读:
    [Django]中间件
    Python装饰器的诞生过程-->和闭包的微妙关系
    Python实现经典算法之---斐波那契数列(兔子问题&走楼梯问题)
    二分查找---非递归算法和递归算法
    JavaScript的event对象
    input[type='submit']input[type='button']button等按钮在低版本的IE下面,去掉黑色边框的问题
    JavaScript 之 数据在内存中的存储和引用
    HTML5 之 简单汇总
    HTML5 Canvas——基础入门
    nodejs(14)express获取url中的参数
  • 原文地址:https://www.cnblogs.com/tanxiaojuncom/p/11490870.html
Copyright © 2011-2022 走看看