第七章 IP网络间路由选择
路由器的最基本功能就是路由,对一个具体的路由器来说,路由就是将从一个接口接收到的数据包,转发到另外一个接口的过程,该过程类似交换机的交换功能,只不过在链路层我们称之为交换,而在IP层称之为路由;而对于一个网络来说,路由就是将包从一个端点(主机)传输到另外一个端点(主机)的过程。
路由的完成离不开两个最基本步骤:第一个步骤为选径,路由器根据到达数据包的目标地址和路由表的内容,进行路径选择;第二个步骤为包转发,根据选择的路径,将包从某个接口转发出去。
路由表是路由器进行路径抉择的基础,路由表的内容(路由表项,通常也称为路由)来源有两个:静态配置和路由协议动态学习。路由表内容如下:
router#show ip route
Codes: C - connected, S - static, R - RIP, D - EIGRP,
EX - EIGRP external, O- OSPF, IA - OSPF inter area
E1 - OSPF external type 1, E2 - OSPF external type 2,
* - candidate default
Gateway of last resort is 10.5.5.5 to network 0.0.0.0
172.16.0.0/24 is subnetted, 1 subnets
C 172.16.11.0 is directly connected, serial1/2
O E2 172.22.0.0/16 [110/20] via 10.3.3.3, 01:03:01, Serial1/2
S* 0.0.0.0/0 [1/0] via 10.5.5.5
路由表的开头是对字母缩写的解释,主要是为了方便阐述路由的来源。“Gateway of last resort”说明存在缺省路由,以及该路由的来源和网段。如果一个网络被划分为若干个子网,则在每个子网路由前面一行会说明该网络已划分子网以及子网的数量。
一般一条路由显示一行,如果太长可能分为多行。从左到右,路由表项每个字段意义如下所述:
路由来源:每个路由表项的第一个字段,表示该路由的来源。比如“C”代表直连路由,“S”代表静态路由,“*”说明该路由为缺省路由。
目标网段:包括网络前缀和掩码说明,如172.22.0.0/16。网络掩码显示格式有3种:第一显示格式,掩码的比特位数,如/24表示掩码为32位比特中前面24位为“1”、后面8位为“0”的数值;第二种显示格式,以十进制方式显示,如255.255.255.0;第三种显示格式;以十六进制方式显示,如0xFFFFFF00,缺省情况为第一种显示格式。
管理距离/量度值:管理距离代表该路由来源的可信度,不同的路由来源该值不一样,量度值代表该路由的花费。路由表中显示的路由均为最优路由,既管理距离、和量度值都最小。两条到同一目标网段、来源不同的路由,要安装到路由表中之前,需要进行比较,首先要比较管理距离,取管理距离小的路由,如果管理距离相同,就比较量度值,如果量度值也一样则将安装多条路由。
下一跳IP地址:说明该路由的下一个转发路由器。
存活时间:说明该路由已经存在的时间长短,以“时:分:秒”方式显示,只有动态路由学到的路由才有该字段。
下一跳接口:说明该符合该路由的IP包,将往该接口发送出去。
 
 
7.1 静态路由配置
 
 
静态路由就是手工配置的路由,使得到指定目标网络的数据包的传送,按照预定的路径进行。当RGNOS软件不能学到一些目标网络的路由时,配置静态路由就会显得十分重要。给所有没有确切路由的数据包配置一个缺省路由,是一种通常的做法。
要配置静态路由,在全局配置模式中执行以下命令:

命令
作用
Router(config)# ip route network mask {ip-address | interface-type interface-number } [distance] [tag tag] [permanent]
配置静态路由
Router(config)# no ip route network mask
删除静态路由
 
默认路由是当数据在查找方向时,没有可以使用的明显的路由选择信息时为数据指定的路由,如果路由器有一个连接到小型网络段的连接和到一个具有多个不同I P子网的大型互连网络的连接,那么连接到多个不同子网的接口将是设置为默认路由的最好的接口。这样,路由器收到的任何数据包,如果它们的目的不是紧邻的网络段,则它们将通过默认路由从接口发出。
 
要配置无类路由,在全局配置模式中执行以下命令:

命令
作用
Red-Giant(config)# ip classless
配置无类路由
Red-Giant(config)# no ip classless
取消无类路由配置
 
 
 
 
7.2 RIP简介
 
 
RIP (Routing Information Protocol) 路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP 采用距离向量算法,是一种距离向量协议。RIP在RFC 1058文档中定义。
RIP使用UDP报文交换路由信息,UDP端口号为520。通常情况下RIPv1报文为广播报文;而RIPv2报文为组播报文,组播地址为224.0.0.9。
 
