【IP协议】解决 IP 地址不够用的问题(IP地址管理:动态分配、NAT、Ipv6)

文章目录

  • 方案一、动态分配 IP 地址
  • 方案二、NAT
    • NAT 机制的缺点
  • 方案三、IPv6

方案一、动态分配 IP 地址

一个设备上网就分配 IP,不上网就先不分配(权宜之计)


方案二、NAT

网络地址转换


以一当千,使用一个 IP,代表一大波设备

NAT 把 IP 地址分为两大类:

  1. 内网 IP / 私网 IP(重要)

    • 10.*
    • 172.16~172.31.*
    • 192.168.*
  2. 外网 IP / 公网 IP:除了私网 IP 就都是公网 IP

要求公网 IP 必须是唯一的,但是私网 IP 在不同的局域网中是允许重复的

  • 一台电脑上,有几个网卡就有几个 IP 地址,虚拟出来的网卡也算(软件模拟的网卡)
  • 一般笔记本都会有:有线网卡和无线网卡,具体哪个生效就看你当前是用网线上网还是 WiFi 上网

NAT 网络地址转换

一个设备在进行上网的时候,IP 数据报中的 IP 地址,就会被 NAT 设备(通常就是路由器)进行自动修改

  1. 同一个局域网内,主机 A 访问主机 B
    不会涉及到 NAT 机制

  2. 公网上的设备 A,访问公网上的设备 B
    不会涉及到 NAT 机制

  3. 不同局域网中的主机 A 访问另一个局域网的主机 B
    NAT 机制中,是不允许的

之前写 UDP 回服务器的时候,我这台电脑上启动 UDP 服务器,你使用 UDP 客户端是不能访问的

  • 因为我处于我这里的局域网,你处于你们那的局域网
  • NAT 机制下,一个局域网中的主机 A 是无法访问领一个主机
  1. 局域网内部的设备 A,访问公网上的设备 B
    NAT 机制主要就是针对这个情况进行生效

但凡是搭建一个服务器给别人使用,都是需要公网 IP 的

  • 单个设备
    image.png|540
  • 此时我的电脑要想访问 CCtalk 这个服务器,就要构造一个 IP 数据报
  • 数据包到达运营商路由器(NAT 设备)之后,就会进行网络地址转换
    • 将源 IP 地址由我的 IP 地址变为运营商公网 IP 地址
    • 所以 CCtalk 看到的数据包,源 IP 不是 192.168.111.222,而是 1.2.3.4

为什么进行这样的 IP 地址的替换就能提高 IP 地址的利用率呢?

  • 其实日常上网的设备:手机、电脑、电视、空调等绝大部分都是在不同的局域网中
  • 此时就相当于一个公网 IP 就可以代表一大批设备

运营商的公网 IP,不是服务一个设备,而是服务一个片区,可能有上万个设备。此时一个 IP 就代表了上万个设备,此时 IP 的利用率就大大提高了

  • 就相当与你在网上买东西,写的收货地址是:北京市海淀区清华园清华大学
  • 这个地址对应着几万个人,而不是你一个人

CCtalk 的响应如何正确地返回到我的电脑上呢?

image.png|473

  • CCtalk 要构造一个响应数据包
  • 达到运营商路由器之后,里面的目的 IP 就会被替换回我的电脑 IP
  • 之后就能顺利达到我的电脑
    运营商路由器这样的 NAT 设备能在发出和收回的时候都进行 IP 替换,就能使内网设备和外网设备进行连接

  • 多个设备(同一个局域网内)

在网络通信中,不仅仅只有 IP 信息,还有一个关键的是端口号

  • 端口号本来是来区分同一个主机上不同的应用程序
  • 在 NAT 中,就可以用于区分不同主机上不同的应用程序

image.png

  • 在我的和你的数据包到达运营商路由器之后,要进行 IP 替换。同时运营商路由器会记录一个映射关系:
旧 IP旧端口新 IP新端口
192.168.111.22212341.2.3.41234
192.168.333.44412351.2.3.41235

返回数据包的时候
image.png

  • 此时,CCtalk 服务器返回的响应数据也是有 IP,也是有端口
  • 端口就决定这个返回值是给我还是给你
    • 运营商路由器收到这个目的端口后,就会看原来记录的映射关系
    • 根据传过来的目的端口,运营商路由器可以知道是哪个 IP 传过来的
    • 之后再将这个目的端口对应的 IP 替换上去就可以传到对应的设备了
  • 目的端口是 1234,就是传给我
  • 目的端口是 1235,就是传给你

