目录
4.3IP路由
4.3.1路由
4.3.2路由表
4.3.3路由协议
4.3.4重新发送
4.3.5路由表的规范
4.3.6VRF(虚拟路由转发)
4.3.7策略路由
4.4IP地址的分配方法
4.4.1静态分配
4.4.2动态分配
4.4.3DHCP中继代理
4.5NAT(Network Address Translation,网络地址转换)
4.5.1静态NAT
4.5.2NAPT(Network Address Port Translation,网络地址端口转换)
4.5.3CGNAT(Carrier Grade NAT,电信级 NAT)
4.5.4NAT穿透
4.3IP路由
4.3.1路由
路由器和三层交换机通过管理与接收方IP地址进行对照的名为接收方网络的信息,和表示应当将IP数据包转发到相邻设备的IP地址的名为下一跳点的信息,来切换IP数据包的转发目的地。这种切换IP数据包转发目的地的功能被称为路由。此外,对接收方网络和下一跳点进行管理的表则被称为路由表,路由器需要根据路由表进行路由
-
路由器对IP数据包进行路由的示意图
假设 PC1(192.168.1.1/24)会通过两台路由器与 PC2(192.168.2.1/24)进行IP数据包的传输,在此基础上进行说明(图 4.3.1)。此外,为了对路由的操作有一个纯粹的理解,假设所有的设备都已经完成了对相邻设备的MAC 地址的学习

1.PC1 会将发送方IP地址设置为PC1的IP地址(192.168.1.1),将接收方IP 地址设置为 PC2 的 IP 地址(192.168.2.1),并使用IP首部进行封装,对自己的路由表进行搜索。192.168.2.1不会与直接连接的 192.168.1.0/24 进行匹配,而是会与表示所有网络的默认路由地址(0.0.0.0/0)进行匹配
然后,需要在 ARP 表中搜索默认路由地址的下一个跳点的 MAC 地址。192.168.1.254的MAC 地址是R1(e0/0)。因此,需要将发送方 MAC 地址设置为PC1(eth0)的MAC地址,将接收方 MAC 地址设置为 R1(e0/0)的MAC 地址,使用以太网帧进行封装之后,就可以将数据传输到缆线中。
此外,通常将默认路由的下一个跳点称为默认网关。终端在对存在于互联网中的大量网站进行访问时,首先会将 IP数据包发送给默认网关,然后将路由处理交由默认网关的设备负责执行

2.接收了来自PC1 的IP数据包的 R1 会査看IP首部中的接收方IP地址,并对路由表进行搜索。由于接收方IP地址是 192.168.2.1,因此会与路由表的 192.168.2.0/24 匹配。接下来,就需要在 ARP 表中搜索 192.168.2.0/24 的下一跳点 192.168.12.2的 MAC 地址
192.168.12.2的MAC地址是 R2(e0/0)。因此,需要将发送方 MAC 地址设置为出口的接口 R1(e0/1)的 MAC 地址,将接收方 MAC 地址设置为R2(e0/0)的MAC 地址,使用以太帧进行封装之后,就可以将数据传输到缆线中了

3.从 R1 接收了 IP数据包的 R2 会査看 IP 首部的接收方 IP 地址,并对路由表进行搜索。由于接收方IP 地址是 192.168.2.1,因此可以与路由表中的 192.168.2.0/24 匹配。然后,需要在 ARP 表中搜索192.168.2.1的 MAC 地址
192.168.2.1的MAC 地址是 PC2(eth0)。因此,需要将发送方 MAC 地址设置为出口的接口 R2(e0/1)的 MAC 地址,将接收方 MAC 地址设置为 PC2(eth0)的 MAC地址,并再次使用以太帧进行封装之后,将数据传输到缆线中
4.从 R2 接收了IP数据包的 PC2 会査看数据链路层的接收方 MAC 地址和网络层的接收方IP地址,接收数据包,并将数据转交给上层(传输层到应用层)进行处理


