TCP/IP协议详解卷一:Chapter10 笔记

TCP/IP协议详解卷一:Chapter10 笔记

  • Chapter 10 动态选路协议
    • 10.2节 动态选路
    • 10.4节 RIP:选路信息协议
    • 10.5节 RIP版本2
    • 10.6节 OSPF:开放最短路径优先
    • 10.7节 BGP:边界网关协议
    • 10.8节 CIDR:无类型域间选路

Chapter 10 动态选路协议

选路信息协议 = Routing Information Protocol = RIP
开放式最短路径优先 = Open Shortest Path First = OSPF
边界网关协议 = Border Gateway Protocol = BGP
无分类域间选路 = Classless Inter-Domain Routing = CIDR

10.2节 动态选路

动态选路是指相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络。路由器上的路由守护程序routing daemon)运行选路协议,根据从相邻路由器接收到的信息,动态地增加或删除路由表中的信息。Unix系统中常见的路由守护程序包括routedgated

Internet是以一组自治系统(Autonomous System)的方式组织的,每个自治系统通常由单个实体管理。每个自治系统可以选择该自治系统中各个路由器之间的选路协议。我们将其称之为内部网关协议Interior gateway protocol, IGP)或域内选路协议(Intradomain routing protocol),其中包括选路信息协议RIP开放最短路径优先OSPF协议。

外部网关协议Exterior gateway protocol, EGP)或域内选路协议的分隔选路协议用于不同自治系统之间的路由器。边界网关协议BGP意在取代EGP。

10.4节 RIP:选路信息协议

RIP是最广为使用的选路协议。RIP报文包含在UDP数据报中。使用IP地址时的RIP版本1报文格式如下:

RIP报文 = 1字节命令(1-6)+ 1字节版本(=1)+ 2字节(置0)
+ 2字节地址系列(=2)+ 2字节(置0)+ 32位IP地址 + 8字节(置0)+ 4字节度量(1-16)
+ 最多24个另外的路由(与前20字节格式相同)

其中:
命令字段为1表示请求2表示应答,3和4已舍弃不用,两个非正式命令5和6分别表示轮询和轮询表项。请求表示要求其他系统发送其全部或部分路由表,应答则包含发送者全部或部分路由表。
版本字段通常为1。第二版RIP设置为2。
紧跟在后面的20字节指定地址系列(address family)、IP地址以及相应的度量。对于IP地址而言,地址系列字段的值为2。RIP的度量是以跳计数的。
采用这种20字节格式的RIP报文可以通告多达25条路由。上限25是用来保证RIP报文的总长度为 20 × 25 + 4 = 504 20×25 + 4 = 504 20×25+4=504,小于512字节。为了发送整个路由表,通常需要多个报文。

RIP常用的UDP端口号是520。采用RIP协议的routed程序正常运行的逻辑如下:

  • 初始化:判断启动了哪些接口,在每个接口上发送一个请求报文(通常以广播形式发送),要求其他路由器发送完整路由表。这种报文的命令字段为1,地址系列字段为0,度量字段为16
  • 接收到请求:根据请求将完整或部分的路由表发送给请求者。
  • 接收到响应:使响应生效,可能会更新路由表。
  • 定期选路更新:每过30秒,所有或部分路由器都会将其完整的路由表发送给相邻路由器。
  • 触发更新:每当一条路由的度量发生变化时,发送更新那些发生变化的表项。

如果运行RIP的系统发现一条路由在3分钟内未更新,就将该路由的度量设置成无穷大(即16),并标注为删除。再过60秒,将从本地路由表中删除该路由,以保证该路由的失效已被传播开。

度量
RIP所使用的度量是以跳(hop)计算的。所有直接连接接口的跳数为1。如果在某个自治系统内从一个路由器到一个网络有多条路由,那么路由器将选择跳数最小的路由,而忽略其他路由。
跳数的最大值是15,这意味着RIP只能用在主机间最大跳数值为15的自治系统内。度量为16表示到无路由到达该IP地址。

RIP协议的缺陷

  1. RIP没有子网地址的概念。如果标准的B类地址中16 bit的主机号不为0,那么RIP无法区分非零部分是一个子网号还是一个主机地址。
  2. 在路由器或链路发生故障后,需要很长的一段时间才能稳定下来(通常需要几分钟)。在这段建立时间里,可能会发生路由环路
  3. 度量最大值为15则限制了可以使用RIP的网络的大小。

一个例子
使用 ripquery -n netb 命令获取下一站路由器netb的选路信息。metric 1 表示度量为1。
TCP/IP协议详解卷一:Chapter10 笔记_第1张图片
运行ripquery程序的tcpdump输出结果。使用 -i s10 指定SLIP接口。rip-poll 表示一个非正式请求(轮询命令,命令字段为5)。rip-req 表示一个常规RIP请求。
TCP/IP协议详解卷一:Chapter10 笔记_第2张图片

10.5节 RIP版本2

RIP-2利用版本1中的置0字段传递一些额外信息,其报文格式如下:

RIP报文 = 1字节命令(1-6)+ 1字节版本(=2)+ 2字节路由域 + 2字节地址系列(=2)+ 2字节路由标记 + 32位IP地址 + 32位子网掩码 + 32位下一站IP地址 + 4字节度量(1-16)+ 最多24个另外的路由(与前20字节格式相同)

路由域(routing domain)是一个路由守护程序的标识符,指出了数据报的所有者。在一个Unix实现中,它可以是选路守护程序的进程号。该域允许管理者在单个路由器上运行多个RIP实例,每个实例在一个路由域内运行。选路标记(routing tag)是为了支持外部网关协议而存在的。它携带着一个EGP和BGP的自治系统号。
每个表项的子网掩码应用于相应的IP地址上。下一站IP地址指明发往目的IP地址的报文该发往哪里。该字段为0意味着发往目的地址的报文应该发给发送RIP报文的系统。
RIP-2除支持广播外,还支持多播

10.6节 OSPF:开放最短路径优先

与采用距离向量(跳数)的RIP协议不同的是, OSPF是一个链路状态协议

在一个链路状态协议中,路由器并不与其邻站交换距离信息。它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这些信息发送给它的其他邻站,而邻站将这些信息在自治系统中传播出去。每个路由器接收这些链路状态信息,并建立起完整的路由表。从实际角度来看,二者的不同点是链路状态协议总是比距离向量协议收敛更快(路由发生变化后稳定下来)。

OSPF直接使用IP,并不使用UDP或TCP。对于IP首部的protocol协议字段,OSPF有其自己的值。OSPF相对于RIP协议的主要优点包括:

  1. OSPF可以对每个IP服务类型计算各自的路由集。
  2. 给每个接口指派一个无维数的费用。
  3. 当对同一个目的地址存在着多个相同费用的路由时,OSPF在这些路由上平均分配流量。
  4. OSPF支持子网:子网掩码与每个通告路由相连。
  5. 路由器之间的点对点链路不需要每端都有一个IP地址,因此可以节省IP地址。
  6. 采用了一种简单鉴别机制。
  7. OSPF采用多播,而不是广播形式,以减少不参与OSPF的系统负载。

10.7节 BGP:边界网关协议

BGP是一种不同自治系统的路由器之间进行通信的外部网关协议。RFC 1267和RFC 1268对BGP进行了描述。

BGP系统与其他BGP系统之间交换网络可到达信息。这些信息包括数据到达这些网络所必须经过的自治系统AS中的所有路径。这些信息足以构造一幅自治系统连接图。然后,可以根据连接图删除选路环,制订选路策略。

我们将一个自治系统中的IP数据报分成本地流量通过流量。在自治系统中,本地流量是起始或终止于该自治系统的流量。其信源IP地址或信宿IP地址所指定的主机位于该自治系统中。其他的流量则称为通过流量。在Internet中使用BGP的一个目的就是减少通过流量。

可以将自治系统分为以下几种类型:

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

因此,可以将Internet的总拓扑结构看成是由一些残桩自治系统、多接口自治系统以及转送自治系统的任意互连。残桩自治系统和多接口自治系统不需要使用BGP——它们通过运行EGP在自治系统之间交换可到达信息。

BGP允许使用基于策略的选路。BGP与RIP和OSPF的不同之处在于BGP使用TCP作为其传输层协议。BGP是一个距离向量协议,但是与(通告到目的地址跳数的) RIP不同的是,BGP列举了到每个目的地址的路由(自治系统到达目的地址的序列号)。BGP通过定期发送keepalive报文给其邻站来检测TCP连接对端的链路或主机失败。两个报文之间的时间间隔建议值为30秒。

10.8节 CIDR:无类型域间选路

由于B类地址的缺乏,因此现在的多个网络站点只能采用多个C类网络号,而不采用单个B类网络号。尽管分配这些C类地址解决了一个问题( B类地址的缺乏),但它却带来了另一个问题:每个C类网络都需要一个路由表表项。无类型域间选路( CIDR)是一个防止Internet路由表膨胀的方法,它也称为超网supernetting)。

CIDR的基本观点是采用一种分配多个IP地址的方式,使其能够将路由表中的许多表项总和(summarization)成更少的数目。例如,如果给单个站点分配16个C类地址,以一种可以用总和的方式来分配这16个地址,这样,所有这16个地址可以参照Internet上的单个路由表表项。

要使用这种总和,必须满足以下三种特性:

  1. 为进行选路要对多个IP地址进行总和时,这些IP地址必须具有相同的高位地址比特。
  2. 路由表和选路算法必须扩展成根据32 bit IP地址和32 bit掩码做出选路决策。
  3. 必须扩展选路协议使其除了32 bit地址外,还要有32 bit掩码。OSPF和RIP-2都能够携带第4版BGP所提出的32 bit掩码。

CIDR同时还使用一种技术,使最佳匹配总是最长的匹配:即在32 bit掩码中,它具有最大值。“无类型”的意思是现在的选路决策是基于整个32 bit IP地址的掩码操作,而不管其IP地址是A类、B类或是C类。

你可能感兴趣的:(读书笔记)