完整版:TCP、UDP报文格式

news/2024/12/21 20:38:33/

目录

TCP报文格式

报文格式

报文示例

UDP报文格式

报文格式

报文示例


TCP报文格式

报文格式

图1 TCP首部格式

字段长度含义
Source Port16比特源端口,标识哪个应用程序发送。
Destination Port16比特目的端口,标识哪个应用程序接收。
Sequence Number32比特序号字段。TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。
Acknowledgment Number32比特确认号,是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有ACK标识为1,此字段有效。
Data Offset4比特数据偏移,即首部长度,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,以32比特(4字节)为计算单位。最多有60字节的首部,若无选项字段,正常为20字节。
Reserved6比特保留,必须填0。
URG1比特紧急指针有效标识。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
ACK1比特确认序号有效标识。只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。
PSH1比特标识接收方应该尽快将这个报文段交给应用层。接收到PSH = 1的TCP报文段,应尽快的交付接收应用进程,而不再等待整个缓存都填满了后再向上交付。
RST1比特重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接。
SYN1比特同步序号标识,用来发起一个连接。SYN=1表示这是一个连接请求或连接接受请求。
FIN1比特发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的发送端的数据已经发送完毕,并要求释放连接。
Window16比特窗口:TCP的流量控制,窗口起始于确认序号字段指明的值,这个值是接收端正期望接收的字节数。窗口最大为65535字节。
Checksum16比特校验字段,包括TCP首部和TCP数据,是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
Urgent Pointer16比特紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
Options可变选项字段。TCP协议最初只规定了一种选项,即最长报文段长度(数据字段加上TCP首部),又称为MSS。MSS告诉对方TCP“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节”。

新的RFC规定有以下几种选型:选项表结束,无操作,最大报文段长度,窗口扩大因子,时间戳。

  • 窗口扩大因子:3字节,其中一个字节表示偏移值S。新的窗口值等于TCP首部中的窗口位数增大到(16+S),相当于把窗口值向左移动S位后获得实际的窗口大小。
  • 时间戳:10字节,其中最主要的字段是时间戳值(4字节)和时间戳回送应答字段(4字节)。
  • 选项确认选项:
Padding可变填充字段,用来补位,使整个首部长度是4字节的整数倍。
data可变TCP负载。

报文示例

图2 TCP报文(正常报文)


 

图3 TCP报文(Keepalive)


 

图4 TCP报文(Keepalive ACK)


 

图5 TCP报文(Duplicate ACK)


 

图6 TCP报文(重传)


 

图7 TCP报文(Out-Of-Order乱序)


图8 TCP报文(Window Update)


 

UDP报文格式

报文格式

图1 UDP报文格式

字段长度描述
Source Port2字节标识哪个应用程序发送(发送进程)。
Destination Port2字节标识哪个应用程序接收(接收进程)。
Length2字节UDP首部加上UDP数据的字节数,最小为8。
Checksum2字节覆盖UDP首部和UDP数据,是可选的。
data octets变长UDP负载,可选的。

报文示例

 


http://www.ppmy.cn/news/1018901.html

相关文章

【WordPress】如何在WordPress中实现真·页面路由

这篇文章也可以在我的博客中查看 页面路由 是什么 页面路由是指从url顺着网线砍到网站内容的途径,说人话就是地址与页面的映射。 就像真实世界的地址一样,我要找你,必须知道你的地址。 在网站中,通过地址找内容的机制&#xf…

python爬虫相关

目录 初识爬虫 爬虫分类 网络爬虫原理 爬虫基本工作流程 搜索引擎获取新网站的url robots.txt HTHP协议 Resquests模块 前言: 安装 普通请求 会话请求 response的常用方法 简单案例 aiohttp模块 使用前安装模块 具体案例 数据解析 re解析 bs4…

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver的解决办法

springcloudAlibaba项目连接mysql时(mysql版本8.0.31,Springboot2.2.2,spring cloud Hoxton.SR1,spring cloud alibaba 2.1.0.RELEASE),驱动名称报红,配置如下: 原因:引入的jdbc驱动包和使用的m…

nginx动态加载配置文件的方法

1. main函数调用ngx_get_options函数 2. ngx_get_options(int argc, char *const *argv)中会解析用户输入命令。 case ‘s’: if (*p) { ngx_signal (char *) p; } else if (argv[i]) {ngx_signal argv[i];} else {ngx_log_stderr(0, "option \"-s\" requi…

Chromium内核浏览器编译记(三)116版本内核UI定制

转载请注明出处:https://blog.csdn.net/kong_gu_you_lan/article/details/132180843?spm1001.2014.3001.5501 本文出自 容华谢后的博客 往期回顾: Chromium内核浏览器编译记(一)踩坑实录 Chromium内核浏览器编译记(…

如何对项目中的图片进行优化

优化步骤方案 不用图片。很多时候会使用到很多修饰类图片,其实这类修饰图片 完全可以用 CSS 去代替。对于移动端来说,屏幕宽度就那么点,完全没有必要去加载原图浪 费带宽。一般图片都用 CDN 加载,可以计算出适配屏幕的宽度&#…

【Redis】初学Redis

目录 使用Redisyum安装redis启动redis操作redis设置远程连接 Redis路线Redis 使用Redis yum安装redis 使用命令,直接将Redis安装到linux服务器: yum -y install redis启动redis redis-server /etc/redis.conf &操作redis redis-cli设置远程连接…

小白到运维工程师自学之路 第七十集 (Kubernetes集群部署)

一、概述 Kubernetes(简称K8S)是一个开源的容器编排和管理平台,是由Google发起并捐赠给Cloud Native Computing Foundation(CNCF)管理的项目。它的目标是简化容器化应用的部署、扩展、管理和自动化操作。 以下是Kube…