4.3.2路由表
负责对路由进行管理的是路由表。而如何创建这个路由表,就是网络层的关键所在。路由表的创建方式大致可以分为两种,一种是静态路由(Static Routing),另一种是动态路由(Dynamic Routing)。这两种方式都可以如图所示进一步进行细分

-
静态路由
静态路由是一种手动创建路由表的方法,需要一个一个地对接收方网络和下一跳点进行设置。由于易于理解,也易于运用和管理,因此非常适合用于小型网络环境的路由管理中。由于需要对所有的路由器逐一设置接收方网络和下一跳点,因此不适用于大型网络环境中
eg: 如图所示的 IPv4 配置场合,就需要在 R1 中静态设置 192.168.2.0/24 的路由,在 R2 中静态设置 192.168.1.0/24 的路由

eg:IPv6也需要手动在R1中静态设置2001:db8:2::/64的路由,在R2中静态设置2001:db8:1::/64的路由

IPv6与IPv4的区别就是可以在下一跳点使用链路本地地址(一般情况下,下一跳点会设置成链路本地地址)
-
动态路由(大型网络环境或配置易发生变化中使用)
动态路由是一种相邻路由器之间通过相互交换自身路由信息的方式,实现路由表自动创建的方法。
用于交换路由信息的协议称为路由协议
配置eg:路由器R1和路由器R2会相互交换路由信息,并将交换信息添加到路由表中。

下图为在上图环境中添加新的网络的例子。添加新路由器后,同样需要与新路由交换路由信息,并对整个路由表进行更新。若使用动态路由,则无须在路由器中逐一设置路由,这些处理会由路由协议负责。

网络上的路由器对所有路由能够正确识别的状态被称为收敛状态,所需时间称为收敛时间
路由协议还具有容错作用。例如有多条通往接收方的路线,其中一条发生故障,若使用动态路由,就会通过自动更新路由表或者通知变更的方式来确保新路线的自动建立,无须特地设置迂回路由。如下图所示,路由器会自动切换路线


4.3.3路由协议
根据控制范围分为IGP(Interior Gateway Protocol,内部网关协议)和EGP(ExteriorGateway Protocol,外部网关协议)
对这两种协议进行区分的根据是AS(Autonomous System,自治系统)。AS 是一种基于一个策略进行管理的网络的集合。这个概念可以粗略地认为“AS=组织(ISP、企业、研究机构、网络节点)",对 AS 内部进行控制的路由协议是IGP,对AS和AS之间进行控制的路由协议则是EGP

-
IGP的重点是路由算法和度量值
目前网络环境中最常用的协议是RIP、OSPF及EIGRP,要理解这些协议,需要掌握路由算法和度量值
路由算法
是一种如何创建路由表的规则,路由算法差异与收敛时间和应用规模相关,IGP的路由算法可以分为距离向量和链路状态两种类型
-
距离向量类型
根据距离和方向对最优路由进行计算的路由协议,距离表示去往接收方需要经过路由器的数量(跳数),方向表示输出接口。到达接收方需要经过的路由器数量是最优路由的判断标准,每台路由器都需要通过相互交换路由表的方式创建路由表
-
链路状态类型
根据链路状态对最优路由进行计算的路由协议,每台路由器需要通过相互交换自己链路(接口)的状态、带宽和IP地址等各种信息的方式创建数据库,并根据相关信息创建路由表
度量值
表示的是到接收方网络的距离,不是物理距离而是网络中的逻辑距离
IGP包括RIP、OSPF与EIGRP 3种协议

-
RIP(Routing Information Protocol,路由信息协议)
是一种距离向量类型的路由协议,现如今用的不多
通过定期交换路由表本身的方式来创建路由表(原理简单,但路由表越大,消耗网络带宽越多,收敛时间越长),不适合用于大型网络环境
度量值需要使用跳数,跳数表示去往接收方网络需经过的路由器数量,经过越多,距离就越远
IP版本不同,RIP使用的协议也不同,在IPv4 环境中(RFC 2453 RIP version2 进行标准化的 RIPV2),IPv6环境中(RFC 2080 RIPng for IPv6 进行标准化的 RIPng)

