路由协议

网络是由节点互联组成的, 数据包通过在节点之间转发到达目的地. 路由是指决定端到端通信中数据包的路径, 是网络层最核心的功能之一.

路由器是执行路由功能的主要硬件设备, 它是拥有CPU, 内存甚至外部存储设备的计算机, 使用软件进行路由选择和转发.

路由器可以不依赖专用硬件工作, 个人计算机也可以改装成路由器使用. 因为路由器依赖软件进行工作, 我们可以方便的扩展路由器的功能比如安装防火墙和代理等服务.

路由器一般拥有多个有线或无线网络接口, 不同接口可以设置不同的IP地址. 一般把路由器与其内网主机连接的接口称为LAN口, 与外网连接的接口称为WAN口.

自治系统(Autonomous system, AS)是指执行相同路由器策略的IP网络, 在AS内部进行路由选择的路由协议称为内部网关协议, 在AS之间进行路由选择的协议称为外部网关协议.

RIP协议

RIP协议是一种较为简单的内部网关协议, 它使用基于距离向量(distant-vector)的路由机制. 它使用UDP报文进行通信, 默认端口号为520.

RIP协议使用跳数衡量到达目的地的距离并将跳数, 称为度量值. RIP协议允许的最大跳数为15跳, 大于或等于16跳的目的地认为是不可达的.

每个支持RIP协议的路由器都会维护一个路由表, 其中每一项包含字段:

  • 目的地址

  • 下一跳地址

  • 出接口

  • 度量值

  • 最后更新时间: 本条记录最后更新时间

  • 路由标记: 用于标记外部路由

当路由器启动RIP协议后, 便会向相邻的路由器发送RIP更新请求. 收到RIP请求的路由器会返回包含自身路由表的RIP响应.

当路由器的路由表更新后, 路由器向相邻路由器发送触发更新报文. 收到触发更新报文的路由器会发出RIP请求, 更新自身的路由表并向自己的相邻服务器发出触发更新报文.

这样逐级触发更新可以保证区域内的路由器都能及时得到最新的路由信息.

RIP协议定义了4个定时器来触发相应的事件:

  • update: 定义自动发送更新请求的时间间隔

  • timeout: 定义路由记录失效时间, 超时记录的度量值将会变为16, 并进入抑制状态.

  • suppress: 定义路由记录处于抑制状态的时间. 在被抑制状态, 只有来自同一邻居且度量值小于16的路由更新才会被路由器接收, 取代不可达路由.

  • garbage-collect: 定义了一条路由从度量值变为16开始, 直到它从路由表里被删除所经过的时间.

RIP协议从相邻路由器获得路由更新, 可能出现路由环路. RIP协议定义了一些机制防止路由环路的产生:

  • 计数到无穷: 在路由环路发生时, 某条路由的度量值将被设置为16, 该路由被认为不可达.

  • 水平分割: 路由器从某个接口获得路由规则, 不会返回给相同接口上的相邻路由器.

  • 毒性逆转: 路由器从某个接口获得路由规则, 将度量设为16再返回对方. 用以删除对方路由表中的无用信息.

  • 触发更新: 一旦某条路由发生了变化立即触发更新, 不等待update计时器归零.

RIP协议有RIP-1和RIP-2两个版本. RIP-1是一个类别路由协议, 其报文无法携带掩码信息只能根据分类识别网络号, 且只能使用广播的方式通信.

RIP-2是一个无分类路由协议, 它加入一些新的支持:

  • 支持路由标记, 可根据路由标记决定路由

  • 报文中包含自定义掩码, 支持CIDR

  • 支持指定下一跳地址

  • 支持广播和组播(多播)的方式发送更新报文

  • 支持对协议报文进行验证

OSPF协议

开放最短路径协议(Open Shortest Path First, OSPF)是一种开放的基于链路状态的内部网关协议.

与RIP协议不同, OSPF协议将链路的状态(拥塞程度)而非跳数作为路由选择的度量. 这样允许数据报绕过拥塞的节点, 尽管跳数增加但时间减少.

使用OSPF协议路由器会使用洪泛法向自治系统内其它所有路由器发送链路状态信息. 所谓链路状态信息是指路由器及其相邻路由器之间链路的拥塞程度等信息.

OSPF使用IP数据报代替了RIP协议使用的UDP数据报. OSPF数据报通常较短, 不需要分片发送.

各路由器频繁的交换信息使得每个路由器都可以建立起区域内的链路状态数据库. 该数据库是一个链路状态拓扑图, 路由器可以使用最短路径算法决定将数据报下一跳路由器.

在链路状态发生改变时路由器会立即发送更新信息, 而非按照固定时间间隔发送. 该机制保证了区域内所有路由器的链路状态数据库保持一致.