RIP每隔30 秒向外发送一次更新报文。如果路由器经过180 秒没有收到来自对端的路由更新报文则将所有来自此路由器的路由信息标志为不可达,若在240 秒内仍未收到更新报文就将这些路由从路由表中删除。
RIP 使用跳数来衡量到达目的地的距离,称为路由量度。在RIP 中,路由器到与它直接相连网络的跳数为0;通过一个路由器可达的网络的跳数为1 ,其余依此类推;不可达网络的跳数为16。
为了防止形成环路路由,RIP采用了以下手段:
  水平分割(Split Horizon)
 路由拒绝时间(Holddown time)。
触发更新
7.3 创建RIP路由进程
路由器要运行RIP路由协议,首先需要创建RIP路由进程,并定义与RIP路由进程关联的网络。
要创建RIP路由进程,在全局配置模式中执行以下命令:

步骤
命令
作用
第一步
Router(config)# router rip
创建RIP路由进程
第二步
Router(config-router)# network network-number
定义关联网络
 
 说明:
Network命令定义的关联网络有两层意思:1)RIP只对外通告关联网络的路由信息;2)RIP只向关联网络所属接口通告路由信息。
7.4 水平分割配置
多台路由器连接在IP广播类型网络上,又运行距离向量路由协议时,就有必要采用水平分割的机制以避免路由环路的形成。水平分割可以防止路由器将某些路由信息从学习到这些路由信息的接口通告出去,这种行为优化了多个路由器之间的路由信息交换。
然而对于非广播多路访问网络(如帧中继、X.25网络),水平分割可能造成部分路由器学习不到全部的路由信息。在这种情况下,可能需要关闭水平分割。如果一个接口配置了次IP地址,也需要注意水平分割的问题。
要配置关闭或打开水平分割,在接口配置模式中执行以下命令:

命令
作用
Router(config-if)# no ip split-horizon
关闭水平分割
Router(config-if)# ip split-horizon
打开水平分割
 
封装帧中继时,接口缺省为关闭水平分割;帧中继子接口、X.25封装缺省为打开水平分割;其它类型的封装缺省均为打开水平分割。因此在使用中一定要注意水平分割的应用。
7.5 有类别路由选择(classful routing)概述
不随各网络地址发送子网掩码信息的路由选择协议被称为有类别的选择协议(RIPv1、IGRP)当采用有类别路由选择协议时,属于同一主类网络(A类、B类和C类)有所有子网络都必须使用同一子网掩码。运行有类别路由选择协议的路由选择协议的路由器将执行下面工作的一项以确定该路由型网络部分:
如果路由更新信息是关于在接收接口上所配的同一主类网络的,路由器将采用配置在接口上的子网掩码;
如果路由更新是关于在接收接口上所配的不同主类的网络的,路由器将根据其所属地址类别采用缺省的子网掩码。
有类别归纳路由的生成是由有类别路由选择协议自动处理的
7.6无类别路由选择(classless routing)概述
无类别路由选择协议包括开放最短路径优先(OSPF)、EIGRP、RIPV2、中间系统到中间系统(IS-IS)和边界网关协议版本4(BGP4)。在同一主类网络中使用不同的掩码长度被称为可变长度的子网掩码(VLSM)。无类别路由选择路由选择协议支持VLSM,因此可以更为有效的设置子网掩码,以满足不同子网对不同主机数目的需求,可以更充分的利用主机地址。
7.7 定义RIP版本
缺省情况下,RGNOS可以接收RIPv1和RIPv2的数据包,但是只发送RIPv1的数据包。你可以通过配置,只接收和发送RIPv1的数据包,也可以只接收和发送RIPv2的数据包。
要配置软件只接收和发送指定版本的数据包,在路由进程配置模式中执行以下命令:

命令
作用
Router(config-router)# version {1 | 2}
定义RIP版本
 
以上命令使软件缺省情况下只接收和发送指定版本的数据包,如果需要可以更改每个接口的缺省行为。
要配置接口只发送哪个版本的数据包,在接口配置模式中执行以下命令:

命令
作用
Router(config-if)# ip rip send version 1
指定只发送RIPv1数据包
Router(config-if)# ip rip send version 2
指定只发送RIPv2数据包
Router(config-if)# ip rip send version 1 2
指定只发送RIPv1和RIPv2数据包
 
 
 
要配置接口只接收哪个版本的数据包,在接口配置模式中执行以下命令:

命令
作用
Router(config-if)# ip rip receive version 1
指定只接收RIPv1数据包
Router(config-if)# ip rip receive version 2
指定只接收RIPv2数据包
Router(config-if)# ip rip receive version 1 2
指定只接收RIPv1和RIPv2数据包
关闭路由自动汇聚
RIP路由自动汇聚,就是当子网路由穿越有类网络边界时,将自动汇聚成有类网络路由。RIPv2缺省情况下将进行路由自动汇聚,RIPv1不支持该功能。
RIPv2路由自动汇聚的功能,提高了网络的伸缩性和有效性。如果有汇聚路由存在,在路由表中将看不到包含在汇聚路由内的子路由,这样可以大大缩小路由表的规模。
通告汇聚路由会比通告单独的每条路由将更有效率,主要有以下因素:
 当查找RIP数据库时,汇聚路由会得到优先处理;
 当查找RIP数据库时,任何子路由将被忽略,较少了处理时间。
有时可能希望学到具体的子网路由,而不愿意只看到汇聚后的网络路由,这时需要关闭路由自动汇总功能。
要配置路由自动汇聚,在RIP路由进程模式中执行以下命令:

命令
作用
Router(config-router)# no auto-summary
关闭路由自动汇总
Router(config-router)# auto-summary
打开路由自动汇总
 
 
 
7.8 配置帧中继子接口
子接口概述
子接口使得一个单一的物理接口能够被视为多个虚拟接口。子接口的使用,使路由器将物理接口的属性应用于每个虚拟接口。缺省情况下,DLCI全部分配给物理接口,你需要将DLCI明确分配给该物理接口的一个指定的虚拟子接口。一个物理接口可以有多个子接口,虽然子接口是逻辑结构并不实际存在,但对于网络层而言,子接口和主接口没有区,都可通过配置PVC与远端设备相连。
帧中继的子接口又可分为两种类型:点到点point-to-point 子接口和点到多点multipoint 子接口。点到点子接口用于点到点连接,一般一个帧中继点到点子接口分配一个PVC,这种子接口与连接DDN线路的物理接口属性类似;点到多点子接口用于连接同一个网段的多个(一般两个以上)用户端设备。
对于点到点的子接口因为只有一个远程DTE的设备,不用配置静态地址映射,利用发转ARP就可知道对方IP地址对应的DLCI,对于点到多点的子接口,可通过运行反转ARP协议动态学习或通过手工静态配置来使每条PVC 都能和其相连的远程DTE建立地址映射关系。
具有反转ARP能力的所有点到点子接口和多点子接口都需要frame-relay interface-dlci命令。而使用静态寻址的多点子接口则不需要此命令。
子接口配置任务清单
子接口的应用可以按照如下的步骤进行:
 创建子接口
 配置帧中继子接口的DCLI号
 配置帧中继子接口PVC 及建立地址映射
创建子接口
子接口的创建可以按如下的步骤进行:

步骤
命令
作用
第一步
Red-Giant(config)# interface serial number
进入同步串口接口配置层
第二步
Red-Giant(config-if)#en capsulation frame-relay [ietf|cisco]
封装帧中继,推荐ietf格式
第三步
Red-Giant(config)# interface serial number.subinterface-number [multipoint|point-to-point]
退出到全局配置层,在创建帧中继的子接口,并指定接口的类型。
 
其中,封装帧中继子接口时,缺省封装的点到多点。
配置帧中继子接口的DLCI
如果,使用反转ARP,那么必须配置帧中继子接口的DLCI,如果使用静态映射,那么可以忽略此步骤。

命令
作用
Red-Giant(config-subif)# frame-relay interface-dlci dlci
配置子接口的DLCI
Red-Giant(config-subif)# no frame-relay interface-dlci dlci
删除子接口的DLCI
 
建立帧中继子接口地址映射
对于点到点子接口,因为只有唯一的对端DTE,所以在给子接口配置虚电路的DLCI时实际已经隐含地确定了对端的网络地址,而于对点到多点子接口,对端网络地址与本地DLCI 的映射关系必须通过配置静态地址映射或者通过反转ARP来确定。
1) 建立帧中继子接口静态地址映射