-
OSPF(Open Shortest Path Fast,开放式最短路径优先)
是一种链路状态类型的路由协议,长期以来使用RFC制定标准化,常混用于中型到大型的网络环境
OSPF需通过每台路由器相互交换链路状态、带宽、IP地址、子网掩码等信息的方式创建链路状态数据库(LSDB),然后基于数据库对最优路由进行计算,并创建路由表,OSPF只需要在状态发生变化时更新路由表
路由器通常会发送一种名为Hello的小数据包来检查对方是否正常运行,不会过度占用带宽。OSPF的关键性概念是“区域”,为了防止以收集信息的方式创建的LSDB尺寸过大,需将网络划分为多个区域,只与同一区域中的路由器共享LSDB
度量值中需要使用”成本“,默认情况下,成本是以”100÷带宽(Mb/s)“的方式计算出的整数值,并且每经过一条路由器都会在输出接口添加数值。路由带宽越高,越容易成为最短路由(传输带宽超过100MB/s的成本值都相同,近年来普遍采取将分子100增大的做法)
如果路由器学习到的路由的成本是完全相同的,就可用所有成本相同的路由对通信进行负载均衡处理,这种处理称为ECMP(Equal Cost Multi Path,等价多路径路由)。ECMP不仅可以提高容错能力,还可以用于扩展带宽,可以在很多不同的网络环境中使用
IP版本不同,OSPF使用的协议也不同,IPv4中(RFC 2328 OSPF version2 进行标准化的 OSPFV2),IPv6 环境中(RFC 5340 OSPF for Pv6 进行标准化的 OSPFV3)

-
EIGRP(Enhanced Interior Gateway Routing Protocol,增强内部网关路由协议)
是一种对距离向量类型协议进行扩展的协议,是一种结合RIP和OSPF优点的路由协议。路由器之间首先会交换自己的路由信息,并创建各自的拓扑表,从中提取最优路由信息,然后创建路由表(此部分与RIP类型),此外,只有在发生变更时才需要更新路由表,通常会发送名为Hello的小数据包检查对方正常运行状态(此部分与OSPF相似)
度量值会默认使用带宽和延迟,带宽使用”10000÷最小带宽(Mb/s)“的方式进行计算,需使用去往接收方网络的路由中最小的值进行计算。延迟使用”微秒÷10“的方式进行计算,并在每次经过路由器时添加输出接口。将两者相加再乘以256的结果,就是EIGRP的度量值,EIGRP与OSPF一样,默认处理是ECMP,若度量值完全相同,可以使用所有相同的路由,对通信进行负载均衡处理
IP版本不同,EIGRP使用的协议也不同,IPv4中(EIGRP),IPv6 环境中(EIGRP for IPv6)

-
EGP只有BGP一种选择
EGP是一种用于对AS和AS 进行连接的路由协议,目前网络中,通常使用BGP(Border Gateway Protocol,边界网关协议),由于目前使用BGP的版本是4,可称为BGP4或BPGv4
BGP重点是AS号、路由算法和最优路径选择算法
-
AS号
互联网是由运行了 BGP 的路由器将全球范围内的 AS 连接起来而构成的一个大型网络。因此,需要使用通过路由器交换 BGP 的方式创建的全球路由信息“完整路由”,以击鼓传花的方式将发送到互联网的数据包传输到具有接收方IP 地址的终端
对 AS 进行识别的号码被称为AS号。AS号是0~65535 的数字,但是0和 65535 属于保留号码,无法使用。因此,可以根据用途使用1~65534 之间的数字

