文档介绍:Ip包头
TCP 报文段的格式
TCP 报文段的格式如图8-12 所示。可以看出,一个 TCP 报文分为首部和数据两部分。
TCP 报文段首部的前 20 个字节是固定的,后面有 4N 字节是可有可无的选项(N 为整数)。因此 TCP 首部的最小长度是 20 字节。
首部固定部分各字段的意义如下:
·源端口和目的端口各占 2 个字节。前面已讲过,端口是运输层与高层的服务接口。16 bit 的端口号加上 32 bit 的 IP 地址,构成了相当于运输层服务访问点 TSAP 的地址(总共是 48 bit)。这些端口可用来将若干高层协议向下复用。
·序号占 4 字节,是本报文段所发送的数据部分第一个字节的序号。在 TCP 传送的数据流中,每一个字节都有一个序号。例如,在一个报文段中,序号为 300,而报文中的数据共 100 字节。那么在下一个报文段中,其序号就是 400。因此 TCP 是面向数据流的。
·确认序号占 4 字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号。
由于序号字段有 32 bit长,可对 4 GB(即 4 千兆字节)的数据进行编号。这样就可保证当序号重复使用时,旧序号的数据早已在网络中消失了。
·数据偏移占 4 bit,它指出数据开始的地方离 TCP 报文段的起始处有多远。这实际上就是 TCP 报文段首部的长度。由于首部长度不固定(因首部中的选项字段长度是不确定的),因此数据偏移字段是必要的。但应注意,“数据偏移”的单位是 32 bit 字,而不是字节或比特。数据偏移字段后面有 6 bit 是保留字段,供今后使用,但目前应置为 0。
下面 6 个比特是说明本报文段性质的控制字段(或称为标志)。各比特的意义如下。
·紧急比特URG(URGent) 当 URG=l 时,表明此报文段应尽快传送(相当于加速数据),而不要按原来的排队顺序来传送。例如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现有些问题,要取消该程序的运行。因此从键盘发出中断信号。这就属于紧急数据。此时要与第 5 个 32 bit 字中的后一半“紧急指针”(Urgent Pointer)字段配合使用。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。紧急指针使接收方可以知道紧急数据共有多长。值得注意的是,即使当窗口大小为零时也可发送紧急数据。
·确认比特ACK 只有当 ACK=1 时确认序号字段才有意义。当 ACK=0 时,确认序号没有意义。
·急迫比特PSH(PuSH) 当 PSH=l 时,表明请求远地 TCP 将本报文段立即传送给其应用层,而不要等到整个缓冲区都填满了后再向上交付。
·重建比特RST(ReSeT) 当 RST=1 时,表明出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重建运输连接。重建比特还用来拒绝一个非法的报文段或拒绝打开一个连接。
·同步比特SYN 在连接建立时使用。当 SYN=1 而 ACK=0 时,表明这是一个连接请求报文段。对方若同意建立连接,则应在发回的报文段中使 SYN=1 和 ACK=l。因此,同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文,而 ACK 比特的值用来区分是哪一种报文。