3541 字
18 分钟
【计网 II】地址分配和转换

前言#

这一章主要介绍了网络地址的分配和转换。地址分配可以分为静态和动态,地址转换可以分为IPv4和IPv6。


地址分配#

我们在之前已经学习到了如何给终端设备静态分配地址,在网络适配器中可以自行调整。但是这对于用户来说不仅需要知道当前网络的网关信息、子网掩码等等,无疑加大了普通用户的难度。使用IP地址动态分配可以减轻IP地址分配的管理负担。

常见的动态地址分配协议是 DHCP(Dynamic Host Configuration Protocol, 动态主机配置协议),DHCP以客户端/服务器模式工作,可用于IPv4和IPv6。

DHCP使用 UDP 作为其传输协议。DHCPv4 客户端 通过 端口67 向DHCPv4服务器发送消息。 服务器 通过 端口68 向客户端发送消息。从 服务器 发送的DHCPv6消息使用UDP 端口546客户端 使用UDP 端口547 向服务器发送DHCPv6消息。

在DHCP中,动态分配的IP具有一定的 租期(lease),租期由服务器设置。客户端向服务器申请IP的时候一般分为4步,以v4为例。

  1. 客户端通过发送 广播DHCPDISCOVER 来定位DHCPv4服务器,广播DHCPDISCOVER可能到达多个服务器。
  2. 如果DHCPv4服务器可以提供客户端IP配置(可能包括IP地址、默认网关、DNS服务器和租用时间),则它将通过发送 单播DHCPOFFER 进行回复。
  3. 客户机通过发送 广播DHCPREQUEST ,让所有服务器知道接受了哪个服务器提供的IP配置。
  4. 服务器发送 单播确认DHCPACK ,使配置正式生效。

如果客户端检测到该地址 已经在本地网段上使用 ,它会发送一个 DHCPDECLINE 消息,然后重新开始该过程。

动态分配的IP租赁时间到期时,客户端必须重新申请,称为 续期(lease renewal), 服务器一般会重新分配相同的地址给同一个客户端 。此时只需要重复上述第三第四步即可。

如果客户端 不再需要IP地址 ,客户端将向服务器发送 DHCPRELEASE 消息。

我们在实际网络拓扑中,可能存在客户端和 DHCPv4 服务器不在同一网段上并被路由器隔开的情况,此时路由器会进行 DHCPv4中继 ,将广播请求转发到指向DHCPv4服务器的地址上。此时信息的MAC地址会变化,如图:


地址转换#

IPv4转换#

由于IPv4地址的数量有限,不能满足所有设备的需求,尤其是在大型组织或公司中。同时地址转换也提高了安全性, 内部网络的设备使用的是私有IP地址 ,外部攻击者就无法直接访问到内部网络的设备。此外,如果需要更换ISP或更改网络结构, 只需要更改少量的公共IP地址 ,而不需要更改内部网络中的私有IP地址。

地址转换通常使用 NAT(Network Address Translation)技术,它可以将主机的内部私有IP地址转换为外部可路由的公共IP地址。

当数据包通过边界路由器时, 源 IP 地址 会从内部专用地址转换为可路由的公共地址。当回复数据包返回时, 目的 IP 地址 字段中的公共地址又会被转换回内部专用地址,以便在内部网络内传送。私有地址和公有地址之间的映射关系由边关路由器的 NAT表 控制。

NAT中对于一个内网设备,存在以下四种地址:

  1. Inside Local Address:这是 内部网络中设备的实际IP地址 。这些地址通常是私有IP地址,如192.168.1.2。

  2. Inside Global Address:这是 内部网络设备在公有地址 。这通常是分配给路由器的公网IP地址。

  3. Outside Local Address:这是 外部设备在内部网络中的表示地址 。在基本的NAT配置中, Outside Local Address通常与Outside Global Address相同

  4. Outside Global Address:这是 外部设备在公共网络上的实际地址

我们通过一个例子来展示它们之间的区别。

假设我们有一个内部网络,其中一个设备PC2的内网IP是192.168.1.2。这个设备通过一个NAT路由器连接到互联网。NAT路由器的公有IP地址(Inside Global Address)是200.200.200.1。现在,这个内部设备想要访问一个在互联网上的服务器。这个服务器的IP地址是154.51.100.1。如图,对于这个PC2来说,可以得到这些地址:

  • Inside Local Address是192.168.1.2(PC2的实际地址)。
  • Inside Global Address是200.200.200.1(内部设备在公共网络上的表示地址)。
  • Outside Local Address是154.51.100.1(外部服务器在内部网络中的表示地址)。
  • Outside Global Address也是154.51.100.1(外部服务器在公共网络上的实际地址)。

