《深入解析IPv6(第3版)》——1.2 IPv4地址空间受限的后果

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介:

本节书摘来自异步社区《深入解析IPv6(第3版)》一书中的第1章,第1.2节,作者: 【美】Joseph Davies 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 IPv4地址空间受限的后果

由于IPv4的地址相对比较稀缺,人们只得通过部署NAT来复用IPv4的私有地址空间。在一些配置方案中,在客户端和Internet之间甚至存在多级NAT结构。尽管NAT的确能够让更多的客户端连接到Internet中,但是它也会造成流量瓶颈,并对某些类型的通信造成困难。

让我们考虑一下NAT的运行方式并解释一下为什么网络地址转换是一种扩展性不强的临时替代方案,而且这种方案会对端到端的通信造成不良影响。

例如,如果某个小企业使用了192.168.0.0/24这个私有IPv4地址前缀作为公司的内网地址,而Internet服务提供商为其分配的公共IPv4地址为131.107.47.119。这个企业于是在网络的边缘部署了NAT,将所有位于192.168.0.0/24的私有地址都映射为131.107.47.119的公有地址。于是,NAT会动态选择TCP或UDP端口来将内部数据流映射为外部数据流。图1-1所示为这个配置的示例。

如果一台私有主机分配到了IPv4地址192.168.0.10,这台主机使用Web浏览器来连接位于157.60.13.9的Web服务器,那么这个私有主机就会创建以下这个IPv4数据包。

  • 目的地址:157.60.13.9
  • 源地址:192.168.0.10
  • 目的TCP端口:80
  • 源TCP端口:1025

然后,这个IPv4数据包就会被发送给NAT,而NAT会将出站数据包的源地址和源TCF端口号转换为:


<a href=https://yqfile.alicdn.com/c615e81b5e1b3e7b01911220da2e3821424ec4b1.png" >
  • 目的地址:157.60.13.9
  • 源地址:131.107.47.119
  • 目的TCP端口:80
  • 源TCP端口:5000

NAT会将{192.168.0.10 TCP 1025}与{131.107.47.119 TCP 5000}之间的映射关系保存在一个本地转换表中,以备将来调用。

转换后的IPv4数据包会在互联网中进行传输,Web服务器会发送响应消息,这个消息随后被NAT接收到。这个接收到的消息包含的信息为:

  • 目的地址:131.107.47.119
  • 源地址:157.60.13.9
  • 目的TCP端口:5000
  • 源TCP端口:80

NAT会查找转换表,并找出初始数据包发送过来时所创建的那个条目,然后根据这个条目来转换数据包的目的地址和目的TCP端口,并将数据包发送给主机192.168.0.10。发送出去的数据包包含的信息为:

  • 目的地址:192.168.0.10
  • 源地址:157.60.13.9
  • 目的TCP端口:1025
  • 源TCP端口:80

对于NAT的出站数据包,它的源IPv4地址(私有地址)会被映射为ISP分配的地址(公有地址),而它的源TCP/UDP端口号则会被映射为不同的TCP/UDP端口号。对于NAT的入站数据包,它的目的IPv4地址(公有地址)会被映射为原先的内部地址(私有地址),而它的目的TCP/UDP端口号则会被映射回原先的TCP/UDP端口号。

一般的网络地址转换依靠如下方法实现。

  • 地址转换:转换IPv4头部的IPv4地址。
  • 端口转换:转换TCP头部的TCP端口号或UDP头部的UDP端口号。
  • 地址和端口转换会降低NAT的转发性能,这是因为NAT必须为每个数据包分别执行上述额外的操作。因此,NAT往往不会被部署在大型环境中。不过,最新开发的标准(如运营商级NAT[CGN])承诺可以将NAT扩展到大型企业或ISP环境中。

若要修改IPv4包中除了地址以及端口以外的内容,NAT需要执行额外的处理过程,同时还需要额外的一个程序组件,叫做NAT编辑器(NAT editor)。不过,万维网(WWW)上传输的HTTP(超文本传输协议)流量不需要NAT编辑器,因为所有的HTTP传输仅仅需要进行地址和TCP端口转换。然而,以下情况都需要使用到NAT编辑器。

IPv4地址、TCP端口或UDP端口存储在有效负载的其他地方。例如,FTP(文件传输协议)的FTP PORT命令会把用点分十进制表示的IPv4地址存储在FTP头部。因此,如果NAT没有正确地为FTP端口命令转换FTP头部的IPv4地址并调整数据流中的TCP序列号,那么会发生连接问题或数据传输问题。
非TCP或UDP标识的数据流。例如,PPTP(点对点隧道协议)就不会使用TCP或UDP来传输数据。它是使用GRE(通用路由封装)的头部,及GRE头部的Call ID字段来标识数据流的。因此,如果NAT没有正确地转换GRE头部中的Call ID字段,也会发生连接问题。
大多数传输都能过穿越NAT技术,因为数据包要么只需进行地址或端口转换就可以满足转换需求,要么就会有NAT编辑器来正确地修改有效负载。不过,仍然有些传输是无法穿越NAT的。比如,如果需要转换的数据位于数据包中加密的部分,就无法对其进行转换。因为,地址或端口转换会破坏IPSec保护的数据包的完整性。目前,IPSec NAT-T(NAT-Traversal)技术可以对某几类IPSec保护的数据包进行NAT转换,它是当前的互联网标准。

