[JAVAee]IP数据包的组包与分包

news2024/11/24 6:47:23

目录

数据包是什么?

数据包的结构

数据包/分组与分组交换

分包是什么?为什么需要分包呢?

组包是什么?

分包组包过程中和哪些 IP 报头字段有关联?


本篇文章主要围绕三个问题来展开:

  1. 为什么要分包?
  2. 分包组包过程中和哪些 IP 报头字段有关联
  3. 组包时如何保证数据的顺序和完整性?

数据包是什么?

数据包是TCP/IP协议上通信传输中的数据单位,简称为'包',也可以叫为'分组'.

数据包主要作用与第三层网络层中,起始地与目的地都是网络层.在第三层的分组传输中.

像我们平时上网,其实就是数据包的交换.当我们访问网站的时候,会向服务器发送一个包进行请求,服务器在接受到请求后并作出响应,如果服务器允许我们的访问则会返回相应的数据包给我们.网页上呈现出的内容就是这样传输过来被我们看到的.

数据包的结构

一个数据包主要分成两个部分,控制信息与负载.控制信息则是表头部分,装载着'五元组'之类的信息,表明了数据的来处与去处的信息.而负载则是本身要传输的数据本身.

数据包/分组与分组交换

通信双方以分组为单位、使用存储-转发机制实现数据交互的通信方式,被称为分组交换.

分组交换能够提升存储空间的利用.

而分组交换中的基本单位就是一个分组(数据包).

分包是什么?为什么需要分包呢?

每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MTU(Maximum Transmission Unit).

IP协议在传输数据包的时候,如果一个完整的数据长度大于MTU的时候,就会讲一个数据包分成若干份进行传输.这个过程就叫做分包/分片.被分出来的每一个数据包中的包头还会含有原数据包的五元组和其他报头信息,还会有一个偏移量.偏移量主要用来在传输过后数据包的组包过程中给数据排序使用.

分包除了可以让数据在一定规格内传输,还因为一个较大的数据包会占用较多的带宽,容易造成网络的拥塞.而分包可以在一定程度上减轻这种情况,提高传输效率.

组包是什么?

在数据包进行分包后,目标主机收到的就不是一个完整的数据包了,而是许多小的数据包.将这些被分包过后的数据包进行组装恢复成为原来完成的IP数据包的过程就成为组包

分包组包过程中和哪些 IP 报头字段有关联?

IP报头为:

对于分包,通俗的话来说就是讲一支完整的队伍拆成固定人数的小组进行通过.

对于传输的小组中的人员,在经过时要检查小组中的人员是否与原来发出的人员一致,这时就要通过校验和来检验数据包在传输的过程中是否遭到了破坏.

在传输过程中,发送端发送的完整数据包肯定不止一个,每发送一个数据包,在报头处的标识符就会+1.对于分片/分包后的数据包,在目标主机中该怎么知道哪一些分片后的数据包该放在一堆呢?就通过标识符来辨别这个小组是哪一个大队伍的.

对于目标主机来说,不知道对方传来的数据包总的规格是多少,被分成了多少包.这时就可以通过标记位来辨别.对于被分片/分包后的数据包们,只有最后一位的数据包的标记位的最后一位为0,其余的数据包的标记位的最后一位都为1.1表示为,后面还有同一个队伍的数据包要到达.0则表示我是这一组的末尾咯,后面已经没有本组的数据包了.

既然传输过去的数据都是这些,那么对于原来数据最重要的就是这些分段数据的顺序了.只有每一小段的数据的顺序都对的上才能重新在目标主机中恢复成原来的模样.对应上了报头中的片偏移.

简单总结为:

  1. 校验和
  2. 标识符
  3. 标记位
  4. 片偏移

其实这也回答了 "组包时如何保证数据的顺序和完整性?"的问题.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Yolov8的中国交通标志(CCTSDB)识别检测系统

目录 1.Yolov8介绍 2.纸箱破损数据集介绍 2.1数据集划分 2.2 通过voc_label.py得到适合yolov8训练需要的 2.3生成内容如下 3.训练结果分析 1.Yolov8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的&…

kafka学习-生产者

目录 1、消息生产流程 2、生产者常见参数配置 3、序列化器 基本概念 自定义序列化器 4、分区器 默认分区规则 自定义分区器 5、生产者拦截器 作用 自定义拦截器 6、生产者原理解析 1、消息生产流程 2、生产者常见参数配置 3、序列化器 基本概念 在Kafka中保存的数…

虚拟机上部署K8S集群

虚拟机上部署K8S集群 安装VM Ware安装Docker安装K8S集群安装kubeadm使用kubeadm引导集群 安装VM Ware 参考:http://www.taodudu.cc/news/show-2034573.html?actiononClick 安装Docker 参考:https://www.yuque.com/leifengyang/oncloud/mbvigg#2ASxH …

长安链BaaS服务平台调研

目录 一、菜单功能二、其他说明2.1、服务平台的部署方式2.2、链本身2.3、建链流程2.4、支持连接已部署的链2.5、链治理投票2.6、支持动态节点操作2.7、支持应用 长安链ChainMaker管理平台文档地址:https://docs.chainmaker.org.cn 一、菜单功能 菜单子菜单/功能点…

