IP协议报文
一.IP协议报头结构

二.IP协议报头拆解
1.4位版本
实际上只有两个取值,分别是4和6,4代表的是IPv4,6代表的是IPv6。
2.4位首部长度
IP协议报头的长度也是边长的,单位是*4,这里表示的大小为0~15,当数值为15时,报头长度位60,和TCP一样。
3.8位服务类型TOS
8位服务类型TOS:3位优先权字段已经弃用,4位TOS字段和1位保留字段(必须置为0)。4位TOS字段分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,这四者互相冲突,只能选择一个,对于ssh/telnet这样的应用程序,最小延时比较重要,对于ftp这样的程序,最大吞吐量比较重要。
i.最小延时:数据从A到B消耗的时间最短。
ii.最大吞吐量:数据从A到B单位时间内,传输的数据量最多。
iii.最高可靠性:IP协议并不会像TCP那样有严格的可靠性机制,但是IP一些机制也会影响到丢包的概率。
iv.最小成本:设备上减少消耗。
4.16位总长度

IP数据报的总长度:16位总长度相当于2个字节,一个数据包最大才64KB,但是并不是说IP数据报只能传64KB的数据,它也能传输大的数据,因为IP协议内置了拆包组包的机制,会自动把大的数据包拆成多个IP数据报来携带数据,在接收方拼接。
5.拆包组包的属性

i.16位标识:IP协议会自动拆包,同一个载荷的数据会被分成多份,交给多个IP数据报来携带,并且多个IP数据报之间,16位标识是相同的。
ii.3位标志:只有2个有效,还有一个保留位。其中一个表示这个包是否需要组包(是否是拆包的一部分),另一个表示当前包是否为组包中的最后一个单位。
iii.13位片偏移:决定组包时数据报的位置。(防止后发先至)
6.八位生存时间(TTL)

8位生存空间这个指的是一个IP数据包最久存活的时间,但是这个不是按时间来进行计算的,而是通过路由器转发的次数来进行计算(经过交换机不会扣次数),而TTL是有转发次数的限制的,当发送一个IP数据报的时候会有一个TTL的初始值(32,64,128...),数据每经过一个路由器都会减少TTL的值,当TTL的值为0的时候,这个数据报就会被丢弃。
7.八位协议

IP数据报中的载荷,载荷通过携带不同传输层协议的数据包,类似于TCP/UDP的端口号。
8.16位首部校验和

验证传输过程中IP报头是否发生错误,不管IP的载荷,载荷部分TCP/UDP都有自己的校验和。
9.32位IP地址