全局AS号是互联网上唯一的AS号。与全局IP 地址一样,也是由 ICANN 及其下属组织(RIR、NIR、LIR)进行管理的,是一种分配给ISP、数据中心提供商、电信运营商等组织机构的号码。私有AS号则是指该组织内部可以自由使用的AS号
-
路由算法
BGP是一种路径向量类型的协议,需要根据路径(Path)和方向(Vector)对路由进行计算
路径表示去往接收方需要经过的 AS,方向则表示 BGP 对等体。去往接收方需要经过多少个 AS 是判断最优路径的标准之一,BGP 对等体则是指交换路由信息的对象。BGP需要指定对象(Peer)建立 1:1 的TCP 连接,并在其中交换路由信息。BGP 需要与 BGP 对等体交换路由信息并创建 BGP 表,然后根据相应的规则(最优路径选择算法)选择最优路径。之后,在将最优路径添加到路由表的同时,将其传播给BGP对等体。BGP也和OSPF、EIGRP一样,只需在发生变化时更新路由表。在更新路由表时需要使用 UPDATE消息。此外,通常情况下,需要使用 KEEPALIVE消息检查对方是否正常运行

-
最优路径选择算法
最优路径选择算法表示的是一种判断哪条路径为最优路径(BestPath)的规则。互联网是一种使用BGP 将全球范围内的 AS 连接起来的网状结构。一旦涉及需要连接整个地球,就会牵涉到国家、政治、金钱等因素,让情况变得复杂。为了能够灵活应对这些情况,BGP中提供了大量的路由控制功能。BGP的路由控制中需要使用属性(Attribute)功能。因此,BGP会在UPDATE 消息中嵌入NEXT_HOP 和LOCAL_PREF 等各种属性,并将这些属性一起登记在 BGP 表中。可以根据图所示的算法选出最优路径。通过从上到下依次进行比赛的方式,一旦决出胜负之后,就不会再继续进行之后的比赛然后,需要将选出的最优路径添加到路由表中,同时将最优路径传播给 BGP对等体


4.3.4重新发送
前面每种协议需要使用不同的路由算法和度量值,且处理进程也不同,无法相互兼容。对于管理员而言,能够只使用一种路由协议构建统一的网络,是最简单且最理想的做法。但是,现实往往没有那么丰满。因为公司可能会合并也可能会被拆分,或者设备一开始就不支持该协议,像这样各种情况接踵而至,就迫使不得不使用多种路由协议进行应对。在这种情况下,就需要灵活地对它们进行转换,使它们可以协同工作这一转换处理被称为重新发送。虽然也可以称其为重新发布或再发布(Redistribution),但指代的都是后一种处理

需要在连接路由协议和路由协议的边界路由器中设置重新发送。边界路由器需要从路由表中选出转换前的路由协议所学习过的路由进行转换和传播
4.3.5路由表的规范
-
优先更精细的路径(最长匹配)
最长匹配是一条路由规则,当存在多个路由与接收方IP地址的条件匹配时,应当使用子网掩码最长的路由。路由器接收到IP数据包后需对该接收方IP地址和路由表中登记的路由进行对照,此时需采用最匹配的路由,即子网掩码最长的路由,将数据包转发给下一跳点

eg:假设具有192.168.0.0/16、192.168.1.0/24和192.168.1.0/26路由的路由器接收了接收方IP地址为 192.168.1.1的IP数据包。这种情况下所有路由都是与192.168.1.1 匹配的,此时就可以使用最长匹配。因此,路由器会选择子网掩码最长的路由 192.168.1.0/26,将数据转发给 1.1.1.3.

-
使用路由聚合汇总路由
对多个路由进行汇总的做法称为路由聚合
当路由器接收到IP数据包时,需对路由表中登记的每一条路由进行搜索,这种机制存在路由越多,路由器负载越大。为提升效率,通常会采用无类划分子网的结构,这会导致路由增加时,负载随之增加的问题,而路由聚合则可以通过对下一跳点中相同的多个路由进行汇总的方式来减少路由数量,从而降低路由器的负载
方法:只需要将下一跳点中相同路由的网络地址转换为比特,再将子网移动到相同的比特即可
eg:假设有一条路由器具有表 4.3.3 所示的4个路由。在这种状态(路由聚合前)下接收IP数据包,就需要进行4次检查

