RIP和OSPF最大的区别:
RIP是通过和周围路由器交换路由表来确定到达其他网络的距离。权重值是跳数。
导致RIP有明显的缺点:
1.假如有两个路由器 B 和 C 给路由器 A 发送网络 x 在哪里,B说:通过我去x只用一跳,C说:通过我去x要两跳。
于是 A 选择了 B,殊不知,如果 C 到 A 的带宽是1Gbit / s,而 B 到 A的带宽是1Mbit/s。那么这个选择明显不合理。但RIP协议就是这样,简单粗暴,用条数做度量。
2. 假设有网络拓扑结构: A - B - C - x
A , B , C 都是路由器,x是网络
如果 C 到 x 不可达,那么 C 会把自己的路由表中到达x的记录抹去。
(假设 C 是通过端口 c 和 x 连接的,那么对应的记录是 C - c - x)
RIP协议规定路由器要周期性和周围路由器交换路由表,过了一段时间 B 把自己的路由表给了 C。
在 C 到 x 可达前的稳定状态下(路由表接近稳定,没有因为增/减网络而改变),B 是有去往 x 的记录的,而且距离是 1。
(C 和 x 直连,距离是 0 , B要经过C,加一条,所以 B 去 x 是1)
C 接收到 B 给的路由表之后,会发现自己没有这条记录,于是接受,并且把距离加1(因为 C 认为要去 x 的话,要经过B,距离多1,所以 C 中新的记录是 C - c1 - 2,c1 是 C 连向 B 方向的接口)
问题来了,过一段时间,C 又会把自己的路由表给 B , B发现距离是 2, 比自己的大,而且通往这个网络 x 的路由器都是 C。
于是 B 认为,C 到这个网络 x 中间的网络拓扑情况变化了,导致去的距离增加。于是更新路由表。把距离改成 3。
如此反复下去,B 和 C 之间都会有一条跳数超大的记录,几乎不可达,实际上确实不可达。
解决方法:
1.
设置路由表不能 向某个端口发送 从这个端口学来的东西。
就如上述的 B ,他从 B - C 端口(B 通往 C 方向的端口)学到了 x 的距离,而后又把路由表中 关于 x 的记录通过这个端口发送出去,让 C 错误接受了。
2.
设置最大条数,如果出现上述的循环往复增大的过程,到达最大条数的话,把记录视为无效。但这限制了网络的规模。一般定义最多16跳
更优协议:
OSPF相对于RIP使用的更多。
OSPF:
每个路由器维护一个数据库,这个数据库不是路由表,而是整个网络上的路由器的各个接口的参数。
比如 :
A - B - C
/
D —— E —— F
其中稳定时,A的数据库中有 D - A , D - E, E - F , F - C, B - C , B - A
这些接口的参数,比如带宽是多少,以此可以判断通过这条路的优劣。
把整个网络的拓扑结构比作一张无向图,每个 接口的综合参数(综合的好坏程度)看成是权值的话,路由器就可以根据这些信息
使用迪杰斯特拉算法,求通往某一网络的最短距离。