[Linux]Routing
Routing
1 什么是路由器?
路由器是网络中用于实现设备间通信以及与其他网络连接的关键设备。通常,路由器配备有LAN端口,使设备能够连接到同一局域网(LAN),同时也拥有一个互联网上联端口(有时标记为WAN端口),连接到更广泛的网络即互联网。在进行任何网络活动时,数据都需要通过路由器来传输。路由器负责决定网络数据包的去向和来源,从而实现在不同网络间的路由选择。
路由器的工作原理
理解路由器工作原理的一种方法是将其与邮件递送系统作比较。当我们想发送一封信件时,我们会注明收件地址,邮局根据目的地(如加州)将信件分配给相应的运输工具(例如卡车)。信件到达目标城市后,根据邮政编码及具体地址进一步分发,直至送达指定地址。若收件地址与寄件地址位于同一区域,则可能直接由当地的邮递员完成投递。
在网络中路由数据包的过程与此类似,使用类似的“路径”规则将数据包从源主机路由至目的主机。当没有明确的路径设定时,会使用默认路由。这些路由信息存储在路由表中,用于指导数据包在网络间导航。
Hops
数据包在网络间传输时,其传输距离可通过跳数来大致衡量,每一跳代表一次经过中间设备(如路由器)。例如,如果主机A和主机B之间通过两台路由器连接,则称它们之间存在两个Hop。
交换、路由与泛洪的区别
- 交换:指的是接收、处理并将数据转发至目标设备的过程。
- 路由:涉及创建路由表的过程,以优化交换操作。
- 泛洪:在路由技术之前使用的方法。如果路由器不知道如何转发某个数据包,则该数据包会被发送到除了接收端口外的所有出口链路。这种方法效率较低,但确保了数据包最终能够找到其路径。随着路由技术的发展,现在的网络更加高效且精确地管理数据传输。
2 路由表
通过查看计算机的路由表,可以更好地理解数据包如何在网络中被定向。以下是一个示例:
1 |
|
目标(Destination)
路由表中的第一个字段是目标IP地址。例如,192.168.224.0
表示任何试图访问此网络的数据包都将通过以太网接口(eth0)发送出去。如果设备IP为192.168.224.5
并希望与同网络下的192.168.224.7
通信,则直接使用网络接口eth0。
当目标地址显示为0.0.0.0
时,表示没有指定具体地址或地址未知。这意味着对于像151.123.43.6
这样的外部IP地址,由于路由表无法识别其目的地,所以通过默认路由的网关转发。
网关(Gateway)
若目标不在同一网络内,数据包将被发送到网关地址。该地址作为通往其他网络的入口点。
子网掩码(Genmask)
子网掩码用于确定哪些IP地址匹配哪个目标网络。在上述示例中,255.255.255.0
用于限定192.168.224.0
网络内的主机范围。
标志(Flags)
UG
:表示网络已启动并且连接至网关。U
:仅表示网络已启动。
接口(Iface)
指示数据包将通过哪个接口发送。通常,eth0
代表系统中的首个以太网设备。
3 数据包在网络中的传输路径
局域网内的数据包传输
- 当数据包在本地网络中传输时,首先,本地计算机会通过比较目的IP地址和自身的子网掩码来判断目标是否位于同一子网内。
- 数据包需要包含源MAC地址、目的MAC地址、源IP地址和目的IP地址。在初始阶段,我们并不知道目的MAC地址。
- 为了找到目标主机的MAC地址,将使用ARP(Address Resolution Protocol)协议,在本地网络上广播请求以获取该信息。一旦获得了目的MAC地址,数据包就可以成功发送了。
跨网络的数据包传输
- 当目标地址位于外部网络时,情况略有不同。由于目标不在同一子网内,本地计算机无法直接获得目标主机的MAC地址,也不能使用ARP进行广播查询。
- 此时,数据包会根据路由表寻找下一跳路径。如果路由表中没有明确的目的IP地址,则数据包将被发送到默认网关(另一台路由器)。这时,数据包中包含了源IP地址、目的IP地址以及源MAC地址,但仍然缺乏目的MAC地址。因为MAC地址仅在同一网络内部可达,所以需要向默认网关发送ARP请求来获取其MAC地址。
- 路由器接收数据包后,会检查并确认目的MAC地址,但由于这并非最终目的地,它将继续依据路由表转发数据包,直到找到能够帮助数据包到达最终目的地的下一跳IP地址。每经过一个节点,旧的源和目的MAC地址都会被移除,并更新为新的对应地址。
- 当数据包到达与目标相同的子网时,再次使用ARP来查找目标主机的最终MAC地址。在此过程中,数据包的源IP地址和目的IP地址保持不变,只有MAC地址随每次转发而更新。
4 路由协议
手动为网络中的每个设备配置路由表将是繁重的工作,因此使用路由协议来简化这一过程。路由协议帮助系统适应网络变化,通过学习不同的路径并在路由表中构建这些路径,从而实现数据包的有效转发。主要的两类路由协议是距离矢量协议和链路状态协议。
收敛
在网络中使用路由协议时,路由器之间会相互交换信息以了解整个网络的状态。当所有路由器就网络拓扑达成一致时,它们的路由表将完整地映射出该拓扑结构,这个过程称为“收敛”。一旦网络拓扑发生变化,收敛状态会被暂时打破,直到所有路由器都更新了这一变化为止。
距离矢量协议
距离矢量协议通过计算数据包在网络中传输所经过的跳数来决定到达其他网络的最佳路径。例如,如果网络A距离为3跳,而网络B紧邻网络A,则假定到达网络B的距离为4跳。在距离矢量协议中,最佳路径是指跳数最少的那条路径。
对于小型网络而言,距离矢量协议是一个理想的选择。然而,随着网络规模的扩大,路由器需要更长的时间来收敛,因为它们会定期向所有路由器发送完整的路由表。此外,距离矢量协议的另一个缺点是效率问题:它选择的是跳数较少而非总是最有效的路径。
一个常见的距离矢量协议是RIP(Routing Information Protocol)。RIP每30秒向网络中的每个路由器广播一次路由表。对于大型网络来说,这种操作可能消耗大量资源,因此RIP限制了其最大跳数为15。
- 适用场景:适用于小型网络环境。
- 局限性:
- 收敛速度较慢,特别是在大规模网络中。
- 可能不会选择最优路径,而是基于跳数进行决策。
- 如RIP这样的协议,由于性能考虑,对网络的最大尺寸和复杂度有限制。
链路状态协议
链路状态协议非常适合大规模网络部署,其复杂度高于距离矢量协议。然而,一个显著的优势是它们能够快速收敛。这是因为链路状态协议不是定期发送整个路由表,而是仅在链路状态发生变化时向邻近路由器发送更新信息。它们采用不同的算法来计算最短路径,并以图形方式构建网络拓扑结构,展示各路由器间的连接关系。
常见的链路状态协议之一是OSPF(Open Shortest Path First)。OSPF仅在网络发生变化时更新路由表,并且不设跳数限制。
适用场景:适用于大型或高度动态的网络环境。
优势:
- 快速收敛,提高了网络稳定性和响应速度。
- 通过局部更新机制减少网络资源消耗。
- 构建完整的网络拓扑图,使得路径选择更加精准和高效。
特点:
- 利用Dijkstra算法等计算最短路径。
- 不受跳数限制,允许更灵活的网络设计和扩展。
综上所述,链路状态协议为处理复杂、大规模网络提供了有效解决方案。通过精确的拓扑维护和高效的路由更新机制。
5 边界网关协议BGP
BGP(边界网关协议),是互联网运行的基础。BGP用于在自治系统间收集和交换路由信息。可以将自治系统理解为互联网服务提供商、公司、大学或其他组织等实体。没有BGP,这些系统将无法相互通信,形成孤立的信息孤岛。不同于在自治系统内部进行路由,BGP负责在不同自治系统之间进行路由选择。
假设A正在家用网络中,而B在星巴克工作,B希望与A通信,因此B发送一封电子邮件。该网络数据包首先通过星巴克的网络传输,在其内部根据路由表进行转发,直到到达星巴克网络的边缘,并传递给一个边界网关路由器。这台路由器包含了让我的数据包离开星巴克网络并穿越其他网络所需的信息。
应用场景:主要用于连接不同的自治系统(AS)。
优势:
- 支持大规模网络互联,促进全球互联网通信。
- 提供灵活的策略控制,使得网络管理员能够基于性能、安全性和成本等因素优化路由选择。
特点:
- BGP不直接指导数据包在自治系统内部的传输路径,而是确定跨自治系统的最佳路由。
- 使用TCP作为传输层协议,确保了路由信息交换的可靠性。
- 能够携带丰富的属性信息,帮助实现复杂的路由决策。