TCP头部格式的了解

来源:互联网 发布:java计算时间转换 编辑:程序博客网 时间:2024/04/29 17:22


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标志位

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

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

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

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

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

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

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

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

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

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

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

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


抓包解析:

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选项,略,以后补充


0 0
原创粉丝点击