lock screen password (remove)

解除apple手机锁屏密码步骤 对于老人家来说手机越简单越好 换手机的时候连界面图标,页码,原来放那里,新机也是放那里

Nacos实战(19)-Nacos健康检查机制:保障你的服务稳定运行!

0 前言 注册中心不应仅提供服务注册和发现功能,还应保证对服务可用性监测,对不健康的服务和过期的进行标识或剔除,维护实例的生命周期,以保证客户端尽可能的查询到可用的服务列表。 因此本文介绍Nacos注册中心的健康检查机制。 …

C++函数内联详解

本文旨在讲解C中的函数内联相关知识,读完这篇文章,希望读者们会对函数内联有更深一步的认识! 内联函数的定义 在计算机科学中, 内联函数 (有时称作 在线函数 或 编译时期展开函数 )是一种编程语言结构&…

如何给Mybatis-plus再增加点plus

来源公众号:赵侠客 一、Mybatis-plus基本功能 1.1 Mybatis-plus内置方法 Mybatis-plus给我们造了很多轮子,让我们可以开箱即用,在BaseMapper中有19种操作数据库常用的方法,如Insert()、deleteById()、updateById()、selectById(…

Spring系列文章:Spring事务

一、事务简述 1、什么是事务( Transaction(tx)) 在⼀个业务流程当中,通常需要多条DML(insert delete update)语句共同联合才能完成,这 多条DML语句必须同时成功,或者同…

WSL 在windows 家庭版上面的安装方式

目录 1、前言 2、约束 3、安装 1、安装Hyper 2、Hyper-V启用 3、安装Linux 4、0x800701bc问题处理 结论 1、前言 适用于Windows的Linux子系统 Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够运行原生Linux二进制可执行文件&am…

一条爬虫抓取一个小网站所有数据

一条爬虫抓取一个小网站所有数据 ​ 今天闲来无事,写一个爬虫来玩玩。在网上冲浪的时候发现了一个搞笑的段子网,发现里面的内容还是比较有意思的,于是心血来潮,就想着能不能写一个Python程序,抓取几条数据下来看看&am…

9.3.4(数据链路层)

一. 以太网帧格式: 二.IP地址和Mac地址在网络传输中的区别: 1.源IP:数据发送方的地址. 目的IP:数据接收发的地址. 2.源Mac:相邻两个路由器传输数据时发送方的地址. 目的Mac: 相邻两个路由器传输数据时接收方的地址. 3. 在一次数据传输中,源IP和目的IP不变,源Mac和目的Mac不…

Databend 数据集成方案 | Data Infra 第 15 期

本期的 Data Infra 直播活动我们邀请到了 Databend Cloud 研发工程师-韩山杰,与大家分享主题为《 Databend 数据集成方案》的相关知识。 在本次分享中,你将会学到在云上基于 Databend 及 Databend Cloud 构建应用,掌握 Databend CDC 和 Data…

Validate表单组件的封装

之前一直是直接去使用别人现成的组件库,也没有具体去了解人家的组件是怎么封装的,造轮子才会更好地提高自己,所以尝试开始从封装Form表单组件开始 一:组件需求分析 本次封装组件,主要是摸索封装组件的流程,…

哪个mac虚拟机软件好?怎么选择

虚拟机软件可以说是部分苹果用户们都会使用到的,因为很多软件在Mac上并不兼容,大部分都是基于Windows的框架进行开发设计的。虽然也有出Mac版本,但往往推迟得比较久才会进行发布。 拥有了虚拟机软件之后,我们就能够虚拟想要的系统…

lenovo联想笔记本ThinkPad P16V Gen 1(21FC,21FD)原装出厂Win11系统

原厂W11系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 链接:https://pan.baidu.com/s/17dTExDSz-EDN4Qd-PZGJuw?pwdrgl3 提取码:rgl3 所需要工具:32G或以上的U盘 文件格式:ISO 文件大小…

油猴插件(Tampermonkey)的使用教程

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 “油猴插件” 与 “油猴扩展程序” 表示同一个意思,下面统一使用“油猴插件”这个名词。 油猴插件的简介 浏览器插件,包括油猴插件和其他插件,通过它们可以实现浏览器网…

Vue 路由守卫详细介绍与演示

Vue 路由守卫是一种在 Vue.js 应用程序中控制路由导航的机制,它允许你在路由变化前、后或在特定路由上执行代码,以便实现诸如权限控制、数据加载、页面切换动画等功能。在下面的介绍中,我将首先提供官方定义和通俗解释,然后详细介…

rosbag 包转TUM数据集

参考链接: ROS学习:制作自己的TUM数据集 配置环境 1.安装ROS 参考我的博客 https://blog.csdn.net/qin_liang/article/details/127035615 2.查看rosbag中的topic rosbag info xxx.bag3.创建catkin_ws/src文件夹 在src下运行 catkin_create_pkg rosb…

<OpenCV> Mat属性

OpenCV的图像数据类型可参考之前的博客:https://blog.csdn.net/thisiszdy/article/details/120238017 OpenCV-Mat类型的部分属性如下: size:矩阵的大小, s i z e ( c o l s , r o w s ) size(cols,rows) size(cols,rows)&#xf…