【IP协议】解决 IP 地址不够用的问题(IP地址管理:动态分配、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 的

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

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

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

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

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

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

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

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

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

  • 端口号本来是来区分同一个主机上不同的应用程序
  • 在 NAT 中,就可以用于区分不同主机上不同的应用程序
  • 在我的和你的数据包到达运营商路由器之后,要进行 IP 替换。同时运营商路由器会记录一个映射关系:
旧 IP 旧端口 新 IP 新端口
192.168.111.222 1234 1.2.3.4 1234
192.168.333.444 1235 1.2.3.4 1235

返回数据包的时候

  • 此时,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} 2128−232。这个地址空间非常大,大到可以给地球上的每一粒沙子都分配一个唯一的 IPv6 地址

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

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

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

相关推荐
月临水10 分钟前
JavaEE:网络编程(UDP)
java·网络·udp·java-ee
Coremail邮件安全12 分钟前
武汉大学:如何做好高校电子邮件账号安全防护
网络·安全·邮件安全·双因素认证·敏感信息
广东数字化转型19 分钟前
SSL/TSL 总结
网络·网络协议·ssl
XF鸭26 分钟前
计算机网络各层有哪些协议?
网络·计算机网络
2401_872514971 小时前
PPTP、L2TP、SSTP协议和HTTP、SOCKS5代理:全面解析与对比
网络
许野平1 小时前
Rust: Warp RESTful API 如何得到客户端IP?
tcp/ip·rust·restful·ip地址
不烦下雨c1 小时前
【网络】传输层协议TCP
网络·网络协议·tcp/ip
稳联技术1 小时前
汽车焊机数据通信:Profinet转Canopen网关的神奇连接
服务器·网络·汽车
KookeeyLena52 小时前
IP池对数据爬取工作的帮助
网络·网络协议·tcp/ip