TCP 报文段的首部格式
- 面向字节流、但传送的数据单元却是报文段
- 面向字节流是针对应用层而言
- 报文段则是网络层
- 一个TCP报文段分为:首部和数据两部分,TCP的全部功能都体现在首部中各个字段的作用
- TCP报文段首部的前20个字节是固定的,后面可以增加4n(n为整数)
(1)源端口和目的端口
- 各占2字节
- 分别写入源端口号、目的端口号
(2)序号
- 占4字节,序号范围[0, 2 32 - 1]
- 使用mod 2 32 运算
- TCP连接中传送的字节流中每一个字节都按顺序编号
(3)确认号
- 占4字节
- 期望收到对方下一个报文段的第一个数据字节的序号
- 若确认号 = N,则表明:到序号 N - 1 为止的所有数据都已正确收到
(4)数据偏移
- 占4位
- 指出TCP报文段的数据起始处距离TCP报文段的起始处有多远
- 实际上:指出TCP报文段的首部长度
- 单位:32字(4字节长的字为计算单位)
- 最大值:60字节,也是TCP首部的最大长度
(5)保留
- 占6位
- 目前置为0
(6)紧急URG
- 当URG = 1,表明紧急指针字段有效
- 告诉系统此报文段中有紧急数据,应尽快传送,而不按原来的排队顺序来传送
- 发送方TCP把紧急数据插入本报文段数据的最前面,而在其后的仍是普通数据
(7)确认ACK
- 仅当ACK = 1有效
- ACK = 0 无效
- TCP规定:在建立连接之后所有的传送的报文段都必须把 ACK 置1
(8)推送PSH
希望在键入一个命令立即就能收到对方的响应,发送方 TCP 将 PSH 置1,并立即创建一个报文段发送出去,接收方接收到这种设置的报文段,尽快地交付接收应用进程,不等到整个缓存填满
(9)复位 RST
- 当 RST = 1时,表明 TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接
- RST置1,还用来拒绝一个非法的报文段或拒绝打开一个连接
(10)同步 SYN
- 在连接建立时用来同步序号
- 当SYN = 1,而 ACK = 0,表明是一个连接请求报文段
- 同意建立连接,对方就在响应的报文段中:SYN = 1 和 ACK =1
(11)终止FIN
- 用来释放一个连接
- FIN = 1,表明报文段的发送方的数据已发送完毕,并要求释放运输链接
(12)窗口
- 占2字节
- 值的范围 :[ 0, 216 - 1 ]之间整数
- 发送本报文段的一方的接收窗口
- 告诉对方:从本报文段首部中的确认好算起,接收方(设置方)目前允许对方发送的数据量(以字节为单位)
- 作为接收方让发送方设置其发送窗口的依据
(13)检验和
- 占2字节
- 检验范围:首部和数据
- 要在TCP报文段的前面加上12字节的伪首部再计算检验和
- TCP 协议号为6
(14)紧急指针
- 占2字节
- 仅在 URG = 1 时有意义
- 指出本报文段中的紧急数据的字节数
- 指出紧急数据的末尾在报文段中的位置
- 即使窗口为零,也可以发送紧急数据
(15)选项
- 长度可变
- 最长:40字节
- 当没有使用时,TCP首部长度固定:20字节
- 可选项
- 最大报文段长度(TCP报文段长度减去TCP首部长度)
- 窗口扩大选项(占3字节)
- 时间戳选项(占10字节)主要的:作用(计算往返时间、防止序号绕回)
- 时间戳值字段(4字节)
- 时间戳回送回答字段(4字节)