为了使得OSPF协议适用于更大的范围, OSPF协议将自治系统划分为多个区域(area), 每个区域都有一个id作为唯一标识.

每个区域都和一个称为主干区域的上层区域相连, 主干区域的编号为0.0.0.0.

OSPF定义了4种路由器类型, 一台路由器可能同时属于多个类型:

  • 内部路由器(Internal Router):如果一台路由器上所有启用了OSPF的接口都在同一区域, 那么这台路由器就是内部路由器, 如Router1

  • 骨干路由器(Backbone Router): 骨干路由器是指至少有一个启用了OSPF的接口是和骨干区域(Area 0)相连的路由器, 如Router3, Router5, Router6

  • 区域边界路由器(Area Border Router, ABR):区域边界路由器是指连接一个或者多个区域的路由器,如Router3, Router7.

    区域边界路由器为每一个与之相连的区域维护一份链路状态数据库, 因此区域边界路由器需要比内部路由器更多的内存资源和更高性能的处理器.

  • 自治系统边界路由器(Autonomous System Boundary Router, ASBR): 如Router6

每个路由器只需要了解自己所在区域内的链路状态信息, 更新状态信息也只需要在本区域内用洪泛法发送.

如果到同一个目的网络有多条相同代价的路径, 那么可以将通信量分配给这几条路径, 该机制称为多路径间的负载平衡.

OSPF定义了以下5种协议数据包类型:

  • Hello包HELLO

  • 数据库描述包(DataBase Description, DBD)

  • 链路状态请求包(Link State Request, LSR)

  • 链路状态更新包(Link State Update, LSU)

  • 链路状态确认包(Link State Acknowledgement, LSAck)

OSPF链路状态数据库中一条记录被称为链路状态通告(Link-state Advertisement, LSA). OSPF路由器同步数据库时也是通过LSA来描述链路状态的.

两台使用OSPF协议的路由器同步链路状态包括3个步骤: 确认可达, 同步数据库, 链路状态变化后重新同步.

路由器将会先发出不包含邻居字段的空Hello包, 当收到邻接路由器的Hello包之后, 将对方的路由器标识放入本机的Hello包中进行组播, 这种包含邻居字段的包, 也被称为HelloSeen包.

当两个路由器互相收到HelloSeen包之后, 他们将会开始互相发送空数据库描述包, 空数据库描述包被用来进行主从关系的确定. 通常以路由标识较大的为Master.

当主从关系确立之后, 从机将会使用主机的序号向主机发送第一个包含LSA头部信息的数据库描述包. 主机将会在收到从机的数据库描述包之后发送自己的序号加一的数据库描述包, 作为对于从机的收到确认.

在这样的交互过程中, 只有主机可以更改序号(DD sequence number), 从机使用主机序号.

在交换数据库描述包之后, 路由器便知道其自身链路状态数据库缺少哪些LSA, 以及哪些LSA是过期的. 这时就可以发送链路状态请求包(LSR)来请求对方发送缺少的LSA和最新的LSA.

LSA的洪泛就是由此类型的包实现的. 每一个链路状态更新包可能包含多条LSA信息. 这里的LSA信息是完整的, 而不像数据库描述包只包含LSA的头部信息.

为了确保LSA的洪泛是可靠的, LSA信息必须通过LSAck包被显式的确认.

BGP协议

边界网关协议(Border Gateway Protocol, BGP)是一个广泛应用的外部网关协议. BGP协议经历了多个版本, 目前比较常用的是2016年发布的BGP4协议.

BGP协议作为外部网关协议其处理的是自治系统之间的路由. BGP协议要求每一个自治系统都要指定一台路由器作为其代表, 即所谓BGP发言人(BGP Speaker).通常BGP发言人由自治系统边界路由器充当.

BGP发言人之间采用TCP连接(默认端口179)来交换路由信息,  并支持CIDR. 自治系统AS2的BGP发言人可以通知上层网络的BGP发言人, 经由本区域可以到达AS4和AS5; 主干网络的BGP发言人也可以通知AS2的发言人, 可以经由AS3到达AS6和AS7.

BGP协议启动时发言人之间会交换整个路由表, 运行过程只通知发生变化的路由.

BGP协议定义了4种报文:

  • 打开(OPEN)报文, 用来与相邻的另一个BGP发言人建立关系.

  • 更新(UPDATE)报文, 用来发送某一路由的信息, 以及列出要撤消的多条路由.

  • 保持连接(KEEPALIVE)报文, 用来确认打开报文和周期性地证实邻站关系.

  • 通知(NOTIFICATION)报文, 用来发送检测到的差错.

posted @ 2016-11-20 15:29  -Finley-  阅读(675)  评论(0编辑  收藏  举报