IP地址是32位的,但是不方便人为观察,便通过点分十进制来进行化简,一共有三个点,每个部分是一个字节,大小不超过255:类似于192.192.192.192这种(乱写的)
IP地址是唯一的,IP是32位大小,可以表示的范围是0~42亿9千万,但是如今的互联网发展迅速,这个大小已经无法满足现在的需求了。
三.解决IP地址不够的方法
1.动态分配地址
当一个设备上网的时候,才会对它进行地址的分配,当该设备上网的时候,就不再进行地址的分配,对于IP地址不够用的解决只能算是权宜之计。
2.NAT(网络地址转换)
i.公网和私网IP
IP地址被分为两大类,第一种是公网IP/外网IP,第二种就是私网IP/内网IP。公网IP是不能重复的只能有一个,而私网IP可以在不同的局域网内中重复。
私网IP / 内网IP 的IP一般都是这几个类型:10.* / 172.16~172.31.* / 192.168.*(学会区分)
其他的就是公网IP / 外网IP
ii.NAT的工作原理
NAT的作用:一个设备在上网的时候,IP数据报的IP地址,就会被NAT(通常是路由器)自动进行修改。
1.同一个局域网中,主机A访问主机B,不会涉及到NAT机制。
2.公网上的设备A,访问公网上的设备B,不会涉及到NAT。
3.一个局域网中的主机A,访问另一个局域网中的主机B,NAT机制中,不允许有这样的访问。
4.局域网内部的设备A,访问公网上的设备B,NAT机制会生效,并且NAT就是为了解决这个问题。
iii.NAT的工作过程
1.当我使用我的电脑发送IP数据报给卫星这个应用程序的时候,其中NAT会将我的IP数据报的IP地址自动发生改变,并把IP数据报发送给卫星这个应用程序:
2.当卫星这个应用程序接收到了我的电脑发送的IP数据报时,再将它的IP数据报传回给我的电脑上,并且通过NAT机制来进行:
3.如果有多个设备访问运营商路由器,并且给同一个服务器发送IP数据报,此时NAT机制会有映射关系:
需要注意的是,如果A主机和B主机的端口号在很小的概率下,两者的端口号相同了,那么在运营商IP地址记录映射关系的时候,生成的新端口号会不同。在网络通信中,不仅仅只有IP信息是关键信息,端口号也是关键信息,端口号本身的作用就是区分同一个主机上的不同的应用程序,但在NAT中可以就可以用于区分不同主机上的不同的应用程序。
iv:NAT的缺点
NAT机制的缺点在于网络环境过于复杂,替换过程中,需要维护每一层路由器的映射关系,每次转发数据,都需要查询映射关系等等,开销比较大。
3.使用IPv6
可以根本上解决地址不沟通的问题,因为IPv6是使用了128位16个字节表示IP地址,而IPv4使用的是32位4个字节来表示IP地址的,这个差距是非常大的,因为IPv6是2*128,而IPv4是2*32。
但是IPv6之所以没被普及,是因为使用IPv6需要使用新的设备,这样需要花很多钱,可是替换之后并不会有什么显著的提升,所以很多设备还是继续使用IPv4。而NAT机制只需要给路由器更新升级软件就可以,硬件不需要更换,成本更低。
IPv6的内网:![]()
相关文章:
IP协议报文
一.IP协议报头结构 二.IP协议报头拆解 1.4位版本 实际上只有两个取值,分别是4和6,4代表的是IPv4,6代表的是IPv6。 2.4位首部长度 IP协议报头的长度也是边长的,单位是*4,这里表示的大小为0~15,当数值为1…...
【分布式微服务云原生】掌握分布式缓存:Redis与Memcached的深入解析与实战指南
掌握分布式缓存:Redis与Memcached的深入解析与实战指南 摘要: 本文深入探讨了分布式缓存在现代分布式系统中的重要性,详细分析了Redis和Memcached两种主流的分布式缓存解决方案的原理和使用场景。文章不仅提供了核心技术的深入解析ÿ…...
计算机毕业设计 基于Python的智能文献管理系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...
如何查看NVIDIA Container Toolkit是否配置成功
要确认 NVIDIA Container Toolkit 是否已成功配置,可以按照以下步骤进行检查: 1.检查 NVIDIA 驱动程序 首先,确保你的系统已经正确安装了 NVIDIA 驱动程序,并且可以识别你的 GPU。你可以使用 nvidia-smi 命令来进行检查…...
python全栈学习记录(二十一)类的继承、派生、组合
类的继承、派生、组合 文章目录 类的继承、派生、组合一、类的继承二、派生三、组合 一、类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类。 继承的特性是:子类会遗传父类的属性(继承是类与类之间的关系&a…...
Go语言实现长连接并发框架 - 任务执行流
文章目录 前言接口结构体接口实现项目地址最后 前言 你好,我是醉墨居士,上篇博客中我们实现了客户端的请求的实现,接下来我们要去实现对请求任务的处理,我们需要定义任务执行的流程 接口 trait/task.go type TaskFunc interfa…...
Flutter与原生代码通信
文章目录 1. 知识回顾2. 示例代码3. 经验总结我们在上一章回中介绍了通道相关的内容,本章回中将介绍其中的一种通道:MethodChannnel.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中介绍了通道的概念和作用,并且提到了通道有不同的类型,本章回将其中一…...
每日读则推(三)
n.(事件的)发生地点,(活动的)场所 n.雄性大园丁鸟 n.多细枝的,苗条的 v.放大,扩大(声音);增强,加强 Male great bowerbirds build twiggy concert venues that amplify their raucous songs and n.园丁鸟 …...
Android Studio | 无法识别Icons.Default.Spa中的Spa
编写底部导航栏,涉及到Spa部分出现报红: 解决办法:在build.gradle.kts中引入图标依赖 dependencies {implementation "androidx.compose.material:material-icons-extended:<version>" }...
SKD4(note上)
微软提供了图形的界面API,叫GDI 如果你想画某个窗口,你必须拿到此窗口的HDC #include <windows.h> #include<tchar.h> #include <stdio.h> #include <strsafe.h> #include <string>/*鼠标消息 * 键盘消息 * Onkeydown * …...
rabbitmq----数据管理模块
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 交换机数据管理管理的字段持久化管理类内存管理类申明交换机删除交换机获取指定交换机 队列数据管理管理的字段持久化管理类内存管理类申明/删除/获取指定队列获取所…...
【人工智能深度学习应用】妙笔API最佳实践
AI妙笔是一款以文本创作为主、多模态为辅的生成式创作大模型产品,专门为传媒、政务等特定的行业和组织提供行业化的内容创作辅助。它具备深度的行业知识,能够生成高质量的专业内容,能覆盖各行业常见的文体类型,写作文体丰富多样&a…...
SOMEIP_ETS_150: SD_Send_triggerEventUINT8Multicast_Eventgroup_6
测试目的: 验证DUT在Tester订阅事件组后,能够响应Tester触发的triggerEventUINT8Multicast方法,并将TestEventUINT8Multicast事件发送到订阅请求中端点选项指定的IP地址和端口。 描述 本测试用例旨在确保DUT能够正确处理事件组的订阅请求&…...
【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和常规型数字格式的区别
前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和…...
Vxe UI vue vxe-table vxe-text-ellipsis 如何实现单元格多行文本超出、多行文本溢出省略
Vxe UI vue vxe-table 如何实现单元格多行文本超出、多行文本溢出省略 代码 配合 vxe-text-ellipsis 组件实现多行文本溢出省略 <template><div><vxe-grid v-bind"gridOptions"><template #defaultAddress"{ row }"><vxe-te…...
FFmpeg源码:avio_feof函数分析
AVIOContext结构体和其相关的函数分析: FFmpeg源码:avio_r8、avio_rl16、avio_rl24、avio_rl32、avio_rl64函数分析 FFmpeg源码:read_packet_wrapper、fill_buffer函数分析 FFmpeg源码:avio_read函数分析 FFmpeg源码ÿ…...
各省-城镇化率(2001-2022年)
数据收集各省-城镇化率(2001-2022年).zip资源-CSDN文库https://download.csdn.net/download/2401_84585615/89465885 相关指标: 包括省份、年份、年末总人口数(万人)、年末城镇人口数(万人)、城镇化率等。 数据集构建: 数据集通…...
飞创龙门双驱XYZ直线模组高精度应用实例
飞创龙门双驱XYZ直线模组集超精密定位、高动态响应和灵活配置于一体,适用于电子制造行业(点胶、组装、检测)、半导体圆晶加工、芯片封装、激光切割、激光焊接、数控机床、精密检测及科研实验等,满足高精度、高动态的三维定位需求&…...
Prompt 初级版:构建高效对话的基础指南
Prompt 初级版:构建高效对话的基础指南 文章目录 Prompt 初级版:构建高效对话的基础指南一 “标准”提示二 角色提示三 多范例提示四 组合提示五 规范化提示 本文介绍了提示词的基础概念与不同类型,帮助用户更好地理解如何在对话中构建有效的…...
餐饮重点企业在AI领域的布局,看方大的AI实践
大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 AI已经被应用在餐饮餐厨行业的哪些方面&am…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
基于Java项目的Karate API测试
Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...
iOS 项目怎么构建稳定性保障机制?一次系统性防错经验分享(含 KeyMob 工具应用)
崩溃、内存飙升、后台任务未释放、页面卡顿、日志丢失——稳定性问题,不一定会立刻崩,但一旦积累,就是“上线后救不回来的代价”。 稳定性保障不是某个工具的功能,而是一套贯穿开发、测试、上线全流程的“观测分析防范”机制。 …...

