TCP 报文段的首部格式

TCP 报文段的首部格式

  • TCP 虽然是面向字节流的,但 TCP 传送的数据单元却是报文段。
  • 一个 TCP 报文段分为首部和数据两部分,而 TCP 的全部功能都体现在它首部中各字段的作用。
  • TCP 报文段首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选项 (n 是整数)。因此 TCP 首部的最小长度是 20 字节。

在这里插入图片描述

固定字段

源端口和目的端口字段
各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
序号字段
占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
确认号字段
占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。 若确认号=N,则表明:到序号N-1为止的所有数据都己正确收到
数据偏移
占 4 位,即首部长度。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。 最大为60字节(15*4)
保留字段
占 6 位,保留为今后使用,但目前应置为 0。
紧急 URG
当 URG=1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
确认 ACK
只有当 ACK =1 时确认号字段才有效。当 ACK =0 时,确认号无效。
推送 PSH (PuSH)
接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
复位 RST (ReSeT)
当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
同步 SYN
同步 SYN = 1 表示这是一个连接请求或连接接受报文。
终止 FIN (FINish)
用来释放一个连接。FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
窗口字段
占 2 字节,用来让对方设置发送窗口的依据,单位为字节。
检验和
占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
紧急指针字段
占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。

选项字段

最大报文段长度 MSS
MSS (Maximum Segment Size)是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。所以,MSS是“TCP 报文段长度减去 TCP 首部长度”。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
窗口扩大选项
占 3 字节,其中有一个字节表示移位值 S。新的窗口值等于 TCP 首部中的窗口位数增大到 (16 + S),相当于把窗口值向左移动 S 位后获得实际的窗口大小。
时间戳选项
占 10 字节,其中最主要的字段时间戳值字段(4 字节)和时间戳回送回答字段(4 字节)。
选择确认选项
SACK,后续再出一个章节来写

填充字段
这是为了使整个首部长度是 4 字节的整数倍。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP报文首部格式如下: ``` 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 | Reserved|C|E|U|A|P|R|S|F| | | Offset| |W|C|R|C|S|S|Y|I| Window | | | |R|E|G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ``` 其各字的含义如下: - 源端口(Source Port):发送端口号,16位,标识发送方的应用程序或进程。 - 目的端口(Destination Port):目标端口号,16位,标识接收方的应用程序或进程。 - 序列号(Sequence Number):32位,用于对发送的数据进行排序和重组。 - 确认号(Acknowledgment Number):32位,用于确认接收到的数据。 - 数据偏移(Data Offset):4位,表示TCP首部的长度,以32位字为单位。 - 保留字(Reserved):6位,保留供将来使用。 - 控制位(Flags):6位,包括6个标志位,分别为CWR、ECE、URG、ACK、PSH和RST,用于控制TCP连接的建立、维护和关闭。 - 窗口(Window):16位,表示发送端还能接收的数据量。 - 校验和(Checksum):16位,用于检验TCP首部和数据的完整性。 - 紧急指针(Urgent Pointer):16位,仅在URG标志置位时有效,表示紧急数据的偏移量。 - 选项(Options):可选字,用于扩展TCP功能。 - 填充(Padding):用于使TCP首部的长度为32位的整数倍。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值