Skip to content

Lec 5 互联网路由协议 & 架构

ISP(AS)之间的路由选择的一种EGP:BGP路由协议(边界网关协议,Border Gateway Protocol),

阅读资料

总览

  • 网路层编址
  • Internet 控制协议
  • 路由算法
  • BGP 与 EGP

Internet 协议

先阅读 RFC 1958 网络设计原则后,开始探索 Internet 网络之旅。在网络层,可以把Internet 看作是一种互相关联的网络或者自治域(自治系统,AS)集合。 没有真正的结构,但存在几个主要的骨干网,其中最大的称为一级网络(Tier 1 network),每个骨干网都跟它连接,进而达到其他骨干网。连接到骨干网上的是Internet 服务提供商(ISP)。注意的是,国家级运营商,比如中国联通骨干网未必是Tier-1,但是Tier-1 必定不用交钱。

image-20260502180035558

将整个Internet 黏合在一起的是Internet Protocol(互联网协议,IP)。应该这样看待网络层: IP的任务是提供 best-effort 地把数据包从源端发送给目标端,无需考虑这些机器是否在同一个网络,也不关心它们之间是否还有其他网络。 理论上每个数据包最多可以容纳64KB,但实际上,数据包通常不超过1500B,因而可以正好被放入到一个以太网帧中。IP路由器转发每个数据包穿过Internet,知道达到目的地。

IPv4协议

开始学习Internet网络最恰当的方式就是从IP数据报本身的格式开始。头部是一个20字节的定长和可选变长部分组成。IP 数据报头按照字段顺序发送,每个字段内部按网络字节序(big-endian,aka网络字节序)发送;第一个字节先发送,其中包含 Version 和 IHL