当内部设备发送数据包到外部服务器时,数据包的源IP地址会从Inside Local Address(192.168.1.2)被转换为Inside Global Address(200.200.200.1),目标IP地址保持不变(154.51.100.1)。当外部服务器回应时,数据包的目标IP地址会从Inside Global Address(200.200.200.1)被转换回Inside Local Address(192.168.1.2),源IP地址保持不变(154.51.100.1)。这样,内部设备就可以通过NAT路由器与外部服务器进行通信。

因为此时外部服务器的地址为公网地址,所以Outside Local Address = Outside Global Address。

在某些情况下,Outside Local Address和Outside Global Address可能不同。这通常发生在一种称为双重NAT或多层NAT的情况下,其中多个NAT设备位于数据包的传输路径上。

NAT根据不同的情况有多种转换类型:

  • 静态NAT(Static NAT)
  • 动态NAT(Dynamic NAT)
  • 动态NAT重载(Dynamic NAT Overloading)或端口地址转换(PAT, Port Address Translation)
  • 静态NAT重载或端口转发(Static NAT Overloading or port forwarding)

静态NAT 是一种 一对一的映射 ,它将一个内部IP地址映射到一个公共IP地址。例如,一个内部网络中的设备可能有一个私有IP地址(如192.168.1.201),而在公共网络上,它被表示为一个公共IP地址(如200.0.0.1)。这种映射是固定的,不会随着时间或会话的变化而变化。静态NAT通常用于将公共IP地址映射到需要从Internet访问的内部服务器,例如Web服务器或邮件服务器。

动态NAT 是一种 多对一或多对多的映射 ,它将多个内部IP地址映射到一个或多个 公共IP地址(NAT IP池) 。这种映射是动态的,可以根据需要或会话的变化而变化。 公共IP池中,内部地址的映射会选择一个没有使用的公共IP,当IP池中没有没被使用的公共IP则无法映射。内部地址的映射存在租期,租期到了后自动释放映射关系。 动态NAT通常用于大型企业网络,其中有大量的内部设备需要访问Internet,但没有足够的公共IP地址供每个设备使用。

动态NAT可以动态分配映射关系,但在公共IP较少的情况下,大大限制了向外访问的能力。于是在动态NAT之上,提出了端口地址转换 PAT 。PAT不仅将内部IP地址映射到公共IP地址,还将内部端口号映射到公共端口号。这允许一个公共IP地址支持多个并发会话,每个会话都有一个唯一的公共端口号。这是家庭和小型企业网络中最常见的NAT类型,因为它允许多个设备共享一个公共IP地址。

同时,除了动态的PAT外,我们也有 静态的端口转发 。它允许外部设备通过指定的公共IP地址和端口号访问内部网络中的特定设备和服务。例如,你可能在家庭网络中有一个Web服务器,你希望从Internet上访问。你可以设置端口转发,将所有到达你的公共IP地址的HTTP请求(通常在端口80)转发到你的Web服务器的私有IP地址。 这种映射是固定的,不会随着时间或会话的变化而变化。


IPv6过渡与地址转换#

IPv4和IPv6之间因为协议而无法互相访问,随着互联网的发展,IPv4越来越少,越来越多的服务将使用IPv6。故为了实现IPv4到IPv6的过渡和访问,需要进行一些地址转换。

