跳至主要內容

TCP数据包结构


TCP数据包结构

  1. 源端口号: 标识源主机的一个应用程序(连同源主机的IP地址)。
  2. 目的端口号: 标识目的主机的一个应用程序。TP报头中的源主机IP地址、目的主机的IP地址和源端口、目的端口确定了唯一一条TCP连接。
  3. 顺序号seq: 标识从TCP源端向TCP目的端发送的数据字节流,表示这个报文段中的第1个数据字节的顺序号。如何将字节流看做在两个应用程序间的单向流动,则TCP用顺序号对每个字节进行计数。序号是32bit的无符号数,序号达到2(32次方)-1后又从0开始。在建立一个新的连接时,SYN标志变为1,顺序号字段包含由这个主机选择的初始顺序号ISN。
  4. 确认号ack: 存储发送确认的一端所期望收到的下一个顺序号。确认序号是上次已成功收到的数据字节顺序号加1。只有ACK标志位1时确认序号字段才有效。TCP为应用层提供全双工服务,这意味着数据能在两个方向上独立进行传输。因此,连接的每一端都必须保持每个方向上的传输数据顺序号。
  5. 报头长度: 存储报头中头部数据的长度,实际上指明了数据从哪里开始。需要这个值是因为任选字段的长度是可变的,该字段占4bit,因此TCP最多有60字节的首部,但没有任选字段,正常的长度是20字节。
  6. 保留位: 数据保留位,目前必须被设置为0.
  7. 控制位: 在TCP报头中有6个标志比特,它们中的多个可被同时设置为1,如下所示:
  • URG:为1时表示紧急指针有效,为0时忽略紧急指针的值
  • ACK:为1时表示确认号有效,为0时表示在报文中不包含确认信息,忽略确认号字段
  • PSH:为1时表示是带有PUSH标志的数据 指示接收方应该尽快将这个报文段交给应用层 而不用等待缓冲区装满
  • RST:用于复位由于主机崩溃或其他原因而出现错误的连接,还可以用于拒绝非法的报文段和拒绝连接请求。在一般情况下,如果收到一个RST为1的报文,那么一定发生了某些问题
  • SYN:同步序号,为1时表示连接请求,用于建立连接和使顺序号同步
  • FIN:用于释放连接,为1时表示发送方已经没有数据要发送了,即关闭本方数据流
  1. 窗口大小: 数据字节数,表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口的大小。窗口大小时16bit的字段,因而窗口最大为65535字节。
  2. 校验和: 此校验和是对整个的TCP报文段,包括TCP头部和TCP数据,以16为字符计算所得的。这是一个强制性的字段,一定是由发送端计算和存储的,并由接收端验证。
  3. 紧急指针: 只有在URG标志置为1时紧急指针才有效,这时告诉TCP该条数据需要紧急发送。
  4. 选项: 最常见的可选字段是最长报文大小,又叫做MSS。每个连接方通常都在通信的第1个报文段中指明 这个选项,指明该TCP连接能接收的最大长度的报文段。选项长度不一定是32字节的整数倍,所以要填充位,使得报头长度称为整字节数。
  5. 数据: TCP报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有TCP首部。如果一方没有数据要发送,则也使用没有任何数据的首部确认收到的数据。在处理超时的许多情况下也会发送不带任何数据的报文段。
上次编辑于:
贡献者: Neil