[ 计算机网络 | 第四章 ] 网络层 03 如何选择路径?

本文认知流


路由选择的基本原理:数据如何找到最优路径?

在上一部分,我们解决了网络层的第一个核心问题------统一全网寻址。

  • IP地址让全球每台设备有了一个逻辑上唯一的"门牌号"。
  • ARP协议负责在IP地址和MAC地址之间做翻译。

但有了地址还不够。从源主机到目的主机,中间可能隔着几十个路由器,每个路由器有多个出口。数据报到底该走哪条路?

这就是网络层的第二个核心任务:路由选择。


🤔模型:数据如何从A到B?

在深入技术细节之前,先建立一张直觉模型。

想一下你要从北京寄一个快递到上海的一个小区。整个过程分为三段:

  • 第一段(出发):你下楼,把包裹交给小区门口的菜鸟驿站。你不需要知道包裹接下来怎么走,你只需要知道"交给驿站就行"。
  • 第二段(中转) :驿站把包裹送到北京分拣中心,分拣中心查表决定发往上海分拣中心。上海分拣中心再查表,决定发往哪个区的配送站。每一个中转节点只负责把包裹送到离目的地更近的下一站。
  • 第三段(到达):最后一个配送站的快递员,直接骑车把包裹送到收件人手上。

数据从A到B的旅程,和这个快递模型几乎一模一样:

快递模型 网络模型
寄件人 源主机
收件人地址 目的IP地址
小区菜鸟驿站 默认网关(源主机的出口路由器)
分拣中心 中间路由器
查表决定下一个分拣中心 路由器查转发表,决定下一跳
最后一个配送站 目标网络的路由器
快递员直接送货上门 最后一跳直接用MAC地址通信
包裹始终不变 IP数据报始终不变(源IP和目的IP不变)

💡关键点

  1. 整个过程中,包裹上的收件人地址(IP地址)从头到尾不变。
  2. 每一段运输的卡车车牌号(MAC地址)在变,但包裹本身不变。
  3. 每个分拣中心只做一件事------根据收件人地址,决定下一站往哪送。
  4. 这就是路由选择的本质。

分组转发 vs 路由选择

在讲具体的路由技术之前,必须区分两个容易被混淆的概念。

对比方面 路由选择 分组转发
是什么 确定数据报从源到目的经过的路径 路由器收到数据报,查表,从某个接口转发出去
作用范围 全局------全网路由器协同计算 局部------单个路由器的一次操作
时间 秒到分钟级 纳秒到微秒级
实现方式 软件(路由协议计算) 硬件(转发表查找)
比喻 出发前用导航软件规划整条路线 在每个路口,看路牌决定往哪拐

两者是 规划 和 执行 的关系:

  1. 没有路由选择,转发表就是空的,分组转发无从进行。

  2. 没有分组转发,路由选择算出来的路径永远不会被用到。

💡栗子:你开车从北京到上海。出发前,你打开高德地图规划路线------这是路由选择。在每一个高速路口,你看路牌决定往哪个方向拐------这是分组转发。整条路线是高德算出来的,但你开车的时候不需要每次都重新规划,你只需要在分岔路口看路牌就行。


直连路由 vs 非直连路由

理解了基本概念之后,我们从最简单的场景开始。

场景一:目标就在同一个网络里------直连路由。

  1. 你的电脑(192.168.1.10/24)想给隔壁同事的电脑(192.168.1.20/24)发文件。
  2. 两台电脑连在同一个交换机上,属于同一个网络。
  3. 你的电脑用子网掩码一算:目标IP和自己属于同一个网络。
  4. 这种情况下,不需要路由器介入。
  5. 你的电脑直接通过ARP获取对方的MAC地址,封装成帧,从交换机转发过去。
  6. 这就是直连路由------目标网络就是自己所在的网络,路由器上对应的接口直接连在这个网络上。