从IPv4过渡到IPv6有三种常见的方法:

  1. 双栈 (Dual Stack):双栈方法是在同一设备上 同时运行IPv4和IPv6协议 。这种方法的优点是它允许IPv4和IPv6网络无缝地共存,而不需要任何特殊的转换或隧道技术。设备可以根据目标地址或网络策略选择使用IPv4或IPv6。例如,一个双栈路由器可能有一个IPv4地址(如200.0.0.1)和一个IPv6地址(如2001:abcd:ef::1)。它可以根据目标地址或网络策略选择使用IPv4或IPv6来发送和接收数据包。

  2. 隧道技术 (Tunneling)隧道技术是一种将IPv6数据包封装在IPv4数据包中进行传输的方法。 这种方法的优点是它允许IPv6设备 通过IPv4网络进行通信 ,即使这些设备并不直接连接到IPv6网络。例如,一个IPv6设备可能在一个IPv4网络中,但它需要访问一个IPv6网络。在这种情况下,设备可以创建一个IPv6在IPv4的隧道,将IPv6数据包封装在IPv4数据包中,然后通过IPv4网络将数据包发送到目标IPv6网络。

  3. 协议转换 (Protocol Translation)协议转换是一种将IPv6数据包转换为IPv4数据包(反之亦然)的方法。 这种方法的优点是它允许IPv4和IPv6设备直接进行通信,即使它们使用的是不同的IP版本。例如,一个IPv4设备可能需要访问一个IPv6网络。在这种情况下,一个协议转换网关可以将IPv4数据包转换为IPv6数据包,然后将数据包发送到目标IPv6网络。同样,当IPv6设备回应时,网关可以将IPv6数据包转换回IPv4数据包,然后将数据包发送回原来的IPv4设备。

隧道技术,就是在两个分隔的网络之间建立一个通道使得数据可以流通。例如,假设你有一个IPv6网络在地理位置A,而你需要在地理位置B的另一个IPv6网络上发送数据,但在这两个地方之间的网络只支持IPv4。在这种情况下, 你可以在位置A创建一个IPv6到IPv4的隧道你将IPv6数据包封装在IPv4数据包中,然后通过IPv4网络将数据包发送到位置B在位置B,数据包被解封装,原始的IPv6数据包被提取并发送到目标网络。

有一些常见的隧道技术:

  1. 手动隧道 (Manual Tunnel):这是最基本的隧道技术,需要手动在两个端点上配置隧道。这种方法简单,但不适合大规模部署,因为每个隧道都需要单独配置。

  2. GRE (Generic Routing Encapsulation):GRE是一种通用的隧道协议,可以封装各种网络层协议。GRE隧道可以用于封装IPv6数据包在IPv4网络上的传输,也可以用于其他应用。

  3. 6to4:6to4是一种自动隧道技术,它使用特殊的IPv6地址,这些地址的前32位是固定的(2002::/16),后32位是IPv4地址。6to4隧道允许IPv6网络通过任意的IPv4网络进行通信。

  4. 6RD(IPv6 Rapid Deployment)是一种使用IPv4基础设施快速部署IPv6服务的方法。它是基于6to4隧道技术的一种改进,它允许使用任何范围的IPv6地址。

  5. ISATAP (Intra-Site Automatic Tunnel Addressing Protocol):ISATAP是一种在IPv4网络内部创建IPv6隧道的方法。它允许IPv6设备通过IPv4网络进行通信,即使这些设备并不直接连接到IPv6网络。

IPv6的协议转换常常与NAT地址转换在一起操作,称为 NAT-PT(Network Address Translation-Protocol Translation)。它不仅可以转换包头中的地址,还可以转换协议本身,使IPv4主机能够与IPv6主机进行通信,反之亦然。

静态NAT-PT:在静态NAT-PT中,网络管理员 手动配置IPv4和IPv6地址之间的一一映射 。这意味着每个IPv4地址都有一个对应的IPv6地址,反之亦然。这种方式的优点是它可以提供稳定的地址映射,但缺点是它不适合大规模部署,因为每对地址都需要单独配置。

动态NAT-PT:在动态NAT-PT中,IPv4和IPv6地址之间的映射是动态生成的。 当一个IPv4主机需要与IPv6主机进行通信时,NAT-PT设备会自动为其分配一个IPv6地址。同样,当一个IPv6主机需要与IPv4主机进行通信时,NAT-PT设备也会自动为其分配一个IPv4地址。 这种方式的优点是它可以自动处理地址映射,无需手动配置。但缺点是地址映射可能会频繁改变,这可能会影响到某些需要稳定地址的应用。

但是 NAT-PT设备需要处理大量的地址转换和协议转换,这会增加网络延迟 ,并可能导致某些应用无法正常工作。因此,NAT-PT通常只在IPv6部署的过渡阶段使用,最终目标仍然是全面部署IPv6。

【计网 II】地址分配和转换
https://hoyue.fun/network2_4.html
作者
Hoyue
发布于
2024-02-25
最后更新于
2024-02-25
许可协议
CC BY-NC-SA 4.0
评论