TCP-IP详解卷1-10:动态路由协议
一:介绍
1: 动态路由:当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路。
2: 守护程序(routing daemon),路由器上的一个进程。它运行路由协议,并与其相邻的一些路由器进行通信。
路由守护程序根据它从相邻路由器接收到的信息,更新内核中的路由表。
3: 路由守护程序将路由策略( routing policy)加入到系统中,选择路由并加入到内核的路由表中。
如果守护程序发现前往同一信宿存在多条路由,那么它(以某种方法)将选择最佳路由并加入内核路由表中。
如果路由守护程序发现一条链路已经断开(可能是路由器崩溃或电话线路不好),它可以删除受影响的路由或增加另一条路由以绕过该问题。
4: 自治系统:Internet是以一组自治系统(AS,Autonomous System)的方式组织的,每个自治系统通常由单个实体管理。常常将一个公司或大学校园定义为一个自治系统。
二:内部网关协议(RIP/OSPF)和外部网关协议(EGP)
1: 内部网关协议IGP(Interior Gateway Protocol)或域内路由协议(intradomain routing protocol)。
每个自治系统可以选择该自治系统中各个路由器之间的路由协议。这种协议我们称之为内部网关协议。
2: 外部网关协议EGP(Exterier Gateway Protocol)或域内选路协议的分隔选路协议用于不同自治系统之间的路由器。
三:RIP:是一种在网关与主机之间交换路由选择信息的标准。RIP 是一种内部网关协议。
1: 报文格式
A:包含在UDP数据报中的RIP报文
IP首部(20B)+ UDP首部(8B)+RIP报文
B:使用IP地址时的RIP报文
命令(1B)+版本(1B)+2B(全0)+
20B{地址序列(2B)+2B(全0)+IP地址(4B)+4B(全0)+4B(全0)+度量(1-16, 4B)}
由于报文总长度小于512字节,则每个报文最多可携带25个路由(20*25+4=504<512)。
为了发送整个路由表,通常需要发送多个报文。
2: 特点
A:仅和相邻的路由器交换信息。如果两个路由器之间的通信不经过另外一个路由器,那么这两个路由器是相邻的。RIP协议规定,不相邻的路由器之间不交换信息。
B:路由器交换的信息是当前本路由器所知道的全部信息。即自己的路由表。
C:按固定时间交换路由信息,如,每隔30秒,然后路由器根据收到的路由信息更新路由表。
3: 运行
A:初始化:
在启动一个路由守护程序时,它先判断启动了哪些接口,并在每个接口上发送一个请求报文,要求其他路由器发送完整路由表。
在点对点链路中,该请求是发送给其他终点的。如果网络支持广播的话,这种请求是以广播形式发送的。
目的U D P端口号是520(这是其他路由器的路由守护程序端口号)。
这种请求报文的命令字段为1,但地址系列字段设置为0,而度量字段设置为1 6。这是一种要求另一端完整路由表的特殊请求报文。
B:接收到请求
如果这个请求是刚才提到的特殊请求,那么路由器就将完整的路由表发送给请求者。
否则,就处理请求中的每一个表项:如果有连接到指明地址的路由,则将度量设置成我们的值,否则将度量置为1 6(度量为1 6是一种称为“无穷大”的特殊值,它意味着没有到达目的的路由)。
然后发回响应。
C:接收到响应
使响应生效,可能会更新路由表。可能会增加新表项,对已有的表项进行修改,或是将已有表项删除。
D:定期路由更新
每过30秒,所有或部分路由器会将其完整路由表发送给相邻路由器。发送路由表可以是广播形式的(如在以太网上),或是发送给点对点链路的其他终点的。
E:触发更新
每当一条路由的度量发生变化时,就对它进行更新。不需要发送完整路由表,而只需要发送那些发生变化的表项。
4: 缺点(RIP及RIP2都有)
A:过于简单,以跳数为依据计算度量值,经常得出非最优路由。例如:2跳64K专线,和3跳1000M光纤,显然多跳一下没什么不好。
B:度量值以16为限,不适合大的网络。解决路由环路问题,16跳在rip中被认为是无穷大,rip是一种域内路由算法自治路由算法,多用于园区网和企业网。
C:安全性差,接受来自任何设备的路由更新。无密码验证机制,默认接受任何地方任何设备的路由更行。不能防止恶意的rip欺骗。
D:不支持无类ip地址和VLSM
E:收敛性差,时间经常大于5分钟。
F:消耗带宽很大。完整的复制路由表,把自己的路由表复制给所有邻居,尤其在低速广域网链路上更以显式的全量更新。
四:RIP-2
1: 报文格式
命令(1B)+版本(1B)+路由域(2B)+
20B{地址序列(2B)+路由标记(2B)+IP地址(4B)+子网掩码(4B)+下一站IP地址(4B)+度量(1-16, 4B)}
A:路由域(routing domain)是一个选路守护程序的标识符,它指出了这个数据报的所有者。
在一个Unix实现中,它可以是选路守护程序的进程号。
该域允许管理者在单个路由器上运行多个RIP实例,每个实例在一个选路域内运行。
B:路由标记(routing tag)是为了支持外部网关协议而存在的。它携带着一个EGP和BGP的自治系统号。
C:子网掩码:应用于相应的IP地址上。
D:下一站IP地址指明发往目的IP地址的报文该发往哪里。该字段为0意味着发往目的地址的报文应该发给发送RIP报文的系统。
五:OSPF(Open Shortest Path First开放式最短路径优先)
1: 链路是路由器接口的另一种说法,因此OSPF也称为接口状态路由协议。
OSPF通过路由器之间通告网络接口的状态来建立链路状态数据库,生成最短路径树,每个OSPF路由器使用这些最短路径构造路由表。
2: 一个链路状态协议中,路由器并不与其邻站交换距离信息。
它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这些信息发送给它的其他邻站,而邻站将这些信息在自治系统中传播出去。
每个路由器接收这些链路状态信息,并建立起完整的路由表。
3: 区别
A: 链路状态协议总是比距离向量协议收敛更快。
B: OSPF直接使用IP。也就是说,它并不使用UDP或TCP。对于IP首部的protocol字段,OSPF有其自己的值
3: 优点
A: OSPF可以对每个 P服务类型计算各自的路由集。这意味着对于任何目的,可以有多个路由表表项,每个表项对应着一个I P服务类型。
B: 给每个接口指派一个无维数的费用。可以通过吞吐率、往返时间、可靠性或其他性能来进行指派。可以给每个IP服务类型指派一个单独的费用。
C: 当对同一个目的地址存在着多个相同费用的路由时,OSPF在这些路由上平均分配流量。我们称之为流量平衡。
D: OSPF支持子网:子网掩码与每个通告路由相连。这样就允许将一个任何类型的IP地址分割成多个不同大小的子网。到一个主机的路由是通过全1子网掩码进行通告的。默认路由是以I P地址为0.0.0.0、网络掩码为全0进行通告的。
E: 路由器之间的点对点链路不需要每端都有一个IP地址,我们称之为无编号网络。这样可以节省IP地址—现在非常紧缺的一种资源。
F: 采用了一种简单鉴别机制。可以采用类似于RIP-2机制的方法指定一个明文口令。
G: OSPF采用多播,而不是广播形式,以减少不参与OSPF的系统负载。
4: OSPF路由器收集其所在网络区域上各路由器的连接状态信息,即链路状态信息(Link-State),生成链路状态数据库(Link-State Database)。
路由器掌握了该区域上所有路由器的链路状态信息,也就等于了解了整个网络的拓扑状况。
OSPF路由器利用“最短路径优先算法(Shortest Path First, SPF)”,独立地计算出到达任意目的地的路由。
六:OSPF的指派路由器(DR)和备份指派路由器(BDR)
1: 在多路访问网络上可能存在多个路由器,为了避免路由器之间建立完全相邻关系而引起的大量开销,OSPF要求在区域中选举一个DR。
每个路由器都与之建立完全相邻关系。DR负责收集所有的链路状态信息,并发布给其他路由器。
选举DR的同时也选举出一个BDR,在DR失效的时候,BDR担负起DR的职责。
2: 当路由器开启一个端口的OSPF路由时,将会从这个端口发出一个Hello报文,以后它也将以一定的间隔周期性地发送Hello报文。
OSPF路由器用Hello报文来初始化新的相邻关系以及确认相邻的路由器邻居之间的通信状态。
3: 协议操作步骤
A: 建立路由器的邻接关系
所谓“邻接关系”(Adjacency)是指OSPF路由器以交换路由信息为目的,在所选择的相邻路由器之间建立的一种关系。
路由器A首先发送拥有自身ID信息(Loopback端口或最大的IP地址)的Hello报文。与之相邻的路由器B如果收到这个Hello报文,就将这个报文内的ID信息加入到自己的Hello报文内。
如果路由器B的某端口收到从其他路由器A发送的含有自身ID信息的Hello报文,则它根据该端口所在网络类型确定是否可以建立邻接关系。
在点对点网络中,路由器A将直接和对端路由器B建立起邻接关系,并且该路由器将直接进入到第三步操作:发现其他路由器。若为MultiAccess 网络, 该路由器将进入选举步骤
B: 选举DR/BDR
MultiAccess网络支持多个路由器,在这种状况下, OSPF需要建立起作为链路状态和LSA更新的中心节点。
选举利用Hello报文内的ID和优先权(Priority)字段值来确定。
优先权字段值大小从0到255,优先权值最高的路由器成为DR。
如果优先权值大小一样,则ID值最高的路由器选举为DR,优先权值次高的路由器选举为BDR。
优先权值和ID值都可以直接设置。
C: 发现路由器
路由器与路由器之间首先利用Hello报文的ID信息确认主从关系,然后主从路由器相互交换部分链路状态信息。
每个路由器对信息进行分析比较,如果收到的信息有新的内容,路由器将要求对方发送完整的链路状态信息。
这个状态完成后,路由器之间建立完全相邻(Full Adjacency)关系,同时邻接路由器拥有自己独立的、完整的链路状态数据库。
D: 选择适当的路由器
当一个路由器拥有完整独立的链路状态数据库后,它将采用SPF算法计算并创建路由表。
OSPF路由器依据链路状态数据库的内容,独立地用SPF算法计算出到每一个目的网络的路径,并将路径存入路由表中。
E: 维护路由信息
当链路状态发生变化时,OSPF通过Flooding 过程通告网络上其他路由器。
OSPF路由器接收到包含有新信息的链路状态更新报文,将更新自己的链路状态数据库,然后用SPF算法重新计算路由表。
在重新计算过程中,路由器继续使用旧路由表,直到SPF完成新的路由表计算。新的链路状态信息将发送给其他路由器。
值得注意的是,即使链路状态没有发生改变,OSPF路由信息也会自动更新,默认时间为30分钟。
七: OSPF分层路由的思想
1: OSPF把一个大型网络分割成多个小型网络的能力被称为分层路由,这些被分割出来的小型网络就称为“区域”(Area)。
由于区域内部路由器仅与同区域的路由器交换LSA信息,这样LSA报文数量及链路状态信息库表项都会极大减少,SPF计算速度因此得到提高。
多区域的OSPF必须存在一个主干区域,主干区域负责收集非主干区域发出的汇总路由信息,并将这些信息返还给到各区域。
2: OSPF区域不能随意划分,应该合理地选择区域边界,使不同区域之间的通信量最小。
但在实际应用中区域的划分往往并不是根据通信模式而是根据地理或政治因素来完成的。
3: OSPF的四种路由器
A: 内部路由器:所有端口在同一区域的路由器,维护一个链路状态数据库。
B: 主干路由器:具有连接主干区域端口的路由器。
C: 区域边界路由器(ABR):
具有连接多区域端口的路由器,一般作为一个区域的出口。
ABR为每一个所连接的区域建立链路状态数据库,负责将所连接区域的路由摘要信息发送到主干区域,而主干区域上的ABR则负责将这些信息发送到各个区域。
D: 自治域系统边界路由器(ASBR):
至少拥有一个连接外部自治域网络(如非OSPF的网络)端口的路由器,负责将非OSPF网络信息传入OSPF网络。
4: OSPF链路状态公告类型
A: LSA TYPE 1:由每台路由器为所属的区域产生的LSA,描述本区域路由器链路到该区域的状态和代价。一个边界路由器可能产生多个LSA TYPE1。
B: LSA TYPE 2:由DR产生,含有连接某个区域路由器的所有链路状态和代价信息。只有DR可以监测该信息。
C: LSA TYPE 3:由ABR产生,含有ABR与本地内部路由器连接信息,可以描述本区域到主干区域的链路信息。它通常汇总缺省路由而不是传送汇总的OSPF信息给其他网络。
D: LSA TYPE 4:由ABR产生,由主干区域发送到其他ABR, 含有ASBR的链路信息,与LSA TYPE 3的区别在于TYPE 4描述到OSPF网络的外部路由,而TYPE 3则描述区域内路由。
E: LSA TYPE 5:由ASBR产生,含有关于自治域外的链路信息。除了存根区域和完全存根区域,LSA TYPE 5在整个网络中发送。
F: LSA TYPE 6:多播OSPF(MOSF),MOSF可以让路由器利用链路状态数据库的信息构造用于多播报文的多播发布树。
G: LSA TYPE 7:由ASBR产生的关于NSSA的信息。LSA TYPE 7可以转换为LSA TYPE 5。
5: 报文在OSPF多区域网络中发送的过程
首先,区域内部的路由器最初使用LSA TYPE 1或LSA TYPE 2对本区域内的路径信息进行交换并计算出相应的路由表项。
当路由器的链路信息在区域内部路由达到统一后,ABR才能发送LSA摘要报文(LSA TYPE 3或LSA TYPE 4)给其他区域。
其他区域路由器可以根据这些摘要信息计算相应到达本区域以外的路由表项。
最后,除了存根区域,所有路由器根据ASBR所发送的LSA TYPE 5计算出到达自治域外的路由表项。
八:BGP(Border Gateway Protocol):边界网关协议(外部网关协议)
1: 用来连接Internet上独立系统的路由选择协议。
2: 是自主网络系统中网关之间交换器路由信息的协议。
3: BGP系统与其他BGP系统之间交换网络可到达信息。这些信息包括数据到达这些网络所必须经过的自治系统AS中的所有路径。
这些信息足以构造一幅自治系统连接图。然后,可以根据连接图删除选路环,制订选路策略。
4: BGP执行三类路由:AS间路由、AS内部路由和贯穿AS路由。
A: AS间路由发生在不同AS的两个或多个BGP路由器之间,这些系统的对等路由器使用BGP来维护一致的网络拓扑视图,AS间通信的BGP邻居必须处于相同的物理网络。
B: AS内部路由发生在同一AS内的两个或多个BGP路由器间,同一AS内的对等路由器用BGP来维护一致的系统拓扑视图。BGP也用于决定哪个路由器作为外部AS的连接点。
5: BGP路由
A: 与其它路由协议一样,BGP维护路由表、发送路由更新信息且基于路由metric决定路由。BGP系统的主要功能是交换其它BGP系统的网络可达信息,包括AS路径的列表信息,此信息可用于建立AS系统连接图,以消除路由环,及执行AS策略确定。
B: 每个BGP路由器维护到特定网络的所有可用路径构成的路由表,但是它并不清除路由表,它维持从对等路由器收到的路由信息直到收到增值(incremental)更新。
C: 当路由表改变时,路由器发送路由表中改变的部分。BGP路由器并不周期性发送路由更新,且BGP路由更新只包含到某网络的最佳路径。
D: BGP用单一的路由metric决定到给定网络的最佳路径。这一metric含有指定链路优先级的任意单元值,BGP的metric通常由网管赋给每条链路。赋给一条链路的值可以基于任意数目的尺度,包括途经的AS数目、稳定性、速率、延迟或代价等。
6: BGP消息类型:初始(open)消息,更新消息、通知消息和keep-alive消息
A: 初始消息在对等路由器间打开一个BGP通信会话,是建立传输协议后发送的第一个消息,初始消息由对等设备发送的keep-alive消息确认,且必须得到确认后才可以交换更新、通知和keep-alive消息。
B: 更新消息用于提供到其它BGP系统的路由更新,使路由器可以建立网络拓扑的一致视图。更新用TCP发送以保证传输的可靠性。 更新消息可以从路由表中清除一条或多条失效路由,同时发布若干路由。
C: 通知消息在检查到有错误时发送。通知消息用于关闭一条活动的会话,并通知其它路由器为何关闭该会话。
D: 通知消息在检查到有错误时发送。通知消息用于关闭一条活动的会话,并通知其它路由器为何关闭该会话。
九: CIDR(Classless InterDomain Routing):无类域间路由
1: 现行的IPv4(网际协议第4版)的地址将耗尽,这是一种为解决地址耗尽而提出的一种措施。
它是将好几个IP网络结合在一起,使用一种无类别的域际路由选择算法,可以减少由核心路由器运载的路由选择信息的数量。
2: CIDR(无类型域间选路,Classless Inter-Domain Routing)是一个在Internet上创建附加地址的方法,这些地址提供给服务提供商(ISP),再由ISP分配给客户。
CIDR将路由集中起来,使一个IP地址代表主要骨干提供商服务的几千个IP地址,从而减轻Internet路由器的负担。