RIP:
1、路由信息协议(Routing Information Protocol,缩写:RIP)采用距离矢量算法,以跳数作为网络度量值,网络直径不超过15跳,适合于中小型网络。16跳时认为网络不可达。
2、使用UDP报文进行路由信息的交换,使用的端口号为520。目前RIP共有三个版本,RIPv1(无子网无认证、广播), RIPv2(可无类别域间路由、MD5认证、组播224.0.0.9), RIPng(适用于IPv6)。
3、运行原理:
  初始化——RIP初始化时,会从每个参与工作的接口上发送请求数据包。该请求数据包会向所有的RIP路由器请求一份完整的路由表。请求信息(可以是请求一条路由的信息),应答信息(一定是全部的路由)
  接收请求——RIP有两种类型的消息,响应和接收消息。请求数据包中的每个路由条目都会被处理,从而为路由建立度量以及路径。RIP采用跳数度量,值为1的意为着一个直连的网络,16为网络不可达。路由器会把整个路由表作为接收消息的应答返回。
  接收到响应——路由器接收并处理响应,它会通过对路由表项进行添加,删除或者修改作出更新。
  常规路由更新和定时——路由器以30秒一次地将整个路由表以应答消息地形式发送到邻居路由器。
  触发路由更新——当某个路由度量发生改变时,路由器只发送与改变有关的路由,并不发送完整的路由表(注意了)。
4、定时器:
  路由器收到新路由或者现有路由地更新信息时(Update定时器决定间隔),会设置一个180秒地超时时间(Timeout定时器)。如果180秒没有任何更新信息,路由的跳数设为16。路由器以度量值16宣告该路由直到刷新计时器从路由表中删除该路由。
  刷新计时器(Garbage-Collect定时器)的时间设为240秒,或者比Timeout定时器多60秒。过了这个时间即删除路由。
  Cisco还用了第三个计时器,称为抑制计时器(Suppress定时器)。接收到一个度量更高的路由之后的180秒时间就是抑制计时器的时间,在此期间,路由器不会用它接收到的新信息对路由表进行更新,这样能够为网路的收敛提供一段额外的时间。
5、防止路由环路:
  计数到无穷(定义16跳)、水平分割(从某接口来的数据包不发回此接口)、毒性逆转(从某接口收到数据包后定义该路由为16并发回)、触发更新(一旦某条路由的度量值改变,即立马发送更新报文)。
6、路由表字段:
  目的地址、下一跳地址、出接口、度量值、路由时间、路由标记。
7、扩展:
  TRIP(Triggered RIP,触发路由信息协议)是RIP协议在WAN(Wide Area Network,广域网)上的扩展:为了将路由管理开销减到最小,路由信息被当作触发更新发送而不是定期广播。
8、参考地址:http://www.h3c.com.cn/Products___Technology/Technology/Router/Other_technology/Technology_recommend/200805/605876_30003_0.htm
http://baike.baidu.com/link?url=eoIWw1jihoV2W9jUVeK9UamVeTLzpMYvC_bANoQ5ZB1whqdjRzt-v4nJMN-e2H1_p7vZTWxcans80ACJKV4y7q


OSPF:
1、OSPF(Open Shortest Path First,开放最短路径优先)是基于链路状态的内部网关协议,目前针对IPv4协议使用的是OSPFv2,OSPFv3支持IPv6。支持各种规模的网络,最多可支持几百台路由器,从SPF算法本身保证了不会生成自环路由。
2、数据包:
  Hello-用于建立和维护相邻的两个OSPF路由器的关系,该数据包是周期性地发送的。
  Database Description-用于描述整个数据库,该数据包仅在OSPF初始化时发送。
  Link state request-用于向相邻的OSPF路由器请求部分或全部的数据,这种数据包是在当路由器发现其数据已经过期时才发送的。
  Link state update-这是对link state请求数据包的响应,即通常所说的LSA数据包。
  Link state acknowledgment-是对LSA数据包的响应。
3、链路状态算法:
  当路由器初始化或当网络结构发生变化(例如增减路由器,链路状态发生变化等)时, 路由器会产生链路状态广播数据包LSA(Link-State Advertisement), 该数据包里包含路由器上所有相连链路,也即为所有端口的状态信息。
  所有路由器会通过一种被称为刷新(Flooding)的方法来交换链路状态数据。 Flooding是指路由器将其LSA数据包传送给所有与其相邻的OSPF路由器, 相邻路由器根据其接收到的链路状态信息更新自己的数据库,并将该链路状态信息转送给与其相邻的路由器, 直至稳定的一个过程。
  当网络重新稳定下来,也可以说OSPF路由协议收敛下来时, 所有的路由器会根据其各自的链路状态信息数据库计算出各自的路由表。 该路由表中包含路由器到每一个可到达目的地的Cost以及到达该目的地所要转发的下一个路由器(next-hop)。
  OSPF路由协议针对每一个区域分别运行一套独立的计算法则,对于ABR来说, 由于一个区域边界路由器同时与几个区域相联,因此一个区域边界路由器上会同时运行几套OSPF计算方法, 每一个方法针对一个OSPF区域。
