前面所说都是静态选路,在配置接口时,以默认方式生成路由表项(对于直接连接的接口),并通过route命令增加表项(通常从系统自引导程序文件),或是通过ICMP重定向生成表项(通常是在默认方式出错的情况下)。
在网络很小,且与其他网络只有单个连接点且没有多余路由时,采用这种方法是可行的。
当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路
路由器上有一个进程称为路由守护程序(routing daemon),它运行选路协议,并与其相邻的一些路由器进行通信。
路由器守护程序根据它从相邻路由器接收到的信息,更新内核中的路由表。
动态选路并不改变我们的内核在IP层的选路方式,这种选路方式称为选路机制(routing mechanism)
内核搜索路由表,查找主机路由、网络路由以及默认路由的方式并没有改变。仅仅是放置到路由表中的信息改变了——当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自于自引导程序文件的route命令。
路由守护程序将选路策略(routing policy)加入到系统中,选择路由并加入到内核的路由表中。
Internet是以一组自治系统(AS,Autonomous System)的方式组织的。
常常将一个公司或大学校园定义为一个自治系统,NSFNET的Internet骨干网形成一个自治系统,这是因为骨干网中的所有路由器都在单个的管理控制之下。
每个自治系统可以选择该自治系统中各个路由器之间的选路协议,这种协议我们称之为内部网关协议IGP(Interior Gateway Protocol)或域内选路协议(intradomain routing protocol)
外部网关协议EGP(Exterier Gateway Protocol)或域内选路协议的分隔选路协议用于不同自治系统之间的路由器。
RIP:选路信息协议
RIP V1
正式描述文件是RFC 1058
RIP报文包含在UDP数据报中。
使用IP地址时的RIP报文格式:
命令字段为1表示请求,2表示应答。还有两个舍弃不用的命令(3和4),两个非正式的命令:轮询(5)和轮询表项(6)。
请求表示要求其他系统发送其全部或部分路由表。应答则包含发送者全部或部分路由表。
版本字段:版本1就设置为1,版本2就设置为2
紧跟在后面的20字节指定地址系列(address family)(对于IP地址来说,其值是2)、IP地址以及相应的度量
采用这种20字节格式的RIP报文可以通过多达25条路由,上限25是用来保证RIP报文的总长度为20*25+4=504,小于512字节,由于每个报文最多携带25个路由,因此为了发送整个路由表,经常需要多个报文。
RIP的常用端口号是UDP 520
RIP运行:
1、初始化
2、接收到请求
3、接收到响应
4、定期选路更新
5、触发更新
每当一条路由的度量发生变化时,就对它进行更新,不需要发送完整路由表而只需要发送那么发生变化的表项。
在RIP系统中,如果一条路由在180s内未更新,就将该路由的度量值设置成无穷大(16),并标注为删除,这意味着已经在6个30s更新时间里没收到通告该路由的路由器的更新了。再过60s,将从本地路由表中删除该路由,以保证该路由的失效已被传播开。
RIP所使用的度量是以跳(hop)计算的,所有直接连接接口的跳数为1,跳数最大值为15,度量为16表示无路由到达该IP地址。
RIP V1不识别子网地址(从网络地址经过子网划分后得到的网络号)
RIP V2
RFC 1388中对RIP进行了扩充,称其为RIP-2,只是利用了标注为“必须为0”的字段来传递一些额外的信息。
如果RIP忽略这些必须为0的字段,那么,V1V2可互操作。
路由域(routing domain)是一个选路守护程序的标识符,它指出了这个数据报的所有者。在一个Unix实现中,它可以是选路守护程序的进程号,该域允许管理者在单个路由器上运行多个RIP实例,每个实例在一个选路域内运行
路由标记(routing tag)是为了支持外部网关协议而存在的,它携带着一个EGP和BGP的自治系统号。
每个表项的子网掩码应用于相应的IP地址上,下一站IP地址指明发往目的IP地址的报文该发往哪里。该字段为0意味着发往目的地址的报文应该发给发送RIP报文的系统
RIP-2提供了一种简单的鉴别机制。可以指定RIP报文的前20字节表项地址系列为0xffff,路由标记为2,表项中的其余16字节包含一个明文口令。
RIP-2除了广播还支持多播,可以减少不收听RIP-2报文的主机的负载。
OSPF:开放最短路径优先
OSPF是一个链路状态协议。
RIP是距离向量协议
距离向量的意思是:RIP发送的报文包含一个距离向量(跳数),每个路由器都根据它所接收到邻站的这些距离向量来更新自己的路由表
而在一个链路状态协议中,路由器并不与其邻站交换距离信息,它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这些信息发送给它的其他邻站,而邻站将这些信息在自治系统中传播出去,每个路由器接收到这些链路状态信息,并建立起完整的路由表。
从实际角度看,两者的不同点是链路状态协议总是比距离向量协议收敛更快。
OSPF和RIP(以及其他选路协议)的不同点在于,OSPF直接使用IP。也就是说,它并不使用UDP或TCP。对于IP首部的protocol字段,OSPF有其自己的值
OSPF的优点:
BGP:边界网关协议
BGP是一种不同自治系统(AS)的路由器之间进行通信的外部网关协议。
BGP是ARPNET所使用的老EGP的取代品。
目前在使用的是BGP V4
BGP系统与其他BGP系统之间交换网络可到达信息。这些信息包括数据到达这些网络所必须经过的自治系统AS中的所有路径。这些信息足以构造一副自治系统连接图。然后,可以根据连接图删除选路环,制订选路策略。
一个自治系统中的IP数据报可以分为本地流量和通过流量
本地流量是指起始或终止于该自治系统的流量。也就是说,其信源IP地址或信宿IP地址所指定的主机位于该自治系统中。其他的流量则成为通过流量。
在Internet中使用BGP的一个目的就是为了减少通过流量。
可以将自治系统分为以下几种类型:
1、残桩自治系统(stub AS),它与其他自治系统只有单个连接。stub AS只有本地流量。
2、多接口自治系统(multihomed AS),它与其他自治系统有多个连接,但拒绝传送通过流量。
3、转送自治系统(transit AS),它与其他自治系统由多个连接,在一些策略准则下,它可以传送本地流量和通过流量
这样我们就可以把Internet的总拓扑结构看成是由一些残桩自治系统、多接口自治系统、转送自治系统的任意互联
残桩自治系统、多接口自治系统不需要使用BGP——它们通过运行EGP在自治系统之间交换可达到信息。
BGP允许使用基于策略的选路
BGP使用TCP作为其传输层协议,两个运行BGP的系统之间建立一条TCP连接,然后交换整个BGP路由表,这时候起,在路由表发生变化时,再发送更新信号。
BGP是一个距离向量协议,但是与(通告到目的地址和跳数的)RIP不同的是,BGP列举了到每个目的地址的路由(自治系统到达目的地址的序列号)。采用16bit数字表示自治系统标识
BGP通过定期发送keepalive报文给其邻站来检测TCP连接对端的链路或主机失败。两个报文之间的时间间隔建议值为30s,应用层的keepalive和tcp的keepalive选项是独立的
CIDR:无类型域间选路
CIDR是一个防止Internet路由表膨胀的方法,它也称为超网(supernetting)
CIDR的基本观点是采用一种分配多个IP地址的方式,使其能够将路由表中的许多表项总和成更少的数目
“无类型”的意思是现在的选路策略是基于整个32bit IP地址的掩码操作,而不管其IP地址是A、B、C类,都没有什么区别
小结
有两种基本的选路协议,即用于同一自治系统各路由器之间的内部网关协议(IGP)和用于不同自治系统内路由器通信的外部网关协议(EGP)
OSI选路协议,域间选路协议(IDRP)最开始时,是一个为了使用OSI地址而不是IP地址,而进行修改的BGP版本
Intermediate System to Intermediate System协议(IS-IS)是OSI的标准IGP。可以用它来选路CLNP(无连接网络协议)