大端的意思是, 多字节字段传输时,是高位字节先发、低位字节后发。单个字节而言,bit 顺序是一样的。

  • Version: IPv4就是4;IPv6就是6
  • IHL: 指定头部到底多长(以32位字节长度为单位),最小值为5,这表明没有可选项
  • Differentiated services: 前6位表示服务类型(Type of service ),比如优先满足可靠性还是速度,但实际上许多年都没人用。后2位用来携带显式拥塞通知信息,比如数据包是否经历了拥塞。
  • total length: 包含头 + 数据。最大长度是 65 535 个字节。
  • Identification: 让目标主机确定一个新到达的分段属于哪一个数据报
  • 深色的1位: 没有用到
  • DF(Don't Fragment):这是针对路由器的一个命令,不允许路由器分割该数据报
  • MF(more Fragment):除了最后一个段以外,其他所有段都必须设置这一位。用途是接收方可以知道什么时候一个数据报的所有分段都已经到达了。对于没有分片的数据报,此时MF = 0
  • Fragment offset:指明了该段在当前数据报中的位置,除了最后一段,其他必须是8的倍数。
    • 举个例子,假如MTU = 1500,IP = 20B,发送数据3200B,则每个分片最大是1480B,而1480恰好是8的倍数。第一个分片而言,offset=0/8=0, MF=1, 总长度为1480,第二个分片而言,offset=1480 / 8=185, MF=1,总长度为1480; 第三个分片而言,offset=2960/8=370,MF=0,总长度为3200 - 2960 = 240
  • TTL(Time to live):用于限制数据包生存期的计数器。这里的计数单位最初设置为秒,因此最大的生存期为 255 秒。在每一跳上该计数器必须被递减,当数据报在路由器排队时间较长时,计数器必须多倍递减。 实际上,只是跳计数器,递减到0时,将包丢弃并且给数据包的源主机发回一个报警包,此项特性可以避免数据包永远逗留在网络中。
  • Protocol: 当接收完完整数据包后,需要知道如何对它进行处理。这个编号是整个Internet都通用的,RFC 1700规定了所有的协议
  • header checksum: :当数据到达时,所有的 16 位(半字)累加起来,然后再取结果的补码。该算法的目的是到达数据包的头校验和计算结果应该为0。注意每一跳必须重新计算头校验和字段,因为TTL一直在改变。但是采用一些技巧可以加速计算。
  • 源地址 和目标地址。
  • 至于可选项头部,已经失宠了。作为罕见案例被搁置了。

image-20260502184359484

IP地址

Internet上每台主机和路由器都有一个IP地址。值得注意的是,一个IP地址并不真正指向一台主机,而是指向一个网络接口。一个主机可以有多个接口

与以太网地址不同的是IP地址有层次性。前缀的优势是,仅根据地址的网络部分即可转发数据包。 考虑到Internet的主机数量接近十亿,这对于每个路由器来说太大了, 而通过分层的方式路由器只需要保持约 30 万条前缀的路由。

关于子网 为了避免冲突,网络地址的管理由一个称为Internet 域名和地址分配机构(ICANN)的非营利性公司负责。ICANN一次将部分地址空间授权给各个区域机构,这些机构再把IP地址分发给ISP和其他公司。这就是一家公司获得一块IP地址的过程。但是这只是故事的开始, 因为随着企业的成长也在不断地消耗着。 假如一个项目组A申请了一个/16网络号,一年后有新的项目组B,这时候去申请另外一块肯呢个不太划算,项目A还没达到那么大规模,解决方法是,将一个网络分成几个部分供多个内部网路使用。这就是子网划分(subnetting)

同样场景,我们以学校为例, 块的一半(一个/17 )分配给了计算机科学系,四分之一分配给了电机工程 学系(一个/18 ),八分之一(一个/19 )分配给了艺术系,剩余的八分之一未分配。

image-20260502212712628

当数据包到达时,路由器会检查该数据包的目标地址,并检查属于哪个子网。具体做法是,路由器把目标地址与每个子网的掩码进行AND操作,查看结果是否对应某个前缀。例如,一个发往128.208.2.151的数据报。为了看它是否属于CS系,将其AND 255.255.128.0获得前17位(即128.208.0.0),并检查是否匹配CS的前缀地址(128.208.128.0),显然不匹配。然后再检查前 18 位,发现与EE匹配。

在网络外面,子网的划分是不可见的,因此分配新的子网不需要联系ICANN 和 改变任何外部数据库。

CIDR——无类域间路由

即使 IP 地址按块分配,因此地址空间得以有效地使用,但还有一个问题依然存在:路由表爆炸。特别是对于骨干网、核心网来说。

幸运的是,我们可以做一些事情来减小路由表的长度。我们可以运用与子网划分相同的观点, 不同地点的路由器可以知道一个给定 IP 地址的不同大小前缀。然而,不是将一 地址分割成子网,相反,在这里我们把多个小前缀的地址块合并成一个大前缀的地址块。 这个合并过程称为路由聚合(route aggregation ),由此产生的较大前缀地址块有时称为超网 (supernet ),以便有别于地址块的分割。

有了地址聚合, IP 地址可包含大小不等的前缀。同样一个 IP 地址,一台路由器把它当作/22 的一部分对待,而另一台路由器把它当作一个更大的 /20 一部分对待。这是因为每个路由器有相应的前缀信息。这个设计和子网划分协同工作,统称为无类域间路由( CIDR, Classless Inter-Domain Routing ),发音为“cider ”。它的最新版本由 RFC 4632 说明。

为了使 CIDR 更加易于理解,让我们来考虑一个例子,有一块地址从 194.24.0.0 开始, 可用的 IP 地址有 8192 个。假设剑桥大学需要2048个,分配的地址范围是194.24.0.0到194.24.7.255,掩码为255.255.248.0,这是/21前缀。接下来,接下来,牛津大学申请 4096 个地址。由于4096个地址块必须位于4096的字节边界上,所以申请的一直不可能从194.24.8.0开始。相反,它们获得了从194.24.16.0至194.24.31.255的地址块,子网掩码是255.255.240.0 ,最后爱丁堡大学申请1024个地址,它获得了194.24.8.0 194.24.11.255,掩码为255.255.252.0。下图概括了这些地址块的分配情况。

image-20260502215212809

对每个前缀可能需要发送到不同的出境线路,所以它们需要在自己的路由表中为每个前缀 设立相应的表项。作为例子,图 5-51 给出了伦敦路由器示意图。通过聚合,3个前缀已经减少为1个,由此减少了必须告知纽约路由器的前缀。

当聚合功能被启用后,这个过程完全自动。聚合技术在Internet中被大量使用, 已经把表的大小减少到目前的约20万前缀。

image-20260502215253372

更为精彩的是前缀允许重叠。规则是数据包按最具体路由的方向发送,即具有最少 IP 地址的最长匹配前缀)。最长匹配前缀路由提供了有益的灵.活性, 正如从图 5-52 显示的纽约路由器的行为。

