TCP、UDP的首部格式及其含义

一、TCP报文段的首部格式

  • TCP是面向字节流的

  • TCP在发送数据时,从发送缓存中取出一部分或全部字节并给其加上一个TCP首部,使其成为TCP报文段然后交给网络层(TCP是运输层,其下层是网络层)

    请添加图片描述

    • 一个TCP报文段TCP首部数据载荷部分组成
    • TCP的全部功能都体现在其首部中各个字段的作用
  • TCP的首部格式如下所示:

    请添加图片描述

  1. 数据偏移(4bit):该字段表示数据载荷的首字节在整个TCP报文段中的位置,同时也代表了TCP首部的长度,因为TCP首部由固定首部20字节最大扩展首部40字节组成,所以数据偏移字段最小是为20字节,最大是60字节;又因为该字段的单位是4字节,故最小值用二进制表示是0101,最大值是1111,在《计算机网络—自顶向下方法》中该字段也叫首部长度
  2. 源端口和目的端口(各占2个字节16bit):源端口用来表示发送方的应用进程,目的端口用来标识接收方的应用进程
  3. 序号seq、确认号ack、ACK标志位
    • 序号字段:占4字节32bit,取值范围[ 0 , 2 32 − 1 ] [0,2^{32}-1][02321],序号增大到最后一个后,下一个序号从0开始;用于指出TCP报文段中数据载荷的第一个字节的序号
    • 确认号字段:占4字节32bit,取值范围[ 0 , 2 32 − 1 ] [0,2^{32}-1][02321],序号增大到最后一个后,下一个序号从0开始;用于指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对该序号之前所有数据的确认
      • 如确认号为n,表示到序号n-1的所有数据都已经正确接收,期望下次接收到序号为n的数据
    • ACK标识位:占1个bit;ACK=1确认号字段有效,ACK=0确认号字段无效;TCP建立连接后,所有传送的TCP报文都必须把ACK置1
  4. 保留字段(6bit):未使用,目前置0
  5. 窗口字段(2字节16bit):以字节为单位,表示发送该报文的那一方的接收窗口大小,用于配合拥塞窗口调整对方的发送窗户大小
  6. 校验和字段(2字节16bit):使用校验算法检查整个TCP报文段(首部和数据载荷)在传输过程中是否产生差错,注意和IP协议首部中的首部校验和字段区分,首部校验和字段仅仅校验IP首部,且在传输过程中动态变化
  7. 同步标志位SYN:在TCP建立时用于同步序号SYN=1表示这是一个TCP请求连接报文段
  8. 终止标志位FIN:用来释放TCP连接FIN=1表明这是一个TCP释放连接请求报文段
  9. 复位标志位RST:用来复位TCP连接RST=1表明TCP连接出现异常,需要释放连接,然后再重新建立连接;也可以用于拒绝一个非法报文段或拒绝打开TCP连接
  10. 推送标志位PSH:接收方的TCP收到PSH=1的报文段后会尽快向上交应用进程,而不是等到接收缓存填满后再一并上交
  11. 紧急标志位URG、紧急指针
    • URG占1bit;URG=1时紧急指针有效,URG=0时紧急指针无效
    • 紧急指针:占2字节16bit,以字节为单位,用来指明紧急数据的长度
    • 当发送方有紧急数据时,URG和紧急指针配合使用,发送方会将紧急数据插队到发送缓存最前面,并立刻包装一个TCP报文段(其中URG=1,紧急指针生效),TCP报文段数据载荷的最前面是紧急数据,紧急指针说明了紧急数据的长度,紧急数据之后是普通数据

二、UDP的数据报首部格式

请添加图片描述

  • UDP数据报同样也由首部和数据部分组成
  • 首部仅仅有4个字段8个字节:源端口目的端口长度检验和
    • 源端口:源端口用来表示发送方的应用进程
    • 目的端口:目的端口用来标识接收方的应用进程
    • 长度:以字节为单位,指明该UDP数据报的长度(首部+数据部分
    • 检验和:接收方使用校验和来检查整个UDP数据报是否出错(其实计算该校验和时还涉及到IP首部的一些字段,不过这里忽略不表)

版权声明:本文为qq_40459977原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。