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

相关推荐
xu_yule27 分钟前
网络和Linux网络-5(应用层)HTTP协议(方法+报头+状态码)
linux·网络·网络协议·http
n***44335 分钟前
Node.js HTTP模块详解:创建服务器、响应请求与客户端请求
服务器·http·node.js
报错小能手39 分钟前
TCP/UDP面经整理
网络·tcp/ip·udp
xxp432143 分钟前
Qt 网络编程 网络下载
网络·qt·php
2***s6721 小时前
【Go】Go语言基础学习(Go安装配置、基础语法)
服务器·学习·golang
xuchaoxin13751 小时前
cdn节点代理的副作用@fail2ban对接cdn封锁恶意请求ip@fail2ban封锁ip有效性问题
运维·网络·cdn·cloudflare
西幻凌云1 小时前
了解计算机网络的“物理根基”——物理层与数据链路层
网络·网络协议·计算机网络·数据链路层·物理层
于齐龙3 小时前
服务器常见问题-FAQ
服务器
正在努力的小河3 小时前
Linux 块设备驱动实验
linux·运维·服务器
wadesir4 小时前
Nginx配置文件CPU优化(从零开始提升Web服务器性能)
服务器·前端·nginx