网络编程——数据包的组装和拆解

数据包的组装和拆解

一、数据包在各个层之间的传输

在这里插入图片描述

二、各个层的封包格式

1、链路层封包格式

在这里插入图片描述

+------------------+------------------+----------------------+--------------------+---------------------+-----------------------------------+
| 目标MAC地址(6字节) | 源MAC地址(6字节) | 类型/长度字段(2字节) | 数据(46-1500字节) | 帧校验序列(4字节) | 没有数据填充(0-46字节) |
+------------------+------------------+----------------------+--------------------+---------------------+-----------------------------------+

目的地址:目标MAC地址(6字节),这是数据帧要发送到的目标设备的MAC地址。它唯一标识了数据帧的目的地。

源地址:源MAC地址(6字节), 这是数据帧的发送者的MAC地址。它唯一标识了数据帧的来源。

类型:类型/长度字段(2字节),确定以太网头后面跟的是哪个协议
0x0800 ip协议
0x0806 arp协议
0x0835 rarp协议

数据(46-1500字节): 这是实际要传递的数据,它的长度可以在46字节到1500字节之间。如果数据不足46字节,会被填充至46字节,确保帧的最小长度。

帧校验序列(4字节): 这是用于检测数据传输中可能发生的错误的冗余校验码。校验码可以检测数据在传输过程中是否发生了损坏。

没有数据填充(0-46字节): 如果数据字段的长度不足46字节,可能需要添加填充来保持帧的最小长度。

注意
1、IEEE802.2/802.3封装常用在无线
2、以太网封装常用在有线局域网

2、网络层封包格式(IPV4)

在这里插入图片描述

版本/头部长度: 这个字段包含IP协议版本号和IP头部的长度。版本通常是IPv4(4位),头部长度指示IP头部的字节数,通常为20字节,但可能会因选项字段的存在而变化。

服务类型: 这个字段用于指示数据包的服务质量和优先级。

总长度(2字节): 这个字段表示整个IP数据报的长度,包括头部和数据。

标识: 这个字段用于标识数据报的顺序和重组。

标志/片偏移: 这个字段包含分片数据报的标志位和数据片的偏移。

生存时间: 这个字段用于防止数据包在网络中永远循环,通过逐跳减少来实现。

协议: 这个字段表示传输层协议,例如TCP(6)、UDP(17)等。

校验和(2字节): 这个字段用于检测头部字段的错误。

源IP地址和目标IP地址(各4字节): 这些字段表示源和目标设备的IP地址。

可选项和填充(可选): 这个字段包含可选的IP选项,以及填充字段,以确保IP头部长度为32位的倍数。

数据: 这个字段是实际要传递的数据。

3、传输层封包格式(TCP和UDP)

①TCP封包格式:
在这里插入图片描述

源端口和目标端口(各2字节): 这些字段指示数据的源端口和目标端口。

序列号和确认号(各4字节): 这些字段用于TCP的流控制和确认机制。

首部长度/保留位: 首部长度字段指示TCP首部的长度,保留位用于未来的扩展。

控制标志(2字节): 这个字段包含TCP控制标志,如ACK、SYN、FIN等,用于管理连接状态和数据传输。

窗口大小(2字节): 这个字段表示接收方能够接受的数据量。

校验和(2字节): 这个字段用于校验TCP头部和数据的完整性。

紧急指针(2字节): 这个字段用于指示紧急数据的位置。

选项(可选): 这个字段包含可选的TCP选项,如窗口扩大因子、时间戳等。

数据: 这个字段是实际要传递的数据。

+----------------+----------------+----------------+----------------+
| 源端口(2字节)  | 目标端口(2字节) | 序列号(4字节)  | 确认号(4字节)  |
+----------------+----------------+----------------+----------------+
| 首部长度/保留位  | 控制标志(2字节) | 窗口大小(2字节)  | 校验和(2字节)  |
+----------------+----------------+----------------+----------------+
| 紧急指针(2字节) | 选项(可选)         | 数据(可变长度)   |
+----------------+----------------+----------------+----------------+

