-
TCP首部占20个字节。
-
源端口和目的端口:各占2个字节,分别用于表示客户机和服务机的某一进程端口。
-
序号:占4个字节。序号范围是0~2^32 - 1。TCP是面向字节流的,因此每一个字节都会按顺序进行编号。首部中的序号字段值指的是报文本段所发送的数据的第一个字节的序号。
-
确认号:占4字节,是是期望收到对方下一个报文段的第一个数据字节的序号。
若确认号 = N,则表明:到序号N - 1 为止的所有数据都以正确收到。
-
数据偏移:占4位,它指出TCP报文的数据起始处距离TCP报文段的起始处有多远。
-
保留:占6位,保留以后使用,目前全部置为0.
-
紧急URGent:
当URG = 1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应当尽快传送,而不要按原来的排队顺序来传送。
当把URG置为1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时要与首部中紧急指针(Urgent Pointer)字段配合使用。
-
确认ACKnowledge:仅当ACK = 1时,确认号字段才有效。当ACK = 0时,确认号无效。TCP规定,在连接建立以后所有传输的的报文段都必须将ACK置为1.
-
推送PuSH:
当两个应用进程进行交互式通信时,有事在一端的应用进程希望在键入一个命令以后立即能够收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作。
这时,发送方TCP把PSH置为1,并立即创建一个报文段发送出去。接收方TCP接收到PSH = 1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
-
复位ReSeT:当RST = 1时,表明TCP连接中出现严重错误,必须释放连接,然后在重新建立传输连接。RST置为1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可以称为重建位或重置位。
-
同步SYNchronization:在建立连接时用来同步序号。当SYN = 1而ACK = 0时,表明这是一个请求连接报文段。若对方同意建立连接,则应在响应的报文段中使用SYN = 1和ACK = 1。因此,SYN置为1就表示这是一个建立连接或连接接受报文。
-
终止FINish:用来释放一个连接。当FIN = 1时,表示此报文段的发送方的数据已经发送完毕,并要求释放传输连接。
-
窗口:占2字节,窗口的取值范围是0~2^16 - 1之间的整数。窗口是指发送本报文段的一方的接收窗口,而不是自己的发送窗口。窗口值告诉对方:从本报文段的首部中的确认号算起,接收方目前与许对方发送的数据量。存在该限制的原因是:接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送发送方设置器发送窗口的依据。窗口字段明确指出了现在允许对方发送的数据量。窗口值是经常在动态变化着的。
-
检验和:占2字节,检验和字段检验的范围包括首部和数据这两个部分。
-
紧急指针:占2字节,紧急指针在URG = 1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据后紧接着的是普通数据),因此,紧急指针指出了紧急数据末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。就算窗口为零时也可以发送紧急数据。
-
选项:长度可变,最长可达40字节,当没有使用选项时,TCP首部长度是20字节。