场景二:目标在另一个网络------非直连路由。

  1. 你的电脑(192.168.1.10/24)想访问百度服务器(假设IP是110.242.68.66)。
  2. 用子网掩码一算,目标IP和自己不在同一个网络。
  3. 你的电脑没办法直接找到百度。
  4. 这时候,你只能把数据报交给"默认网关"------也就是你家里的路由器。
  5. 路由器收到后,查表,看看自己知不知道怎么去百度。
  6. 如果知道,就转发。
  7. 如果不知道,就把数据报交给自己的默认网关(运营商的上级路由器)。
  8. 就这样一跳一跳,直到到达目标网络。
  9. 这就是非直连路由------目标网络不在路由器直连的范围内,需要通过其他路由器中转。

动态路由协议 --- 让路由器自动学习

静态路由 vs 动态路由

非直连路由需要路由器知道"往哪走"。--> so 路由器的"地图"从哪来?

第一种方案:管理员手动配置------静态路由。

  1. 网络管理员登录路由器,手写命令:
  2. "去往网络192.168.2.0/24,下一跳是10.0.0.2"、
  3. "去往网络192.168.3.0/24,下一跳是10.0.0.3"。
  4. 管理员把网络中所有非直连网络的路径都配好。
  5. 对于小网络,静态路由完全够用------三台路由器,五个网络,手动配置十分钟就搞定。

但当网络扩展到几百台路由器、几千个网络时,管理员手动维护路由表变成了极其痛苦的事。

更坏的是,静态路由无法自动适应网络拓扑的变化------某条链路断了,数据报走到故障点才发现走不通,管理员必须手动登录每台受影响的路由器更新配置。

在此期间,所有经过这条链路的数据报全部丢失。

🎯 静态路由的根本矛盾:管理员手动配置的静态路径 vs 网络拓扑的动态变化。

网络需要一种更智能的方案:让路由器自己交换信息,自动学习全网拓扑。 这就是动态路由的引出发点。

第二种方案:让路由器自动学习------动态路由。

动态路由的核心思想很简单

路由器之间通过路由协议互相告知自己知道的信息,每台路由器根据收集到的信息独立计算最优路径,当网络拓扑发生变化时自动更新计算。

💡比喻:

1.静态路由 = 你拿着一本几年前出版的纸质地图开车,路改了、桥断了,地图上不会更新,你走到跟前才发现走不通。

2.动态路由 = 你开着实时联网的导航软件,每个司机都在实时上报路况,导航根据最新信息动态调整路线。哪条路堵了,导航自动给你换一条。


为什么需要动态路由?

上面的比喻已经回答了这个问题,但在工程层面值得说得更具体。

动态路由解决的是静态路由的三个致命缺陷:

第一,配置复杂度。 一个中型企业网络可能有上百台路由器、上千个网络。管理员不可能逐台手动配置每一条路由。动态路由只需要在每台路由器上启动路由协议,路由器自己会学习。

第二,故障恢复能力。 链路断了、设备故障了、新网络接入了------这些变化在静态路由下需要人工干预。动态路由可以在几秒到几分钟内自动发现变化并重新计算路径。

第三,环路避免。 静态路由如果配置错误,很容易形成路由环路------数据报在两个路由器之间来回转发,直到TTL耗尽。动态路由协议内置了环路避免机制。


自治系统AS:分层次管理互联网

理解了为什么需要动态路由之后,下一个问题是:全球互联网有几百万台路由器,它们都运行同一个路由协议、都在同一个"池子"里交换信息吗?

  1. 当然不可能。
  2. 所有路由器都在一个池子里交换路由信息,网络的任何一点变化都会触发全网范围的重计算。
  3. 路由表会大到无法存储和查找,不同组织(电信、联通、移动、谷歌、亚马逊)之间的路由策略需要彼此协商,但它们的管理员不可能坐下来一起开会。

