IP路由基础
- 通过IP地址能够寻找到一个唯一的网络节点,每个IP都有自己所属的网段,这些网络可能分布在世界各地,共同组成了全球的网络。
- 为了实现不同网段之间的相互通信,网络设备需要能够转发来自不同网段的IP报文,将其送达不同的IP网段。
路由
- 路由是指导报文转发的路径信息,通过路由可以确认转发IP报文的路径。
- 路由设备是依据路由转发报文到目的网段的网络设备,最常见的路由设备:路由器。
- 路由设备维护着一张路由表,保存着路由信息。
- 网关以及中间节点(路由器)根据收到的IP报文其目的地址选择一条合适的路径,并将报文转发到下一个路由器。在路径中的最后一跳路由器二层寻址将报文转发给目的主机。这个过程被称为路由转发。
- 中间节点选择路径所依赖的表项为称为路由表。
- 路由条目包含明确的出接口以及下一跳,这两项信息指导IP报文转发到相应的下一跳设备上。
- 通过路由中包含的信息,路由设备可以转发IP报文到相应的路径。
- 目的地址、掩码用于识别IP报文目的地址,路由设备将IP报文匹配到相应的路由之后,根据路由的出接口、下一跳确认转发的路径。
- 只有出接口并不能够确认转发IP报文的下一跳设备,还需要明确的下一跳设备地址。
路由表
每个路由器都有路由表,而路由表又分为本地核心路由表和协议路由表。
- 路由表中的关键字段:
- Destination:表示此路由的目的地址。用来标识IP包的目的地址或目的网络。
- Mask:表示此目的地址的子网掩码长度。与目的地址一起来标识目的主机或路由器所在的网段的地址。
- Proto(Protocol):表示学习此路由的路由协议。
- Pre(Preference):表示此路由的路由协议优先级。
- 路由器分别定义了外部优先级和内部优先级。外部优先级是指用户可以手工为各路由协议配置的优先级,内部优先级则不能被用户手工修改。
- 选择路由时先比较路由的外部优先级,当不同的路由协议配置了相同的优先级后,系统会通过内部优先级决定哪个路由协议发现的路由将成为最优路由。
- Cost:路由开销。
- NextHop:表示转发到此目的网络的下一跳。指明数据转发的下一个设备。
- Interface:表示转发到此目的网络的出接口。指明数据将从本地路由器哪个接口转发出去。
- Preference用于不同路由协议间路由优先级的比较,Cost用于同一种路由协议内部不同路由的优先级的比较。
- 注意:正文内的路由表为截取版,非完整路由表。
- D为下载到fib表的路由,RD表示迭代路由,只指定下一跳,而不指定出接口会出现此标志。
RIB与FIB
具有路由功能的网络设备都维护两种重要的数据表:一是路由表RIB(Routing Information Base,路由信息库);二是转发表FIB。
- 路由表:
- 可以将路由表视为位于路由器的控制平面,实际上路由表并不直接指导数据转发。路由器在执行路由查询时,并不是在路由表中进行报文目的地址的查询,真正指导数据转发的是FIB表,路由器将路由表中的最优路由下载到FIB表,此后如果路由表中的相关表项发生变化,FIB表也将立即同步。
- 由于两张表的一致性,且路由表阅读起来更直观,因此在绝大多数场合,在阐述路由器数据转发过程时,会用“路由表”这个说法,实际上,路由器查询的是FIB表,位于控制层面的路由表只是提供路由信息。
- FIB表:
- FIB表位于路由器的数据平面,亦被称为转发表项,每条转发表项都指定要到达某个目的地所需通过的出接口及下一跳IP地址等信息。
- 注意:
- 路由进程:路由器支持OSPF和IS-IS多进程,可以根据业务类型划分不同的进程,不同的进程之间相互独立。进程号是本地概念,不影响与其它路由器之间的报文交换。因此,不同的路由器之间,即使进程号不同也可以进行报文交换。
IP路由查找的最长匹配原则
- 路由器查找FIB表时,将报文的目的IP地址和FIB表中各表项的掩码进行按位“逻辑与”,得到的地址符合FIB表中的网络地址则匹配。
- 最终选择一个掩码最长的FIB表项转发报文。
10.3.3.3与32位掩码相与得到的网络地址为10.3.3.3,与FIB中的10.3.3.3/32匹配,且掩码最长。
- FIB表中每条转发项都指明到达某网段或某主机的报文应通过路由器的哪个物理接口或逻辑接口发送,然后就可到达该路径的下一个路由器,或者不再经过别的路由器而传送到直接相连的网络中的目的主机。
- FIB表信息查看命令:display fib [ slot-id ]
- slot-id:显示指定槽位号的FIB表信息。整数形式,取值范围请根据设备实际配置选取。
- FIB表中的字段说明:
- Total number of Routes:路由表总数。
- Destination/Mask:目的地址/掩码长度。
- Nexthop:下一跳。
- Flag:当前标志,G、H、U、S、D、B的组合。
- G(Gateway):网关路由,表示下一跳是网关。
- H(Host):主机路由,表示该路由为主机路由。
- U(Up):可用路由,表示该路由状态是Up。
- S(Static):静态路由。
- D(Dynamic):动态路由。
- B(Black Hole):黑洞路由,表示下一跳是空接口。
- TimeStamp:时间戳,表示该表项存在的时间,单位是秒。
- Interface:到目的地址的出接口。
- TunnelID:表示转发表项索引。该值不为0时,表示匹配该项的报文通过隧道转发(如:MPLS隧道转发)。该值为0时,表示报文不通过隧道转发。
路由条目生成
路由信息获取方式
- 直连路由:直连接口所在网段的路由,由设备自动生成。
当匹配中直连路由进行转发时,此时路由器会查看ARP表项,将报文直接转到目的地址,此时该路由器为路由转发的最后一跳路由器。
直连路由的下一跳地址并不是其他设备上的接口地址,因为该路由的目的网段为接口所在网段,本接口就是最后一跳,不需要再转发给下一跳,所以在路由表中的下一跳地址就是接口自身地址。
使用直连路由进行路由转发时,转发的动作不是交给下一跳,而是查询ARP表项,根据ARP表项封装报文,将报文发送到目的IP。并不是所有接口生成的直连路由都会出现在路由表中,直连路由出现在路由表中的前提是该接口的物理状态、协议状态都为UP。
静态路由:由网络管理员手工配置的路由条目(标准写法:同时写出接口和下一跳,避免在现网中只写下一跳,不能实现主备路由切换)
静态路由由网络管理员手动配置,配置方便,对系统要求低,适用于拓扑结构简单并且稳定的小型网络。
缺点是不能自动适应网络拓扑的变化,需要人工干预。
RTA上转发目的地址属于20.1.1.0/24的报文,在只有直连路由的情况下没有路由匹配。此时可以通过手动配置静态路由,使RTA发送前往20.1.1.0/24网段的报文交给下一跳10.0.0.2转发。
配置静态路由的下一跳使用出站接口和下一跳IP的差别
在配置静态路由时,下一跳可以使用下一路由器的IP地址,也可以使用本路由器的出站接口。在点对点的网络中,两者可能没有什么差别,但在以太网中,两者有很大差别。
因为在以太网中,两个相邻接口之间的通信是依靠MAC地址。相邻接口通信时,需要知道对方的MAC地址,需要知道对方的mac地址,就要通过广播发送ARP请求报文。
当在以太网环境下配置静态路由,如果指定的是下一跳,那么PC1访问PC2时,R1会利用ARP获取到R1下一跳(R2的e0/0/0口)的mac地址,将PC1发出的数据传给R2,再由R2转发给PC2。此时PC1与PC2可以正常通信。
在R2的e0/0/0口抓包可知,ARP请求的是R2-e0/0/0(192.168.2.2)的mac地址。
当在以太网环境下配置静态路由,如果指定的是出接口,那么PC1访问PC2时,R1会认为PC2和接口处在“直连网络”中,直连网络中主机间的通信是通过ARP协议广播来获取到要交付的目标主机的MAC地址的,于是在R1就会发出ARP请求报文,请求PC2的的mac地址,由于ARP请求报文不能发出R1和R2所在的广播域,于是便不能请求到PC2的mac地址,也就无法实现PC1与PC2的通信。要解决这个问题,可以在R2上开启ARP代理,那么R2将代替PC2,回应e/0/0/0的mac地址给R1。
在R2的e0/0/0口抓包可知,ARP请求的是PC2(192.168.3.10)的mac地址。
开启代理会出现的问题:会导致路由表arp缓存耗尽。
采用指定下一跳时,PC1访问PC2、PC3,R1上只要知道192.168.2.2的mac地址即可。
采用指定出接口时,并开启ARP时,PC1访问PC2、PC3, R1的arp表中有PC2、PC3的arp缓存。
如果R2一侧所连接的主机数量非常多,那么R1的arp表项将会记录所有主机的arp缓存,可能导致R1的arp缓存耗尽,反之R1侧连接主机数量过多,也一样。而指定下一跳时,无论所连主机数量与多少,只会记录下一跳的arp缓存。
缺省路由:
缺省路由是一种特殊的路由,当报文没有在路由表中找到匹配的具体路由表项时才使用的路由。如果报文的目的地址不能与路由表的任何目的地址相匹配,那么该报文将选取缺省路由进行转发。
缺省路由在路由表中的形式为0.0.0.0/0,缺省路由也被叫做默认路由。
- 缺省路由一般用于企业网络出口,配置一条缺省路由让出口设备能够转发前往Internet上任意地址的IP报文。
- 动态路由:路由器通过动态路由协议(如OSPF、IS-IS、BGP等)学习到的路由
静态路由的缺点是不能自动适应网络拓扑的变化,需要人工干预。
动态路由协议有自己的路由算法,能够自动适应网络拓扑的变化,适用于具有一定数量三层设备的网络
动态路由分类
路由高级特性
路由递归
- 路由必须有直连的下一跳才能够指导转发,但是路由生成时下一跳可能不是直连的,因此需要计算出一个直连的下一跳和对应的出接口,这个过程就叫做路由递归。
路由递归也被称为路由迭代
等价路由
- 路由表中存在等价路由之后,前往该目的网段的IP报文路由器会通过所有有效的接口、下一跳转发,这种转发行为被称为负载分担。
浮动路由
- 静态路由支持配置时手动指定优先级,可以通过配置目的地址/掩码相同、优先级不同、下一跳不同的静态路由,实现转发路径的备份。
- 浮动路由是主用路由的备份,保证链路故障时提供备份路由。主用路由下一跳可达时该备份路由不会出现在路由表。
最优路由条目优选
查看ip路由表
Destination/Mask:表示此路由的目的网络地址与网络掩码。将目的地址和子网掩码“逻辑与”后可得到目的主机或路由器所在网段的地址。例如:目的地址为1.1.1.1,掩码为255.255.255.0的主机或路由器所在网段的地址为1.1.1.0。
Proto(Protocol):该路由的协议类型,也即路由器是通过什么协议获知该路由的。
Pre(Preference):表示此路由的路由协议优先级。针对同一目的地,可能存在不同下一跳、出接口等多条路由,这些不同的路由可能是由不同的路由协议发现的,也可以是手工配置的静态路由。优先级最高(数值最小)者将成为当前的最优路由。
Cost:路由开销。当到达同一目的地的多条路由具有相同的路由优先级时,路由开销最小的将成为当前的最优路由。
NextHop:表示对于本路由器而言,到达该路由指向的目的网络的下一跳地址。该字段指明了数据转发的下一个设备。
Interface:表示此路由的出接口。指明数据将从本路由器的哪个接口转发出去。
Preference用于不同路由协议间路由优先级的比较,Cost用于同一种路由协议内部不同路由的优先级的比较。在业界,Cost也被称为路由度量值(Metric)。
路由优先级
- 当路由器从多种不同的途径获知到达同一个目的网段的路由(这些路由的目的网络地址及网络掩码均相同)时,路由器会比较这些路由的优先级,优选优先级值最小的路由。
- 路由来源的优先级值(Preference)越小代表加入路由表的优先级越高。
路由来源 |
路由类型 |
默认优先级 |
直连 |
直连路由 |
0 |
静态 |
静态路由 |
60 |
动态路由 |
OSPF内部路由 |
10 |
|
OSPF外部路由 |
150 |
- 当路由器通过某种路由协议发现了多条到达同一个目的网络的路由时(拥有相同的路由优先级),度量值将作为路由优选的依据之一。
- 路由度量值表示到达这条路由所指目的地址的代价。
- 一些常用的度量值有:跳数、带宽、时延、代价、负载、可靠性等。
- 度量值数值越小越优先,度量值最小路由将会被添加到路由表中。
- 度量值很多时候被称为开销(Cost)。
路由转发
当路由器收到一个IP数据包时,会将数据包的目的IP地址与自己本地路由表中的所有路由表项进行逐位(Bit-By-Bit)比对,直到找到匹配度最长的条目,这就是最长前缀匹配机制。
“最长匹配是指存在多条目的网段相同的路由时,匹配掩码最长的那一条。因为掩码越长,表示的网段就越小,匹配也就越精确
CIDR
- CIDR(classless inter-domain routing,无类别域间路由)采用IP地址加掩码长度来标识网络和子网,而不是按照传统A、B、C等类型对网络地址进行划分。
- CIDR容许任意长度的掩码长度,将IP地址看成连续的地址空间,可以使用任意长度的前缀分配,多个连续的前缀可以聚合成一个网络,该特性可以有效减少路由表条目数量。
路由汇总需求
- 子网划分、VLSM解决了地址空间浪费的问题,但同时也带了新的问题:路由表中的路由条目数量增加。
- 为减少路由条目数量可以使用路由汇总。
- 一个非常常见而又有效的办法就是使用路由汇总(Route Summarization)。路由汇总又被称为路由聚合(Route Aggregation),是将一组有规律的路由汇聚成一条路由,从而达到减小路由表规模以及优化设备资源利用率的目的,我们把汇聚之前的这组路由称为精细路由或明细路由,把汇聚之后的这条路由称为汇总路由或聚合路由。
- 路由汇总将一组具有相同前缀的路由汇聚成一条路由,从而达到减小路由表规模以及优化设备资源利用率的目的。
- 路由汇总采用了CIDR的思想:将相同前缀的地址聚合成一个。
- 我们把汇聚之前的这组路由称为精细路由或明细路由,把汇聚之后的这条路由称为汇总路由或聚合路由。
汇总引发的问题
攻击者在RTB上发送目的ip地址为10.0.20.0网段的流量,造成环路。
- Null(无效)接口,这种类型的接口只有一个编号,也就是0。Null0是一个系统保留的逻辑接口,当网络设备在转发某些数据包时,如果使用出接口为Null0的路由,那么这些报文将被直接丢弃,就像被扔进了一个黑洞里,因此出接口为Null0的路由又被称为黑洞路由。
精确汇总
- 为了让RTA能够到达RTB上的172.16.1.0/24-172.16.31.0/24网段,配置了一条静态的汇总路由,这条网段虽然优化了网络配置,但是汇总的范围太广,将RTC上的网段也包括在内,导致前往RTB上网段的流量到达RTA之后会被发往RTC,造成数据包的丢失,这种路由为不精确的路由。为此配置汇总路由时要尽量精确,刚好包括所有明细路由。
路由引入的基本概念
路由引入指的是将路由信息从一种路由协议发布到另一种路由协议的操作。
- 通过路由引入,可以实现路由信息在不同路由协议间传递。
- 执行路由引入时,还可以部署路由控制,从而实现对业务流量的灵活把控。
- 路由引入是具有方向性的,将路由信息从路由协议A引入到路由协议B(A-to-B),则路由协议B可获知A中的路由信息,但是此时,A还并不知晓B路由协议中的路由信息,除非配置B-to-A的路由引入。
路由优先级
- 华为定义的路由优先级:
- Direct:0
- OSPF:10
- IS-IS:15
- Static:60
- OSPF ASE:150
- OSPF NSSA:150
- IBGP:255
- EBGP:255
- 注意:不同的厂商路由优先级的协定可能不同。
路由回灌
场景描述:
- R1将直连路由10.1.1.0/24引入到OSPF中。
- 10.1.1.0/24网段路由全OSPF域内通告。
- R2在IS-IS进程中引入OSPF路由。
- 10.1.1.0/24网段路由全IS-IS域内通告。
- R3在OSPF进程中引入IS-IS路由。
10.1.1.0/24网段路由再次被通告进OSPF域内,形成路由回灌。