接下来尝试对这些路由进行路由聚合处理。将表4.3.3中的接收方网络转换成比特之后,就变成下图所示的到22比特为止都是相同的比特数组。因此,路由就可以聚合成 192.168.0.0/22。如果在这里接收 IP 数据包,就只需要进行一次检査即可。虽然图示例中只是将4次检查减少到1次,但是在实际当中,可以将几十万个路由聚合成一条路由,来使路由表的尺寸产生急剧的变化。

将路由聚合的作用发挥到极致的是将所有的路由聚合成一条路由的默认路由。默认路由需要将默认路由地址 0.0.0.0/0 登记到路由器中。当路由器接收到IP数据包时,如果没有与接收方IP地址匹配的路由,路由器就会将数据包转发给默认路由的下一跳点(默认网关)
-
如果接收方网络完全相同,就用AD值
AD(Administrative Distance,管理距离)值相当于为每个路由协议设置的优先级。AD 值越小,优先级越高
若使用多个路由协议,或者使用静态路由对完全相同的路由进行了学习,就无法使用最长匹配,此时就可以使用 AD 值。可以对路由协议的 AD 值进行比较,只将AD值较小,即优先级较高的路由登记到路由表中,并优先使用该路由

AD 值的设置取决于每台网络设备,Cisco 公司生产的路由器和三层交换机设置的是表所示的AD值。除了直接连接之外,其他都可以进行更改。它常用于重新发送时的路由环路预防和浮动静态路由中

4.3.6VRF(虚拟路由转发)
是一种让一台路由器具有多个独立路由表的虚拟化技术。它与 VLAN 的路由器版本相似
VLAN 是一种使用名为VLAN ID的数字虚拟地对一台交换机进行划分的技术。VRF则是一种使用名为RD(Route Distinguisher, 路由标识)的数字虚拟地对一台路由器进行划分的技术
使用 VRF 创建的路由表是完全独立的,因此使用相同IP子网也不会有任何问题,可以正常运行。此外,还可以根据每个RD运行不同的路由协议
使用 VRF,就可以在物理层面将若干台旧的路由器合并为一台,以减少需要管理的路由器数量

4.3.7策略路由
策略路由(Policy Based Routing,PBR)是一种根据策略进行路由的技术
之前讲解的路由是一种根据接收方网络切换转发目的地的技术,而策略路由则是一种根据发送方网络、特定的端口号等各种条件来切换转发目的地的技术。如果使用策略路由,就可以不受限于路由表,进行大范围的灵活的转发处理。但是相反地,它存在容易产生延迟且易于产生较大的处理负载等缺点。因此,在实际工作中通常会使用传统路由进行设计,只有存在传统路由无法应对的需求时,才会在例外的情形使用策略路由进行应对

4.4IP地址的分配方法
将IP地址分配给终端(的NIC 网卡)的方法
IP地址的分配方法大致可以分为静态分配和动态分配两种

4.4.1静态分配
静态分配是一种手动为终端逐一设置 IP 地址的方法。连接网络的终端用户会请求系统管理员提供一个空闲的IP地址,并对其进行设置
由于静态分配会对终端和IP地址进行唯一的关联,因此具有便于管理IP地址的优点。但是,当终端数量变得越来越多时就可能会不知道为哪台终端分配了哪个IP地址,导致管理趋于复杂和繁琐。因此,在那些大型局域网环境中,通常会采用动态分配的方法

4.4.2动态分配
动态分配是一种为终端自动设置IP地址的方法
静态分配是用户向系统管理员请求提供空闲的IP地址,并手动进行设置;而动态分配则是使用包括DHCP(Dynamic Host Confguration Protocol,动态主机配置协议)在内的多种协议完全自动执行所有的这些处理
即使是那些设置了大量终端的大型局域网环境,也可以使用动态分配集中地对IP地址进行管理省去繁琐的IP地址管理。但是,其也存在很难掌握何时为哪台终端设置了哪个IP地址的缺点

