• 【计算机网络】TCP连接建立和释放


    TCP连接的建立:

     (1)B的TCP服务器进程首先创建传输控制块TCB,准备接受客户进程的连接请求。

    然后服务器进程处于LISTEN状态,等待客户的连接请求。

    (2)A的TCP进程首先创建传输控制块TCB,然后在打算建立TCP连接时,向B发出连接请求报文段,首部的同步位SYN=1。首部的同步位SYN=1,同时选择一个初始序号seq=x。

    TCP规定,SYN报文段不能携带数据,但是要消耗掉一个序号。

    客户端进入SYN-SENT状态

    (3)客户端收到B的确认后,还要向B给出确认。

    确认报文段ACK=1,确认号ack=x+1

    同时发送SYN=1,seq=y

    TCP服务器进入SYN-RCVD状态。

    (4)TCP客户进程收到B的确认后,还要向B给出确认。

    确认报文段ACK=1,ack=y+1

    seq=x+1。如果不携带数据则不消耗序号。

    A进入ESTABLISHED状态

    (5)B收到A的确认后进入ESTABLISHED状态

    TCP连接的释放:

    (1)A应用进程向TCP发出连接释放报文段,并停止发送数据,主动关闭TCP连接。

    A把连接释放报文段首部的终止控制位FIN置1,序号seq=u,等于前面已传送过的数据的最后一个字节的序号加1。

    A进入FIN-WAIT-1状态,等待B确认。

    FIN报文段即使不携带数据,也消耗掉一个序号。

    (2)B收到连接释放报文段后发出确认

    ACK=1,ack=u+1,seq=v

    TCP服务器处于半关闭状态。从B到A方向的连接并未关闭。

    (3)A收到来自B的确认后进入FIN-WAIT-2状态,等待B发出的连接释放报文

    (4)如果B已经没有要向A发送的数据,B发出连接释放报文。

    FIN=1,B必须重复上次已发送过的确认号ack=u+1,seq=w(在半关闭状态B又可能发送了一些数据)

    B进入LAST-ACK状态,等待A的确认

    (5)A收到B的连接释放报文后发送确认

    ACK=1,ack=w+1,seq=u+1

    TCP连接没有立即释放掉,必须经过时间等待计时器设置的时间2MSL后,A才进入到CLOSED状态。MSL叫最长报文段寿命。

    (1)为了保证A发送的最后一个ACK报文段能够到达B

    (2)A发送完最后一个ACK报文段后,再经过2MSL,就可以是本连接持续的时间内所产生的所有报文段都从网络上消失

     

    wireshark三次握手实验:

    三次握手:

    SYN标志位为0x002,Sequence号为558864304,ack=0

    SYN=1,ACK=1,ack=558864305,为上一个报文的seq+1。

    ack=2249409165为上一个报文的seq+1,ACK=1。连接建立。

  • 相关阅读:
    Linux exec 命令和Python exec 函数 区别
    初识面相对象深入理解、构造方法--学习JavaEE的day12
    应用方案 | 内置ALC的音频前置放大器D2538A和D3308芯片
    基于Apache Hudi在Google云构建数据湖平台
    云存储解决方案-阿里云OSS
    SourceTree修改Git密码
    2023年中国人防服务需求现状及行业市场规模前景分析[图]
    安科瑞ADL400产品功能及参数说明,适用于5G基站计量使用
    MySQL索引
    【微信小程序】了解小程序的宿主环境
  • 原文地址:https://blog.csdn.net/m0_52043808/article/details/127829291