image-20260502215820217

从概念上讲, CIDR 的工作原理如下所述。当一个数据包到达时,路由器扫描路由表以便确定目的地是否在前缀的地址块内。有可能多个具有不同前缀的表项得到匹配,如果有一个匹配/20 掩码的表项,同时还有一 个匹配/24 掩码的表项,则使用/20 表项来查询数据包的出境线路。商用路由器使用了定制的VLSI ,这些算法被嵌入到了硬件中。

NAT——网络地址转换

IP 地址非常匮乏。一个 ISP 或许有一个/16 地址块,给它的 65 534 个可用主机编号。 如果有比这更多的客户,那就有问题了。为了短期解决地址短缺问题,需要一个速战速决的方案,这就是NAT。NAT 的基本思想是 ISP 为每个家庭或每个公司分配一个 地址,,用这个 IP 地址来传输 Internet 流量。在客户网络内部,每台计算机有唯一的 IP 地址,该地址主要用来路由内部流量。然而,当一个数据包需要离开客户网络,发向其 ISP 时,它必须执行一个地址转换,把唯一的内部 IP 地址转换成那个共享的公共 IP 地址。 下面这些地址已经被声明为私有化,任何网络可以在内部随意使用这些地址

10.0.0.0 ~ 10.255.255.255/8 大家比较喜欢这个

172.16.0.0 ~ 172.31.255.255/12

192.168.0.0~192.168.255.255/16

然而,当一个数据包离开客户驻地时,它首先要通过一个 NAT 盒子 (NAT box), NAT 盒子将内部的 IP 源地址(图中为 10.0.0.1) 转换成该客户所拥有的真实IP地址。NAT盒子通常与防火墙组合成单一设备,还有一种就是整合到路由器或者是ADSL调制解调器中。

image-20260502222146545

IPv6

面对地址被殚精竭思的问题,唯一的长期解决方案就是移动到更大的地址空间。它采用128位地址,但是被证实其部署非常困难。 这是一个不同的网路层协议,尽管有相似之处,但是没有与IPv4实现互通。

Internet 控制协议

动态路由协议分类

区别于手动配置的静态路由协议,动态路由协议是自动完成的。

层次路由

因特网把整个互联网划分为许多较小的自治系统,每个自治系统有权自主地决定本系统内应采用何种路由选择协议。如果两个自治系统需要通信,那么就需要一种在两个自治系统之间的协议来屏蔽这些差异, 因此就有两大类。一个是内部网关协议(IGPs, Interior Gateway Protocols),另外一个是外部网关协议(EGPs, Exterior Gateway Protocols)

img

  • Path-Vector 路径向量: 包含目标网络(通常是IP),下一条路由,以及路径信息(所有AS的路径)
  • Link-State 链路状态:每个路由器共享其邻居的状态,独立计算出最佳的路径信息
  • Distance Vector 距离向量:将整张路由表发送给直接相联的邻居

自治系统(AS)

如果我们将网络只看作一个互联路由器的集合,路由器执行相同的路由选择算法以计算穿越整个网络的路由选择路径,这种方法而言:

  1. 一台路由器很难同另一台路由器区别开来
  2. 规模大,占用内存大,距离向量算法无法收敛
  3. ISP通常想按照自己的意愿来运行路由器

基于此,我们需要通过AS来解决,给每个AS分配全局唯一的ASN号。