IPv4与IPv6使用动态分配方法不同
-
IPv4的动态分配
需要使用 DHCPv4(Dynamic Host Confguration Protocol version 4,动态主机配置协议版本4)。DHCPv4 是一种将连接网络所需的设置(IPv4 地址、默认网关、DNS服务器的IP地址等)从 DHCPv4 服务器分发给终端的协议
DHCPv4需要在一边使用广播和单播的同时,一边使用UDP进行传输。首先,DHCPv4 客户端会使用广播在同一网络中询问大家“有谁可以给我一个网络设置吗?”,然后DHCPv4服务器就会使用单播进行“请使用这个设置”的答复。于是,DHCPv4 客户端就可以根据该信息进行各种设置

-
IPv6的动态分配
动态分配方法包括 SLAAC(Stateless Address Autoconfguration,无状态地址自动配置)和 DHCPv6 两种
SLAAC
一种根据路由器公布的网络信息(子网前缀、DNS服务器的IP地址等)自动对IPv6地址进行设置的功能,由RFC4862 IPv6 Stateless Address Autoconfguration 确定标准化。SLAAC 需要一边使用组播和单播,一边使用ICMPv6 进行传输。首先,SLAAC客户端需要使用名为 RS(Router Solicitation)的组播的ICMPv6 数据包向同一网络中的所有路由器询问“请给我一份网络的信息”,然后路由器(SLAAC 服务器)则会使用名为RA(Router Advertisement)的单播的ICMPv6数据包答复“这是网络的信息”。在这些处理当中,除了最开始的组播之外,其他处理都需要使用链路本地地址进行。SLAAC 客户端接收到答复之后,会根据该信息自动生成前缀长度为64 比特的IPv6 地址并对默认网关和 DNS 服务器的 IP 地址等各种项目进行设置

DHCPv6
DHCPv6(Dynamic Host Confguration Protocol version 6,动态主机配置协议版本6)在使用 DHCP服务器向终端分配IP地址这一点上与 DHCPv4 相同,但两者并不兼容,是完全不同的协议。虽然DHCPv6 也使用UDP协议,但端口号是不同的。此外,它不是单独使用 DHCP 进行处理,而是需要与RS/RA协同工作。DHCPv6 客户端在交换了路由器和 RS/RA之后,需要使用组播的DHCPv6 数据包查找 DHCPv6 服务器,然后 DHCPv6 服务器就会返回请求的信息。在这些处理中,除了组播之外,其他处理都需要使用链路本地地址进行
此外,DHCPv6 包括有状态模式和无状态模式两种。在有状态模式中,DHCPv6服务器不仅会分发DNS服务器的IP 地址等可选设置,还会连IPv6 地址一起进行分发;相反地,在无状态模式中DHCPv6 服务器只会分发可选设置,IPv6 地址则是由 SLAAC 自动生成。此外,在任何模式下,默认网关都是根据RA的信息进行设置的

4.4.3DHCP中继代理
无论是在 DHCPv4 中还是在 DHCPv6 中,运行DHCP 都需要以客户端和服务器都在同一网络中(VLAN、广播域)为前提
但是在网络众多的环境中,逐一准备 DHCP 服务器并不现实。因此DHCP中提供了一种名为DHCP中继代理的功能。DHCP 中继代理是一种可以将 DHCP 数据包转换成单播的功能,它在从 DHCP 客户端开始的第1个(第1跳)路由器上启用。由于是单播,因此即使在不同网络中设置了 DHCP 服务器,也可以分配IP地址。此外,即使存在很多网络,也可以使用一台 DHCP服务器进行覆盖

