首页 > 其他分享 >TCP报文格式详解

TCP报文格式详解

时间:2022-11-21 10:01:26浏览次数:80  
标签:字节 报文格式 数据 TCP 发送 详解 数据包 连接

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表示15x4=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数据

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


学习参考:

标签:字节,报文格式,数据,TCP,发送,详解,数据包,连接
From: https://www.cnblogs.com/luckest/p/16910432.html

相关文章

  • shell中的for循环用法详解
    https://www.jb51.net/article/186134.htmfor命令:foriin的各种用法:foriin“file1”“file2”“file3”foriin/boot/*foriin/etc/*.confforiin......
  • (转)【Linux】crontab命令详解
    原文:https://blog.csdn.net/qq_32109917/article/details/121468799【Linux】crontab命令详解linux系统则是由cron(crond)这个系统服务来控制的。Linux系统上面原本......
  • Vue笔记 - 插槽(slot) 详解
    插槽目录插槽1.默认插槽2.具名插槽3.作用域插槽注意:本篇笔记为方便兼容Vue3,均采用了比较新的v-slot写法,而未采用老式的slot和slot-scope插槽(slot)是vue为组件的封......
  • tcpdump抓取CoAP数据包,WireShark解析
    考虑这样的场景,设备使用NB-IoT发送CoAP数据包到服务器,服务器是Linux,作为服务器的Linux通常只有命令行。在这样的场景下想要捕获CoAP数据包进行分析。首先在设备端捕获是不现......
  • Day17.1:静态与非静态的详解
    静态与非静态静态方法——类方法是以static为关键词,从属于类,与类共生publicclassStudents{//class修饰的是一个类,所以这是一个学生类publicstaticvoidsa......
  • (转)Linux crontab命令详解
    原文:https://www.cnblogs.com/ftl1012/p/crontab.htmlcrontab:定时任务的守护进程,精确到分,设计秒的我们一般写脚本 -->相当于闹钟       日志文件: ll/var/lo......
  • java注解详解以及如何获取注解的上的信息
    目录一、Java自定义注解详解1.定义注解:2.元注解介绍@Target详细介绍@Relation详细介绍@Documented介绍@Inherited介绍3.注解可用的类型4.默认值限制5.创建一个简单的自定义......
  • 图文详解在VMware Workstation 16 PRO虚拟机上安装Ubuntu 22.04.5 linux系统
    一、下载Ubuntulinux系统镜像机构下载地址官网地址https://cn.ubuntu.com/download南京大学https://mirrors.nju.edu.cn/ubuntu-releases/20.04.5/山东......
  • tcp的拥塞控制算法reno与bbr
    拥塞的指证超时---拥塞收到三个冗余的ACK---轻微拥塞发送方如何控制向网络中发送的速率发送方在对方未经确认的情况下,可以向网络中发送多少字节:min(发送方拥塞窗......
  • TCP报文及状态分析
    0.背景传输控制协议TCP(TransmissionControlProtocol)TCP和UDP协议的区别以及原理简单总结下,TCP就是个位于传输层(四层)的面向连接的端对端可靠传输的全双工通讯协议如何保......