命令
作用
Red-Giant(config-subif)# frame-relay map ip ip-address dlci [ option ]
建立帧中继子接口静态地址映射
Router(config-isubf)# no frame-relay map ip ip-address dlci [ option ]
删除帧中继子接口静态地址映射
 
2)允许/禁止帧中继子接口反转ARP

命令
作用
Red-Giant(config-subif)# frame-relay inverse-arp ip [ dlci ]
允许使用帧中继子接口反转ARP协议
Red-Giant(config-subif)# no frame-relay inverse-arp ip [dlci]
禁止使用帧中继子接口反转ARP
 
缺省情况下,帧中继子接口是允许使用反转ARP协议的。
帧中继监控和维护
帧中继调试信息
帧中继有以下的调试信息,利用debug frame-relay ?命令可以查询到:

命令
作用
Red-Giant# debug frame-relay dlsw
调试在帧中继上运行DLSW+的信息
Red-Giant# debug frame-relay event
调试帧中继事件信息
Red-Giant# debug frame-relay ip tcp [header-compression]
调试帧中继的IP TCP信息,或者TCP报头压缩信息
Red-Giant# debug frame-relay llc2
调试在帧中继上运行LLC2的信息
Red-Giant# debug frame-relay lmi [interface serial number]
调试帧中继本地管理信息的报文信息
Red-Giant# debug frame-relay packet [interface serial number]
调试帧中继报文传输的信息
Red-Giant# debug frame-relay Verbose
调试帧中继的详细信息
 
以上的调试信息以debug frame-relay lmi和debug frame-relay packet最为常用。下面就以此为例来说明:
Serial0( o): dlci 16(0x401), pkt type 0x800(IP), datagramsize 104
Serial0( i): dlci 16(0x401), pkt type 0x800, datagramsize 104
以上是debug frame-relay packet的调试信息,serial0表示是接口serial 0, o(output)表示是输出的报文,i(input)表示是输入的报文,dlci 16表示在本地DLCI号为16的虚链路上的报文,其中报文的网络协议是0x800,IP协议,报长datagramsize 104字节。
Serial0( out): StEnq, myseq 91, yourseen 90, DTE up
datagramstart = 0x4F76F68, datagramsize = 13
FR encap = 0x00010308
00 75 51 01 01 53 02 5B 5A
Serial0( in): Status, myseq 91
RT IE 51, length 1, type 1
KA IE 53, length 2, yourseq 91, myseq 91
以上的调试信息告诉我们:该帧中继封装在serial0接口,此时本地DTE发送的序号myseq为91,对DCE方的确认的序号yourseen是90,DTE的报文长度为13字节。而在serial0口下个接收到的报文对方的发送序号yourseq是91,DCE对DTE确认的序号是myseq 91。
帧中继链路维护命令
下表显示出常见的帧中继链路的维护命令:

命令
作用
Red-Giant# clear frame-relay-inarp
清除用反转ARP创建的动态地址映射
Red-Giant# show interfaces serial number
显示同步口接口的信息
Red-Giant# show frame-relay lmi
显示帧中继本地管理信息
Red-Giant# show frame-relay map
显示帧中继映射表
Red-Giant# show frame-relay pvc
显示帧中继永久虚电路PVC信息
Red-Giant# show frame-relay route
显示帧中继交换信息
Red-Giant# show frame-relay traffic
显示帧中继流量信息
 
