IP协议-NAT机制(理解网络结构的关键要点)
前言
我们现在使用得最多的IP协议版本是IPv4,IPv4是4个字节,32位,也就是说我们的IP地址最多就只有2^32(42亿)个,在日常生活中,我们需要联网的设备都需要有IP地址才能进行通讯,很明显现在42亿个IP地址已经完全不足以满足我们现在的需求了(就目前世界上需要IP地址的设备肯定超百亿)
此时聪明的程序员就想到了NAT机制来解决这个问题
NAT机制(网络地址转换)
对于IP地址不够用这个问题想到了一个办法:
我们把IP地址分为两大类
1.内网IP
不同局域网中的设备,.内网IP可以重复,相同局域网中的设备,.内网IP不可以重复
一般10.*,172.16.*至172.31.*,192.168.*都是内网IP
2.外网IP
外网IP不能重复
3.通讯存在的问题
a.如果是局域网内部的设备进行通信,肯定是顺利的(同一个局域网下的内网IP不同)
b.不同局域网中的设备进行通讯,是会存在一些问题的,由于是不同的局域网,所以内网IP有可能相同,因此不能直接进行通信,要想进行通信的话就需要一个带有外网IP的设备进行中转
c.局域网内部的设备访问外网IP的设备,我们平时使用的电脑,手机都是在局域网内部使用,它们会有内网IP,但服务器就有外网IP,两者进行通信就涉及到了NAT的工作过程
4.例子
假设我的电脑现在需要向csdn发送一个请求,就相当于是内网IP的设备要和外网IP的设备进行通信
以下的过程是简写
首先,假设我的电脑的上一层局域网就是电信路由器,电信路由器拥有外网IP,我的电脑发送一条IP协议的数据报给电信路由器,IP协议的数据报中就包括了源IP地址和目的IP地址,电信路由器接收到我的电脑发送的数据报后,就会触发NAT机制,电信路由器会使用自己的外网IP地址替换掉当前数据报中的源IP地址(相当于电信路由器用自己的外网IP地址替你发送数据报给csdn的服务器),此时数据报中的源IP地址和目的IP地址都是外网IP地址,就可以建立通信。
csdn的服务器接受到这个数据报后并不知道这个数据源自于我的电脑(不知道我的电脑的内网IP),它只知道csdn的外网IP,电信路由器肯定不止帮助我这一台设备,而是会帮助很多的设备转发数据报,所以NAT机制下,一个外网IP所代表的就不只是一个设备了,而是很多的设备
csdn服务器处理好请求以后会返回一个IP数据报给我的电脑,这个数据报就会先到达电信路由器,电信路由器要帮助很多的设备转发数据报,那么它如何知道当前这个数据报要发送给我的电脑呢?
当电信路由器替换数据报中的源IP地址为自己的外网IP时,会维护一个映射表,形如:替换前:我的内网IP 替换后:电信路由器的外网IP ,当电信路由器需要转发数据报给下层的设备时,就会对照映射表,将目的IP替换为我的内网IP,这样就确保了数据报发送到我的电脑上
NAT机制的重要性
当前的互联网世界就是NAT构建起来的
NAT的缺点很明显:
1.效率不高
2.非常繁琐
3.不方便直接访问局域网中的设备
.......
NAT机制虽然提高了IP地址的利用率(多个设备使用同一个外网IP),但并没有从根本上解决IP地址不够用这个问题
但NAT机制有一个最大的优点:NAT是一个纯软件实现的方案。
为什么纯软件实现的方案这个优点这么大呢,可以看下面多IPv6的介绍就知道了
IPv6
IPv6从根本上解决了IP地址不够用这个问题,IPv6是16个字节,128位,也就是说能表示2^128(42亿*42亿*42亿*42亿)个IP地址,这个IP地址是怎么用也用不完的
但是为什么现在的互联网世界是NAT构建起来的而不是IPv6呢?
因为IPv6和IPv4不兼容了,而市面上大多数的设备都采用的是IPv4,如果要使用IPv6的话就代表要更新设备,但大多数的人是不会去花钱更新设备的,所以IPv6就普及不起来,而NAT机制是纯软件实现的方案就不需要多余的成本。
相关文章:
IP协议-NAT机制(理解网络结构的关键要点)
前言 我们现在使用得最多的IP协议版本是IPv4,IPv4是4个字节,32位,也就是说我们的IP地址最多就只有2^32(42亿)个,在日常生活中,我们需要联网的设备都需要有IP地址才能进行通讯,很明显…...
Python UI自动化 —— 关键字+excel表格数据驱动
步骤: 1. 对selenium进行二次封装,创建关键字的库 2. 准备一个表格文件来写入所有测试用例步骤 3. 对表格内容进行读取,使用映射关系来对用例进行调用执行 4. 执行用例 1. 对selenium进行二次封装,创建关键字的库 from time imp…...
AI:06-基于OpenCV的二维码识别技术的研究
二维码作为一种广泛应用于信息传递和识别的技术,具有识别速度快、容错率高等优点。本文探讨如何利用OpenCV库实现二维码的快速、准确识别,通过多处代码实例展示技术深度。 二维码作为一种矩阵型的条码,广泛应用于各个领域,如商品追溯、移动支付、活动签到等。二维码的快速…...
Spring MVC Http Event Stream
什么是 Http Event Stream Event Stream 技术是一种实现服务器推送事件的方法,它通过在一个持续的 HTTP 连接上发送事件流来实现推送。具体来说,服务器发送一些事件到客户端,并将这些事件封装成一些指定格式的文本流。客户端通过监听这个流&…...
2023年亲测有效----树莓派启动时自动邮件上报ip
2023年亲测 树莓派启动时自动邮件上报ip 首先开启qq邮箱smtp服务shell文件内容启动自动执行python文件注意事项 首先开启qq邮箱smtp服务 然后点击开启就会有授权码 shell文件内容 在自己的shell里,运行echo $PATH,把内容覆盖下面的path。 功能 作用就…...
Direct3D颜色
在Direct3D中颜色用RGB三元组来表示,RGB数据可用俩种不同的结构来保存,第一种是D3DCOLOR,它实际上与DWORD类型完全相同,共有32位,D3DCOLOR类型种的各位被分成四个8位项,每项存储了一种颜色分量的亮度值。 由…...
LLM - 大模型速递 Baichuan2 快速入门
目录 一.引言 二.模型探索 1.模型下载 2.模型结构 ◆ Baichuan-1-13B 结构 ◆ Baichuan-2-13B 结构 3.模型测试 ◆ Baichuan-2-13B Chat 推理 ◆ Baichuan-2-13B 显存 4.模型量化 ◆ 在线量化 ◆ 离线量化 ◆ 量化效果 5.模型迁移 三.模型微调 …...
DB2和MYSQL的LOAD原理和比较测试
DB2 load的过程: (1)、装入阶段 装入阶段将源数据解析成物理数据页的格式,直接装入到数据页中。必要时还收集索引键和表统计信息。 (2)、构建索引阶段 根据在装入阶段收集的索引键创建表索引。 (…...
redisson常用api
redisson提供了很多对象类型的api,下面介绍下一些常用的对象api。 RBucket 可操作任何对象的api,前提是要确定好泛型,方法比较少。大小限制为512Mb。 RBucket<AnyObject> bucket redisson.getBucket("anyObject");bucket…...
MySQL——数据库以及数据表的创建
创建数据库 回到刚才创建数据库的问题,我们在创建数据库的时候可以通过添加一个参数,这个参数的意义在于当我们创建的数据库已经存在的时候则不会创建,也不会报错,如果不使用这个参数,则我们在重复创建一个已经存在的…...
智能配电房管理
智能配电房管理依托电易云-智慧电力物联网,利用先进技术手段,对配电房进行智能化、自动化的管理,以提高配电房的安全性、可靠性和效率。 智能配电房管理包括: 1.实时监测:通过传感器、监控设备等手段,对配…...
php如何解决高并发的问题?
在PHP中解决高并发问题可以采取以下几种策略: 使用缓存:通过使用缓存技术,可以将经常访问的数据存储在内存中,减轻数据库或其他资源的压力。常见的缓存技术包括Memcached和Redis。PHP提供了与这些缓存服务器进行交互的扩展和库。 …...
Linux操作系统
线程竞争 那么初始化一个整型为 0,使用一万个线程,每个线程都对该整型加 1,最后结果不一定会是 10000。这是因为整型变量的赋值操作不是原子操作,也就是说它不是一个不可分割的操作,而是由多条指令组成的。例如&#…...
华为OD:VLAN资源池
题目描述: VLANO 是一种对局域网设备进行逻辑划分的技术,为了标识不同的VLAN,引入VLAN ID(1-4094之间的整数)的概念。 定义一个VLAN ID的资源池(下称VLAN资源池),资源池中连续的VLAN用开始VLAN-结束VLAN表…...
大学大创项目:手机室内AR导航APP项目思路
文章目录 一、最初的项目思路二、建图和定位分离的项目思路1、建图2、定位 个人见解,如有错误,请多包涵 一、最初的项目思路 在大创项目的开始,将手机确定为应用设备,传感器确定为相机。 由于知识储备的原因,在头一次…...
OpenSSL加解密算法使用方法
下面简单记录一下 Linux上openssl命令的使用方法,包括 OpenSSL中加解密算法的使用方法和性能测试方法,以便让新手朋友们能快速用起来。持续更新中 … sm3算法 $ openssl sm3 /tmp/1.txt SM3(/tmp/1.txt) baafadbe43559b7043abd1682a4e12be05692cae175…...
Excel VSTO开发10 -自定义任务面板
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 10 自定义任务面板 自定义任务面板(有些地方称为侧边面板)即CustomTaskPane,这个类在Microsoft…...
百度智能云千帆大模型丨未来人手必备的代码助手
文章目录 1. 前言2. 千帆大模型平台3. 十分友好的功能4. comate代码助手5. 总结 1. 前言 我之前给大家推荐过Poe这个网站,它用的人比较少,但一旦接触后会发现它其实挺强大的。 因为它是一个可以同时支持好几个大模型的在线聚合平台。常用的GPT4&#x…...
美客多平台经营秘籍:为何测评补单操作是必要的?
许多经营美客多平台的商家有一种观念,他们认为美客多平台的规则与亚马逊有所区别。在美客多上,店铺比产品更重要,而且平台的竞争相对较小。因此,他们认为在美客多平台进行补单操作是不必要的。 然而,根据美客多平台的…...
AArch64内存管理
概述 本指南介绍AArch64中的内存转换,这是内存管理的关键。本文介绍了如何将虚拟地址转换为物理地址、转换表格式以及软件如何管理页表缓存 (TLB)。 这些对于底层代码(例如启动代码或驱动程序)开发人员都很有用。对于编写软件来设置或管理内…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
