TCP -- 协议头

TCP 首部

TCP header定义如下所示:

    0               1               2               3   
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |       Destination Port        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Sequence Number                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Acknowledgment Number                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Data |           |U|A|P|R|S|F|                               |
   | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
   |       |           |G|K|H|T|N|N|                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |         Urgent Pointer        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             data                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Source Port: 源端口号

Destination Port: 目地端口号

Sequence Number: 序列号,表示数据段中第一个字节数据的编号。如果SYN标志位设置,则表示初始序列号(Initial Sequence number,ISN),此数据段中的第一个字节编号为ISN+1.

Acknowledgment Number: 确认序列号,只有当ACK标志位设置时才有意义,表示此数据段的发送方期望收到的数据的编号。当一个连接处于established状态时,ACK标志位总是设置为1.

Data Offset:数据偏移值,指示数据相对于协议头的偏移值,由于数据总是紧跟在协议头的后面,也表示协议头(包含头选项)的长度,单位是4字节。

Reserved:保留字段。

URG/ACK/PSH/RST/SYN/FIN:控制位,其定义如下:

URG:紧急数据指针有效位
ACK:确认序列号字段有效位
PSH:表明接收方需将数据递送到应用程序。
RST:重置连接。
SYN:表明当前为SYN数据段。
FIN:表示没有更多数据需要发送

Window:接收窗口,表明此数据段的发送方期望收到的数据量,单位为字节。

Checksum: 校验和, 其计算需要包含伪头部、TCP头部、tcp负载数据,如果负载数据的长度是奇数(字节),需要填充0(只是计算校验和时用到,并不会发送), 并且计算时校验和字段本身置0。伪头部的定义如下:

+--------+--------+--------+--------+
|           Source Address          |
+--------+--------+--------+--------+
|         Destination Address       |
+--------+--------+--------+--------+
|  zero  |  PTCL  |    TCP Length   |
+--------+--------+--------+--------+

Source Address/Destination Address/PTCL:IP层的源地址/目地地址/协议号。
TCP Length: TCP协议头及负载数据的长度(包含尾部的填充字节)。

Urgent Pointer:紧急数据指针,是一个相对于当前数据段的序列号的偏移值,指向紧急数据之后的数据,表示这之前的数据为紧急数据。当URG置位是有效。

Options: TCP选项字段。

TCP选项

TCP选项根椐长度的不同可分为两种:单字节选项 和 多字节选项。

其中多字节选项的格式如下:

+--------+--------+---------+--------+
|  kind  | length |   	value  		|
+--------+--------+---------+--------+

kind占用1字节,指示选项类型。
length占用1字节,指示选项长度,包含kind与length。
value为选项内容,长度为lenght - 2.

目前TCP支持的选项如下:

  Kind     Length    Meaning
  ----     ------    -------
   0         -       End of option list.
   1         -       No-Operation.
   2         4       Maximum Segment Size.
   3         3       Window Scaling Factor
   4         2       Selective Acknowledgment Permitted 
   5      variable	 Selective Acknowledgement Block
   8         10      Timestamps 
   19        18		 MD5 digest
   28        4       User Timeout
   29	  variable   Authentication
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值