示例: 查找斯坦福大学的AS号

  1. 查询DNS获取IP地址

    • in: dig standfor.edu
    • out: stanford.edu 1800 IN A 171.64.13.26
    • A记录显示了域名对应的IP地址,1800为TTL
  2. 查找IP地址对应的AS

    • in: nc whois.cymru.com 43,接着输入171.64.13.26
      • nc(netcat)是网络工具,用于与服务器建立连接
    • out: Stanford(32), ATT(797), Google(15169,22859,36039)
      • 32是斯坦福的AS号,其他列出的可能是与其有关的ISP或者是上游供应商
  3. 另外还可以用traceroute

    traceroute -a <dst> 用来显示从本地主机到目标主机之间经过的路由器(跳数),并报告每一跳的延迟时间

    • 使用-a选项时,traceroute不仅显示每一跳经过的IP地址,还会显示该IP地址所属的自治系统(AS)号。

AS可能是单出口,也可能是多出口

image-20240924235323880

域间路由:BGP协议

在互联网下,所有的AS运行着相同的EGP协议——BGP,是一个基于路径向量,且是分布式的,异步的协议。为了在深层次理解互联网, 我们需要对其很熟悉。

BGP的角色

回忆一下,每个路由器都有一个转发表(包含形如(x, I)的条目,其中x是一个前缀(如138.16.68/22),I是路由器接口之一的接口编号),该表在将到达的数据包转发到外部路由器。对于位于同一个AS内的目的地,路由器转发表中的条目是由AS的内部路由协议决定的。但对于位于AS外的目的地呢?这正是BGP发挥作用的地方。

作为一个自治系统间的路由协议,BGP为每个路由器提供了以下手段:

  • 从邻近的AS中获取前缀可达性信息。如果没有BGP,每个子网就会变成一个孤立的岛屿。
  • 确定到前缀的“最佳”路由。一个路由器可能会学习到两个或更多不同的到达特定前缀的路由。为了确定最佳路由,路由器会本地运行BGP路由选择程序

通告BGP路由信息

在BGP中,路由器成对地通过半永久性的TCP连接(使用端口179)交换路由信息。每个这样的TCP连接,以及通过连接发送的所有BGP消息,被称为BGP连接。此外,跨越两个AS的BGP连接被称为外部BGP(eBGP)连接,而在同一AS内的路由器之间的BGP会话被称为内部BGP(iBGP)连接。图5.9显示了该网络中的BGP连接示例。请注意,iBGP连接并不总是对应于物理链路。

image-20240925101155013

为了传播可达性信息,iBGP和eBGP会话都被使用。为了向AS1和AS2中的所有路由器通告前缀x的可达性信息,网关路由器3a首先向网关路由器2c发送eBGP消息“AS3 x”。然后,网关路由器2c向AS2中的所有其他路由器发送iBGP消息“AS3 x”。接着,网关路由器2a向网关路由器1c发送eBGP消息“AS2 AS3 x”。以此类推,这样AS1,AS2都知道了通往x的通告。

NOTE

BGP路由器还 利用AS-PATH属性来检测和防止循环通告;具体来说,如果路由器发现路径列表中包含了自己的自治系统,则会拒绝该通告。

确定最佳路由

在实际网络中,从某个给定的路由器到某个给定的目的地,可能存在多条不同的路径,每条路径通过不同的AS序列。例如,考虑图5.10所示的网络,在这种情况下,从AS1到x有两条路径:通过路由器1c的路径“AS2 AS3 x”;以及通过路由器1d的新路径“AS3 x”。

image-20240925102002990

NEXT-HOP是自治系统路径起点的路由器接口的IP地址。路由“AS2 AS3 x”的NEXT-HOP属性(从AS1到x,经过AS2)是路由器2a左侧接口的IP地址。而“AS3 x”路径的NEXT-HOP属性(从AS1到x,绕过AS2)是路由器3d最左侧接口的IP地址。对于AS1的路由器而言,都知道了通往x有两个NEXT-HOP属性。

现在我们开始讨论BGP算法,其中最简单的路由算法——热土豆路由(Hot Potato Routing),

在热土豆路由中,选择的是通往下一跳路由器代价最小的路径。假设路由器1b开始,假设代价定义为所经过的链路数量。那么从路由器1b到路由器2a的最小代价是2,而到路由器3d的最小代价是3,因此选择路由器2a。接着,路由器1b会查找其转发表(由其自治系统内的路由算法配置),并找到通向路由器2a的最低代价路径上的接口I。然后,它将(x, I)添加到其转发表中。

