一、RIP
在因特网中,AS即自制系统内部使用的两个选路协议是RIP(路由信息协议,Routing information Protocol)和OSPF(Open Shortcut Path First)。
RIP是一种距离向量协议,运行方式和理想化的DV算法相似。在RIP中,DV算法中的费用采用的是跳数,即从源路由器到目的路由器的最短路径上的路由器数。RIP中一条路径的最大跳数被限制为15,因此RIP被限制用在网络直径不超过15的自制系统内。DV算法需要在路由器之间发送每个路由器的距离向量信息,RIP通过RIP通告(也称为RIP响应报文)来完成这个功能,RIP通告大约30秒相互交换一次。RIP通告包含了选路更新信息。
每台路由器都维护有一张选路表,它包含了路由器的距离向量个该路由器的转发表。
运行RIP协议的路由器每隔30秒就会发送RIP通告,如果一台路由器超过180秒还没收到邻居的RIP通告,它就认为邻居不再可达。此时它会更新自己的距离向量,并向相邻路由器通告该信息。
RIP也允许路由器主动发送请求报文请求某个邻居更新其路由信息,这是通过发送RIP请求报文实现的。RIP协议使用了DUP协议并使用端口520。
二、OSPF
OSPF也用于自制系统内部,但是它通常被应用于较顶层的ISP中,而RIP一般用于较底层的ISP和企业网内。
OSPF的核心是使用洪泛链路状态信息的链路状态协议和一个Dijkstra最低费用路径算法。使用OSPF时,每台路由器都有一副关于整个自制系统的链路状态的完整拓扑图。每台路由器在本地运行Dijkstra算法,以确定一颗以自己为根节点的到所有子网的最短路径。
在OSPF中各条链路的费用是由管理员设置的,这样管理员就可以影响最短路径的选择,比如管理员可以采用将链路权重值按与链路容量成反比的方式来设置,这样在选路时,有限被选择的就是高带宽链路。OSPF没有强制的链路权值设置策略,它只提供了为给定链路权值确定最低费用路径的机制。
在OSPF中,路由器向自治系统内部的所有其它路由器广播选路信息。每当一条链路状态变化时,路由器就会广播链路状态信息。即使链路状态没有变化,OSPF也要周期性地广播链路状态(至少每隔30分钟)。
OSPF通告包括在OSPF报文中,OSPF报文直接运行在IP之上,它的协议号是89。
OSPF的优点:
- 安全:OSPF对路由器之间的OSPF报文进行了保护。
- 多路径:OSPF允许到达某个目的地有多条费用相同的路径。(这可以通过为不同的IP服务类型创建不同的路由来实现。)
- 支持单播和多播:MOSPF是对OSPF的扩展,它提供了多播选路。
- 支持在单个选路域内的层次结构:OSPF具有按层次结构构造一个自制系统的能力。
在OSPF层次结构中,一个区域被配置成主干区域,它包含了AS内所有区域的区域边界路由器以及一些不在任何其它区域内的路由器,该区域的目的是为AS内其它区域之间的流量选路。
三、BGP
BGP是因特网中使用的自制系统间的选路协议,它极其复杂。
四、广播和多播选路
广播选路指的是网络层提供的从一个源节点到网络中所有其它节点的分组选路服务。
多播选路指的是网络层提供的从一个源节点到网络中一组节点的分组选路服务。
1.广播选路
最直接的实现广播选路的方法是由发送节点向所有目的地发送分组的拷贝,这种方法看起来很简单,但是它有一些缺点使得它实用:
- 效率低下,一个分组变成了N个分组,极大的浪费了带宽
- 无法知道所有潜在目的地的地址,除非设计新的协议用于该目的,但是这无疑加大了其难度
- 链路状态协议使用了广播来更新链路状态信息,在这种情况下,广播的目的是产生和更新单播路由,因而如果再反过来用单播来实现广播就变得不明智了
因而必须采用其它方式来实现广播选路。
1.无控制泛洪
实现广播最显而易见的方式是使用泛洪,即所有节点都向除了它接收分组的那个邻居之外的所有邻居转发分组。只要网络是连通的,分组必然可以到达所有节点,但是根据最简单的图论知识也可以知道,分组将在整个网络内不受限制的被复制,直到它们的生存时间到期。这将形成广播风暴,导致网络变得不可用。
2.受控泛洪
避免广播风暴的关键在于:每个节点可以选择泛洪分组的时机。有两种方案可以解决广播风暴的问题:
- 序号控制泛洪:源节点将其地址以及广播序号放入广播分组,再向网络泛洪分组。每个节点维护它收到的、复制的和转发的每个广播分组的序号列表,每当它收到一个广播分组时,都检查该表,如果已经存在就不泛洪,否则泛洪,并将新的信息更新到该表中。
- 反向路径转发(RPF):当一台路由器接收到具有给定源地址的广播分组时,仅当该分组到达的链路正好是位于它自己到其源的最短单播路径上时,它才泛洪分组。否则它丢弃分组。
3.生成树广播
受控泛洪解决了广播风暴的问题,但是网络中还是会存在冗余的广播分组。生成树方案可以解决该问题。
生成树:包含网络中的所有节点的,并使用网络中的链路所连接起来的连通图。
最小生成树:每段链路的费用之和在所有生成树中最小的生成树。
生成树广播指的是首先先对网络节点狗仔一棵生成树,当一个节点要发送一个广播分组时,它向所有属于该生成树的特定链路发送分组。该方案的复杂性在于生成树的生成和维护。
实际中,OSPF使用了序号控制方法。
2.多播选路
五、MAC地址到IP地址的映射
1.多播地址的MAC地址
2.ARP的报文格式为:
- 以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。
- 两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。
- 形容词hardware(硬件)和protocol(协议)用来描述ARP分组中的各个字段。例如,一个ARP请求分组询问协议地址(这里是IP地址)对应的硬件地址(这里是以太网地址)。
- 硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
- 接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。
- 操作字段指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)(我们在第5章讨论RARP)。这个字段必需的,因为ARP请求
- 和ARP应答的帧类型字段值是相同的。
- 接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。注意,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。
- 对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。
3.ARP的简单工作过程
4.ARP代理
5.免费ARP
免费ARP可以有两个方面的作用:
- 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。
- 如果发送免费ARP的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。一个比较著名的ARP协议事实[Plummer1982]是,如果主机收到某个IP地址的ARP请求,而且它已经在接收者的高速缓存中,那么就要用ARP请求中的发送端硬件地址(如以太网地址)对高速缓存中相应的内容进行更新。主机接收到任何ARP请求都要完成这个操作(ARP请求是在网上广播的,因此每次发送ARP请求时网络上的所有主机都要这样做)。