除此之外,NAT还存在一个问题,那就是它会对对等体之间的应用造成影响。在对等体之间进行通信的过程中,每一个对等体扮演的角色既是客户端,又是服务器,并且都会向对端发起通信。如果其中某个对等体在NAT身后,那么它有出现了两个地址:一个是在NAT身后的地址(即私有地址);另一个是在NAT前的地址(即公有地址)。

请看下面一个简单的网络拓扑,在这个配置中NAT就会导致对等体之间的应用出现问题。图1-2所示为一个在边缘部署了NAT的内联网。


<a href=https://yqfile.alicdn.com/3c5f8fb8b87505f4d37d742ad598902b85ff5b21.png" >

由于所有主机都运行了对等体间的应用,因此主机A就可以向主机B(直连)与主机C发起会话。但是,主机A无法将主机B的公有地址和端口号告知主机C,因为主机A自己也不知道。同样,主机C也无法发起与主机A或主机B的会话,因为没有现成的转换条目可以将入站的连接请求数据包转换为主机A的私有地址和端口号。即使有转换表,主机C也不一定能发起与主机A与主机B的会话,因为在它看来,这两台主机使用的是同一个IPv4地址。

更麻烦的一点是,目前很多Internet对等体都位于NAT的身后。为了解决这个问题,对等体间应用或多方通信应用(multiple-party application)就必须有能力感知到NAT的存在,或者它们必须使用某些NAT穿越技术,而这无疑会让问题变得更加复杂。同样,一些可以感知NAT的程序都会使用一台回声服务器(echo server)来自动发现自己的地址和端口号,但为了在Internet上部署和维护回声服务器,独立软件供应商(Independent Software Vendor, ISV)就不得不增加开支。

NAT只是延长IPv4公有地址寿命的权宜之计,而不是IPv4公有地址空间问题的最终解决方案。NAT只有在客户端设备位于NAT之后,需要向服务器发起会话,建立客户端/服务器模式的通信时,才能很好地发挥其复用私有地址空间的功效。而大部分服务器设备仍需要明确的公用地址。服务器也可以置于NAT之后,但是这样的话,就必须为NAT手动配置一个静态的转换条目表,以便将入站数据包转换给服务器的内部地址和端口。由于在对等体之间的通信中,每个点既是客户端又是服务端,因此,被NAT分隔在两边的对等体就未必能够正确地进行传输,因此这些应用必须具备可感知NAT的能力。

相关文章
|
2月前
|
网络协议 开发工具 C语言
Jetson错误(二):wget命令提示无法解析主机地址的问题解决
对于解决在NVIDIA Jetson平台上使用wget命令时出现的无法解析主机地址的问题,提供了两种解决方法:一种是临时修改DNS服务器为Google的公共DNS,另一种是永久修改DNS设置。
132 5
|
7月前
|
域名解析 缓存 网络协议
【域名解析DNS专栏】IPv6与DNS:兼容性挑战与解决方案
【5月更文挑战第29天】随着IPv6逐渐成为互联网主流,DNS面临兼容性挑战,包括解析机制差异、资源记录类型扩展和查询流程优化。为解决这些问题,可采取升级DNS系统以支持IPv6、部署双栈DNS服务和优化DNS缓存策略。通过这些措施,可确保IPv6环境下的域名解析顺利进行。
670 1
|
2月前
|
存储 自然语言处理 API
基于 Python 的地址解析:自动识别姓名、电话、地址、详细地址与省市区
基于 Python 的地址解析:自动识别姓名、电话、地址、详细地址与省市区
253 1
|
3月前
|
网络协议 大数据 云栖大会
2024云栖大会 预告:IPv6与DNS基础资源专场
2024云栖大会 预告:IPv6与DNS基础资源专场
2024云栖大会 预告:IPv6与DNS基础资源专场
|
4月前
|
网络协议 安全 网络安全
|
4月前
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
|
4月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
|
5月前
|
存储 缓存 网络协议
ARP 地址解析协议
ARP 地址解析协议
88 0
|
6月前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
|
5月前
|
网络协议 安全 网络安全
解析IPv6报文结构
【7月更文挑战第1天】IPv6报文结构包括基本头和可选的扩展头,基本头固定40字节,含8个字段,不支持分片,提升了处理效率。扩展头灵活处理选项,长度为8字节的倍数,可包含如路由、分片、认证和安全封装等信息。多个扩展头按特定顺序排列,目的选项头可出现两次。

推荐镜像

更多