CCIE Routing and Switching note by Ka\(^oo^)/Ka
Part 1. - 15 -
路由器 Roo 的 E0 口就是服务器 Milne 的接口,于是把 MAC 地址 00e0.1e58.dc39 作为目标 Milne 的目标 MAC 地址进行
封装,实际的却是路由器 Roo 的 E0 口接收到这个 frame,然后又把 frame 发回给路由器 Kanga
问题是,路由器 Kanga 是如何得到这个错误的 ARP 信息呢?答案是 proxy(代理) ARP,当路由器 Kanga 初次接收到
发往服务器 M ilne 的 packet 的时候,它将发送 ARP 请求服务器 Milne 和路由器 Roo 的 E0 口都会对这个请求进行响
应.因为路由器 Roo 有到达服务器 Milne 的路径,但是这条路径所在的网络不是它收到 ARP 请求的网络,于是它发送一
条代理 ARP 的应答给路由器 Kanga.之前服务器 Milne 响应 ARP 请求,该 ARP 应答信息保存在路由器 Kanga 的 ARP 表中;
由于网桥的延时,路由器 Roo 响应的那条代理 ARP 应答随后才到达路由器 Kanga 并保存,同时也覆盖了原先正常的 ARP
条目
有 2 种方法可以解决上述问题,其中一种是关闭路由器 Roo 的 E0 接口的代理 ARP 功能,如下:
Roo(config)#int e0
Roo(config-if)#no ip-proxy
还有种办法就是用在路由器 Kanga 上用静态 ARP 条目代替动态获取的,如下:
Kanga(config)#arp 172.16.20.75 0002.6779.0f4c arpa
Routing Information Protocol (RIP)
Operation of RIP
RIP 是通过 UDP 端口 520 来进行操作的,RIP 信息包是封装在 UDP segment 中的.
RIP 定义了 2 种信息类型:Request message(请求信息)和 Response message(应答信息).
请求信息
用来向邻居请求发送一个 update(更新),
应答信息
运载着这个被请求的 update.
RIP 的 metric 是基于 hop count(跳数)的,metric 为 16 代表不可达。
在刚启动的时候,RIP 从启用了 RIP 的接口上向外广播请求信息,接下来 RIP 进程进入一个循环状态:监听来自其
他路由器的请求信息和应答信息.当邻居收到请求信息以后,就发送应答信息给这个发出请求信息的路由器,这个应
答信息就包罗了它们的路由表。当发出请求信息的这个路由器收到了应答信息以后,如果这个 update 里包含的路由
条目比它本身所拥有的更新,或者本身的路由表里没有这个条目,那就把它放进自己的路由表中.如果本身的路由表
有这个条目,并且 update 里的路由条目的 metric,也就是跳数大于它自己的条目的跳数,而且这个 update 是源自它本
身的条目指向的下一跳路由器,那么该路由在一段 holddown 周期里将标记为不可达.如果这个 holddown 周期超出,那
个邻居仍然发送拥有较高 metric(较多跳数)的 update 作为应答,那么发出请求信息的路由器将接受这一新的 metric
RIP Timers and Stability Features
Update timer
在 RIP 启动之后,平均每 30 秒,启用了 RIP 的接口会发送应答信息(也就是 update),这个 update 包含了路由器除了
被 split horizon(水平分割)抑制的完整的路由表.update 周期发送的时间间隔(即 update timer)为 25.5 秒到 30
秒之间(随机),并且 update 的目标地址为 255.255.255.255
invalid timer
当有新的路由条目被加进路由表以后,这个 invalid timer 就初始化为 180 秒(即 6 个 update 周期),如果一条
路由 update 在这 180 秒里没有被收到的话,那么这条路由的跳数(即 metric)就被设置为 16,即不可达
flush timer
Cisco 一般把这个时间设置为 240 秒(RFC 1058 中规定的是 300 秒).如果超出这 240 秒,路由将被标记为不可达,并
从路由表中移除掉.如下就是一条被标记为不可达,但是还没有被移除的路由:
Mayberry#sh ip route
10.0.0.0 255.255.0.0 is subnetted, 4 subnets
C 10.2.0.0 is directly connected, Serial0
R 10.3.0.0 255.255.0.0 is possibly down,
Routing via 10.1.1.1, Ethernet0
C 10.1.0.0 is directly connected, Ethernet0