此处就是通过端口号,来区分不同主机的不同程序

是否可能出现:你和我的电脑上 CCtalk 源端口恰好是一样的?

  • 这个概率非常小;客户端这里的源端口,是操作系统随机分配的空闲端口
  • 就算你的端口号也是 1234,但是路由器建立映射关系表的时候,可以把端口号也替换成不重复的其他端口
    NAT 既能替换 IP 中的 IP,也能替换 TCP/UDP 中的端口。这个就是 NAPT

我们当前的网络世界,主要就是 NAT 机制的支撑


NAT 机制的缺点

  • 网络环境太复杂了
  • 替换过程中,每一层路由器都需要维护映射关系
  • 每次转发数据,都要查询映射关系
  • 每个步骤都是开销

方案三、IPv6

从根本上解决了 IP 地址不够用的问题

  • IPv4 使用 32 位 4 个字节表示 IP 地址
  • IPv6 使用 128 位 16 个字节表示 IP 地址
    16 个字节表示的 IP 地址数目,比 4 个字节的 IP 地址大: 2 128 − 2 32 2^{128}-2^{32} 2128232。这个地址空间非常大,大到可以给地球上的每一粒沙子都分配一个唯一的 IPv6 地址

IPv6 提出的时间是在上个世纪 90 年代,时间上和 NAT 其实是差不多的。之所以 IPv6 举步维艰,因为 IPv6 和 IPv4 不兼容!

  • 要想使用 IPv6,就要更换新的设备(能支持 IPv6 的设备)
  • IPv6 提出的当年,显然是不具备这样的条件的。换设备就得花钱,但花钱了网速又不会变快(用户感知不到好处)
    NAT 机制,只要给路由器设备更新升级软件即可,硬件不需要改变(成本非常低)

