IP报文格式、IPv6概述

IPv4报文格式

在这里插入图片描述
IPv4报文首部长度至少为20字节(没有可选字段和填充的情况下),下面来逐一介绍首部各个字段的含义

  • Version版本:表示采用哪一种具体的IP协议,对于IPv4来说该字段就填充4以表示,如果是IPv6就填充6
  • IHL首部长度:如果IP首部中出现了可选字段和填充,那么首部的长度是不固定的,需要根据该字段中的数值来表示首部的真实长度
  • TOS区分服务:表明服务质量,通过填充不同的数来改变最低延迟、最大吞吐、最大安全等权值,不过该字段在IPv4中一般都不被使用,原因在于TOS控制增加了太多复杂度难以维护
  • Total Length总长度:表明IP报文的总长度,如果想要得到正文部分的长度,只要将总长度(Total Length)减去首部长度(IHL)即可得到
  • Identification标识:用于分片重组,属于同一IP包的分片标识字段是相同的值,报文接受主机可以凭借该字段对分片进行重组
  • Flags标志:有3比特组成,第1位不使用恒定为0;第2位标识此IP报文是否允许被分片(0允许1拒绝),该位在确定路径MTU时有用;第3位标志IP在第2位为1时才有用,表示是否为最后一个分片(0是1非)
  • Fragment Offset片偏移:接受主机收到属于同一IP包的分片时,需要对其进行按序重组后才能向上交付,片偏移字段中记录了当前正文数据在完整数据正文中的偏移量
  • TTL生存时间:IP报文在网络中是有传输时间限制的,如果在范围之内没有到达目标,这个报文就被路由器丢弃不在转发(每经过一个路由器TTL减1,至0丢弃)
  • Protocol协议:指示上层采用的协议种类,是UDP填17,TCP填6
  • Header CheckSum首部校验和:用于检查报文有没有发生错误,如有则丢弃
  • SA源地址 DA目标地址:发送报文的主机IP和接受报文的主机IP
  • Option可选字段:可以设置安全级别、源路径、路径记录、时间戳等信息(一般不用)
  • Padding填充:如果IP报文具有可选字段,需要将首部长度调整为32的倍数

IPv6(仅作了解)

IPv6必要性
IP v6用以解决IP v4绝对数量不足的问题,一个IPv6的地址为16字节,其能够表示的范围远远大于IPv4。遗憾的是IPv6和IPv4不兼容,从IPv4过渡到IPv6是一项艰巨的任务

IPv6地址结构

IPv6地址以16比特为一组的点分十六进制表示,如FEDC:BA98:7654:3210:FEDC:BA98:7854:3211,与IPv4类似的也分为网络标识和主机标识

IPv6特点

  • IP地址扩大与路由控制表的聚合
  • 性能提升:首部采用固定40字节,无需首部校验码,不需要做分片处理
  • 即插即用:没有DHCP服务器也能自动分配IP地址
  • 安全性更高
  • 多播、Mobile IP成为扩展功能

IPv6报文格式

在这里插入图片描述

  • Version:填充6
  • 通信量类:等价于IP v4的TOS
  • 流标号:用于服务质量控制
  • 有效载荷长度:正文长度(不包括首部,因为首部固定40B)
  • 下一个首部:指示上层协议类型
  • 跳数限制:等价于TTL
  • 源地址目标地址:发送报文的主机IP和接受报文的主机IP

IP分片与重组

由于不同数据链路所支持的最大传输单元MTU不一致,当IP报文长度超过MTU时,需要将一个报文拆分为小于MTU的报文分批次传输,当这些分片到目标主机时被重组(注:分片由路由器完成,但重组必须由目标主机来完成)

在这里插入图片描述
分片的弊端很明显:就是增加了路由器负担和数据包丢包的概率,如果由一个分片丢失,那么整个IP报文全部作废,即使已经收到了其他分片,此时就需要发送端重传(需要可靠传输时),无疑提高了时间成本,因此需要通过一定的算法尽可能的减少分片

路径MTU

路径MTU是指从发送主机到目标主机之间不需要分片时的最大MTU大小(路径中存在的所有数据链路中最小的MTU),如果每一次发送的报文长度小于路径MTU,节点路由器就不需要分片操作,分片操作只会由发送主机进行(减少路由器压力)
**如何确定路径MTU:**通过试探性发送完整数据包给下一跳节点,下一跳节点会返回其所管理的网段的MTU,迭代操作直至发送主机不在收到MTU告知时就可以确定路径MTU
在这里插入图片描述
如果上层采用的是可靠传输TCP,那么通过MTU可以计算出MSS(最大段长度)的值,使得传输层每一次交给网络层的报文长度一定是小于MTU的,这样连发送主机都不用进行分片操作了。
在这里插入图片描述

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

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

相关文章

HTML5实现古典音乐网站源码模板2

文章目录 1.设计来源1.1 主界面1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址&a…

3D Gaussian Splatting前向渲染代码解读

文章目录 3D Gaussian Splatting前向渲染简介3DGS前向渲染流程伪代码 代码解读栅格化主流程初始化常量和变量预处理生成Idx为排序做准备查找最高有效位device级别的并行基数排序排序后处理渲染 预处理获取3D高斯点的id,变量初始化检查3D高斯点是否在视锥体范围内计算…

(十九)、使用 minikube 运行k8s 集群

文章目录 1、机器信息2、官方文档3、启动本机 docker4、安装 minikube5、启动 minikube5.1、报错重试应该做什么? 6、启动后7、安装 Vs Code & k8s extensions8、在 VS Code 查看运行起来的 k8s 集群9、基本命令10、虚拟化不支持 Mac Os 14.3.1 1、机器信息 Ma…

