TCP报文格式

image

TCP头部

  • 固定首部部分
    • 一共20个字节,在图中分为五行,每行四个字节,也就是32位。
  • 长度不定的可选字段
    • 可选字段的长度不定,意味着TCP头部的长度是可变的。

字段详解

第一行:源端口和目的端口

  • TCP源端口(Source Port):源计算机上的应用程序的端口号,占16位(bit)
  • TCP目的端口(Destination Port):目标计算机的应用程序端口号,占16位(bit)

第二行:序列号

  • TCP序列号(Sequence Number):占32位(bit),表示本报文段所发送数据的第一个字节的编号。在TCP连接中,所传送的字节流的每一个字节都会按顺序编号。
    • 比如分组的第一个数据包由文件的14个字节数据组成,那么该数据包所添加的序号就是1。
    • 同理,第二个数据包由文件的59个字节数据组成,那么该数据包所添加的序号就是5。

第三行:确认号

  • TCP确认号:占32位(bit),表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。
    • 比如接收端收到由文件14个字节数据+TCP首部组成的数据包后,删除首部提取14个字节数据,返回的确认号为5,即告诉发送端下一次应该发送文件的第5个字节及其之后字节组成的数据包过来。

第四行:(顺序如图从左到右)

  • 数据偏移(即首部长度,Header Length):
    • 占32位(bit),它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,也就是TCP首部的长度。
    • “数据偏移”的单位是 32 位(以 4 字节为计算单位),最大1111表示15×4=60个字节,即表示TCP首部最大长度为60个字节,因此TCP首部的“可选字段”部分最多40个字节。
  • 保留字段(Reserved):
    • 占 4 位。为 TCP 将来的发展预留空间,目前必须全部为 0。
  • 标志位字段:
    • CWR(Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。
    • ECE==ECN(ECN Echo):用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN (显式拥塞通告)功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
    • URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
    • ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
    • PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
    • RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
    • SYN:在建立连接时使用,用来同步序号。
      • 当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段。
      • 当 SYN=1,ACK=1 时,表示对方同意建立连接。
      • SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
    • FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
  • 窗口大小字段(Window Size):
    • 占16位,TCP流量控制,表示目前还有多少空间,能接收多少数据量。

第五行:

  • TCP 校验位(TCP Checksum):
    • 占 16 位。它用于确认传输的数据是否有损坏。发送端基于数据内容校验生成一个数值,接收端根据接收的数据校验生成一个值。两个值必须相同,才能证明数据是有效的。如果两个值不同,则丢掉这个数据包。
  • 紧急指针(Urgent Pointer):
    • 占 16 位。仅当前面的 URG 控制位为 1 时才有意义,它指出本数据段中为紧急数据的字节数,当所有紧急数据处理完后,TCP 就会告诉应用程序恢复到正常操作。即使当前窗口大小为 0,也是可以发送紧急数据的,因为紧急数据无须缓存。

第六行:可选项字段

可以自定义头部字段,长度不定,但长度必须是 32bits 的整数倍,最多40个字节。

第七行:TCP数据

数据部分(可以不发送任何数据)。

学习参考:

原文地址:http://www.cnblogs.com/luckest/p/16910432.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性