②UDP封包格式

在这里插入图片描述

+----------------+----------------+----------------+----------------+
| 源端口(2字节)  | 目标端口(2字节) | 长度(2字节)    | 校验和(2字节)  |
+----------------+----------------+----------------+----------------+
| 数据(可变长度)   |
+----------------+

源端口和目标端口(各2字节): 这些字段指示数据的源端口和目标端口。

长度(2字节): 这个字段表示UDP数据报的长度,包括头部和数据。

校验和(2字节): 这个字段用于校验UDP头部和数据的完整性。

数据: 这个字段是实际要传递的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/66003.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

干货分享|Elsevier投稿进度查询功能正式上线,随时获取投稿状态!

想必广大科研学者们都经历过每天登录系统查看投稿进度的煎熬过程,为了方便广大科研人随时获取投稿状态,2023年8月,Elsevier【微信端投稿进度查询功能】正式上线! 无论你是通讯作者还是共同作者,只需一次查询&#xff…

前端先行模拟接口(mock+expres+json)

目录 mock模拟数据:data/static.js 路由:index.js 服务器:server.js yarn /node 启动服务器:yarn start 客户端:修改代理路径(修改设置后都要重启才生效) 示例 后端框架express构建服务器 前端发起请求 静态数…

ElastAlert通过飞书机器人发送报警通知

前言 公司采用ELK架构搜集业务系统的运行日志,以前开发人员只有在业务出现问题的时候,才会去kibana上进行日志搜索操作,每次都是被用户告知系统出问题了,这简直是被啪啪打脸~ 于是痛定思痛,决定主动出击,…

探索泛型与数据结构:解锁高效编程之道

文章目录 引言第一部分:了解泛型1.1 为什么使用泛型1.2 使用泛型的好处 第二部分:泛型的使用场景2.1 类的泛型2.2 方法的泛型2.3 接口的泛型 第三部分:泛型通配符3.1 通配符3.2 通配符的受限泛型 第四部分:数据结构和泛型的应用4.…

Jenkins 中 shell 脚本执行失败却不自行退出

Jenkins 中 执行 shell 脚本时,有时候 shell 执行失败了,或者判断结果是错误的,但是 Jenkins 执行完成后确提示成功 success 。 此时,可以通过条件判断来解决这个问题,让 Jenkins 强制退出并提示执行失败 failed 。 …

40% Ubuntu 用户面临着新特权提升漏洞风险

导读Wiz 的研究人员发现,最近被引入 Ubuntu 内核的两个 Linux 漏洞,可能会在大量设备上为非特权本地用户提升权限。这两个漏洞被追踪为 CVE-2023-32629 和 CVE-2023-2640,预计影响了大约 40% 的 Ubuntu 用户。 根据介绍,其中 CVE…

Flutter 让软键盘不再自动弹起

1、问题说明: 在开发中,经常遇到这种事,一个页面有输入框,点击输入框后,会弹起软键盘,同时输入框会聚焦,手动收起软键盘后,点击另一个按钮前往下一个页面或者显示一个弹窗&#xff0…

FreeRTOS(任务管理的创建、删除、挂起、恢复)

目录 一、任务的基本概念 二、任务状态的概念 1、Running—运行态: 2、Ready—就绪态 3、Blocked—阻塞态 4、Suspended—挂起态 三、任务状态的切换 四、系统启动 1、vTaskStartScheduler()函数 1.1 作用 1.2 启动函数介绍 2、空闲任务 2.1 空闲任务的作…

Java密码学

密码学 1.1 密码学基本概念 密码在我们的生活中有着重要的作用,那么密码究竟来自何方,为何会产生呢? 密码学是网络安全、信息安全、区块链等产品的基础,常见的非对称加密、对称加密、散列函数等,都属于密码学范畴。…

ISC2023奇富科技与360智脑升级战略合作,加速完善金融行业大模型