NOTE

  • 在“热土豆路由”这个名称中,数据包类似于一个烫手的土豆。因为它非常烫,你希望尽快将它传递给另一个人(另一个自治系统)

  • 在将外部自治系统前缀添加到转发表时,既要使用自治系统间路由协议(BGP),也要使用自治系统内路由协议(例如OSPF)

每条BGP路由主要包含三部分的列表:NEXT-HOP;AS-PATH;目的前缀。其中,NEXT-HOP属性是一个不属于AS1的路由器的IP地址,而是其他AS的。

实际上,BGP使用的算法比热土豆路由更为复杂,但它仍然包含热土豆路由。如果有两条或更多条到达同一前缀的路由,BGP会依次应用以下淘汰规则,直到只剩下一条路由:

  1. 一条路由被赋予一个本地优先级值。可能由路由器设置,或者从同一自治系统中的另一个路由器处学习。归根结底是自治系统的网络管理员的策略决定的。
  2. 从剩下的路由中,选择具有最短AS-PATH的路由。如果这个规则是唯一的路由选择规则,那么BGP将在路径选择中使用距离向量算法,其中距离度量使用的是自治系统跳数,而不是路由器跳数。
  3. 从剩下的路由(都具有相同的最高本地优先级值和相同的AS-PATH长度)中,使用热土豆路由,也就是选择NEXT-HOP路由器距离最近的路由。
  4. 如果仍有多条路由,路由器将使用BGP标识符来选择路由

通过上述路由选择算法,BGP不再是一个自私的算法——它首先会选择具有较短AS路径的路由(从而可能减少端到端的延迟)

IP任播

除了作为互联网的自治系统间路由协议外,BGP还常用于实现IP-Anycast服务。为了说明IP-Anycast的必要性,考虑到许多应用中,我们希望(1)在不同地理位置的多个服务器上复制相同的内容,和(2)让每个用户从离他们最近的服务器访问内容。例如,内容分发网络(CDN)可能会在不同国家的服务器上复制视频和其他对象。同样,DNS系统可以在全球的DNS服务器上复制DNS记录。当用户想要访问这些复制的内容时,指向“最近”的服务器是理想的选择。BGP的路由选择算法提供了一种简单而自然的机制来实现这一目标。

域内路由

域内路由协议(Interior Gateway Protocol, IGPs),主要有两种协议RIP (Routing Information Protocol)和 OSPF,其中前者是基于距离向量,现在用的比较少了;后者基于链路状态,如今比较常用(与IS-IS路由协议类似)

路由器如何知道要把包转发到哪里?

Solution:有三种方法是

  • 泛洪Flooding: 网络中的每个节点都会将收到的每一个数据包通过其所有的出链路发送出去(除了从哪儿来的链路)
  • 源路由Source Routing:数据包的发送方(源节点)决定并指定整个数据包的传输路径
  • 分布式算法:网络中的每个节点根据其对拓扑的局部视图做出独立的路由决策
    • Bellman-Ford
    • Dijsktra's

RIP

路由信息协议(RIP, Routing Information Protocol),是一种分布式的基于距离向量的路由选择协议(使用Bellman-Ford算法),用UDP协议进行传输,规定

  1. 网络中的每个路由器都要维护从它自身到其他每个目的网络的距离记录(因此这是一组 距离,称为距离向量)
  2. 距离也称跳数(Hop Count),规定从一个路由器到直接连接网络的距离(跳数)为1。而每经过一个路由器,距离(跳数)加1。
  3. RIP 认为好的路由就是它通过的路由器的数目少,即优先选择跳数少的路径
  4. RIP 允许一条路径最多只能包含 15个路由器(即最多允许 15跳)。因此距离等于16时,它表示网络不可达。距离向量路由可能会出现环路的情况,规定路径上的最高跳数的目的是为了防止数据报不断循环在环路上,减少网络拥塞的可能性
  5. RIP 默认在任意两个使用 RIP 的路由器之间每30秒广播一次 RIP 路由更新信息,以便自动建立并维护路由表(动态维护)。
  6. 在RIP 中不支持子网掩码的 RIP 广播,所以 RIP 中每个网络的子网掩码必须相同。但在新的 RIP2 中,支持变长子网掩码和 CIDR