💡互联网的解决方案是分层管理------引入自治系统。

  1. 自治系统(AS)是一组 在单一管理控制下的路由器集合
  2. 属于同一个AS的路由器运行相同的内部路由策略,每个AS有一个唯一的编号(ASN)。

引入AS之后,路由协议被分成了两类:

  • 内部网关协议(IGP):在同一个AS内部运行的路由协议,比如RIP和OSPF。它们只关心自己这个AS内部的网络拓扑,只在本AS内部交换路由信息。
  • 外部网关协议(EGP):在不同AS之间交换路由信息,代表是BGP。它负责告诉其他AS"我这个AS有哪些网络可达"。

这种分层设计的妙处

  1. 一个AS内部发生拓扑变化(某条链路断了),只会影响这个AS内的路由计算,不会波及全球。
  2. 不同AS之间通过BGP交换"汇总"后的路由信息,而不是每一个内部网络的详细信息。这和IP地址的CIDR路由聚合是同一个设计哲学------用层级结构控制复杂度。

内部网关协议:RIP → OSPF

内部网关协议的目标是让同一个AS内部的所有路由器都能准确知道"去往这个AS内部的任意一个网络,应该怎么走"。

第一代:RIP(路由信息协议)

RIP的设计非常简洁,核心规则只有一条:

  1. 每隔30秒,每台路由器把自己的整张路由表广播给所有邻居。
  2. 邻居收到后,用 距离向量 算法更新自己的路由表 --- 一条路由的 距离 就是到达目标网络需要的跳数。
  3. 如果一个目标网络在邻居的路由表里距邻居2跳,那么距我就是3跳。

RIP的工作过程:

RIP简单到可以在几百行代码里实现。

但它的局限也很致命:

  1. 最大跳数只有15跳,超过15跳的网络被认为不可达;
  2. 每隔30秒广播整张路由表,带宽开销大;
  3. 网络拓扑变化时,更新从一个路由器传到另一个路由器,收敛可能需要几分钟。
  4. 在这几分钟内,部分路由器的路由表是过时的,可能产生路由环路。

RIP的痛点引出了第二代协议。

第二代:OSPF(开放最短路径优先)

OSPF用完全不同的思路解决了RIP的问题。

它的核心规则是:每台路由器向全网广播自己知道的所有邻居信息,然后每台路由器独立用Dijkstra算法计算最短路径树。

  1. RIP是"传信使告诉你去某个城市有多少站路",每台路由器只从邻居那里听说转发。
  2. OSPF是"每个城市都知道整个国家的完整路网图,然后自己独立规划最优路线"。

工作过程:

OSPF相比RIP有这些关键改进:

  1. 没有15跳限制,支持大型网络;
  2. 每台路由器掌握全网拓扑,路径计算更准确;
  3. 引入"区域"概念,把大型AS划分成多个区域,区域内部详细交换路由信息,区域之间只交换汇总信息,进一步减少路由表大小和计算开销;
  4. 收敛速度更快,拓扑变化后能在几秒内完成重计算。

第三代:IS-IS

  1. IS-IS和OSPF一样是链路状态协议,核心算法几乎相同。
  2. 主要区别在于OSPF是IETF为IP网络设计的,IS-IS最初是OSI协议栈的一部分,后来被扩展支持IP。
  3. IS-IS在运营商网络中更常见,OSPF在企业网络中更常见。
  4. 作为学习者,理解OSPF就掌握了链路状态协议的核心思想,没有必要深究IS-IS的细节。

外部网关协议:BGP

OSPF解决了AS内部的路由问题,🤔但不同AS之间的路由信息怎么交换?

这就是BGP要做的事。BGP是互联网的"骨干路由协议",运行在AS之间的边界路由器上

  1. BGP和OSPF有本质的不同。
  2. OSPF只需要考虑纯技术因素------路径的带宽、延迟、跳数。
  3. 但BGP交换的是不同运营商之间的路由信息,每条路径背后都有商业利益。
  4. 中国电信和中国联通之间的路径选择,不只取决于跳数,还取决于两家公司之间的结算协议。
  5. 一个AS可能拒绝转发来自某个特定AS的流量,即使技术上是可行的;也可能优先选择费用更低的路径,即使它不是跳数最短的。

