• 浅谈TCP三次握手和四次挥手


    学习三次握手和四次挥手前,先了解下几个基础的概念。

    Seq:数据段序号,我们都知道TCP是提供有序传输的,有序传输的基础就是数据段序号,接收方在收到发送方乱序包的情况下可以根据Seq进行重新排序,确保接收的数据是正常的。

    Len:数据段长度,数据段长度不包括TCP头部,就是TCP除头部以外的内容,比如涵盖的HTTP数据。

    Ack:确认号,即接收方向发送方确认自己收到的数据。

    用wireShark来看看一个TCP传数据的过程图,认识下这几个概念。

    除了如上几个概念外,在截图中的方括号内还有SYN、ACK这几个标记位需要了解下,这些标记位是存在TCP头中的。

    SYN:建立连接

    FIN:释放连接

    RST:重置连接

    PSH:尽可能快的将数据送往接收进程

    还有ACK(确认序号有效)和URG(紧急指针域有效)。

    理解了这些概念,咱们再通过wireShark来理解三次握手。

    1、  客户端携带SYN标记,初始序号Seq为X(开启了相对序号时如图中所示为0),请求与服务端建立连接,服务端同意后麻烦Ack=X+1;

    2、  服务端收到请求后,同意建立连接,Ack为X+1,同时也请求与客户端建立连接(SYN),初始序号为Y,麻烦客户端同意后也请Ack=Y+1;

    3、  客户端收到请求后,同意连接,Ack为Y+1,序号为X+1。

    示意图如下:

    再来理解下四次挥手,按照各路教材及大师的作品过程和示意图是这样的。 

    1、客户端向服务端发起请求断开连接,携带FIN标记,Seq为X,请求与服务端断开连接,服务端同意后麻烦Ack=X+1;

    2、服务端收到请求后,Ack=X+1,断开连接;

    3、服务端也向客户端发起请求断开连接,携带FIN标记,Seq为Y,请求与客户端断开连接客户端同意后麻烦Ack=Y+1;

    4、客户端收到请求后,Ack=Y+1,断开连接;

     

    但是我用wireShark抓到的包却是这样的。抓取了一下午都抓不到如上的过程。             

     

    对于这样的场景,我只能怀疑是不是服务端做了优化,所以我又找了局域网下的两台电脑做了下测试发现结果还是这样的。

    对于这样的结果,求交流。 

  • 相关阅读:
    BIND_MISMATCH导致过多VERSION COUNT的问题
    Using dbms_shared_pool.purge to remove a single task from the library cache
    SQL Server 2012 新的分页函数 OFFSET & FETCH NEXT
    How to delete expired archive log files using rman?
    Oracle利用external table 查看trace文件
    全栈开发经验
    ASP.NET Core教程:使用Supervisor做ASP.NET Core应用程序守护进程
    ASP.NET Core教程:ASP.NET Core程序部署到Linux
    ASP.NET Core教程:ASP.NET Core 程序部署到Windows系统
    C#:窗体传值
  • 原文地址:https://www.cnblogs.com/iou123lg/p/8645765.html
Copyright © 2020-2023  润新知