4.5NAT(Network Address Translation,网络地址转换)
对IP地址进行转换的技术
使用NAT可以解决IP环境中潜在的各种问题、如可以节约数量趋于不足的全局IP地址,或者可以在具有同一网络地址的系统之间进行通信。NAT 需要使用一种名为 NAT 表的内存中的映射表将转换前后的IP地址和端口号关联起来进行管理。NAT需要配合 NAT表一起使用
NAT 包括广义的 NAT 和狭义的 NAT。广义的 NAT 是指对IP地址进行转换的整个技术

4.5.1静态NAT
静态NAT(Static NAT)需要以 1:1的方式将内部和外部的IP地址关联起来再进行转换。也可以将其称为 1:1NAT,狭义的 NAT 就是指这种静态NAT
静态 NAT 中预先准备了一条 NAT 登记项,用于对 NAT 表中内部的IP地址和外部的IP地址进行唯一关联。从内部访问外部时,就需要根据这条 NAT 登记项对发送方IP地址进行转换;相反地,从外部访问内部时,则需要对接收方IP 地址进行转换。静态NAT 可以用于将服务器公布到互联网的情形,也可以用于特定的终端使用特定的IP地址与互联网进行传输的情形

4.5.2NAPT(Network Address Port Translation,网络地址端口转换)
NAPT需要以n:1的方式将内部和外部的IP地址关联起来再进行转换。虽然也可称其为IP伪装或 PAT(Port Address Translation),但是指代的都是同一种处理
NAPT 会动态添加/删除在 NAT 表中对内部的IP地址+端口号和外部的IP地址+端口号进行唯一关联的 NAT 登记项。从内部访问外部时,不仅需要转换发送方地址,还需要转换发送方端口号。由于需要通过查看哪台终端使用哪个端口号的方式来分配数据包,因此可以转换为 n:1的形式

4.5.3CGNAT(Carrier Grade NAT,电信级 NAT)
CGNAT是一种为了能够在电信运营商和 ISP 中使用而对 NAPT进行了扩展的功能
运营商需要为数十万到数百万规模的用户提供高效且集成度高的互联网连接服务,因此 CGNAT 在前面讲解的 NAPT 的基础上进行了扩展,在其中添加了端口分配功能、EIM/EIF 功能(全锥形 NAT)、连接限制功能等电信运营商和 ISP 需要具备的功能
如果电信运营商是 NTT DoCoMo、au、Rakuten Mobile,应该就会分配“10.x.x.x”的私有IPv4地址。智能手机的数据包会被电信运营商的LTE 网络中使用的 CGNAT 设备转换到全局 IPv4 地址,再被发送到互联网中

-
端口分配功能
NAPT 是一种使用端口号以 n:1的形式将内部和外部的IP地址关联起来并进行转换的技术。但是到了电信运营商这种规模,理所当然,只有一个外部的IPv4 地址是远远不够的。每个IPv4 地址可以为用户分配的端口号数量是 64512(65535-1024+1)个。如果数十万用户一起使用,端口号就会在瞬间耗尽,从而导致无法分配 IP 地址。如果无法分配地址,那么就无法进行通信。因此,CGNAT会将外部的IP地址汇总成多个IP地址池,并将它们以 n:n 的方式关联起来

CGNAT 可以根据如何分配IP地址池和与之关联的端口号分为静态分配、PBA(Port Block Allocation,端口数据块分配)和动态分配3种。采用哪种分配方式,取决于表示可以容纳多少用户的聚合效率和识别用户的日志输出量这两个方面
静态分配
静态分配是一种静态为用户分配预先准备好数量的端口号的方法。无论用户的使用状况如何,都会以“从这里到那里的部分给这个用户使用”的方式分配端口号。静态分配与PBA和动态分配相比,虽然聚合效率较差,但是不需要获取日志
PBA
PBA是一种位于静态分配和动态分配中间位置的分配方法,用于将指定的端口数据块(端口号的范围)动态分配给用户。虽然与静态分配相比,PBA的聚合效率更高,但是需要获取日志;此外,与动态分配相比,虽然聚合效率更低,但是可以减少输出日志的数量
动态分配
动态分配是一种为用户动态分配端口号的方法。由于可以对分配的所有端口号进行高效利用,因此可以提高聚合效率。但是,由于需要以日志的方式记录何时、由谁(哪一个私有IPv4 地址)在使用哪一个全局 IPv4 地址和端口号,因此会输出大量的日志
下图对这3种分配方式进行了比较,并展示了如何对分配给一个IPv4 地址的每个端口号进行使用