BGP的路由决策也因此比OSPF复杂得多。它不只看单一的度量值,而是综合多种属性做决策,包括路径经过的AS列表、本地优先级、MED值、路径来源等。管理员可以配置路由策略来影响决策------"优先走这条路径,除非它断了"、"不要接受来自某个AS的路由通告"。

🤔为什么BGP如此重要? 因为整个互联网的互联互通就靠BGP。

1.每当一个AS发生路由变化,BGP会把更新传播给它的邻居AS,邻居再传播给邻居的邻居。

2.如果BGP出了问题,某个AS的全部网络就可能在全球互联网上"消失"------别的AS不知道该往哪走才能到达你。


路由器的基本工作原理

前面讲的是路由器之间怎么交换信息,最后我们来看路由器内部是怎么实现这些功能的。

控制平面:路由器如何学习路由

控制平面运行的是路由协议(RIP、OSPF、BGP等),负责构建路由表。它的工作节奏是"慢"的------秒到分钟级别,因为路由变化不会每微秒都发生。

控制平面做了三件事:和邻居交换路由信息,根据收集的信息计算最优路径,把最优路径填入路由表。它像一个地图制作团队,不断更新地图。

数据平面:路由器如何转发数据包

数据平面处理的是实际到来的数据报,负责查表转发。它的工作节奏必须是"快"的------纳秒到微秒级别,因为每秒钟可能有数百万个数据报需要处理。

当数据平面收到一个数据报,它只做三件事:检查目的IP地址,在转发表中查找匹配的条目(用最长前缀匹配),从匹配条目指定的接口发出去。它像一个路口的交警,只看目的地,然后快速放行,并不关心整条路线的规划问题。

控制平面构建地图,数据平面按图指引。这种分工让路由器既能适应网络变化(控制平面的动态更新),又能保证转发速度(数据平面的硬件高效处理)。这就是路由器设计的核心智慧。

📌 小结:这一部分我们梳理了路由技术从简单到复杂的完整演进链。路由器和人类找路没什么两样------要么看地图(静态路由),要么问路(动态路由)。互联网太大了,所有路由器一起问路不现实,所以分了自治系统(AS)------内部用OSPF快速摸清家底,外部用BGP在不同运营商之间协商路径。最终,每台路由器内部都有两条流水线:控制平面负责学习路由,数据平面负责快速转发。

感谢你的阅读,祝你有开心的一天!

相关推荐
飞函安全1 小时前
石油化工企业园区面积大、网络复杂,飞函如何保证跨区域协同不掉线
网络·安全·私有化im
艾莉丝努力练剑1 小时前
【Linux网络】传输层协议TCP(六)补充 - 面试题:HTTP 获取网页的完整过程
linux·运维·网络·tcp/ip·计算机网络·http·udp
minji...1 小时前
Linux高级IO(六)基于ET模式、单reactor反应堆的epoll版本的TCP计算服务器
linux·服务器·网络·c++·epoll·socket套接字·reactor反应堆模式
上海云盾-小余11 小时前
BGP 高防 IP 与 CDN 混合部署:攻防场景选型实战指南
网络·网络协议·tcp/ip
Shingmc313 小时前
【Linux】多路转接之select
linux·网络
溜达的大象13 小时前
从到处找资源到统一检索:飞牛NAS部署Pansou实战记录
网络·云计算
2401_8685347815 小时前
园区网设计
网络
宋浮檀s16 小时前
春秋云镜——CVE-2020-25540
网络·安全·web安全
天天进步201516 小时前
Tunnelto 源码解析 #4:Wormhole 控制通道:WebSocket 如何建立一条“隧道控制线”
网络·websocket·网络协议