网络数据传输与NAT技术的工作原理

前言:

本文介绍了私有IP地址的划分及其在网络通信中的应用。针对IPv4地址枯竭问题,通过NAT(网络地址转换)技术,私有IP可转换为公网IP实现互联网访问,同时通过端口映射解决内网主机通信问题。文章还阐述了公网IP分配机制、网络层级结构以及内外网通信原理,指出公网无法主动访问内网的特点。私有IP和NAT技术的结合有效缓解了IP地址不足的困境。

关于IP报头解析和公网划分:

子网划分核心原理 (网络原理1)-CSDN博客

私有IP

在互联网早期,IPv4地址(32位,约42亿个)被认为足够使用,但随着网络设备爆炸式增长,IPv4地址很快面临枯竭问题 。为了解决这个问题,1996年 RFC 1918 标准定义了私有IP地址 (Private IP Address),允许不同内部网络重复使用相同的私有IP,从而大幅减少对公有IP的需求。

私有IP怎么划分?

私有IP的划分主要基于 RFC 1918 标准,划分为10.0.0.0/8、172.16.0.0/12192.168.0.0/16三个范围。如下:

类别 IP范围 默认掩码 可用主机数 适用场景
A类私有 10.0.0.0 ~ 10.255.255.255 255.0.0.0 (/8) 约1677万台主机 超大型企业/数据中心
B类私有 172.16.0.0 ~ 172.31.255.255 255.240.0.0 (/12) 约100万台主机 中型企业/校园网
C类私有 192.168.0.0 ~ 192.168.255.255 255.255.0.0 (/16) 约6.5万台主机 家庭/小型办公室

基于这三个类可再通过调整子网掩码,将大范围IP拆分为更小的子网。

不同子网内部可以重复使用相同的私有IP,那么子网与子网之间,子网与公网(外网)是如何通信呢?

  • ⼀个路由器可以配置两个IP地址,⼀个是WAN⼝IP,⼀个是LAN⼝IP(⼦⽹IP)。路由器LAN⼝连接的主机,都从属于当前这个路由器的⼦⽹中。
  • 不同的路由器,⼦⽹IP其实都是⼀样的(通常都是192.168.1.1)。⼦⽹内的主机IP地址不能重复。但是⼦⽹之间的IP地址就可以重复了。
  • ⼦⽹内的主机需要和外⽹进⾏通信时,路由器将IP⾸部中的IP地址进⾏替换(替换成WAN⼝IP),这样逐级替换,最终数据包中的IP地址成为⼀个公⽹IP。这种技术称为NAT(Network Address Translation,⽹络地址转换)。
  • 如果希望我们⾃⼰实现的服务器程序,能够在公⽹上被访问到,就需要把程序部署在⼀台具有外⽹IP的服务器上。这样的服务器可以在阿⾥云/腾讯云上进⾏购买。

地区或者国家IP的分布:全球各国IP地址段国家/地区列表 | IP地址 (简体中文) 🔍

  • 注意:NAT技术几乎解决IP地址不足问题。不过只是"止痛药"的效果,随着入网网民越多会导致路由器压力越来越大,需要付出更多的代价。
  • 注意:内网、子网、局域网本质上是同一概念的不同表述方式,与之相对应的,外网、公网、广域网也是同一事物的不同叫法。
  • 注意:路由器分为企业级和家用级,路由器本身就有构建子网的能力。有给子网内所有主机分配ip的能力。

内网→公网:私有IP访问互联网

既然子网之间主机是可以重复使用IP地址的,那么当它们访问公网,访问同一个服务器时,怎么解决IP冲突问题呢。

因为私网IP可以重复,所以一个私网IP不能出现在公网上,也不能出现在另一个子网中,私网IP只能在一个子网内使用。而当子网内的主机要访问公网时,在路由的过程中会进行IP替换,每经过一个路由器都会把源IP替换成路由器的IP,到公网出入口路由器时用的就是公网IP,就能访问到相应的服务器。举个例子:

比如主机A要访问抖音,那么它不能直接用自己的私网IP去访问,而是在经过路由器时进行IP替换。这就是NAT技术。

而关于报文怎么从公网送到内网主机,到后文讲解。

公网→公网:互联网主机之间的通信

公网IP需要个国家运营商自主申请,运营商不仅要组建内网,还需要组建自己国家的公网环境。公网IP分配的多少需要结合各国家或地区网民数量,并不是简单的依据国家或地区进行分配的。网络拓扑结构十分复杂没有人能够构建出来,这里我们就以国家为单位进行讲解,旨在能说明问题。