LabVIEW提高开发效率技巧----事件触发模式

事件触发模式在LabVIEW开发中是一种常见且有效的编程方法,适用于需要动态响应外部或内部信号的场景。通过事件结构(Event Structure)和用户自定义事件(User Events),开发者可以设计出高效的事件驱动程序&am…

Linux的kafka安装部署

1.kafka是一个分布式的,去中心化的,高吞吐低延迟,订阅模式的消息队列系统 确保要有jdk与zookeeper安装配置 2.下载kafka安装包 http://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.1.tgz 此时可以wget http://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.…

express 基本使用

Nodejs 第二十九章(express) Nodejs 第三十章(防盗链) 1. 安装 pnpm init pnpm add express配置package.json "main": "app.js","type":"module",2. 使用 1. 监听端口 app.js // 引…

【数据分享】全国文化-限额以上文化批发和零售业企业情况(2017-2021年)

数据介绍 一级标题指标名称文化限额以上文化批发和零售业企业单位数文化限额以上内资文化批发和零售业企业企业单位数文化限额以上港、澳、台商投资文化批发和零售业企业企业单位数文化限额以上外商投资文化批发和零售业企业企业单位数文化限额以上国有控股文化批发和零售业企业…

设置 Notepad++ 制表符(Tab 缩进)宽度为2个空格大小

Notepad 默认的制表符宽度是 4 个空格的大小,一个规模比较大的代码段或者 xml 等文件,小屏幕打开时看到的情景真的和让人着急,拖来拖去!有两种方案可以解决这种情况。 修改缩进为空格 这种我们不太推荐,但是有些公司…

刚刚,ChatGPT推出Windows客户端!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

SpringBoot优雅下线

一,什么是优雅下线 当我们需要部署新版本代码的时候,需要重启服务,这个时候可能会出现一些问题,比如之前服务正在处理的请求还在处理,这个时候如果强制的停止服务,会造成数据丢失或者请求失败的情况。那么…

Vue项目中实现拖拽上传附件:原生JS与Element UI组件方法对比

在现代化的Web应用中,文件上传是一个基本功能。随着技术的发展,拖拽上传已经成为提升用户体验的一个重要特性。在Vue项目中,我们可以通过原生JavaScript或使用Element UI组件来实现这一功能。下面我们将分别介绍这两种方法,并对比…

第十二章 RabbitMQ之失败消息处理策略

目录 一、引言 二、RepublishMessageRecoverer 实现 2.1. 实现步骤 2.2. 实现代码 2.2.1. 异常交换机队列回收期配置类 2.2.2. 常规交换机队列配置类 2.2.3. 消费者代码 2.2.4. 消费者yml配置 2.2.5. 生产者代码 2.2.6. 生产者yml配置 2.2.7. 运行效果 一、引言 …

MiGPT让你的小爱音响更聪明

大家好,我是晓凡。 今天要给大家带来一个超级有趣的开源项目MiGPT。 这个项目,简直就是给小爱音箱装上了超级大脑,让你的小爱音箱更聪明。 想象一下,当小爱音箱接入大模型后,上知天文,下知地理&#xff…

Cuda By Example - 7 (光线追踪)

第6章以实现简单的光线追踪为例子,引入了Constant Memory和性能测量方法。 Constant Memory NVIDIA的硬件提供了64K的constant只读内存。定义constant内存的变量,使用关键字__constant__。从constant内存里读取出来的数据,可以缓存起来&…

星河飞雪计划_day1

安全见闻 编程语句应用介绍 程序介绍 操作系统介绍 操作系统 ios mac Iinux android Windows wince vxworks RT-ThreadWindows、mac0S、i0S和Linux通常被认为是非实时操作系统。 非实时操作系统: 主要致力于在各种情况下提供良好的整体性能、用户体验和多任务处理能力&…

10.13论文阅读

通过联合学习检测和描述关键点增强可变形局部特征 摘要 局部特征提取是计算机视觉中处理图像匹配和检索等关键任务的常用方法。大多数方法的核心理念是图像经历仿射变换,忽略了诸如非刚性形变等更复杂的效果。此外,针对非刚性对应的新兴工作仍然依赖于…

UE4 材质学习笔记06(布料着色器/体积冰着色器)

一.布料着色器 要编写一个着色器首先是看一些参考图片,我们需要找出一些布料特有的特征,下面是一个棉织物,可以看到布料边缘的纤维可以捕捉光线使得边缘看起来更亮 下面是缎子和丝绸的图片,与棉织物有几乎相反的效果,…

docker harbor

文章目录 一,搭建私有仓库1.1下载registry1.2在 daemon.json 中添加私有镜像仓库地址1.3重新加载重启docker1.4运行容器1.5拉取一个centos7镜像1.6给镜像加标签1.7上传镜像1.8显示私有仓库的所有镜像1.8查看私有仓库的 centos 镜像有哪些tag 二,什么是ho…

Matlab中HybridFcn参数的用法

在 MATLAB 中,HybridFcn 参数允许你在全局优化(如遗传算法 ga 或粒子群算法 particleswarm)之后使用局部优化算法进一步微调解的精确度。HybridFcn 通过在全局优化找到的解基础上,进一步调用局部优化器,如 fmincon、pa…

ARM嵌入式学习--第四天

汇编与C混合编程 -汇编指令中调用C语言 .global _start _start:mov r0,#5mov r1,#3bl add stop:b stop int add(int a,int b) {int c a b;return c; } 无优化情况:(反汇编之后,发现多了很多很多指令,运行之后结果是错误的&a…