-
EIM/EIF 功能(全锥形 NAT)
EIM(Endpoint Independent Mapping,端点独立映射)是一种即使接收方不同,也可以在一段时间内持续地为相同的发送方IP地址和发送方端口号的通信分配相同的地址池和端口号的功能。此外,EIF(Endpoint Independent Filter,端点独立过滤器)则是一种可以在一段时间内接收 EIM 分配的地址池和端口号的入站请求(来自互联网的通信)的功能。启用EIM 和EIF的NAT被称为全锥形NAT

eg:最近的在线竞技游戏采用的是在服务器端匹配对手之后,进行P2P(点对点)通信的方式。由于NAT 下属的用户终端只具有私有 IPv4 地址,因此无法通过互联网直接进行P2P的通信。但是,如果使用全锥形NAT,就可以在一段时间内分配相同的发送方IPv4 地址和发送方端口号,并在一段时间内允许它们进行通信。因此,就好像该用户终端拥有一个全局IPv4 地址一样,可以进行集成度高的处理进行 P2P 的通信

NAT回环
NAT 回环是一种在同一CGNAT设备下的用户终端之间,使用全局IPv4 地址实现回传通信的功能。其基本概念和全锥形 NAT 没有太大区别。全锥形 NAT 是假设与CGNAT 设备外部的终端进行通信,而 NAT 回环则是假设与同一 CGNAT 设备下的终端进行通信

-
连接限制
连接限制是一种限制一台用户终端可使用的端口数量的功能。如果一台用户终端挥霍无度地使用端口,那么无论有多少端口都是不够用的。因此,需要对一台用户终端可使用的端口数量进行限制,尽可能让所有用户可以公平地使用端口

4.5.4NAT穿透
由于 NAT下的终端只拥有私有IP 地址,因此无法通过互联网直接进行通信。于是,NAT提供了一种可以穿越 NAT 设备、让终端之间直接进行通信的 NAT 穿透(NAT Traversal)技术。NAT穿透可以大致分为端口转发、UPnP、STUN 和 TURN
-
端口转发
端口转发是一种将特定的IP 地址/端口号的通信转发给预设的内部终端的功能,可以在需要将内部(局域网)的服务器向外部(互联网)公布的情况下使用

-
UPnP(Universal Plug and Play,通用即插即用)
UPnP是一种可以根据终端的请求,自动进行端口转发的功能。终端在连接网络时会查找路由器,并发送端口转发的请求,路由器则会响应该请求,动态地进行端口转发处理

-
STUN(Session Traversal Utilities for NATs,NAT 会话穿透工具)
STUN是一种允许使用 UDP、从外部(互联网)与内部(局域网)进行通信的功能。其也被称为UDP打洞,常用于索尼PlayStation 4的NAT类型判断中。当终端从内部(局域网)向外部(互联网)发送UDP数据包时,大多数路由器为了发送作为答复的数据包,会允许一段时间内从外部到内部进行访问。可以运用这个属性。首先,每台终端会使用 UDP与 STUN 服务器进行通信,并识别自己与通信对象的全局 IPv4 地址和端口号。此时,路由器会允许每个全局IPv4 地址和端口号在一段时间内进行通信。因此,每台终端在访问全局IPv4 地址和端口号时就可以直接进行通信

-
TURN(Traversal Using Relay around NAT)
TURN是一种需要使用 TURN 服务器的通信功能。每台终端都需要访问TURN服务器,再通过TURN服务器进行通信。由于不是进行直接通信,虽然多少会产生一些通信延迟,但是比 STUN 更为简单






