首页 理论教育TCP报文段格式及其应用技术

TCP报文段格式及其应用技术

【摘要】:TCP报文段的格式如图8-17所示。图8-17 TCP报文段的格式1.TCP源端口号TCP源端口号长度为16位,用于标识发送方通信进程的端口。目的端在收到TCP报文段后,可以用源端口号和源IP地址标识报文的返回地址。通过TCP报文段首部的窗口刻度选项,它的值可以按比例变化,以提供更大的窗口。校验和覆盖了整个的TCP报文段的首部和数据区。图8-18 TCP选项格式12.填充填充字段的长度不定,用于填充以保证TCP头部的长度为32位的整数倍,值全为0。

TCP报文段(常称为段)与UDP数据报一样,也是封装在IP中进行传输的,只是IP报文的数据区为TCP报文段。TCP报文段的格式如图8-17所示。

978-7-111-35607-3-Chapter08-23.jpg

图8-17 TCP报文段的格式

1.TCP源端口号

TCP源端口号长度为16位,用于标识发送方通信进程的端口。目的端在收到TCP报文段后,可以用源端口号和源IP地址标识报文的返回地址。

2.TCP目的端口号

TCP目的端口号长度为16位,用于标识接收方通信进程的端口。源端口号与IP头部中的源端IP地址,目的端口号与目的端IP地址,这4个数就可以唯一确定从源端到目的端的一对TCP连接。

3.序列号

序列号长度为32位,用于标识TCP发送端向TCP接收端发送数据字节流的序号。序列号的实际值等于该主机选择的本次连接的初始序号(Initial Sequence Number,ISN)加上该报文段中第一个字节在整个数据流中的序号。由于TCP为应用层提供的是全双工通信服务,这意味着数据能在两个方向上独立地进行传输,因此,连接的每一端必须保持每个方向上传输数据的序列号到达232-1后又从0开始。序列号保证了数据流发送的顺序性,是TCP提供的可靠性保证措施之一。

4.确认号

确认号长度为32位。因为接收端收到的每个字节都被计数,所以确认号可用来标识接收端希望收到的下一个TCP报文段第一个字节的序号。确认号包含发送确认的一端希望收到的下一个字节的序列号,因此,确认号应当是上次已成功收到数据字节的序列号加1。确认号字段只有ACK标志(下面介绍)为1时才有效。

5.首部长度

用4位二进制数表示TCP首部的长短,它以32位二进制数为一个计数单位。TCP首部长度一般为20个字节,因此通常它的值为5。但当首部包含选项时,该长度是可变的。首部长度主要用来标识TCP数据区的开始位置,因此又称为数据偏移。

6.保留

保留字段长度为6位。该域必须置0,准备为将来定义TCP新功能时使用。

7.标志

标志域长度为6位,每一位标志可以打开或关闭一个控制功能,这些控制功能与连接的管理和数据传输控制有关,其内容如下:

·URG:紧急指针标志,置1时紧急指针有效。(www.chuimin.cn)

·ACK:确认号标志,置1时确认号有效。如果ACK为0,那么TCP首部中包含的确认号字段应被忽略。

·PSH:Push操作标志,置1时表示要对数据进行Push操作。Push操作的功能是:在一般情况下,TCP要等待到缓冲区满时才把数据发送出去,而当TCP软件收到一个Push操作时,则表明该数据要立即进行传输,因此TCP协议层首先把TCP首部中的标志域PSH置1,并不等缓冲区满就把数据立即发送出去;同样,接收端在收到PSH标志为1的数据时,也立即将收到的数据传输给应用程序。

·RST:连接复位标志,表示由于主机崩溃或其他原因而出现错误时的连接。可以用它来表示非法的数据段或拒绝连接请求。例如,当源端请求建立连接的目的端口上没有服务进程时,目的端产生一个RST置位的报文;或当连接的一端非正常终止时,它也要产生一个RST置位的报文。一般情况下,产生并发送一个RST置位的TCP报文段的一端总是发生了某种错误或操作无法正常进行下去。

·SYN:同步序列号标志,用来发起一个连接的建立。也就是说,只有在连接建立的过程中SYN才被置1。

·FIN:连接终止标志。当一端发送FIN标志置1的报文时,告诉另一端已无数据可发送,即已完成了数据发送任务,但它还可以继续接收数据。

8.窗口大小

窗口大小字段长度为16位,它是接收端的流量控制措施,用来告诉另一端它的数据接收能力。连接的每一端把可以接收的最大数据长度(其本质为接收端TCP可用的缓冲区大小)通过TCP发送报文段中的窗口字段通知对方,对方发送数据的总长度不能超过窗口大小。窗口的大小用字节数表示,它起始于确认号字段指明的值,窗口最大长度为65535个字节。通过TCP报文段首部的窗口刻度选项,它的值可以按比例变化,以提供更大的窗口。

9.校验和

校验和字段长度为16位,用于进行差错校验。校验和覆盖了整个的TCP报文段的首部和数据区。

10.紧急指针

紧急指针字段长度为16位,只有当URG标志置1时紧急指针才有效,它的值指向紧急数据最后一个字节的位置(如果把它的值与TCP首部中的序列号相加,则表示紧急数据最后一个字节的序号,在有些实现中指向最后一个字节的下一个字节)。如果URG标志没有被设置,紧急指针域用0填充。

11.选项

选项的长度不固定,通过选项使TCP可以提供一些额外的功能。每个选项由选项类型(占1个字节)、该选项的总长度(占1个字节)和选项值组成,如图8-18所示。

978-7-111-35607-3-Chapter08-24.jpg

图8-18 TCP选项格式

12.填充

填充字段的长度不定,用于填充以保证TCP头部的长度为32位的整数倍,值全为0。