• Wireshark论证TCP3次握手的过程


    wireshark过滤条件:ip.addr == 120.79.36.180
    千万别写成 ip.dst == 120.79.36.180 ,这样子就看不到服务器给我们返回的包了
    此时,在浏览器输入120.79.36.180:8080,敲下回车,然后查看wireshark的捉包;
    在计算机网络课上,我们知道有下面的理论;现在我就从wireshark抓包中论证这个理论。

    image_1cduvgvfd1fq4sd1thq1t5pht99.png-31.9kB

    tcp 的头部

    英文版
    image_1cduvirj5ib613ct8gl12fret816.png-144.1kB
    中文版
    image_1cduvma3j1pjr6261kbte3311hb1j.png-150.9kB

    上图中有几个字段需要重点介绍下:
    (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
    (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
    (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
    (A)URG:紧急指针(urgent pointer)有效。
    (B)ACK:确认序号有效。
    (C)PSH:接收方应该尽快将这个报文交给应用层。
    (D)RST:重置连接。
    (E)SYN:发起一个新连接。
    (F)FIN:释放一个连接。
    需要注意的是:
    (A)不要将确认序号Ack与标志位中的ACK搞混了。
    (B)确认方Ack=发起方Req+1,两端配对。

    接下来我们来看wireshark捉到的包

    第一次握手

    书中写第一次握手的包是 syn = 1 , seq = x ,这里的x是任意的,

    image_1cdv02vbh10r01pvu13dm1q061gvu20.png-269.4kB

    我们从第一个捕捉到的包开始看,这个从source、destination中我们可以知道,这是我本地发送给120.79.36.180的一个tcp请求;再看下面的信息;
    可以看到 Sequence number :0 还有 Flags.Syn = 1 ,这里跟书中的理论描述是一致的,这也印证了这是tcp第一次握手的包。

    第二次握手

    书中写第二次握手的包是 Syn = 1 , Ack = x + 1 , Seq = y ;
    这里的Ack是确认序号,不是标记为的Ack,标记位的Ack的
    用 1 表示第一次握手, 2表示第二次握手,3表示第三次握手
    这里的 x 是第一次握手中的x,也就是第一次握手的Seq,说明第二次握手的Ack等于第一次握手的Sqe + 1,我们得到公式 2.Ack = 1.Seq + 1
    而第二次握手的Seq变成了y,说明第二次握手的Seq是任意的。
    image_1cdv0lock1t2i1cu1hh5sqpfvn2d.png-263.9kB
    从上图中我们看到 2.Seq = 1 , 2.Ack = 1,印证了理论2.Ack = 1.Seq + 1

    第三次握手

    书中写第三次握手的包是Ack = y + 1 ,Seq = z ;
    这说明第三次握手的包的Seq是任意的,3.Ack = 2.Seq + 1

    我们再从下面的包中找到第一个从本地发给服务器的包,协议是TCP
    image_1cdv21mi01sst1s7q87ks212m02q.png-284.4kB
    从上图中,我们可以看到 3.Ack = 1, 而2.Seq = 0 也就是 3.Ack = 2.Seq + 1;从而印证了书中的理论。

    参考:TCP三次握手

  • 相关阅读:
    php——验证身份证是否合法的函数
    php——离线执行任务
    代码整洁之道
    js自适应屏幕高度
    SSH Junit4测试
    Java Persistence with Hibernate
    SSH搭建
    js整理
    Hibernate 应用
    对学习的一点感想
  • 原文地址:https://www.cnblogs.com/chenjingquan/p/9065186.html
Copyright © 2020-2023  润新知