假设各国家申请的都是A类网络,即网络位为8位。各国家拿着这些IP再通过调整子网掩码搭建国家内部公网,也就是随着公网划分得越细网络位占用得越多,可能变为16位,24位等等。相反的可用的主机位就越来越少。最后通过NAT技术搭建内网,使用私网IP。

如下,假设中国国家路由器公网IP是5.0.0.1/8,然后划分到省间路由器5.1.0.1/16(陕西为例),然后划分到市间路由器5.1.16.1/20(西安为例),后面就搭建内网。

可以发现路由器有很明显的层状结构,有国家级的,省级的,市级的......在同层内路由器通过广播让其他路由器知道自己的IP地址,即在一个层级内的路由器可以互相通信。而一个路由器既属于上层也属于下层。所以整个网络的任意路由器就可以通信。

具体怎么做的呢?

每增加一个路由器,该路由器都会给它同级的路由器发送广播信息,其他路由器就得到它的IP信息,同样的其他路由器也回复自己的IP信息。所以每一个路由器上路由表上都有它同层的路由信息和它下层的路由信息,都有对应网络位对应的下一跳的IP地址。如下:

假设俄罗斯某服务器要向IP为5.1.16.2主机发送报文,通过IP可以检测到该报文不是发给本国的,那么这个报文最后必将传送到俄罗斯的国家路由器。然后与路由表上的子网掩码进行按位与得到网络位,确定是下一跳发给中国国家路由器,同样的逻辑确定省、市、最后再传到内网。在公网上的传输就结束了。

公网→内网:外部服务响应内网主机

接下来讲解报文如何从公网到内网主机。回顾上文内网到公网,如下:

可以确定的是公网的服务器一定能通过IP找到目标主机的公网出入口路由器的,但接下来这个报文又该去哪里呢?要知道内网中所有的子网的主机IP最终替换成的都是这个公网出入口路由器的公网IP去访问服务器。

这个时候NAPT转化 就来解决问题了。事实上在报文传递过程中不仅做了IP替换还进行了端口号的替换。在每个内网路由器内都有一张转化表,储存了源IP和端口到替换后的IP和端口的映射关系。

要能做出映射关系,首先要保证键值的唯一性,那么替换端口号是怎么保证键值唯一性的呢?

首先,一个子网内的IP+port是具有唯一性的,但到该子网的路由器后任何主机的私网IP全部替换成路由器的IP,此时所以报文IP都是一样的,不过再对port替换(对的port重新一一进行编号)后报文的IP+port也有了唯一性,所以就能做映射关系。

如下:

所以在内网主机访问公网这一路上,就在每个路由器上留下了自己的足迹(映射),回来的时候按映射关系送回到子网主机。

也因如此,公网是无法主动去访问内网的,因为没有映射关系,找不到指定主机。除非用特殊的技术手段(即"内网穿透"技术)。比如公司内部的私有服务,而你是公司的员工,想要访问到该服务(内网服务)此时就需要使用内网穿透。

除此之外,不同子网中主机是不能不通过公网直接通信的,除非使用特殊技术手段,即内网打洞

公网和内网有着不同的路由算法,公网路由比内网要复杂得多,因为它要协调全球数万个自治系统(AS)的商业策略和技术路径,而私网只需在单一管理域内优化技术指标。

非常感谢您能耐心读完这篇文章。倘若您从中有所收获,还望多多支持呀!

相关推荐
一只小bit2 小时前
Linux网络:阿里云轻量级应用服务器配置防火墙模板开放端口
linux·网络·阿里云
BachelorSC4 小时前
【网络工程师软考版】网络安全
网络·安全·web安全
(Charon)5 小时前
【C语言网络编程】HTTP 客户端请求(基于 Socket 的完整实现)
网络·网络协议·http
Bryce李小白6 小时前
Kotlin实现Retrofit风格的网络请求封装
网络·kotlin·retrofit
Lovyk7 小时前
Linux网络管理
服务器·网络·php
MC皮蛋侠客8 小时前
AsyncIOScheduler 使用指南:高效异步任务调度解决方案
网络·python·fastapi
DAWN_T179 小时前
关于网络模型的使用和修改/保存和读取
网络·人工智能·pytorch·python·深度学习·神经网络·机器学习
fake_ss19810 小时前
计算机网络基础(一) --- (网络通信三要素)
java·网络·tcp/ip·udp·信息与通信
GISer_Jing11 小时前
WebSocket双向通信——引入进行功能优化
网络·websocket·网络协议
2501_9200470311 小时前
python-网络编程
开发语言·网络·python