TCP报文段的首部格式

TCP报文段的首部格式

  1. 源端口和目的端口
    各占2个字节,分别写入源端口号和目的端口号。

  2. 序号
    占4字节。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则是指的是本报文段所发送的数据的第一个字节的序号。

  3. 确认号
    占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。

  4. 数据偏移 占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。

  5. 保留
    占6位,保留为今后使用,但目前应置为0。

  6. 紧急URG
    当URG=1时,表明紧急指针字段有效。他告诉系统此报文段中有紧急数据,应当尽快传送(相当于高优先级的数据),而不是按原来的排队顺序来传送。

  7. 确认ACK(ACKnowlegment)
    仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定在连接建立后所有传送的报文段都必须把ACK置1。

  8. 推送PSH(PuSH)
    当两个应用进程进行交互的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP就可以使用推送操作。这时发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段就尽快地交付给接收应用的进程而不再等到整个缓存都填满了后再向上交付。

  9. 复位RST(ReSeT)
    当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可称为重建位或重置位。

  10. 同步SYN(SYNchronization)
    在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意连接,则应在响应的报文段中使SYN=1和ACK=1。因此SYN置为1就表示这是一个连接请求或连接接受报文。

  11. 终止FIN
    用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。

  12. 窗口
    占2个字节。指的是发送本报文段的一方的接收窗口。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。窗口值作为接收方让发送方设置其发送窗口的依据。(例如,设确认号是701,窗口字段是1000。这就表明从701号算起,发送此报文段的一方还有接收1000个字节数据的接收缓存空间)。

  13. 检验和
    占2字节,检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

  14. 紧急指针
    占2字节。紧急指针仅在URG=1时才有意义,他指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。

  15. 选项
    长度可变,最长可达40字节。当没有使用选项时,TCP的首部长度是20字节。