4、路由器分类:
  内部路由器:
  区域边界路由器:具有相连的每一个区域的网络结构数据, 并且了解如何将该区域的链路状态信息广播至骨干区域,再由骨干区域转发至其余区域。
  AS边界路由器:与AS外部的路由器互相交换路由信息的OSPF路由器。
  指定路由器-DR:处于一个网段的中心地位,同一网段上的OSPF路由器建立相邻关系。产生所处的网段的全部路由链路数据包network link,并flooding。
  Hello数据包在一个广播性网段上选出一个ID最大的路由器作为指定路由器DR, 并且选出ID次大的路由器作为备份指定路由器BDR。网段上的其余所有路由器都只与DR及BDR建立相邻关系。ID是指向该路由器的标识,一般是指该路由器的环回端口或是该路由器上的最小的IP地址。
5、故事:
  可以把整个网络(一个自治系统AS)看成一个王国,这个王国可以分成几个区(area),现在我们来看看区域内的某一个人(你所在的机器root)是怎样得到一张世界地图(routing table)的。
  首先,你得跟你周围的人(同一网段如129.102)建立基本联系。你大叫一声“我在这!”(发HELLO报文),于是,周围的人知道你的存在,他们也会大叫,这样你知道周围大概有哪些人,你与他们之间建立了邻居(neighbor)关系,当然,他们之间也有邻居关系。
  在你们这一群人中,最有威望(Priority优先级)的人会被推荐为首领(Designated Router)首领与你之间是上下级关系(adjacency邻接),它会与你建立单线联系,而不许你与其它邻居有过多交往,他会说:“那样做的话,街上太挤了”。
  你只好通过首领来知道更多的消息了,首先,你们互通消息,他告诉你他知道的所有地图的地名,你也会告诉他你现知道的地名,当然上也许只有你一个点。(Database Description数据库描述报文)
  你发现地名表中有你缺少的或比你新的东西,你会问他要一份更详细的资料,他发现你的地名表中有他需要的东西,他也会向你索求新资料。(Link State Request连接状态请求报文)
  当然,你们毫不犹豫地将一份详细资料发送给对方。(Link State Update连接状态升级报文)收到地图后,互相致谢表示收到了。(Link State Ack连接状态响应报文)
  现在,你已经尽你所能得到一份地图(Link State DataBase连接状态数据库),你去查找地图把到所有地方的路挑一条最近(shortest path最短路)的,记为一张表格(routing table路由表),当然以后查这份表格就知道到目的地的一条最近的路了。地图也要收好,万一表格上的某条路不通了可以通过图去找一条新的路。
   其实跟你有联系的,只是周围一群人,外面的消息要通过首领来知道。因为你的地图是跟首领的一致,我们假设你是首领,你要去画一份世界地图。你命令所有手下向你通报消息,你可以知道你这一群人的任何一点点小动静(event事件)。你手下还会有同时属于两群人的家伙(同一区内两网段),他会告诉你另一群人的地图,当然也会把你们这一群人的地图泄露,(不过,无所谓啦)。这样,整个区的地图你知道了(对于不知道的那也没办法,我们尽力了)。
  通过不停地交换地图,现在,整个区的人都有同样的地图了,住在区边境上的人义不容辞地把这个区的地图(精确到每一群人)发送到别的区,把别的区信息发送进来。国王会把这些边境的人命名为骨干(backbone area)。通过骨干人士的不懈努力,现在,整个国家的地图你都了解得一清二楚了。
   有些人“里通外国”(AS Boundary Router自治系统边界路由器) ,他们知道一些“出国”(AS External route自治系统外部路由)的路,当然他们会把这些秘密公之与众(import 引入),通过信息的传递,现在,你已经有一张完整的“世界地图”了。
   OSPF是这样标记最短的路的:对于某个目的地,首先,考虑是否有同一区内部到目的地的路(intra area区域内),如果有,则在其中取一条离你最近的(花费最小),写进你的表格中,这个目的地可能是到本群体某个人也可能是到其他群体的,对于经过其他区域的路由,你会不予考虑,跟自己人(同区域)打交道总比与外人(其他区域)打交道好;如果没有本区的路,你只好通过别的区域了(区域间),你只要在地图上找最近的就是了;如果你发现目的地在国外,你也只能先把它标记到你的表格上,期待什么时候王国扩张到那,你就可以把它标记到国内地图上了。
   OSPF就是这样,给你一份“世界地图”,并且在上面标记了最短的路,如此而已罢了。
