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机制是纯软件实现的方案就不需要多余的成本。

相关推荐
snoopyfly~9 小时前
Ubuntu 24.04 LTS 服务器配置:安装 JDK、Nginx、Redis。
java·服务器·ubuntu
Me4神秘10 小时前
Linux国产与国外进度对垒
linux·服务器·安全
Me4神秘10 小时前
电信、移动、联通、广电跨运营商网速慢原因
网络
-qOVOp-11 小时前
408第三季part2 - 计算机网络 - ip分布首部格式与分片
网络协议·tcp/ip·计算机网络
数通Dinner12 小时前
RSTP 拓扑收敛机制
网络·网络协议·tcp/ip·算法·信息与通信
牛奶咖啡1312 小时前
Linux系统的常用操作命令——文件远程传输、文件编辑、软件安装的四种方式
运维·服务器·软件安装·linux云计算·scp文件远程传输·vi文件编辑·设置yum的阿里云源
weixin_4373982112 小时前
转Go学习笔记(2)进阶
服务器·笔记·后端·学习·架构·golang
liulilittle13 小时前
SNIProxy 轻量级匿名CDN代理架构与实现
开发语言·网络·c++·网关·架构·cdn·通信
tan77º14 小时前
【Linux网络编程】Socket - UDP
linux·服务器·网络·c++·udp
小白爱电脑14 小时前
光纤的最小弯曲半径是多少?
网络