03.01 何为路由器
路由器是指主要负责 OSI参考模型中网络层的处理工作,并根据路由表信息在不同的网络 之间转发IP 分组的网络硬件(图3-1)。这里的网络一般是指IP 子网,也可以称为广播域。此外,现在的路由器还会搭载其他各种各样的功能。
03.01.01 路由器的必要性
在某个组织的内部网络中,如果其中的一个LAN 希望连接另一个LAN, 就需要使用路由器 设备。另外,构建大型的LAN 时虽然可以不用路由器,但需要使用交换机或主机等设备来管理 大量的 MAC地址信息,不过,当频繁进行广播通信时,设备的负担就会非常大。这种情况下, 为了减轻设备的负担,需要将LAN 划分成一个个子网,而每一个子网之间的通信就需要依靠路由器进行了。在为了连接互联网而与互联网服务供应商建立连接时,也同样需要用到路由器设备。
03.01.02 什么是路由选择
路由器进行IP分组路径选择的处理即为路由选择(routing)。
路由器从输入接口处收到IP 分组后,根据其首部包含的发送目的地址信息进行路径选择, 并按照选择结果将IP 分组转发到流出接口处。其中转发的路线叫做路径,而路由器在路由选择 处理时所参考的信息叫做路由表(routing table)(表3-1)。路由器通过这些信息可以决定将收到 的IP 分组转发到哪个网络。路由表由多个路由表表项构成,其中每个表项都可以由管理者手动设置(即静态路由),也可以根据路由协议自动生成(即动态路由)。
03.01.03 转发
路由选择的处理需要根据目的地IP 地址中的信息,判断将分组转发到哪个网络。发送至不同网络就是指在路由器中的某个流入接口处接收分组,然后将其发送到其他的某个流出接口。将分组从流入接口发送到流出接口的物理发送过程叫做转发(图3-3)。
03.01.04 路由器的功能
03.05 IP 路由选择的基础知识
03.05.01 IP 地址管理
-
复习IP 地址:
IP 协议存在 IPv4 和IPv6之分,二者没有互换性,地址的表示方式也大相径庭。
IPv4地址是采用类似192.168.0.12的形式,用点“.”将地址分成4个部分,并使用十进制数字表示的32bit 的值。因此每个部分的长度都是8bit, 可以用0~255的数字来表示。 -
地址分类与自然掩码
IPv4地址中前三类地址网络部分与主机部分的bit位数是分配好的。A 类地址的范围是 0.0.0.0,127.255.255.255 ,其中8bit 表示网络部分,剩余24bit 表示主机部分。B 类地址的范围是 128.0.0.0,191.255.255.255,其中使用16bit 表示网络部分,16bit 表示主机部分。C 类地址的范围是192.0.0.0,223.255.255.255,其中使用24bit 表示网络部分,8bit 表示主机部分。另外还有用于多播的、范围是224.0.0.0,239.255.255.255的 D类地址,和用于研究的、范围是240.0.0.0,255.255.255.255的E 类地址。 -
CIDR 与子网掩码
CIDR(Classless Inter-Domain Routing,无类别域间路由)不再采用以往的地址分类,而是基于可变长子网掩码进行任意长度的IP 地址前缀,即网络部分的分配(可变长子网掩码在RFC950 标准中定义了详细内容)。以往的地址分类只能将网络部分分成24bit 、16bit 或 8bit 三种,而通过 CIDR 进行任意长度的分配后,主机部分也可是任意长度,于是出现了新的子网掩码。IP 地址的 网络部分也可以称为前缀(prefix),网络部分的长度通常以“前缀长度为Nbit” 的形式来表述, 而前缀则通过子网掩码来表示。子网掩码和IP 地址一样分成4个部分、由十进制表示,如果网 络部分的长度为24bit, 子网掩码则为255.255.255.0。和IP 地址不同的是,当使用二进制表示时, 子网掩码 一 定是以连续的1开始,以连续的0结束。另外,使用CIDR 的表示法时,还可以在IP 地址后面添加斜线“/”和表示子网的bit 数。例如IP 地址为10.1.1.1,子网掩码为255.255.0.0时,可以记为10.1.1.1/16。
不使用CIDR,A 类地址到C 类地址仍然使用8bit 、16bit 和24bit 来表示网络部分的子网掩码,也称为自然掩码( natural mask)。
使用分类地址称为有类路由选择(classful), 使用无类地址则称为无类路由选择(classless)。网络部分相同的 IPv4 地址可以认为它们归属同一子网。
- 私有地址与全局地址
由 于IPv4 中地址枯竭的问题,出现了只在组织内部网络(intranet)中使用的IP 地址,即私有地址(private address)。私有地址在 RFC1918 中定义了详细信息,并针对每个地址分类提供了不同的地址范围,以供不同规模的内部网络选择(表3-10)。
A 类地址到C 类地址中,除了私有地址外的所有地址都称为全局地址(global address)。如果要在互联网上使用全局地址,需要在ICANN 下属的 Internet Registry机构中注册。
- 单播、广播、多播、任播
IP 地址也可以按照拓扑结构分类,如表3-11所示。
IPv6地址的值增加到了128bit, 用冒号“:”将地址分成八个部分,每个部分长16bit, 使用十六进制数字(从0000到 FFFF) 表示。IPv6 地址有条简写规则,即前导并连续的0可以省略。
-
能够设置 IP 地址的接口
IP 地址是在OSI 参考模型的网络层上使用的逻辑地址。从管理接口能够手动设置表3-12所列的接口类型。MAC 地址属于数据链路层使用的物理地址,该地址与每个物理接口一一对应,因此无法变更,也不会存在重复的地址。
-
访问列表与 NAT
路由器在转发或丢弃分组时会使用访问列表(access list)来进行分组的过滤(filtering) 操 作。而将分组从私有地址转发到全局地址,进行地址转换操作时,则会使用NAT技术。这两个功能的详细信息可参考05.07节。 -
ARP 表管理
ARP是通过IPv4 地址获取 MAC 地址的网络协议。路由器在发送IP 分组时,会用ARP 解析以太网数据帧所需要的目的地MAC 地址。负责使用ARP 解析的路由器在收到该请求后,会 向网络内其他的路由器或主机发出类似这样的询问消息:“谁有IP 地址192.168.1.254?”而持有该 IP地址的设备会做出如“192.168.1.254是00:00:00:0f:12:34:56”这样的应答。由于在转发IP分组 时执行ARP 的话效率会很低,因此一旦ARP 解析完成,会将解析结果以表项的形式保存在设备 的ARP 表中。但是表项不会永久保存,而是有一定的时限,该时限称为Age Time(老化时间或生存时间),超时后会再次解析ARP。另外, ARP表是以每个网络接口为单位保存的。对于无法使用ARP 的硬件或那些经常使用相同IP 地址的服务器而言,由于无法通过广播的方式完成ARP解析,因此也可以由网络管理人员在ARP表中手动添加对应ARP表项。 -
DHCP
DHCP(Dynamic Host Configuration Protocol, 动态主机配置协议)协议在RFC2131 与 RFC2132 中定义,是为主机(客户端)自动配置 IP 地址、子网、域名、DNS 服务器、默认网关等信息的网络协议。路由器的 DHCP功能主要分为三个方面。首先是作为 DHCP服务器为客户端分配IP 地址的 “DHCP服务器功能”。其次是作为DHCP 客户端从其他DHCP 服务器中获取IP 地址的 “DHCP 客户端功能”。最后是在 DHCP服务器和客户端之间完成中继广播消息的 DHCP中继代理功能(Relay Agent)。
使用路由器的 DHCP服务器功能时,个人计算机(DHCP 客户端)可以通过图3-16的流程 自动从路由器(DHCP 服务器)处获取 IP地址。如果手动设置每台计算机的IP 地址,过程会非 常麻烦,而且必须考虑到不能分配重复的IP 地址。而使用DHCP则可以指定分配的 IP地址所在 的范围<?>,自动完成在该范围内的地址分配,同时也可以自动为默认网关分配地址。几乎所有类型的路由器都支持DHCP服务器功能,其中也包括家用的宽带路由器。
03.05.02 IP 路由选择
路由器根据接收到的IP 分组中目的地址信息,从路由表中选择最适合的路径,并选择从 哪个网路接口转发,这一系列过程称为路由选择,对IP 分组进行路由选择操作就称为IP 路由选择。IP 路由选择可以分为针对单播通信的单播IP 路由选择和针对多播通信的多播IP 路由
选择。
03.05.03 路由表
路由表(routing table)包含了路由选择的必备信息,主要由以下各项组成。
1.目的地IP 地址(Destination Address):IP分组的目的地址。
2.子网掩码(Subnet Mask或 Network Mask):表示目的地IP 地址中有多少bit 表示网络部分。1与2组合起来能够表示目标子网络信息。
3.网关(Gateway):分组下一步需要转发到的IP地址。包含转发接口的子网IP地址,通常是相邻路由器的网络接口IP 地址。网关也可称为下一跳(next hop)。
4.网络接口 (Interface):转发该分组路由器上的接口。
5.度量值(Metric):当有多条路径可以到达相同目的地(目的IP 地址与子网掩码的值相同)时不同路径的优先级。该值越小表示优先级越高。
以上5个项目汇总组成一条路由表的表项,也称为路由选择表项(routing entry)。
03.05.04 最长匹配与默认网关
当IP 分组到达路由器时,路由器会参考IP 的目的地址信息,从路由表中找到包含网络地址的路由表表项。
如果路由表中存在该表项,则根据该表项记载的网络接口信息,转发该分组到对应的网关 (相邻路由器的IP 地址)。若路由表中出现多条表示同一个目的网络地址的表项时,则选择子网掩码最长、度量值最小的表项。这种选择最长子网掩码表项的方式也称为最长匹配(longest match)。如果路由表中不存在满足条件的表项,则根据路由表中默认的表项信息转发分组。默认路径 的IP 地址表示为0.0.0.0,子网掩码为0.0.0.0,使用CIDR 时记为0.0.0.0/0。经默认路径的转发也称为默认网关转发。如果路由表中不存在默认路径,路由器会告知转发错误并丢弃该分组。
默认网关的范例:
例如,图3-19中路由器A 将端口3设置为了默认网关。这时,个人计算机A 向计算机C 发送分组,路由器根据分组中192.168.3.0/24的网络地址信 息开始检索路由表,寻找需要从哪个端口转发。由于路由表中没有该表项,因此适用0.0.0.0/0表项,将数据表从端口3转发出去。
由于端口3和互联网相连,而且除了子网A 与子网B 之外,所有发向其他目的地址的分组均从端口3转发,因此个人计算机A 就可以完成互联网的接入了。
03.05.05 静态路由选择
网络管理员在路由器中手动设置路由表表项信息的方式称为静态路由选择(static routing)。 手动设置的路由表表项也称为静态路径(static route)。静态路由选择可以在配置默认路径或定义存根网络(stub network)时使用。所谓存根网络是指仅通过1台路由器连接,与外部网络之间只有一个出入口的网络。
03.05.06 动态路由选择
当网络规模很大、连接的路由器数量很多时,从物理层面上来说,通过管理员手动设置路 由表表项信息是不可能的,这时就需要用到动态路由选择(dynamicrouting) 的方式,即在路 由器之间交换信息自动生成路由表表项信息。路由器之间进行信息交换需要用到路由选择协议 (routing protocol, 也可简称为路由协议)。路由选择协议定义了路由器之间如何交换及存取路由 信息的一系列规则,在路由器之间进行交互时,如果使用(进行处理)的路由选择协议不匹配,则无法交换正确的路由信息。
有时网络中会同时使用静态路由和动态路由混合的路由选择方式。这时在路由表表项中会清晰地记录下哪条路径属于静态路由,哪条路径属于动态路由以及后者是使用何种路由选择协议等信息。
如果网络使用动态路由,需要耗费一定的时间通过交互的方式从其他路由器中获取路由信 息,因此路由表会形成逐渐增大的态势,最终整个网络上所有的路由器都会携带完成形态的路由 表,该过程称为收敛,有时也称为汇聚(convergence) 。 路由表从初始形态到收敛完成形态花费 的时间称为汇聚时间(convergence time), 汇聚时间越短,路径越稳定。 一般而言,参与收敛的 路由器数目越多,路径的汇聚时间越长,不过该时间的长短还和路由算法相关,算法不同,时间的长短也不同。
使用动态路由时,在以下情况会发生路由器之间的路由信息交互。
a. 网络内首次运行路由选择协议时。
b. 网络内添加新的路由器或链路时。
c. 网络内路由器被卸下或链路被切断导致发生故障时。 (目的地网络的角度)
- 动态路由的分类:
路由选择协议可以分为在自治系统(AS,Autonomous System)内部运行的IGP(Interior Gateway Protocol,内部网关协议)和在AS之间运行的EPG(Exterior Gateway Protocol,外部网关协议)两类。这里 AS 是指ISP 或学术科研网等在大规模机构中使用的独立网络,用AS 编号识别。
其中,作为 EPG的代表在业内广泛使用的是 BGP(Border Gateway Protocol, 边缘网关协议,具体内容见本节后文)。而IGP 根据用途不同,也分为不同的种类,最常用的是RIP(Routing Information Protocol, 路由信息协议)和 OSPF(Open Shortest Path First,开放式最短路径优先)。表3-13列出了主要的IGP 协议。根据不同的最忧路径算法,IGP 协议可以细分为距离矢量型(distance vector)、链路状态型(link state)和混合型(hybrid) 三类。距离矢量型是指仅根据距离(distance) 和方向(vector) 两个因素进行路由选择。方向是指从哪一个接口转发,距离是指分组经历的跳数。路由选择时,直接选择距离目的地跳数最少的路径。链路状态型会先制作整个网络的路径地图,然后依据该地图中的路径不断地进行路由选择。 区别于距离矢量型IGP 协议中每个路由器仅握有各自的路由信息,在链路状态型IGP 中所有的路由器均持有同一份网络路径地图。混合型是路由选择时在混合使用距离矢量型同链路状态型IGP 协议。
1.1. RIP:
RIP 路由信息协议是动态路由选择中历史最悠久的路由协议,应用于小规模网络中。路由器使用该协议与相邻的路由器交换链路信息,通过贝尔曼-福特算法找到最短路径。RIP使用的度量值(metric)是到达目标网络需要经过的跳数(需要经过多少个路由器转发)。 一般而言,RIP 在每30秒会更新一次路由信息,因此当距离目的地2跳时,路由信息的获取需要30秒;当距离目的地5跳时,则需要30秒×4,即120秒。这样一来,当网路规模很大时, 必然会出现路径无法收敛的情况,因此RIP 定义了16跳“无限”距离。当某个网络节点从相邻节点收到度量值为16跳以上的表项信息时,则该表项源地址的网络不可达 (unreachable)。
RIPv1 和 RIPv2 都使用UDP 协议的520端口完成路由器之间的路由信息交换。不同的是, RIPv1 使用广播通信而RIPv2 使用目的地址为224.0.0.9的多播通信。另外,RIPv1 还是有类路由协议,使用了固定分配A 类地址、B 类地址、C 类地址位数的自然掩码。RIPv2 支持无类路由选择,另外还带有仅从特定的路由器上获取路由信息的认证功能。
由于RIP 的实现非常简单,因此即使是内存较小的宽带路由器也有很多能同时支持静态路由 和 RIP 的产品。另外,虽然RIPv1 和 RIPv2 可以混合工作,但此时仅有RIPv1 生效,所以在使用时需要事先确认路由器支持的 RIP 版本,尽量使用同一版本工作。
由于无法了解整个网络的结构,距离矢量型路由协议只能依靠来自于相邻路由器的信息进行 路由选择,因此会发生路由环路问题。为了防止路由环路,就需要使用水平分割(split horizon)技 术避免同一条路由信息回流到产生该信息的端口处,或采用毒性逆转(poison reverse)方法,给无效的路由信息设置一个通信实体不可达的“无限大”度量值(也称为路由破坏,route poisoning)。
在RIP 协议中,默认每30秒更新一次路由信息,但如果网络中新发现了某条度量值很小的新路径,也会立刻自主触发路由更新(triggered update )。这一机制能够缩短网络路径的收敛时间。
1.2. OSPF:
OSPF是用于大规模网络的IGP, 因此成为电信运营商和普通 企业首选的路由选择协议。另外,还有使用多播的MOSPF(RFC1585) 和对应IPv6 的 OSPFv3(RFC2740,OSPF for IPv6) 作为 OSPF扩展的路由选择协议。
特征 | 解释 |
---|---|
等价多路径 | 能够同时使用多条等价(度量值相同)的路径,也称为等价负载均衡 |
认证 | 与RIPv2类似,能够使用明文或MD5散列完成路由器的认证 |
路由的瞬时更新 | OSPF属于链路状态型路由协议。RIP、RIPv2等距离矢量型路由协议虽然能够迅速应对自身以及相邻路由器的路径变更,但距离自己较远的路径发生变化时,路由器本身的收敛时间也会变长。而在OSPF中,各个路由器承担不同的角色,会同时更新路由信息,从而达到缩短收敛时间的效果 |
支持CIDR与V LSM | 和RIPv2一样,能够使用子网掩码以及应用于使用无类网络地址的网络 |
根据带宽选择路径 | 在OSPF中,度量值因网络带宽的不同而异。例如,即使距离目的地的跳数(相隔的路由器数量)相同,与10Mbit/s的以太网相比,100Mbit/s的快速以太网会获得较高的路由选择优先级 |
OSPF 属于位于IP 层之上工作在传出层的路由协议,该协议的工作端口为89表3-14总结了OSPF 协议的特征。
在 OSPF 中,网络分割为多个区域(area), 最终形成一级级连接到骨干区域0的层级结构。 通过以区域为单位进行管理,能够将网络变化限制在在区域内,缩短收敛时间。只有区域0构成的 OSPF 网络称为单一区域 OSPF, 由多个区域构成的网络则称为多区域 OSPF(图3-22)。
1.3. BGP:
BGP(Border Gateway Protocol, 边缘网关协议)是在 AS(Autonomous System, 自治系统) 之间进行路由选择的 EGP 协议。IPv4 所使用的是在RFC1771 中定义的 BGP4(BGP 版本4),而 在IPv6 中使用的则是由RFC2545 定义的BGP4+(BGP for Plus) 协议。由于BGP 需要获取非常可靠的大量交互网络信息,因此数据传输采用TCP 协议的179端口进行。
AS之间通过AS 编号识别,编号为1,65535的16bit值。其中64512~65535为私有AS 编号,与私有 IP地址一样,可以在不与互联网相连的私有网络中使用。BGP 使用的路由信息和IGP 的路由信息一般不在一起管理。也就是说,运行BGP 的路由器
会同时拥有IGP 和 EGP 两张路由表。OSFP一般会以传输媒介(链路)的带宽作为计算路径的成本,BGP则会利用path 属性(path
attribute) 来计算。基于path 属性和方向的路由选择称为路径矢量型(path vector)路由协议。
- 路由重分发
当网络中运行着多个路由协议时,在路由器内部设置路由重分发(redistribution),就能够在多 个路由协议之间共享路由信息。例如,可以将通过BGP 获取的外部 AS相关路径信息加入OSPF 获取的路由选择信息中,也能够以静态路由的方式向其他各类路由选择协议分发相关的路由信息。在执行路由重分发时,需要预先设置与分发目标路由协议相匹配的种子度量值(seed metric)。需要注意的是, CiscoIOS 中的种子度量默认值会使OSPF 在路由重分发时,由于反复分发 而导致路由环路的发生,还会因为错误的度量值设置以及不同路由协议之间收敛时间的不同导致最短路径计算失败。
03.05.07 IP 隧道与 VPN
某个通信协议被其他通信协议封装后进行转发传输的技术称为隧道技术。在处于网络上的 两台路由器之间设置隧道的话,就可以在路由器之间根据隧道协议构建一条虚拟的通信链路。如 图3-23所示,路由器A 接收到的原始分组以封装后的形态(encapsulation) 通过隧道协议被转发 到目的地路由器B 中。路由器B 随后进行解封装(decapsulation), 还原分组形态,并以原始形态再次转发到实际的目的地。
由于该技术架设直连通信两地的隧道(虚拟的),因此也称为隧道技术。隧道协议有类似L2F、PPTP、L2TP 这样将数据链路层数据帧封装于IP 分组中的L2 隧道协议,还有类似 GRE 、IPsec 这样将网络层分组封装于IP 分组中的L3 隧道协议。
隧道技术多用于构建VPN(Virtual Private Network, 虚拟私有网)网络,尤其是使用IPsec (参考第5章)构建加密的VPN 提供给用户。这时, PC-A 和 PC-B 之间分配的私有地址处于一个网络中,而路由器 A 和路由器B 之间则使用全局地址,在互联网上相连并负责数据的传输。
- IPv6 隧道:
1.1. IPv6 over IPv4 隧道
IPv6 over IPv4 隧道是指通过IPv4 的网络传输 IPv6的通信机制。在图3-28 中,从发送方路 由过来的IPv6分组在作为隧道入口的路由器A 中被加上了IPv4 的首部,也就是说IPv6 的分组被封装成了IPv4分组,此时 IPv6的分组就可以当作IPv4分组进行路由操作了。当该分组通过IPv4 网络到达隧道出口的路由器B 时,在该处去掉之前添加的IPv4 首部,完成IPv4 的解封装,并将解封装后的IPv6 分组转发到IPv6 网络进行后面的路由过程。
IPv6 over IPv4有多种实现方式,有使用地址6to4的 6to4 封装技术,也有通过在NAT环 境下也可使用的UDP 来进行封装的 Teredo技术,还有用于将IPv6数据导入使用私有地址的Intranet中的 ISATAP 技术。
1.2. IPv4 over IPv6 隧道
使用IPv6 网络进行IPv4 分组的通信机制。像 FLET’s光 Next那样需要在IPv6 网络中进行IPv4 通信时,必须将IPv4的分组封装到 IPv6的分组中进行传输。
03.05.08 IP 多播
多播是向多个接收者同时发送相同数据的过程, 一般用于同时传输动态画面等情况。构成多 播网络的路由器可以将特定主机发送的多播分组复制并转发到其他多个网络节点。多播分组发送源主机称为 source 或 sender, 接收的终端则称为 listener 或 receiver。
在多播中,多个接收多播数据的终端会被分组,每个多播组的识别号使用IPv4的224.0.0.0/4、IPv6中的 ff00::/8等范围的多播地址。IPv4 多播地址的分类如表3-18所示。
图3-29中,在232.0.0.1与232.0.0.2两个多播组中正在传输分组。左侧两个listener 接收 232.0.0.1多播组的分组,右边两个listener接收232.0.0.2组的分组,而位于中央的 listener 能够同时接收两组的分组。
在接收终端通过应用程序对多播进行设置,就可以设置NIC(Network Interface Card,网 卡),使得终端能够获取发向接收多播IP 地址对应的、多播 MAC 地址的以太网帧格式,从而完成多播分组的接收。
- 多播的 MAC 地址:
1.1. IGMP 与 MLD
在IPv4协议中使用IGMP(Internet Group Management Protocol,Internet 组管理协议)协议 来管理各终端是否加入(或退出)多播组以及加入(或退出)哪个多播组。 - 多播路由选择协议