最新动态

TCP报文格式

时间:2019-11-30 10:37 作者: 世讯电科融合通信系统
        一个完整的TCP 报文格式如图 所示。
       TCP 报文段首部的前 20 个字节是固定的,后面有 4N ( N 是整数)个字节是根据需要而增加的选项。因此 TCP 首部的最小长度是 20 个字节。首部固定部分各产 TCP报文段的数据部分
字段的含义如下。
图    TCP 报文格式
       ( 1) 源和目的端口各占 2 个字节,用 千多路复用/多路分用来自或送至应用层的数据。
       ( 2 )  序号占 4 个字节,其范围是[ 0 , 232   -   1 ]'   即共计可提供 232   个序号。TCP是面向字节流的 ,在一个 TCP 连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的第 一个字节的序号。例如,一报文段的序号字段值是 301, 而携带的数据共有100 个字节。这就表明:本报文段的数据的第一个字节的序号是301, 最后一个字节的序号是 400。显然,下一个报文段的数 据序号应当从401 开始,即下一个报文段的序号字段值应为401。当序号增加到 232 1后,下一个序号就又回到0。由于序号字段的长度是 32 , 因此可对4GB 的数据进行编号。在一般情况下可保证当序号重夏使用时,旧 序号的数据早已到达目标主机了。
       ( 3 ) 确认号占 4 个节,是期望收到对方下一个报文段的第一个数据字节的序号。例如,主机 B 正确收到了A 发送过来的一个报文段,其 序号字段值是 401, 而数据长度是100 字节,这表明 B 正确收到了A 发送的到序号 500 为止的所有数据。因此,B 期望收到A 的下一个数据序号是501 , 于是B 在发送给 A 的确认报文段中把确认号置为 501。该机制可以总结为 :若 确认号= N, 则 表明” 到序号 N- 1 为止的所有数据都已正确收到 ,期望接收的下一个报文的序号是 N" 。
        ( 4 ) 数据偏移占 4 位,它指出TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,以 32 位字( 4 字节)为计算单位。这个字段实际上是指出TCP 报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。由于 4 位二进制数能够表示的最大十进制数字是 15 , 因此数据偏移的最大值是 60 字节,即选项长度不能超过40 字节。
        ( 5 ) 保留字段占6 位,保留为今后使用,目前 置为 0。
以下连续6 个控制位说明本报文段的性质 ,其意 义如( 7 ) - ( 12 ) 所述。
       ( 6 ) 紧急( UR Gent, URG) : 当 URG 置 1 时,发送应用进程告诉 TCP 此报文段中有紧急数据要传送。发送方 TCP 会把紧急报文插入到本报文段数 据的最前面, 而在紧急数据后面的数据仍是普通数据。这时要与首部中紧急指针 ( Urgent Pointer ) 字段配合使用。
       ( 7 ) 确认( ACKnowlegment , ACK) :仅当ACK= ! 时确认号字段才有效。当 ACK = O时确 认号字段无效。TCP 规定,在连接建 立后所有传送的报文段都必须把 ACK
置 1。
       ( 8 ) 推送( PuSH ,PSH) : TCP 协议具有缓存机制,一 般情况下,当接收缓存 中的数据达到一定数量时才整体向上 层交付。当两个应用进程进行交互 式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下 ,T CP 就可以使用推送操作。这时,发送方 TCP 把 PSH 置 I' 并立即创建一个报文段发送出去。接收方 TCP 收到 PSH = I 的报文段 ,就尽快地交付给接收应用进程 ,而无需在缓存中等待。
       ( 9 ) 复位( ReSeT , RST ) 当 RST = I 时,表明TCP 连接中出现严重差错,必 须强制释放连接,然后再重建迕接。RST 置 1 还可用来 拒绝一个非法的报文段或 拒绝打开一个连接。
      (10) 同步( SYNchronization , SYN) : 在连接建立时用来同步序号。当 SYN = 1 而 ACK = O 时表 明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使 SYN = l 和 ACK = l 。
       (I1 ) 终止( FINal, FIN) : 用来释放一个连接。当 FIN = I 时,表明此报文段的发送方的数据已发送完毕,并 要求释放运输连接。关于连接的建立和释放,将在稍后进行详细讨论。
      (12)  窗口占 2 个字节,其取值范围为[ 0 , 21 6  - 1 ] 。 窗口指的是发送本 报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部   中的确认号算起,本方目前允许对方发送的数   据量。使用窗口的目的是防止由于发送方发送过快,而导致接收方的缓冲区溢出 ,即提供了流量控制功能 。例如,设确认号是 501, 窗口字段是700。这就表明,从 501 号算起,发送此报文段的 一方还有接收 1000 个字节数据的缓存空间,即发送方下一次发送数据的大小不允许超过1000   字节。在双方通信过程中,窗口值的大小一般会根据当前缓冲区的状况实时调整。
       ( 13) 因特网检查和占2 个字节。校验和字段校 验的范围包括首部和数据这两部分。在计算校验和时,要在TCP 报文段的前面加上 12 个字节的伪首部。
       (14) 紧急指针占 2 个字节。紧急指针仅在 URG = l 时才有意义,它指出本报文段中的紧急数据的字节数。紧急数据结束后就是 普通数据,当所有紧急数 据都处理完时,TCP 就告诉应用程序恢复到正常操作。需要指出的是  ,即使窗口为零时也可发送紧急数据 。
        (15) 选项,长度可变,最大40 个字节。

版权所有:统一通信系统集成:http://www.alloll.com 转载请注明出处