![](https://img.haomeiwen.com/i1552225/94b4eb993cfe224e.jpg)
目录
- 前言
- 路由表
- 路由器工作原理
- 路由表的建立
- 路由协议分类
- 根据作用域来分类
- 根据路由算法来分类
- 路由算法的特点
- 距离向量路由算法
- 链路状态路由算法
- RIP协议
- RIP2路由协议
- OSPF开放最短路径优先
- BGP边界网关协议
- 参考文章
前言
参照清华大学出版社-罗军周主编的《TCP/IP协议及网络编程技术》进行学习。
本篇主要参考第六章:《路由协议》
路由协议概述
"互联网"是由不同的路由器将不同的子网链接、构成的"网络的网络"。
路由表保证数据包能够通过不同的路由器辗转最终(经过最佳路径)到达目标主机。而路由协议就是负责路由器与路由器之间实时的信息交换、以实时动态控制路由表结构的协议。
路由协议的意义
任何路由协议的首要目标都是保证网络中的每一个路由器都具有一个完整准确的网络拓扑结构图。这一点非常重要、因为每个路由器都要根据这个拓扑结构图来计算自己的路由表。
正确的路由表能够提高IP数据包正确到达目标主机的几率
而不正确或不完整的路由表可能会造成无法到达、更严重的情况可能会使数据包在网络中循环很长一段时间、白白消耗了网络宽带和路由器资源。
而路由协议、就是为了保证路由表的准确性及完整性而存在
路由表
当路由器接收到数据包的时候、通过分析其目的地址、帮助路由器"选址"、决定从哪一个端口转发出去。
书上的例子:
![](https://img.haomeiwen.com/i1552225/c91cb7c876857586.png)
![](https://img.haomeiwen.com/i1552225/fe7f4be6459eef67.png)
路由器
Ra
会根据发送来的数据包目的IP地址
(例如:202:119:15:137
)、比对自身路由表中的目的地址(需要注意的是路由表中的目的地址是网络号
、而不是IP地址
)、确定将该数据包需要从下方端口直接转发
给网络1
。同理、另一个数据包(
202.119.12.24
)的网络段属于202.119.12.0/24
、被定义成从右侧端口
转发给Rb
路由器。Rb
在接收到数据包后再进行同样操作分发给目标主机
。
这里
Rb
是如何告知Ra
、自己可以处理网段202.119.12.0/24
的数据包?
就是通过路由协议
。
路由器工作原理:
- 如果目的地址存在于路由表中、那么直接转发。
- 如果目的地址不存在于路由表中、那么取决于是否存在默认路由:
- 有默认路由:发送给默认路由。
- 无默认路由:丢弃该数据包。
![](https://img.haomeiwen.com/i1552225/288f913fdd84881c.png)
- destination
目的网段 - mask
子网掩码 - interface
到达该目的地的本路由器的出口ip - gateway
下一跳路由器入口的ip,路由器通过interface和gateway定义一调到下一个路由器的链路,通常情况下,interface和gateway是同一网段的 - metric
跳数,该条路由记录的质量,一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由 。 - default gateway
默认路由、作用就是当数据包的目标地址不存在与本地路由表中、进行默认转发的出口。
路由表的建立
静态建立
网络管理员通过网络的拓扑结构和链接方式、建立当前的路由表。适用于简单的网络环境。
- 优点:
安全、简单、系统开销少。 - 缺点:
难度高(需要正确的理解网络的拓扑结构、以及如何配置路由表)、繁琐、扩展性能差
动态建立
路由器通过某些算法、自动建立路由表、并且可以根据实际变化实时进行调整。
路由器需要具备以下两个功能:
- 路由器需要对路由表进行维护
- 路由器之间要有信息交换(
路由协议
)。
路由协议分类
根据作用域来分类:
一个域、通常也可以被称为自治系统AS(Autonommous System)。
AS是一个由单一实体控制和管理的路由器集合、采用一个唯一的AS号来标识。
- 域内路由协议(内部网关协议IGP)
用于在同一个AS中的路由器之间的路由算法、作用是计算AS中任意两个网络之间最快或者费用最低的路由通路、以达到最佳的网络性能。
例如:RIP协议、RIP2协议、OSPF协议等
- 域外路由协议(外部网关协议EGP)
用于不同AS的路由器之间的路由算法、作用是计算那些需要穿过不同AS的通路。由于这些AS是由不同组织来管理的、因此在选择通路时、依据的标准就不止是性能了、而是要根据多种策略(如费用、可用性、性能、AS之间的商业关系等)制定。
例如:BGP协议等
- 核心网关路由协议(GGP)
主干网络(网络服务商)之间的路由算法
根据路由算法来分类:
- 基于距离向量算法的路由协议
要求路由器将自己的路由表发送到临近的节点上 - 基于链路状态算法的路由协议(最短路径算法)
只发送路由表中描述自身链路状态的部分到临近的节点上
路由算法的特点
- 最优化
路由算法可以算则最佳路径。 - 简洁性
能够用最少的软件和开销提供最有效的功能。 - 容错性
路由算法处于非正常或不可预料的环境时(如硬件问题、负载过高、操作失误)、依旧可以正常运行。 - 快速收敛
在最佳路径的判断上、所有路由器有统一的认识。 - 实时性
当某个网络事件引起路由器可用或不可用时告诉其他路由器更新路径信息。 - 灵活性
快速的适应各种网络环境。
距离向量路由算法
所有的路由器、都要其知道的(
不管是自身产生的还是从其他地方获得的
)网络以及到达该网络的距离(与目的路由器相邻多少个路由器、也叫跳数
)等信息方法告诉与自己相邻的路由器。
允许距离向量路由协议
的路由器
会向
与其直接相连
的路由器发送
多个距离向量
、每个距离向量
由一个二元数组[网络地址,距离(跳数)]
表示。如此、每个路由器
最终都将会知晓
通过各个端口所能到达的网络及到达该网络的距离
。
具体实现:
- 路由器收到相邻路由器发送的距离向量
- 计算距离向量中网络地址与自身的距离
距离向量中的距离+1 - 与本地路由表对比
如果表中不存在该网络地址、直接添加进路由表
如果表中存在该网络地址且距离大于新的距离、更新路由表 - 如果路由表有更新、将更新后的距离向量发送给相邻的路由器
如何避免死循环
死循环如何产生?
一个数据包本来想从Ra
经过Rb
发送到Rc
。但中途Rc
断开了链接、此时Rb
无法发送给Rc
、但表中Ra
是可以到达Rc
的、于是发送给Ra
、如此往复。
规避这种循环的方式很简单:
禁止把到达目的网络的距离向量发送给路由表中的下一站、也就是Ra
不会把通往Rc
的距离向量发送给Rb
。这样对于一个发送给Rc
的数据包、在Rb
的路由表中就不会存在发送给Ra
的选项了。
缺点
- 不适用于大型网络。
- 底层的链路技术多种多样、只靠跳数来作为选择依据并不能保证效率最高。
链路状态路由算法
一个路由器能够把有关连接到该路由器的链路的
状态
、费用
以及任何连接到该链路的路由器的标识等信息
通知给网络中所有其他路由器。
运行该路由协议的路由器会向整个网咯发送链路状态数据包LSP
。一个LSP
通常包含一个源路由器标识
、一个相邻路由器标识
以及二者之间链路的费用
。
LSP
被所有路由器接收、用于建立
一个网络整体的链路状态库
、并据此得出
网络整体的拓扑图
、再通过最短路径
算法计算
出路由器的路由表
。
优点
- 更快的收敛速度
所谓收敛速度是指在网络拓扑发生变化时、路由器将该变化通知给网络中所有路由器的过程。该过程越快、那么在网络拓扑发生变化时、可能发生的转发错误就越少。 - 更小的网络开销
链路状态路由协议传送的LSP只反映网络拓扑的变化、而不是传送整个路由表数据库。 - 扩展性更好
- 更容易进行算法升级
RIP协议
作为最简单的一种动态路由协议
RIP协议是属于域内
基于距离向量算法
的路由协议。
使用UDP协议、端口号520。
RIP数据包结构:
![](https://img.haomeiwen.com/i1552225/cc3b012dd124ecfd.png)
- Command 命令字段:
1~6。1为请求、2为应答、3和4不用、5为轮询和6轮询表项。 -
Version 版本字段:
RIP协议为1、RIP2协议为2。 -
Address Family Identity 地址类型字段:
对于IPv4协议,该字段取值为2。当该消息是对整张路由表的请求消息时,该字段取值为0。 -
IP Address IP地址字段:
该字段表示路由的目的地址。这一项可以是网络地址、主机地址。 -
Metric 度量字段:
该字段是指RIP中的跳数(也就是到达最终目标地址所需要经过的转发数)。虽然该字段取值范围为0-2^32,但是在RIP中,该字段的取值范围为1-16。超过16、就认为不可达。
工作原理
RIP作为一个系统长驻进程(daemon)而存在于路由器中,负责从网络系统的其它路由器接收路由信息,从而对本地IP层路由表作动态的维护,保证IP层发送报文时选择正确的路由。同时负责广播本路由器的路由信息,通知相邻路由器作相应的修改。RIP协议处于UDP协议的上层,RIP所接收的路由信息都封装在UDP协议的数据报中,RIP在520号UDP端口上接收来自远程路由器的路由修改信息,并对本地的路由表做相应的修改,同时通知其它路由器。通过这种方式,达到全局路由的有效。
- RIP路由协议用“
更新(UNPDATES)
”和“请求(REQUESTS)
”这两种分组来传输信息
。 - 每个具有RIP协议功能的路由器
每隔30秒
会把自己的整张路由表
用UDP520端口给与之直接相连
的机器广播
更新信息。 - 具体的
算法
以及传输的信息数据结构
采用的是距离向量算法
。
对于一个刚刚加入网络的RIP路由器而言
-
初始化:
RIP协议的路由器启动时、会向每个直连的结构上发送请求数据包(命令字段为1、地址系列设置为0、度量字段设置为16
)、要求其他路由器回复完整的路由表。 -
接收请求:
如果该请求是刚才提到的特殊请求、则将完整的路由表发送给请求者。
如果该请求是一个正常的请求(指明了想要通往哪个IP地址的路由表)、则将度量设置成自己表中的值、如果表中没有则设置为16、然后发回响应。 -
接收响应:
根据响应不同进行相应的操作。更新、添加、删除。
计时器机制
-
更新计时器:
每个30秒发送一次更新信息 -
无效计时器:
如果一个路由器30s*6也就是3分钟还没有发来更新信息。那么本路由器将会从路由表中将其度量设为16。 -
刷新计时器:
再过60秒、如果还没有更新、则删除该无效路由、以保证该路由的失效已经被传播开。
缺点
- RIP中没有子网的概念。无法利用子网技术来节省网络资源。
- 在链路发生故障的时候、需要很长一段时间才能收束并稳定下来、在这段时间内很可能出现环路。
- 采用跳数作为度量也忽略了一些其他需要考虑的因素。
- 同时、度量最大值为16也限制了网络的大小。
RIP2路由协议
RIP2是RIP协议的第二个版本、他对RIP协议进行了扩充并且兼容。
![](https://img.haomeiwen.com/i1552225/e7cf68b144112f27.png)
本身来讲数据包格式与RIP相同、只是将原来设置为0的字段赋予了一定的意义。
-
路由域:
RIP2协议的标识、指出了这个数据包的所有者(发送者)。允许在一个路由器中存在多个RIP2协议的实例。 -
路由标志:
为了支持外部网关协议而存在。携带着一个EGP与BGP的自治系统AS号。 -
子网掩码:
作用于IP地址上 -
下一站地址:
指明发往目的IP的数据包下一站应发往哪里。该字段为0则意味着发往目的地址的数据包应发给发送给RIP数据包的系统。
OSPF开放最短路径优先
OSPF是除RIP外的另一个内部网关协议。使用的是
链路状态路由算法
。它克服了RIP协议的所有限制。
除此之外、OSPF绕过了UDP协议直接使用了IP协议进行传输。
OSPF数据包结构
![](https://img.haomeiwen.com/i1552225/046bf33f1fe03807.png)
-
Version 版本字段
占1个字节,指出所采用的OSPF协议版本号,目前最高版本为OSPF v4,即值为4(对应二进制就是0100)。 -
Packet Type 报文类型字段
标识对应报文的类型。分别是:Hello报文、DD报文、LSR报文、LSU报文、LSAck报文。具体将在下面各小节介绍。 -
Packet Length 包长度字段
占2个字节。它是指整个报文(包括OSPF报头部分和后面各报文内容部分)的字节长度。 -
Router ID 路由器ID字段
占4个字节,指定发送报文的源路由器ID。 -
Area ID 区域ID字段
占4个字节,指定发送报文的路由器所对应的OSPF区域号。 -
Checksum 校验和字段
占2个字节,是对整个报文(包括OSPF报头和各报文具体内容,但不包括下面的Authentication字段)的校验和,用于对端路由器校验报文的完整性和正确性。 -
AuType 认证类型字段
占2个字节,指定所采用的认证类型,0为不认证,1为进行简单认证,2采用MD5方式认证 -
Authentication 认证字段
占8个字节,具体值根据不同认证类型而定:认证类型为不认证时,此字段没有数据,认证类型为简单认证时,此字段为认证密码,认证类型为MD5认证时,此字段为MD5摘要消息。
一台运行了OSPF协议的路由器,最终都会存储三张表:邻居表、拓扑表、路由表
-
邻居表的建立
新加入的路由器向其直接相连
的端口发送hello报文
、相邻的路由器
接收到后将其加入邻居表
、并且回复hello报文
、新主机
根据回复的hello
报文再建立
自己的邻居表
。
邻居表-2
-
拓扑表的建立
在建立拓扑表的时候,新加入的路由器要经历预启动状态、交换状态、加载状态、完全邻接状态。如图所示:
DD交换过程按询问/应答方式进行,在DD报文交换中,一台为Master(主)角色,另一台为Slave(从)角色。Master路由器向从路由器发送它的路由表内容,并规定起始序列号,每发送一个DD报文,序列号加1,Slave则使用Master的序列号进行确定应答。但是显然,主从之间的关系会因每个DD交换的不同而不同。网络中的所有路由器会在不同时刻作用,在这个过程中既可能是主路由器又可能是从路由器。
因为DD报文仅在两台OSPF路由器初始化连接时才进行DD交换,所以它没有发送周期,以后的数据库存同步是通过LSR、LSU和LSAck报文进行同步的。
![](https://img.haomeiwen.com/i1552225/ff44e4d678dd82cc.png)
LSR报文用于请求相邻路由器链路状态数据库中的一部分数据。当两台路由器互相交换完DD报文后,知道对端路由器有哪些LSA是本LSDB所没有的,以及哪些LSA是已经失效的,则需要发送一个LSR报文,向对方请求所需的LSA。
![](https://img.haomeiwen.com/i1552225/03bd2d3038027497.png)
LSU报文是应LSR报文的请求,用来向对端路由器发送所需的LSA,内容是多条LSA完整内容的集合,LSU报文内容部分包括此次共发送的LSA数量和每条LSA的完整内容。
-
路由表的建立
每个路由器按照产生的全区域数据拓扑图,在运行SPF算法,产生到达目标网络的路由条目。
BGP边界网关协议
用于不同的AS之间通讯的外部网关协议、为取代EGP而生。
目的是为不同的自治系统之间信息通讯提供保证。
主要使用TCP协议端口179
进行传递、采用距离向量算法。
但是十分复杂~没细看
有五种报文:open(开始TCP连接)、update(信息交换)、notification(报错消息)、keepalive(存活消息)
网友评论