关于Ipv6,强烈推荐大家看一个视频:(https://www.bilibili.com/video/

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【探索数据结构与算法】希尔排序原理、实现与分析(图文详解)

目录 一、 引言 二、算法思想 三、算法步骤 四、代码实现 五、复杂度 💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:探索数据结构与算法 一、 引言 希尔排序(Shell Sort)是插入排序的一种更高效的改进版本&#x…

oracle 使用 PL/SQL Developer创建表并插入单条、多条数据

第一步:使用工具创建表(前提是库已经创建好了):在当前用户下找到Tables 然后点击并右键,点击新建 写上表名,写上表名的注释 第二步添加字段:点击列,然后分别写上你自己需要的字段及名…

LDR6020,单C口OTG,充放一体新潮流!

PD(Power Delivery)芯片实现单Type-C接口输入和输出OTG(On-The-Go)功能,主要是通过支持USB Power Delivery规范和OTG功能的特定硬件和软件设计来实现的。以下是对这一过程的具体解释: 一、PD芯片基础功能 …

OpenCV_图像像素读写操作

本文详细介绍了如何在C项目中使用OpenCV进行图像像素的读写操作,包括使用头文件声明Pixel类,通过遍历和指针方式处理灰度图和彩色图,以及在主函数中调用这些操作。 数组遍历的方式进行图像像素读写 void QuickDemo::pixelVisit_Demo(Mat&am…

【Android安全】Ubuntu 16.04安装GDB和GEF

1. 安装GDB sudo apt install gdb-multiarch 2. 安装GEF(GDB Enhanced Features) 官网地址:https://github.com/hugsy/gef 2.1 安装2021.10版本 但是在Ubuntu 16.04上,bash -c "$(curl -fsSL https://gef.blah.cat/sh)"等命令不好使&…

文字loading加载

效果 1. 导入库 import sys from PyQt5.QtCore import QTimer, Qt, QThread, pyqtSignal from PyQt5.QtGui import QPainter, QFont, QColor, QBrush from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QProgressBar, QLabel 代码首先导入了P…

django-admin自定义功能按钮样式

位置在原来的django-admin 栏中的上方【会因为屏幕大小而变换位置】 <!-- 这里是不会替换掉旧的 添加按钮 &#xff0c;而是添加多一个按钮【点击Crawl Data】--> <!-- /home/luichun/lc/Pyfile/Pywebback/app/paqu/templates/admin/yourmodel_changelist.html -->…

深度揭秘:日志打印的艺术与实战技巧,让你的代码会说话!

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f341;日志&#x1f342;日志分模块实现讲解&#x1f343;日志等级的实现&#x1f965;日志时间*时间的获取* &#x1f308;文…

web基础之文件上传

1.下载安装 下载地址 链接&#xff1a;百度网盘-链接不存在 提取码&#xff1a;jhks 安装 直接把他放在phpstudy的WWW目录中。&#xff08;phpstudy的下载安装&#xff0c;可以自行百度一下&#xff09; 打开 访问地址&#xff1a;127.0.0.1/upload-labs 问题 这里可能…

开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)

文章目录 一、认识PDFBox一、pandas是什么&#xff1f;二、导入依赖三、基础功能demo1&#xff1a;读取pdf所有内容demo2&#xff1a;读取所有页内容&#xff08;分页&#xff09;demo3&#xff1a;添加页眉、页脚demo4&#xff1a;添加居中45文字水印demo5&#xff1a;添加图片…

数据结构——栈和队列(队列的定义、顺序队列以及链式队列的基本操作)

目录 队列&#xff08;queue&#xff09;的定义 顺序队——队列的顺序表示和实现 顺序队列&#xff08;循环队列&#xff09;的类型定义 顺序队列上溢问题的解决方法 ​编辑 循环队列的基本操作 队列的基本操作——队列的初始化 队列的基本操作——求队列的长度 队列的…

Element UI入门笔记(个人向)

Element UI入门笔记 将页面分割为一级菜单、二级菜单、导航栏三个部分&#xff1b;使用npm下载安装&#xff0c;使用语句npm i element-ui -s; 布局组件 el-form 用于创建和管理表单&#xff1b;从属性上看&#xff1a; :model&#xff1a;用于双向数据绑定&#xff0c;将表单…

Windows下SDL2创建最简单的一个窗口

先看运行效果 再上代码&#xff1a; #include <stdio.h> #include "SDL.h"int main(int argc, char* argv[]) {// 初始化SDL视频子系统if (SDL_Init(SDL_INIT_VIDEO) -1){printf("Error: %s\n", SDL_GetError());return -1;} // 创建一个窗口SDL_…

『功能项目』战士职业平A怪物掉血【44】

我们打开上一篇43事件中心的项目&#xff0c; 本章要做的事情是给主角增加一个xxxCtrl.cs脚本&#xff0c;再创建一个xxxOpt.cs调用xxxCtrl.cs机制层利用事件中心再写一个主角战士平A对怪物的伤害 首先创建脚本&#xff1a;PlayerCtrl.cs using UnityEngine; public class Pla…

JavaScript 笔记汇总

JavaScript 笔记汇总 引入方式 内部方式 通过 script 标签包裹 JavaScript 代码。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JavaScript 基础 - 引入方式</title> </head> <…

校园社团|基于springBoot的校园社团信息管理系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信…

顺序表(c语言实现)

顺序表是一种数据结构&#xff0c;它在计算机内存中以连续的存储位置来存储数据元素。 一、特点 1. 随机访问&#xff1a;可以在常数时间内访问特定位置的元素&#xff0c;例如&#xff0c;通过下标可以快速找到对应元素。 2. 存储密度高&#xff1a;不需要额外的指针来链接…

【运维监控】Prometheus+grafana+kafka_exporter监控kafka运行情况

运维监控系列文章入口&#xff1a;【运维监控】系列文章汇总索引 文章目录 一、prometheus二、grafana三、部署kafka_exporter1、下载2、解压3、配置4、启动5、验证 四、prometheus集成grafana监控kafka1、修改prometheus配置2、导入grafana模板3、验证 本示例通过kafka_export…

从0书写一个softmax分类 李沐pytorch实战

输出维度 在softmax 分类中 我们输出与类别一样多。 数据集有10个类别&#xff0c;所以网络输出维度为10。 初始化权重和偏置 torch.norma 生成一个均值为 0&#xff0c;标准差为0.01,一个形状为size(num_inputs, num_outputs)的张量偏置生成一个num_outputs 10 的一维张量&a…

【计网】数据链路层:概述之位置|地位|链路|数据链路|帧

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山岗&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ 1. 在OSI体系结构中的位置 1. 位置&#xff1a;数…