1)清除用反转ARP创建的动态地址映射
Serial0 (up): ip 1.1.1.1 dlci 16(0x10,0x400), dynamic, broadcast, IETF, status defined, active
以上是用show frame-relay map命令显示出的用反转ARP建立起来的帧中继映射表,注意到dynamic就是该映射关系指不是用手动配置的映射。当使用clear frame-relay-inarp命令之后,再用show frame-relay map则没有任何显示,一旦接口的帧中继协议重新学习到映射关系是,用show frame-relay map命令显示出的提示照常。
2)显示同步口接口的信息
Serial0 is up, line protocol is up
Hardware is HDLC4530A
Internet address is 1.1.1.2/24
MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec, rely 255/255, load 1/255
Encapsulation FRAME-RELAY IETF, loopback not set, keepalive set (10 sec)
LMI enq sent 1, LMI stat recvd 0, LMI upd recvd 0
L MI enq recvd 23951, LMI stat sent 23951, LMI upd sent 0, DTE LMI up
LMI DLCI 0 LMI type is CCITT frame relay DTE
Broadcast queue 0/64, broadcasts sent/dropped 0/0, interface broadcasts 0
Last input 00:00:03, output 00:00:03, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0 (size/max/drops); Total output drops: 0
Queueing strategy: weighted fair
Output queue: 0/64/0 (size/threshold/drops)
Conversations 0/1 (active/max active)
Reserved Conversations 0/0 (allocated/max allocated)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
50108 packets input, 796118 bytes, 0 no buffer
Received 8151 broadcasts, 0 runts, 0 giants
2 input errors, 2 CRC, 2 frame, 0 overrun, 0 ignored, 0 abort
50492 packets output, 837837 bytes, 0 underruns
0 output errors, 0 collisions, 1 interface resets
0 output buffer failures, 0 output buffers swapped out
35 carrier transitions
DCD=up DSR=up DTR=up RTS=up CTS=up
注意以上的信息,物理是否UP主要看末行的物理信号是否UP,首行是否是serial0 is up,链路协议层是否Up主要看是否Line protocol is up。接口封装格式
帧中继协议配置
Encapsulation FRAME-RELAY IETF,LMI enq recvd 23951, LMI stat sent 23951显示出当前状态请求报文Status Enquired接收和发送的个数,DTE LMI up显示出接口上的DTE端是否处于激活状态。
3)显示帧中继本地管理信息
LMI Statistics for interface Serial0 (Frame Relay DCE) LMI TYPE = CCITT
Invalid Unnumbered info 0 Invalid Prot Disc 0
Invalid dummy Call Ref 0 Invalid Msg Type 0
Invalid Status Message 0 Invalid Lock Shift 0
Invalid Information ID 0 Invalid Report IE Len 0
Invalid Report Request 0 Invalid Keep IE Len 0
Num Status Enq. Rcvd 23907 Num Status msgs Sent 23907
Num Update Status Sent 0 Num St Enq. Timeouts 932
以上的信息主要显示了状态请求报文Status Enquiry的接收和发送的个数。
4)显示帧中继映射表
Serial0 (up): ip 1.1.1.2 dlci 16(0x10,0x400), static, IETF, status defined, active
Serial0指出是哪个接口封装了帧中继Ip 1.1.1.2 是对端DTE(DCE)设备的IP地址Dlci 16是本地的DLCI号Static是手工设置的静态映射IETF是帧中继封装的报文格式Active是当前的PVC是处于激活的状态
5)显示帧中继永久虚电路PVC信息
PVC Statistics for interface Serial0 (Frame Relay DTE)
DLCI = 16, DLCI USAGE = LOCAL, PVC STATUS = ACTIVE, INTERFACE = Serial0
input pkts 15 output pkts 17 in bytes 1560
out bytes 1768 dropped pkts 0 in FECN pkts 0
in BECN pkts 0 out FECN pkts 0 out BECN pkts 0
in DE pkts 0 out DE pkts 0
pvc create time 00:25:48, last time pvc status changed 00:25:10
首两行显示了本PVC的基本信息,包括DLCI、接口、PVC状态、DTE或者DCE末行显示出PVC的创建时间和最后一个状态持续的时间,根据状态持续的时间,我们可以知道帧中继的PVC状态保持了多久的时间,而创建的时间是PVC创建之后持续的时间,可能在这段时间内状态从Active到Inactive和从Inactive到Active。
6)显示帧中继交换信息
下表显示出帧中继交换时的各个接口的输入DCLI和输出DLCI的状态,其中DLCI从serial0接口是点到多点子接口的输出端,接口的三个DLCI分别对应于210、220、230,分别交换到serial1、serial2、serial3,serial1是210,而接入到serial1接口的DTE的DLCI号210,接入到serial2接口的DTE的DLCI号220,接入到serial3接口的DTE的DLCI号230。
Input Intf Input Dlci Output Intf Output Dlci Status
Serial0 210 Serial1 210 active
Serial0 220 Serial2 220 active
Serial0 230 Serial3 230 active
Serial1 210 Serial0 210 active
Serial2 220 Serial0 220 active
Serial3 230 Serial0 230 active
7)显示帧中继流量信息
Frame Relay statistics:
ARP requests sent 0, ARP replies sent 0
ARP request recvd 0, ARP replies recvd 0
该命令显示的是ARP发送和