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),防止服务器接收不到来自客户端的回应,以便服务器重新发送请求。

  • 相关阅读:
    jQuery EasyUI API 中文文档 数字框(NumberBox)
    jQuery EasyUI API 中文文档 数值微调器(NumberSpinner)
    jQuery EasyUI API 中文文档 日期时间框(DateTimeBox)
    jQuery EasyUI API 中文文档 微调器(Spinner)
    jQuery EasyUI API 中文文档 树表格(TreeGrid)
    jQuery EasyUI API 中文文档 树(Tree)
    jQuery EasyUI API 中文文档 属性表格(PropertyGrid)
    EntityFramework 数据操作
    jQuery EasyUI API 中文文档 对话框(Dialog)
    jQuery EasyUI API 中文文档 组合表格(ComboGrid)
  • 原文地址:https://www.cnblogs.com/tanxiaojuncom/p/11490870.html
Copyright © 2011-2022 走看看