• TCP头部格式的了解


    参考网址 :https://blog.csdn.net/zhouzhenhe2008/article/details/71075969

    tcp头部格式如下图所示:

    1.源端口号,16位,发送方的端口号。

    2.目标端口号,16位,发送方的目标端口号。

    3. 32为序列号,sequence number,保证网络传输数据的顺序性。

    4. 32位确认号,acknowledgment number,用来确认确实有收到相关封包,内容表示期望收到下一个报文的序列号,用来解决丢包的问题。

    5. 头部大小,4位,偏移量:最大值为0x0F,即15,

    单位为32位(bit),单位也就是4个字节,给出头部占32bit的数目。没有任何选项字段的TCP头部长度为20字节;最多可以有60(15*4)字节的TCP头部。

    6. Reserved 4位 ,预留字段,都为0

    7. TCP标志位

    (1)CWR:Congestion window reduced,拥塞窗口减少。拥塞窗口减少标志被发送主机设置,用来表明它接收到了设置ECE标志的TCP包。拥塞窗口是被TCP维护的一个内部变量,用来管理发送窗口大小。

    (2)ECN-Echo:显式拥塞提醒回应。当一个IP包的ECN域被路由器设置为11时,接收端而非发送端被通知路径上发生了拥塞。ECN使用TCP头部来告知发送端网络正在经历拥塞,并且告知接收端发送段已经受到了接收端发来的拥塞通告,已经降低了发送速率。

    (3)URG:为1时,紧急指针(urgent pointer)有效,配合紧急指针使用

    (4)ACK:为1时,确认号有效

    (5)PSH: 为1时,接收方应该尽快将这个报文段交给应用层

    (6)RST:为1时,释放连接,重连。

    (7)SYN:为1时,发起一个连接。

    (8)FIN:为1时,关闭一个连接。

    8. 16位窗口大小:占16bit。此字段用来进行流量控制,主要用于解决流控拥塞的问题。单位为字节数,这个值是本机期望一次接收的字节数。

    9. 16位校验值: 占16bit。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。

    10. 16位紧急指针:占16bit。它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。

    11. 32位Tcp选项:一般包含在三次握手中。


    抓包解析:

    1.tcp头部标志位:

    比如客户端第一次syn连接的时候,也就是第一次握手的时候。Syn标志被置为1

    第二次握手的时候,服务端发的报文设置了ACK,SYN标志位

     

    3.关于tcp选项

    tcp选项一般出现在三次握手的报文中。


    第一次握手

     

    第二次握手


    在建立连接的时候,通信双方要互相确认对方的最大报文长度(MSS),以便通信,一般这个SYN长度是MTU减去固定IP首部和TCP首部长度,

    对于以太网,一般可以达到1460字节,当然如果对于非本地的IP,这个MSS可能就只有536字节,而且如果中间的传输网络的MSS更小的话,这个

    值会更加的小。(在tcp报文中选项看出)


    (1)TCP首部选项字段多达40B,记下一些常用的东西:


    (2)选项结束字段(EOP,0x00),占1B,一个报文段仅用一次。放在末尾用于填充,用途是说明:首部已经没有更多的消息,应用数据在下一个32位字开始处


    (3)无操作字段(NOP, 0x01),占1B,也用于填充,放在选项的开头


    (4)MSS(最大报文段长度),格式如下:种类(1B,值为2),长度(1B,值为4),数值(2B)


    用于在连接开始时确定MSS的大小,如果没有确定,就用默认的(一般实现是536B)


    (5)窗口扩大因子,格式如下:种类(1B,值为3),长度(1B,值为3),数值(1B)


    新窗口值 = 首部窗口值 * 2的(扩大因子)次方


    当通信双方认为首部的窗口值还不够大的时候,在连接开始时用这个来定义更大的窗口。仅在连接开始时有效。一经定义,通信过程中无法更改。


    (6)时间截(应用测试RTT和防止序号绕回),略,以后补充


    (7)允许SACK和SACK选项,略,以后补充

  • 相关阅读:
    php public,static,private,protected,final,const,abstract
    Thinkphp5 iis环境下安装报错400 500
    php 获取某文件内容
    stdClass object 数据获取方法
    php把数组、字符串 生成文件
    Thinkphp5 runtime路径设置data
    php脚本超时 结束执行代码
    bootstrapValidator 表单验证
    thinkphp 外部js语言包
    新浪微博UWP版-实现‘分享功能’的艰难路
  • 原文地址:https://www.cnblogs.com/bruce1992/p/15211074.html
Copyright © 2020-2023  润新知