TCP/IP详解 卷1:协议 学习笔记 第十章 动态选路协议

静态选路包括在配置接口时,以默认方式生成路由表项(对于直接连接的接口),并通过route命令增加表项(通常从系统自引导程序文件),或通过ICMP重定向生成路由表项(通常在默认方式出错的情况下)。

网络比较小,且与其他网络只有单个连接点且没有多余路由(若主路由失败,可以使用备用路由)时,以上静态选路方法可行,如果上述三种情况都不能满足,通常使用动态选路。

动态选路是相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,路由器间必须使用选路协议进行通信,路由器上的路由守护程序运行选路协议,并与其相邻的一些路由器进行通信。

动态选路仅仅是放置到路由表中的信息改变了,而非改变内核在IP层的选路方式。

路由守护程序将选录策略加入到系统中,它选择路由并加入到内核路由表中,如果守护程序发现前往同一信宿存在多条路由,它会以某种方法选择最佳路由并加入内核路由表中,如果路由守护程序发现一条链路已经断开,它可以删除受影响的路由或增加另一条路由以绕过该问题。

Internet是以一组自洽系统(AS,Autonomous System)的方式组织的,每个自洽系统通常由单个实体管理,NSFNET(美国国家科学基金会(National Science Foundation)的Internet骨干网形成一个自洽系统,因为骨干网中的所有路由器都在单个的管理控制之下,每个自洽系统可以选择该自洽系统中各个路由器之间的选路协议,这种协议称之为内部网关协议IGP(Interior Gateway Protocol)或域内选路协议,最常用的IGP是选路信息协议RIP,另一种新的IGP是开放最短路径优先OSPF(Open Shortest Path First)协议,它意在取代RIP。1986年在NSFNET骨干网上使用的较早的IGP是HELLO,现在已经不用了。

新的RFC[Almquist 1993]规定,实现任何动态选路协议的路由器把必须同时支持OSPF和RIP,还可以支持其他IGP协议。

以下两种协议用于不同自治系统之间的路由器动态路由:外部网关协议EGP(Exterier Gateway Protocol)和域内选路协议的分隔选路协议。历史上,EGP含有一个同名协议EGP,边界网关协议BGP意在取代EGP协议。

Unix系统上常运行名为routed的路由守护程序,几乎所有的TCP/IP实现中都提供该程序,该程序只使用RIP进行通信。

另一个路由守护程序是gated,IGP和EGP都支持它。

在这里插入图片描述
RIP报文包含在UDP数据报中:
在这里插入图片描述
RIP报文格式,第一行四字节是RIP报文头:
在这里插入图片描述
命令字段取值:
1:请求,表示要求其他系统发送其全部或部分路由表。
2:应答。
3、4:舍弃不用。
5:非正式命令,轮询。
6:非正式命令,轮询表项。

版本字段通常为1,RIP第二版将此字段设为2。

版本后是20字节的地址族(IP地址的地址族为2)、IP地址和相应度量。

采用这种20字节格式的RIP报文可以最多通告25条路由,上限25是为了保证RIP报文总长度最大为20*25+4=504,小于512字节,因此为了发送整个路由表,经常需要多个报文。

RIP常用的UDP端口号是520,以下是采用RIP协议的routed程序运行的结果:
1.初始化:启动一个路由守护程序时,它会先判断主机上有哪些接口,之后在每个接口上发送一个请求报文,要求其他路由器发送完整路由表,在点对点链路中,该请求是发送给另一端的;如果网络支持广播,则这种请求以广播形式发送,目的端口号是520(其他路由器的路由守护程序的端口号)。这种请求报文的命令字段为1,但地址族字段为0,度量字段设为16,这种特殊格式的RIP请求报文含义为要求另一端完整的路由表。
2.接收到请求:如果是要全部路由表的请求,路由器就将完整的路由表发送给发送者,否则就处理请求中的每一个表项:如果该表项指明的地址在路由表中有,则将度量设置成我们的值,否则将度量设为16(表示无穷大的特殊值,意味着没有到达目的地的路由。然后发回响应。
3.接收到响应:使响应生效,可能会更新路由表、可能会增加新表项、可能对已有表项进行修改、可能删除已有表项。
4.定期选路更新:每过30秒,所有或部分路由器会将其完整路由表发送给相邻路由器,发送路由表时可以是广播形式的(如在以太网上),或是发送给点对点链路的另一端的。
5.触发更新:每当一条路由的度量发生变化时,就对它进行更新。

每条路由都有与之相关的定时器,如果运行RIP的系统发现一条路由在3分钟内未收到来自它的更新,则将该路由的度量设置成无穷大(16),并标注为删除。再过60秒,从本地路由表中删除该路由,以保证该路由的失效已被传播开。

RIP使用的度量以跳来计算,所有直接连接接口的跳数为1,如下图,虚线表示广播的RIP报文:
在这里插入图片描述
路由器R1通过发送广播到N1来通告它与N2之间的跳数为1,其余同理。如果相邻路由器通告它与某网络的跳数为n,那么我们与那个网络的度量就是n+1。

如果在一个AS内从一个路由器到一个网络有多条路由,那么路由器将选择跳数最小的路由。

跳数的最大值为15,RIP只能用于主机间最大跳数值为15的AS内。

RIP缺陷:
1.没有子网地址的概念,如标准B类地址中的16bit主机号不为0,那么RIP无法区分非零部分是子网号还是主机地址。
2.路由器或链路发生故障后,需要很长时间(通常需要几分钟)才能稳定下来,这段建立时间中可能会发生路由环路,在实现RIP时,必须采用很多微妙的措施防止路由环路的出现,并使其尽快建立。
3.采用跳数作为路由度量忽略了其他一些应该考虑的因素,最大度量15限制了可以使用RIP的网络的大小。

使用从gated程序中得到的ripquery程序可查询其他路由器中的路由表,ripquery程序通过发送一个非正式请求(RIP报文中的命令字段为5)给某路由器,要求得到其完整的路由表,如果5秒内未收到响应,则发送标准RIP请求(RIP报文中的命令字段为1,地址族字段为0,度量字段为16的报文要求其他路由器发送其完整路由表)。

在sun主机上查询netb的路由表,网络结构如下:
在这里插入图片描述
执行ripquery进行查询(-n参数表示直接打印IP地址而不需要将其转换为域名):
在这里插入图片描述
上例中,netb被配置成人为所有位于140.252.13子网的主机都与其直接相连,netb并不知道那些主机真正与140.252.13子网相连,由于与该子网只有一个连接点,因此通告每个主机的度量实际没有太大意义。

以下是上例的tcpdump的结果,-i sl0选项指定SLIP接口sl0, -s600表示从网络中读600字节:
在这里插入图片描述
第一行发出了rip轮询命令,此请求在5秒后超时,之后第二行发出了一个常规的RIP请求。前两行最后的24表示请求报文的长度:4字节的RIP首部(包括命令和版本),20字节的地址和度量。

第三行是一个应答报文,改行最后的25表示包含了25个地址和度量对,字节数为504。第四行是第二个应答报文,它包含12个地址和度量对,该报文长为12*20+4=244。

由以上可知,sun所在以太网与gateway的度量为2,验证它:
在这里插入图片描述
在以下以太网结构上观察RIP定期给其邻站发送的信息:
在这里插入图片描述
上图中Rn表示路由器,n是子网号,以虚线表示点对点链路,并给出了链路对端的IP地址。

上图中通过kpno到gateway的路由有13条(上半部分中所有链路都是)。

在主机solaris上运行Solaris 2.x的snoop程序,它与tcpdump程序相似,我们可以在不需要root权限的条件下运行该程序,但它只能捕获广播报文、多播报文和发送给程序所在主机的报文,以下是它在60秒内所捕获的报文,其中snoop命令的-P选项以非混杂模式捕获报文,-tr选项打印出相应的时间戳,udp port 520表示只捕获信源或信宿端口号为520的UDP数据报:
在这里插入图片描述
如上图,来自R6、R4、R2、R7、R8、R3的前6个报文,每个报文只通报一条路由,而gateway路由器通告了15条路由,我们可以使用snoop命令的-v选项查看RIP报文的全部内容(包括以太网首部、IP首部、UDP首部、RIP报文),以下是gateway的该报文删去其他信息之后只保留下的RIP信息:
在这里插入图片描述
一个问题是R10通告其有四个网络,但在网络拓扑图中它只有三个网络,查看该RIP报文发现:
在这里插入图片描述
有一个无效的路由,不应该通告此失效路由。

snoop命令的输出中,R10有“BROADCAST"符号,表示目的IP地址是有限的广播地址(255.255.255.255,向本子网广播,不需要知道自身所在网络号),而其他路由器都是用指向子网的广播地址(140.252.1.255,指向本子网)。

RIP的定义被扩充后将其称为RIP2,这些扩充不改变协议本身,而是利用了RIP中的必须为0的字段来传递一些额外信息,如果RIP的某实现忽略这些必须为0的字段,那么RIP和RIP2可以互操作。
在这里插入图片描述
RIP2的版本字段值为2。

路由域字段是选路守护程序的标识符,它指出这个数据报的所有者,Unix实现中,它可以是选路守护程序的进程号,该域允许管理者在单个路由上运行多个RIP实例,每个实例在一个选路域内进行。

路由标记字段是为了支持外部网关协议而存在的,它携带一个EGP(外部网关协议)或BGP(边界网关协议)的自治系统号。

RIP2除了广播外,还支持多播,可减少不收听RIP2报文的主机负载。

子网掩码应用于目的IP地址上。

下一站IP地址指明发送该RIP报文的路由器如果到目的IP的话,下一跳应该发往哪里,该字段为0表示发往目的IP的报文应发到本发送RIP报文的系统上。

RIP2提供一种指定明文口令的鉴别机制,可指定地址类(地址族)值为0xffff,路由标记值为2,之后16字节包含一个明文口令。

OSPF(开放最短路径优先)是除RIP外的另一个内部网关协议,它采用链路状态协议,而非RIP的距离向量(RIP发送的报文中含一个距离向量(跳数),每个路由器根据它所接收到邻站的这些距离向量更新自己的路由表)。

在链路状态协议中,路由器不与其相邻站交换距离信息,它采用的方法是令路由器主动地测试与其某邻站相连的链路的状态,并将这些信息发送给它的其他邻站,而邻站将这些信息在AS中传播,每个路由器接收这些链路状态信息,并建立起完整的路由表。

链路状态协议总是比距离向量协议收敛更快,收敛的意思是在路由发生变化后(如路由器关闭或链路出故障后),其他路由器的状态都更新完毕。

OSPF与其他选路协议不同的是它直接使用IP,它并不使用TCP或UDP,对于IP首部的协议字段,OSPF有自己的值。

OSPF相对于RIP的优点:
1.OSPF可以对每个IP服务类型计算各自的路由集,这意味着对于一个目的,可以有多个路由表表项,每个表项对应着一个IP服务类型。
2.可以给每个接口指派一个无维数的费用,可通过吞吐率、往返时间、可靠性或其他性能进行指派,可以给每个IP服务类型指派一个单独的费用。
3.当同一个目的地址存在多个相同费用的路由时,OSPF在这些路由上平均分配流量,称之为流量平衡。
4.OSPF支持子网,每个通告的路由都有一个子网掩码,到一个主机的路由是通过全1子网掩码进行通告的,默认路由是以IP地址和子网掩码全0通告的。
5.路由器之间点对点链路两端不需要都有一个IP地址,我们称之为无编号网络,这样可以省IP地址。
6.采用了一种简单鉴别机制,类似于RIP2指定明文口令。
7.OSPF采用多播而非广播,以减少不参与OSPF的系统负载。

随着大部分厂商支持OSPF,OSPF将逐步取代RIP。

BGP是一种不同自治系统的路由器间进行通信的外部网关协议,BGP是ARPANET所使用的用来取代老EGP的替代品。

BGP系统与其他BGP系统之间交换网络可到达信息,这些信息构造一幅自治系统连接图,然后可以根据连接图删除选路环,制定选路策略。

首先我们将一个自治系统中的IP数据报分成本地流量和通过流量,本地流量指起始或终止于该自治系统的流量,其他的流量称为通过流量。在Internet中使用BGP的一个目的是减少通过流量。

可将自治系统分为以下类型:
1.残桩自治系统(stub AS):它与其他自治系统只有单个连接,它只有本地流量。
2.多接口自治系统(multihomed AS):它与其他自治系统有多个连接,但拒绝传送通过流量。
3.转送自治系统(transit AS):它与其他自治系统有多个连接,在一些策略准则下,它可以传送本地流量和通过流量。

可将Internet的总拓扑结构看成由以上三种自治系统的任意互联。残桩自治系统和多接口自治系统不需要使用BGP,它们通过运行EGP在自治系统之间交换可到达信息。

BGP允许使用基于策略的选路,由系统管理员制定策略,制定策略不是协议的一部分,但制定策略允许BGP实现在存在多个可选路径时选择路径,并控制信息的重发送。选路策略与政治、安全或经济因素有关。

BGP使用TCP作为其传输层协议,两个运行BGP的系统之间会建立一条TCP连接,然后交换整个BGP路由表,从此时开始,在路由表发生变化时再发送更新信号。

BGP通过定期发送keepalive报文给邻站来检测TCP连接的链路和对端主机是否失败,两个报文的时间间隔建议值为30秒。应用层的keepalive报文和TCP的keepalive选项是独立的。

B类地址很缺乏,因此很多网络站点只能采用多个C类网络号代替单个B类网络号,但它带来了另一个问题:每个C类网络需要一个路由表表项。无类型域间选路(CIDR)是一个防止Internet路由表膨胀的方法,它也被称为超网。

CIDR的基本观点是采用一种分配多个IP地址的方式,使路由表中的许多表项合并成更少的数目。如某站点有16个C类地址,以一种合并的方式将其写入路由表,这样所有16个地址可以参照Internet上的单个路由表表项。同时,如果有8个不同站点通过同一个Internet服务提供商的同一个连接点接入Internet,且这8个站点分配的8个不同IP地址可以进行总和,则对于这8个站点,在Internet上只需要单个路由表表项。

合并多个IP地址必须满足:
1.这些IP地址必须具有相同的高位地址比特。
2.路由表和选路算法必须扩展成根据32bit IP地址和32bit掩码做出选路决策。
3.必须扩展选路协议,使其除了32bit地址外,还要有32bit掩码,OSPF和RIP2都能携带32bit掩码。

CIDR使最佳匹配总是掩码更长的匹配。

无类型域间选路的无类型的含义为选路决策是基于整个32bit IP地址的掩码操作,不管其IP地址是A类还是其他类。

RIP报文格式中没有校验和字段,而OSPF有,原因是RIP运行在UDP上,而UDP提供了可选的UDP数据部分的校验和字段,但OSPF运行在IP协议上,IP首部的校验和字段只覆盖IP首部。

在这里插入图片描述
由于运行RIP的路由器每隔30秒通告一次自身路由表,因此丢失一次意味着相邻路由器隔了60秒才收到该路由器的25条路由信息,即每隔25条路由信息,而只有在路由表项3分钟没有更新后RIP才会声明它失效。
在这里插入图片描述
问题中的OSPF负载平衡方式为,OSPF维护花费值,当到同一目的地有多条花费相同的路由时,会在这些路由上随机分配流量,这会增加分组失序交付的几率,并且很可能使运输层计算的环回时间出错。

RIP发送的广播报文被主机接收到时,主机会检查端口520,如果没有运行RIP就会丢弃此报文。

猜你喜欢

转载自blog.csdn.net/tus00000/article/details/114504726