计算机网络 持续更新中···
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 | |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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
源端口
和目的端口
:各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
序号
:占4字节。TCP 连接中传送的数据流中的每一个字节
都编上一个序号
。序号字段的值则指的是本报文段
所发送的数据的第一个字节的序号
。
确认号
:占 4 字节,是期望
收到对方
的下一个报文段的数据的第一个字节的序号
。
数据偏移(即首部长度)
:占 4 位,表示TCP 报文段的数据起始处
距离 TCP 报文段的起始处
有多远。“数据偏移”的单位是 32 位字(以 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 字节的伪首部。
紧急指针
:占 2字节,指出在本报文段中紧急数据共有多少个字节
(紧急数据
放在本报文段数据的最前面
)。
选项
: 长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS
。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
MSS (Maximum Segment Size):TCP 报文段中的数据字段的最大长度
。
T
C
P
报
文
段
=
T
C
P
首
部
+
数
据
字
段
TCP 报文段 = TCP 首部 + 数据字段
TCP报文段=TCP首部+数据字段
填充
: 使首部长度是 4 字节
的整数倍。