6、参考地址:
http://bbs.net130.com/showthread.php?t=32963
http://hi.baidu.com/oplee123/item/6caf7962efd7d09dc5d24918
http://www.h3c.com.cn/Products___Technology/Technology/Router/Other_technology/Technology_recommend/200805/605874_30003_0.htm


EIGRP:
1、内置三张表:路由表、拓扑表、邻居表。可行路由在路由表(最优),然后是拓扑表(可行后继),最后是邻居表(相邻路由器)。
2、使用组播地址为224.0.0.10的hello包(持续发送,对方的hold Time为等待对方发送hello的时间,超过即代表死亡)发现和维护邻居关系;
  Update包更新变化,需ACK确认;
  Query包查询相邻路由表,Reply包回复查询;
  ACK包是没有数据的hello包,对Update\Query\Reply进行确认。
3、路由过程:
  首先,EIGRP路由器之间建立邻接关系,相互发送Full Update消息,在Update消息中包含有所有网段的路由信息。
  接收到Update之后则根据这些路由信息中的metric(邻居通告的metric + 自身到邻居的metric)计算出metric最小的那条路由装载进路由表,我们称这个最小的metric为FD(可行距离),然后将剩下的RD(通告距离)< 该FD的路由作为可行后继路由装入拓扑表,也就是说要想进入拓扑表,必须满足可行性条件:RD< FD。
  一旦该EIGRP路由器检测到某条路由失效了,则从拓扑表里查找可行后继路由FS,如果有FS,则在最短的时间内用这条FS来替换当前失效的路由信息,并向邻居发出Partial Update通知邻居这条新路由;
  如果拓扑表里没有FS呢,则向邻居路由器发出Query消息,问问邻居有没有办法到达那个目的网段,如果邻居路由表或拓扑表中有去往那个目的地的路由,邻居就会单播发送Reply来回应,Reply中包含了有效路由的详细信息,本地路由器收到后,重新计算metric,放入路由表;
  如果邻居也明确知道自己没办法到达那个目的地,那么在回应的Reply中就是“我也不知道”,本地路由器会将这条失效路由从路由表删除;如果邻居路由器也需要向邻居查询才能知道去往那个目的地的信息,那么它会保留收到的Query,向它的所有邻居发送新的Query,等待Reply,如此,1查10,10查百。。。。。。
  接下来就涉及到Active状态了,如上所述的情况,当本地路由器发现某条路由失效时,则将该路由置入Active状态,向邻居查询可用信息,邻居向它的邻居再发Query。。。我们应该知道,EIGRP发出的Query消息是必须得到Reply回复的,如果得不到Reply,该路由将一直处于Active状态,如果Active Timer超时,则发生了Stuck-in-Active,路由器会武断的认为邻居路由器发生了问题,而直接把邻居down掉,产生了误判!
  为了防止该问题的发生,可以使用timers active disable命令关掉活动计时器。
4、路由表负载均衡:
  EIGRP的metric的计算公式非常复杂,一般情况下两条路由metric是不可能相同的。但是EIGRP可以将metric相近的路由一起放入路由表(最优的两条),进行负载均衡。
  traffic-share balanced是按照metric百分比进行负载均衡,metric小的传输的数据多;
  traffic-share min是仅仅使用metric小的那条路由传输数据,另一条尽管被放入了路由表,但是并不使用它;
  默认时,忽略metric,仅仅根据数据包来轮流使用两条路由
5、其他说明:
  使用3层IP协议号88来标识EIGRP数据包  
  EIGRP passive-interface 被置为EIGRP被动接口,则该接口不再发送和接收hello、Update消息。
  通过配置EIGRP stub区域可以限制EIGRP Query消息的传播范围,一般设置网络的末梢节点为EIGRP stub区域,但是Update消息还是会发的。  如果在一定时间内没有从某个邻居那收到ACK,则向该邻居单播重传16次,若还是没有ACK确认,则认为邻居失效了;EIGRP在发出去的数据包中都包含有一个序列号,只有收到含有相同序列号的ACK确认消息时才会确定数据包已经到达邻居路由器;
6、参考原地址:http://hi.baidu.com/oplee123/item/86bb1ae32e203ba0cf2d4f18