NOTE

RIP有坏消息传得慢的特点

示例:image-20240925150059122

OSPF

开放式最短路径优先(Open Shortest Path First,OSPF)协议,它基于链路状态算法,用IP数据报进行传输。并规定

  • 只有拓扑网络上有变化时候才会更新
  • 可使用不同的最短路径的评判的指标(比如链路速率, 收敛时间等等)
  • 每个路由器都有关于整个网络的图,并且独立地计算出最佳的路由信息(通过Dijkstra' 算法)

对比RIP优势

  • 能应用在大型网络上
  • 收敛速度快等等

RFC1958 互联网体系结构原则

互联网及其架构并不是从一个宏大的整体规划中诞生的,而是从较小的起点逐步演化发展而来的。这种演化过程是其成功的重要原因之一,但仍然有必要记录当前互联网架构的一些基本原则。

一、持续变化

互联网的发展可以类比为一座城市不断翻修街道和建筑,而不是推倒重建。这些架构原则的目标,是提供一个小规模的规则集合,用来支撑一个庞大、多样且不断演化的技术体系。

当前推动变化的一些因素包括:IPv4 扩展性的限制、千兆网络和多媒体带来的新挑战,以及商业互联网对服务质量和安全性的需求。

二、是否存在“互联网架构”?

2.1 很多互联网社区成员认为,并不存在一个明确的“架构”,只有一种长期形成的传统。不过,从非常宏观的角度来看,人们普遍认为:

  • 目标是“连接性”(connectivity)
  • 工具是“互联网协议”(IP)
  • 智能应位于端点,而不是隐藏在网络内部

实现全球连接的关键是“互联网络层”,而在多种硬件之上发挥这一层能力的关键思想是“端到端原则”。

2.2 在理想情况下,互联网层应该只有一种协议,这样可以在多厂商、多运营商的环境中实现统一且平滑的运行。当然,在其他层可以存在多种协议,以满足不同需求。

在现实中,出现多个网络层协议的原因主要有两个:一是从旧版本 IP 向新版本过渡,二是出现了新的需求需要全新的协议。

互联网层协议必须独立于具体硬件和硬件地址。这种设计使互联网能够利用各种新的传输技术,并将地址机制与硬件解耦,从而成为连接不同网络技术的统一平台。

2.3 通常认为,端到端功能应通过端到端协议来实现。这一原则的一个重要推论是:如果希望应用能在网络部分失效的情况下继续工作,那么端到端协议不应该依赖网络内部维护状态。状态应该只存在于端点,并且只有端点失败时才会丢失(即“命运共享”)。

三、一般设计原则

3.1 必须支持异构性,包括不同硬件、不同速度和不同规模的系统。

3.2 如果有多种实现方式,应选择一种统一方案,并尽量复用已有成功设计。

3.3 设计必须能够扩展到大量节点。

3.4 需要同时考虑性能和成本

3.5 保持简单

3.6 模块化设计是好的

3.7 通常应优先选择“足够好”的方案,而不是等待完美方案。

3.8 尽量避免复杂的参数和选项

3.9 发送时严格遵守规范,接收时尽量宽容

3.10 减少不必要的数据包(尤其是广播)

3.11 避免循环依赖

3.12 对象应尽量自描述

3.13 统一术语和表示方式

3.14 只有在有多个实际实现后,才能成为标准

四、 名称与地址

避免将地址写死在系统中,应用应使用名称而非地址。

应使用统一的命名体系。

公开名称应使用大小写不敏感的 ASCII。

地址必须唯一。

上层协议必须能唯一标识通信端点。

五、外部因素

优先使用无专利技术,但在合理条件下可以使用专利技术。

出口管制对技术选择影响较小。

实现必须包含所有必要组件才能符合标准。

设计应支持国际化和本地化。

六、安全相关

所有设计必须适配 IP 安全架构。

隐私和认证主要由端系统负责,而不是网络。

协议应支持多种加密算法,并明确标识所使用的算法。

应选择被广泛认可且高效的算法。

必须保证不同实现之间可以协商出共同的安全算法

这一讲回答两个问题:(1) Internet 为什么要设计成今天这样?(2) 在"一堆各自为政的网络"之上,路由是如何被组织起来的?三篇阅读分别对应设计哲学 → 路由机制 → 安全缺陷

2.1 设计哲学:RFC 1958

RFC 1958 (Architectural Principles of the Internet)Internet 成功的经验提炼成几条原则。核心是把网络做"瘦"、把智能推到边缘。

定义 · 端到端原则 (End-to-End Principle)
能在端系统正确实现的功能,就不应放进网络中间节点。网络只负责尽力而为地转发分组 (best-effort forwarding),可靠性、加密、重排等语义留给端点处理。

其余几条值得记住的原则:

  • 连接性本身就是回报 (connectivity is its own reward):协议设计偏向"先连上再说",而非预先协商完美状态。
  • IP 作为细腰 (narrow waist):上层应用与下层链路技术任意演化,唯一不变的约束是 IP。这是 Internet 能容纳异构 (heterogeneity) 技术的关键。
  • 保持简单、模块化:避免在协议里堆叠可选参数 (options),因为它们极少被实现、且成为攻击面。
推论
"瘦腰 + 智能在边缘"既解释了 Internet 为何能快速演化(换应用只需改端点),也预示了它的安全短板:网络层默认不保证身份与路径正确性——这正是 Lec 2.3 的主题。

2.2 路由机制:自治系统与 BGP

Internet 不是一张扁平的图,而是上万个独立管理域拼起来的,因此路由必须分层 (hierarchical routing)

定义 · 自治系统 (Autonomous System, AS)
处于单一管理控制下、对外呈现统一路由策略的网络,由 ASN (AS Number) 标识。域内用 IGP(如 RIP/OSPF)优化路径,域间用 BGP 交换可达性并执行策略。

BGP 是一种路径向量协议 (path-vector protocol),每条路由携带完整的 AS_PATH,既能避免环路,又能让策略生效。

  • eBGP vs iBGP:前者在 AS 之间交换路由,后者在同一 AS 内部传播外部学到的路由。
  • 关键属性LOCAL_PREF(本地策略偏好,最先比较)、AS_PATH(长度,次之)、MED(向邻居暗示入口偏好)、NEXT_HOP
  • Gao–Rexford 策略与无谷路由 (valley-free routing):基于商业关系——客户 (customer)、提供商 (provider)、对等 (peer)。一条合法路径形如"上坡(向 provider)后下坡(向 customer)",中间不能出现"谷"。
  • 热土豆路由 (hot-potato routing):在多个等价出口中,AS 倾向尽快把流量甩给邻居,选择 IGP 代价最小的出口。
定义 · IP 任播 (Anycast)
同一 IP 前缀从多个地理位置同时向 BGP 通告,路由系统自然把客户端导向"BGP 意义上最近"的实例。DNS 根服务器与 CDN 边缘广泛采用。

2.3 安全缺陷:BGP 为什么难以加固

Sharon Goldberg, Why Is It Taking So Long to Secure Internet Routing? 解释了一个看似矛盾的现状:问题已知二十年,方案早已设计好,却迟迟无法普及。

根因是 BGP 默认信任:它既不验证"前缀来源是否合法",也不验证"AS_PATH 是否真实"。由此产生两类事故:

  • 前缀劫持 (prefix hijacking):某 AS 通告本不属于它的前缀(经典案例:2008 年 Pakistan Telecom 误劫持 YouTube)。
  • 路由泄露 (route leak):违反无谷规则,把不该转发的路由扩散出去。

两套补救方案:

  • RPKI 提供源验证 (origin validation):用证书绑定"哪个 AS 有权通告哪个前缀"。
  • BGPsec 提供路径验证 (path validation):对 AS_PATH 逐跳签名。
推论 · 部署困境
Goldberg 的核心论点是经济与博弈问题,而非技术问题:在部分部署 (partial deployment) 下,早期采用者几乎得不到保护收益(攻击者仍可经未部署的 AS 绕过),却要先承担密码学开销与运维复杂度——典型的负外部性 + 协调失败。这与 RFC 1958"避免需要全网协同的机制"的告诫互为印证。