万字长文爆肝路由协议!
想必我们所有人都在摆弄路由器。路由器可以说是我们日常生活中必不可少的一件设备。就算你不是程序员,我想隔壁七大姑八大姨大概也让你配置路由器吧。但是你有没有想过一个问题,这个路由器是干什么用的?你可能知道这是一个为终端设备上网提供WI-FI连接的设备。当我们的终端设备连上WI-FI,就可以通过路由器把数据从我的设备传到我想要的地方,进而实现我想要什么,我想要什么。
这个回答总体来说还是有道理的,但是这里我要问你一个问题。
路由器如何向其它路由器发送数据?
要回答这个问题,首先要从路由协议说起。
在互联网中,无论是局域网还是广域网,一个数据包都可以通过合理的路由控制从一个终端传输到另一个终端。路由控制模块用于控制该数据包的发送过程。路由控制模块遵循路由协议,路由协议是整个互联网中数据路由的规范和标准。
途径
为了将数据包正确的到达目的主机,路由器在发送的过程中必须正确的转发数据,这也是路由器的首要功能:数据处理,除了转发,数据处理还包括包过滤、加密、压缩等。
那么路由器如何知道这些数据的去向呢?
路由器内部维护一个路由表,该表记录了数据包中目的主机的IP地址和输出路径。路由器的主要工作是为每个被路由的数据包找到最佳传输路径。路由器的一些结构和转发规则已经在路由器里了,你其实也是这样的...本文中提到的。
静态路由和动态路由
我们通常把路由器分为静态路由和动态路由,静态路由和动态路由都不会离开路由表。如果你在发送数据之前设置了路由规则,数据会按照你事先设置的路径转发,这就是静态路由。如果不事先设置路由规则,只是让数据在发送时按照路由协议的既定规则转发,这就是动态路由。这两种路由方法各有优缺点。
静态路由会让你做很多重复的路由工作,效率低,工作量大,扩展性差。一旦增加了新的路由,就会让你重新设置所有的路由,甚至会出现单点问题。当传输节点中某条路由出现故障时,数据基本不会绕过这条路由,需要管理员重新设置路由才能继续发送。
在使用动态路由时,有些东西需要手动设置,但是路由协议是需要设置的,每个路由协议的复杂程度不一样,所以设置的难度也不一样。例如,RIP协议的设置过程相对简单,而OSPF的设置过程就比较复杂。但是一旦设置完成,如果要增加新的路由,只需要设置新增加的单路由,就避免了单点问题。动态路由可以选择其他路由来绕过故障路由。
尽管静态路由和动态路由各有优缺点,但您可以将它们结合起来一起使用。都是成年人。
路由协议
上面讨论了动态路由会根据网络情况动态调整数据的转发路径,那么这种行为的依据是什么呢?
答案是通过在路由之间交换路由表来实现的。路由器会在合适的时间交换路由表。这样,网络中的所有路由器都可以动态调整数据的转发路径。当网络情况发生变化时,路由器之间交换的路由信息会通知对方网络的变化,所有路由器都可以通过信息扩散知道网络的变化。
常见的动态路由协议包括RIP、OSPF、BGP、MPLS等。根据自治系统的不同,还可以分为IGP和EGP(外部网关协议)。这里面和外面有什么区别?
我们首先需要知道什么是自治系统:
自治系统是由ISP网络服务提供商管理和控制的路由器和网络组。它可以是直接连接到局域网并同时连接到互联网的路由器,也可以是由一个企业主干网互连的多个局域网。
域内路由协议IGP用于自治系统内的动态路由,而域间路由协议EGP用于自治系统之间的路由控制。IGP和EGP也可以称为内部网关协议和外部网关协议。IGP和EGP是互补的。没有EGP,就不可能实现不同组织之间的通信,没有IGP,就不可能实现自治系统内部的通信。IGP协议可以细分为RIP、RIP 2、OSPF等多种协议。EGP协议使用BGP协议。
让我们来了解一下这些协议。
RIP协议
RIP的全称是路由信息协议。它是IGP中第一个被广泛使用的协议。和很多萌芽期的一样,刚开始一定很简单。
RIP协议要求每台路由器维护一套,主要记录路由器与目的网络的距离。如果路由器直接连接到目的网络,则该距离为1;否则,在路由器到目的网络的距离中,只要经过一个路由器,它的距离就为+1,这也叫* *跳数* *,也就是说,它每经过一个路由器,跳数就为+1,但是
RIP不能在两个网络之间使用多条路由。反之,它会选择路由最少的线路进行传输,即使路由最少的线路延迟大。
由此我们可以总结出RIP协议的两个特点:第一个特点是只能和邻居路由器交换消息,那么这个“邻居”怎么判断呢?如果两个路由器之间的通信不需要通过另一个路由器,那么这两个路由器被称为是相邻的。RIP还规定非相邻路由器不会交换信息。第二个特点是每个路由器都会毫无保留的交换所有自己知道的信息,也就是交换彼此的路由表。
还有一个很重要的问题我们没有考虑。既然我们知道RIP协议规定了交换信息的规则,那么它是如何规定交换的时间间隔的呢?
RIP协议规定路由信息应该以固定的时间间隔交换。当路由信息发生变化时,它会通过交换路由表来及时更新邻居路由器。更新的原理是路由器要找到最短路径,使用距离矢量算法。
距离向量算法
对于每台邻居路由器发送的RIP报文,通常会执行以下操作:
修改RIP消息的内容会将RIP消息中的“下一跳地址”n和“距离”d字段的值更改为+1。
对修改后的RIP消息中的每个内容执行以下步骤:
如果原始路由表中没有目的网络的地址R,RIP报文中的目的网络地址将被修改。
如果原路由表中有目的网络的地址,下一跳路由的地址为N,则收到的RIP报文的内容将被原路由表中的内容替换。
如果原始路由表中有目的网络的地址,但下一跳路由的地址不是N,如果收到的RIP报文中的距离D小于路由表中的距离,就会被更新。
如果在一段时间内没有收到相邻路由器的路由表更新报文,则该相邻路由器被标记为不可达,距离设置为16,表示不可达。
RIP协议消息格式
目前,RIP协议有两个版本:RIP 1和RIP 2。现在比较常用的是RIP 2版本,RIP 2协议使用UDP协议进行传输控制。
RIP 1和RIP 2的主要区别如下:
RIP 1是有类路由协议,RIP报文不包含子网掩码,要求网络中的所有设备使用相同的子网掩码,而RIP 2是无类路由协议,使用子网掩码。
RIP 1在发送更新数据包时使用广播方法,而RIP 2默认使用组播。当然RIP 2也支持广播发送,但是使用组播既能满足需求,又能节省带宽。
第三个区别是RIP 2支持明文或MD5认证,同步路由表时需要两台路由器认证,增强了安全性。
以下是RIP 2的报文格式。
RIP 2消息可以细分为报头部分和路由部分。
部分报头主要包括命令、版本和必须为0字段,其中命令标识报文类型,1标识请求请求,向相邻路由请求全部或部分路由信息;2识别响应请求,并将您自己的全部或部分信息发送给邻居路由器。然后是RIP版本,表明它是RIP 1还是RIP 2。下面必须是0,其实主要是为了完成4个字节而设计的。
以下是RIP报文的路由信息:
地址簇标识符:它的值2表示IP协议。对于请求消息,该字段的值为0。
路由:通常填入自治系统号,自治系统外可能有RIP收到的路由信息。
网络地址:这表示目的网络地址。
子网掩码:目的地址的子网掩码。
下一跳路由器地址:表示路由器的下一跳地址。如果是0.0.0.0,则表示发布此路由的路由器地址是最佳下一跳地址。
跳数:需要经过的路由数量。
RIP的一个问题是,当网络出现故障时,需要很长时间才能将信息同步到所有路由器。
RIP的主要问题及解决方案
如下图所示,有一个网络1和一个路由器1。路由器1到网络1的RIP报文中的路由信息是“1,1,direct delivery”,表示到网络1的距离是一个路由器的跳数,是直连模式。
此时,网络2和路由器R2被添加,R2到网络1的RIP报文是“1,2,R1”,这意味着路由器R2到网络1的距离是2跳,下一个路由器是R1。
好了,以上两张图RIP消息都可以正常发送,很安全。此时,网络1出现故障,导致R1无法直接到达网络1。此时,R1和R2应该如何发送RIP消息?
实际上,R1与网络1直接相连,所以R1首先知道网络1不可用。一旦R1知道网络1不可用,它会将RIP消息修改为“1,16,direct”,然后与R2同步路由表,如下图所示:
但是由于RIP协议本身的特点,这个路由表同步过程并不是那么快就能完成的。此时,R2不知道网络1不可用,因此它继续通过R1向网络1发送消息。
一旦R2的报文发送到R1,R1会认为网络1可以通过R2到达,于是R1将RIP报文改为“1,3,R2”,表示我到网络1的距离是3跳,下一个路由器会经过R2,如下图所示。
同样,R2收到来自R1的消息后,会将其RIP消息修改为“1,4,R1”。。。。。。然后,R1和R2的循环还在继续。
这个循环什么时候结束?
直到R1和R2的跳数增加到16,R1和R2才知道网络1不可达。这不是白干吗?但是,这是RIP协议的一个特点。总的来说,这个特点就是好消息传播快,坏消息传播慢。
有什么办法可以补救这种传播缓慢的情况?
一种方式是将跳数控制在16,相当于控制消息传输时间;第二,规定路由器不会将收到的报文回传给发送方。这种方法称为水平分割,如下图所示。
另一种方法是在路由信息发生变化时,不需要等待一段时间,直接发送路由信息。这似乎是一个更容易想到的方法。你想想,网络都断了,还要等30 s才能发。真的是鸡肋。
总之,由于它的协议特性和消息,只能在小型网络中使用。
OSPF议定书
OSPF是为了克服RIP的缺点而于1989年开发的。OSPF被称为开放最短路径优先协议。请注意,虽然它被称为最短路径优先协议,但这并不意味着其他协议不是最短路径优先协议。一般来说,自治系统中的路由器会选择最短路径进行传输。
OSPF使用分布式链路状态协议,而不是像RIP这样的距离矢量协议。与RIP协议相比,OSPF有以下变化:
OSPF会向自治系统中的所有路由器发送消息。OSPF将首先向邻居路由器发送消息,然后邻居路由器将向邻居路由器发送消息,逐渐同步所有路由器。RIP只向附近的几台路由器发送消息。
OSPF发送的消息是所有彼此相邻的路由器的链路状态,包括哪些路由器彼此相邻,以及链路的度量,实际上是RIP中的跳数。对于RIP协议,它只与相邻路由器同步整个路由表。
当链路发生变化时,OSPF会将消息同步到所有路由器,而无论网络状态是否发生变化,RIP都会定期交换路由表信息。
从这个角度来看,OSPF和RIP的区别是相当大的。
因为OSPF会定期与周围的路由器同步链路信息,所以这些路由器可以建立链路状态数据库。每台路由器都知道自治系统中有多少台路由器,以及这些路由器的度量,因此每台路由器都可以根据自己的根建立路由表。虽然RIP也可以知道这些信息,但它只是无法知道整个自治系统中的所有路由信息。
话虽如此,为什么OSPF比RIP更适合大型网络?
首先,OSPF没有跳数限制,OSPF会把自治系统分成更小的区域,每个区域都有一个标识。当然,区域的划分也是有限制的,最多不能超过200个。这是OSPF自治区内不同地区的划分。
这样做的好处是可以提高区域内的消息传输效率,减少流量。想象一下,在一个特别大的自治系统中,如果没有划分,每个路由器需要多少流量来同步一条消息。
OSPF按等级划分为上层和下层。上层称为主干区域,主干区域的标识符指定为0.0.0。主干区域的作用主要是连接其他下层。每个区域都有一个中间路由器,负责与主干区域的路由器通信。这个中间路由器叫区域边界路由器,骨干区域的路由器叫骨干路由器。骨干路由器可以是区域边界路由器。在所有骨干路由器中,还有一个路由器负责与外部自治系统通信。这个路由器叫自制边界系统路由器。
虽然分层的思想解决了OSPF巨大流量的问题,但是通信的种类却大大增加了,这使得OSPF协议非常复杂。但是,分层的思想极其重要,因为任何大型网络或操作系统都会体现分层的思想。毕竟脱钩是一门艺术。
OSPF不使用任何传输层协议进行通信,而是直接传输IP数据报。
那么问题来了,为什么还有其他协议不使用传输层协议来传输消息呢?
因为OSPF需要进行可靠的组播操作,会尽可能的与自治系统中的多个邻居路由器进行通信,而TCP不支持组播,UDP无法保证可靠的传输,所以OSPF实现了自己的传输机制,从而绕过了TCP和UDP。
OSPF由一个小数据包组成,可以减少流量。另一个优点是不需要对分组进行分段,因为如果任何分段的数据片段丢失,它就不能被组装成发送的分组,并且它必须被重发。
以下是OSPF消息和每个字段的含义。
版本:目前的OSPF版本号是v2,主要标准是RFC 1583和RFC 2328。
类型:有五种类型的OSPF消息,这种类型可以代表任何一种OSPF消息。
数据包长度:包括OSPF报头的数据包长度,以字节为单位。
路由器ID:表示该数据包从哪个路由器接口发出,以及该路由器的IP地址。
区域标识符Area ID:指示该数据包属于哪个区域的标识符。
和检查:用于检测数据包中是否有错误。
认证类型:目前认证只有两种,0(不使用)和1(密码)。
认证数据(Authentication):如果类型为0,则填写0,如果为1,则填写8位密码。
除了上面提到的这些信息的特征之外,OSPF还有一些其他的特征:
如果有多条到达目的网络的路径具有相同的度量,OSPF将通过负载均衡使用每条路径。
允许OSPF管理员手动设置指标。如果是敏感业务,可以设置更高的指标。如果灵敏度要求不是很高,可以设置较低的度量。这在RIP中是不可能的,它只允许一条最短路径。
OSPF具有认证功能,保证了传输链路信息的安全性。
OSPF支持可变长度子网划分和非分类寻址CIDR。
因为网络中链路的状态经常变化,OSPF会让每条链路都有一个32位的序列号,序列号越大状态越新。
如上所述,OSPF消息有五种类型,主要有以下五种:
类型1:你好消息。该消息将以多播的形式定期发送。其主要功能是维持与邻居路由器的可达性,保证双向通信。但是,并不是所有的消息都会建立关系,只有在消息中的所有字段都匹配后才能建立关系。以下是hello消息的字段。
网络掩码:网络掩码。
Hello Interval:发送Hello消息的时间间隔。默认情况下,OSPF在P2P或广播接口上发送10秒的问候间隔,在NBMA和P2MP接口上发送30秒的问候间隔。
Options:可选,路由器通过设置options字段宣布它可以支持某种功能。
路由器优先级:路由器优先级
路由器停滞间隔:路由器停滞时间。默认情况下,该路由接口是hello interval的4倍。如果在此时间内没有收到来自邻居的hello消息,则该邻居被视为无效。
DesignedRouter:指定路由器。如果字段为0.0.0.0,则表示没有指定DR或者没有DR备份指定路由器:备份指定路由器。网络中BDR接口的IP地址。如果该字段为0.0.0.0,则表示没有指定BDR或没有BDR。邻居:邻居。此处填写邻居的路由器ID。
类型2:数据库分组,用于将自身链路数据库中的链路状态信息同步到相邻站点。
接口MTU:最大接口数据单元,该接口发送的最大IP数据长度,默认为0。
I:初始位,初始标志位。连续发送多条DD报文时,如果发送了这条报文,第一条为1,否则为0。
M:more,如果设置为1,说明后面还有其他DD消息,如果这是最后一条DD消息,则设置为0。
M/S:该位设置为1表示主路由器。
消息序列号。主机和从机使用序列号来确保DD报文传输的可靠性和完整性。LSA headers:DD报文中包含的LSA的头信息。
类型3:链路状态请求包,请求完整的LSA报文和LSR报文。
LS类型:链接状态类型。
链接状态ID:LSA标识。
通告路由器:生成LSA的路由器的路由器ID。
类型4:链路状态更新分组,
收到LSR后,路由器会以LSU报文响应,其中包含对方请求的LSA的完整信息。
详细的LSA消息通常单独编写,包括LSA报头、路由器-LSA和网络-LSA。
类型5:链路状态确认报文,用于确认收到的LSU报文。内容是需要确认的LS A的头。一个LSACK消息可以确认多个LSA。
OSPF规定每10秒交换一次Hello数据包,以确定网络链路是否可达,这很像某种心跳检测机制。路由表将根据Hello包的检测结果来制作。一般情况下,大部分包都是Hello包。如果在40秒内没有收到Hello数据包,相邻路由器将被视为不可达。应立即修改链路状态数据库中记录的链路信息,并重新设计路由表。
其他四条OSPF消息用于同步链路状态数据库。同步意味着不同的路由器具有相同的链路状态。两个同步路由器被称为完全相邻。不是物理距离上的接近才叫做接近,而是要判断它的链路状态。
总结以上五类消息的用途:通过发送Hello消息确认是否连接;通过DD报文同步链路状态信息;在路由操作阶段,链路状态请求分组请求路由控制信息,然后链路状态更新分组接收路由同步信息,最后链路状态确认分组通知已经接收到路由控制信息。
当一个新的路由器开始工作时,它不知道应该把链路信息同步给谁,所以它需要确定哪些邻居路由器有,它通过分组发送给邻居路由器的度量是什么。如果所有路由器都向全网广播自己的状态信息,那么每个路由器都可以通过合并链路状态信息得到状态链路数据库,但这样做代价太大。
因此,OSPF通过使用数据库数据包与邻居路由器交换链路信息状态,从而获得整个网络的状态链路数据库。以下是需要发送以形成状态链接数据库的OSPF消息。
这样,国家链接数据库就建立起来了。如果网络运行过程中路由状态发生变化,只需要发送链路状态更新报文,更新完成后,需要发送链路状态确认报文。
此外,与RIP不同,OSPF存在好消息传播快,坏消息传播慢的问题。
声明:免责声明:此文内容为本网站转载企业宣传资讯,仅代表作者个人观点,与本网无关。仅供读者参考,并请自行核实相关内容。