北京时间8月9日,ISC2023第十一届互联网安全大会上,奇富科技宣布与360智脑达成在大模型方向与落地应用等多个层面的战略合作。通过奇富GPT与360智脑的算法、算力、数据融合,双方将协同优化奇富GPT,扩大其在已有业务中的应用场景&am…

【云原生】Docker中容器管理常用所有命令

1.docker 容器创建流程 2.容器运行本质 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 创建容器基本选项:--name:为容器命名 -i:交互式创建容器 -d:后台创建容器 -t:为容器分配伪终端 Docker 容器存在的意义就是为…

一种水文水利行业满管非满管双声道流量计安装调试

供电电源 用户应该特别注意:若是交流(AC220V)供电的主机插入直流电源,或者直流(DC24V)供电的主机接入AC220V电源,就会把流量计烧毁。 普通主机(包括固定式主机、盘装式主机&#x…

实现静态资源访问的几种方法

什么是静态资源? 静态资源是指在服务器端存储的不会变化的文件,如HTML、CSS、JavaScript、图片、音频、视频等文件。这些文件一般不包含动态内容,每次请求时返回的内容都是固定的。 为什么要使用静态资源? 提升网站性能&#xf…

Django实现音乐网站 ⑻

使用Python Django框架制作一个音乐网站, 本篇主要是后台对单曲原有功能的基础上进行部分功能实现和显示优化。 目录 新增编辑 歌手下拉显示修改 设置歌曲时长 安装eyed3库 获取mp3时长 歌曲时长字段修改 重写save方法 增加歌手单曲数量 查询歌手单曲数量 …

【Redis】Spring/SpringBoot 操作 Redis Java客户端

目录 操作 Redis Java客户端SpringBoot 操作Redis 步骤 操作 Redis Java客户端 1.Jedis 2.Lettuce(主流) <-Spring Data Redis SpringBoot 操作Redis 步骤 1.添加Redis 驱动依赖 2.设置Redis 连接信息 spring.redis.database0 spring.redis.port6379 spring.redis.host…

springboot工程使用阿里云OSS传输文件

在application.yml文件中引入对应的配置&#xff0c;一个是对应的节点&#xff0c;两个是密钥和账号&#xff0c;还有一个是对应文件的名称&#xff1b; 采用这样方式进行解耦&#xff0c;便于后期修改。 然后需要设置一个properties类&#xff0c;去读对应的配置信息 用到了…

TCP的四次挥手与TCP状态转换

文章目录 四次挥手场景步骤TCP状态转换 四次挥手场景 TCP客户端与服务器断开连接的时候&#xff0c;在程序中使用close()函数&#xff0c;会使用TCP协议四次挥手。 客户端和服务端都可以主动发起。 因TCP连接时候是双向的&#xff0c;所以断开的时候也是双向的。 步骤 三次…

(九)人工智能应用--深度学习原理与实战--前馈神经网络实现MNST手写数字识别

目标: 识别手写体的数字,如图所示: 学习内容: 1、掌握MNIST数据集的加载和查看方法 2、熟练掌握Keras建立前馈神经网络的步骤【重点】 3、掌握模型的编译及拟合方法的使用,理解参数含义【重点】 4、掌握模型的评估方法 5、掌握模型的预测方法 6、掌握自定义图片的处理与预测 …

网络安全【黑客】面试题汇总

前言 一眨眼2023年已经过去一大半&#xff0c;不知道大家有没有找到心仪的工作。作为一个安全老鸟&#xff0c;工作这么多年&#xff0c;面试过很多人也出过很多面试题目&#xff0c;也在网上收集了各类关于渗透面试题目&#xff0c;里面有我对一些问题的见解&#xff0c;希望…

信创麒麟操作系统卸载docker,并分别用在线、yum、rpm三种方式安装信创的docker

备注&#xff1a;操作前建议对机器打快照备份&#xff0c;或者备份好数据&#xff0c;如未使用&#xff0c;第一次部署的情况可直接操作 一、卸载DataEase自带的docker # 停止服务 service dataease stop# 删除 docker 可执行文件 rm -f /usr/bin/containerd-shim-runc-v2 r…