一篇文章带你搞懂网络层(网际层)-- 协议篇

在前一篇文章一篇文章带你搞懂网络层(网际层)-- 地址篇我们已经详细讨论了地址以及IP协议的内容,但是仅仅知道地址完成主机到主机之间的数据传输还是不够的,路由到底如何选择转发接口?路由表怎么建立?多播是撒?他是怎么工作的?下面我们就讨论这些问题。

在前一篇文章中一篇文章带你搞懂网络层(网际层)-- 协议篇我们已经详细的讨论了IP地址及其IPv4、IPv6及其IP协议,接下来我们就来讨论与路由转发、路由选择相关的协议。

4、网际控制报文协议ICMP

为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。ICMP 是互联网的标准协议。ICMP 允许主机或路由器报告差错情况和提供有关异常情况报告。但 ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议。

图 ICMP报文格式

ICMP 报文的种类有两种,即 ICMP 差错报告报文ICMP 询问报文。 ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型代码检验和。ICMP 报文接着的 4 个字节的内容与 ICMP 的类型有关。

  • 终点不可达:不能交付
  • 时间超过:TTL减到0
  • 参数问题:首部字段有问题
  • 改变路由(重定向)(Redirect) :好让主机下次把数据报发给其它更合适的路由器
差错报文

图 ICMP 差错报告报文的数据字段的内容

  • IP数据报1-4字节:端口号(对TCP和UDP)
  • IP数据报4-8字节:发送序号(对TCP)

对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。对具有多播地址的数据报都不发送 ICMP 差错报告报文。对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。

询问报文

回送请求和回送回答报文:用于测试是否可达,及了解有关状态。时间戳请求和时间戳回答报文:用于时钟同步和时间测量。下面的几种 ICMP 报文不再使用:

  • 信息请求与回答报文
  • 掩码地址请求和回答报文
  • 路由器询问和通告报文
  • 源点抑制报文

5、路由选择协议

5.1 有关路由选择协议的几个基本概念

理想的路由算法
  • 算法必须是正确的和完整的。
  • 算法在计算上应简单。
  • 算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。
  • 算法应具有稳定性。
  • 算法应是公平的。
  • 算法应是最佳的。

但是实际上不存在一种绝对的最佳路由算法。所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已 。实际的路由选择算法,应尽可能接近于理想的算法。 路由选择是个非常复杂的问题它是网络中的所有结点共同协调工作的结果。路由选择的环境往往是不断变化的,而这种变化有时无法事先知道。 于是常见的路由协议分为两种:

  • 静态路由选择策略——即非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。
  • 动态路由选择策略——即自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。

当前互联网采用分层次的路由选择协议。这是因为:

  • 互联网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使互联网的通信链路饱和。
  • 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。
自治系统 AS(Autonomous System)

自治系统 AS 的定义:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。

现在对自治系统 AS 的定义是强调下面的事实:尽管一个 AS 使用了多种内部路由选择协议和度量,但重要的是一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。

图 ICMP 差错报告报文的数据字段的内容

互联网有两大类路由选择协议

基于自治系统,我们就能够将常见的路由协议划分为如下两种:

  • 内部网关协议 IGP (Interior Gateway Protocol)
    在一个自治系统内部使用的路由选择协议。目前这类路由选择协议使用得最多,如 RIP 和 OSPF 协议。

  • 外部网关协议 EGP (External Gateway Protocol)
    若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP。在外部网关协议中目前使用最多的是 BGP-4。

说明:互联网的早期 RFC 文档中未使用“路由器”而是使用“网关”这一名词。但是在新的 RFC 文档中又使用了“路由器”这一名词。应当把这两个术语当作同义词。

IGP 和 EGP 是协议类别的名称。但 RFC 在使用 EGP 这个名词时出现了一点混乱,因为最早的一个外部网关协议的协议名字正好也是 EGP。因此在遇到名词 EGP 时,应弄清它是指旧的协议 EGP 还是指外部网关协议 EGP 这个类别。

接下来我们将逐一了解这些协议: 内部网关协议RIP、OSPF、 外部网关协议BGP.

5.2 内部网关协议 RIP

工作原理

RIP 是一种分布式的、基于距离向量的路由选择协议.RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。 其理论依据是Bellman-Ford 算法(或 Ford-Fulkerson 算法)

“距离”的定义
  • 从一个路由器到直接连接的网络的距离定义为 1。

  • 从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。

  • RIP 协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加 1。这里的“距离”实际上指的是“最短距离”。

  • RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。

  • RIP 允许一条路径只能包含最多15 个路由器。

  • “距离”的最大值为 16 时即相当于不可达。可见 RIP 只适用于小型互联网。
    RIP 不能在两个网络之间同时使用多条路由。RIP 选择一个经过最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。

路由表的构建
  • 路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为 1)。它的路由表是空的。
  • 以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
  • 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。

RIP 协议的收敛 (convergence) 过程较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程。 在交换过程中需要注意以下几点:

  • (1) 仅和相邻路由器交换信息。
  • (2) 交换的信息是当前本路由器所知道的全部路由信息,即自己的整个路由表。
  • (3) 按固定时间间隔交换路由信息,例如,每隔 30 秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。

图 交换得到的路由表

在此之后转发信息就能够查询路由表得到,而且每次的转发都是经过路由数量最少的路径。

距离向量算法

路由器收到相邻路由器(其地址为 X)的一个 RIP 报文:

  1. 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。

  2. 对修改后的 RIP 报文中的每一个项目,重复以下步骤:

    • 若项目中的目的网络不在路由表中,则把该项目加到路由表中。(无中生有)
    • 若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目。(以新换旧)
    • 若收到项目中的距离小于路由表中的距离,则进行更新(以小换大
    • 否则,什么也不做。
  3. 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(表示不可达)。

  4. 返回。

图 路由更新

RIP 协议的报文格式

图 RIP 协议的报文格式

RIP2 报文由首部和路由部分组成。RIP2 报文中的路由部分由若干个路由信息组成。每个路由信息需要用 20 个字节。地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。路由标记填入自治系统的号码,这是考虑使 RIP 有可能收到本自治系统以外的路由选择信息。再后面指出某个网络地址、该网络的子网掩码、下一跳路由器地址以及到此网络的距离。

一个 RIP 报文最多可包括 25 个路由,因而 RIP 报文的最大长度是 4 + 20 * 25 = 504 字节。如超过,必须再用一个 RIP 报文来传送。

RIP2 具有简单的鉴别功能。若使用鉴别功能,则将原来写入第一个路由信息的位置(20 个字节)用作鉴别。在鉴别数据之后才写入路由信息,但这时最多只能再放入 24 个路由信息。

好消息传递快,坏消息传递慢?Why ?

RIP 协议特点:好消息传播得快,坏消息传播得慢。RIP 存在的一个问题:当网络出现故障时,要经过比较长的时间 (例如数分钟) 才能将此信息传送到所有的路由器。

图 正常情况

图 网1出现故障,演示坏消息传递慢

  • 起初R1 说:“我到网 1 的距离是 16 (表示无法到达),是直接交付。”但 R2 在收到 R1 的更新报文之前,还发送原来的报文,因为这时 R2 并不知道 R1 出了故障。
  • R1 收到 R2 的更新报文后,误认为可经过 R2 到达网 1,于是更新自己的路由表,说:“我到网 1 的距离是 3,下一跳经过 R2”。然后将此更新信息发送给 R2。R2 以后又更新自己的路由表为“1, 4, R1”,表明 “我到网 1 距离是 4,下一跳经过 R1”。
  • 这样不断更新下去,直到 R1 和 R2 到网 1 的距离都增大到 16 时,R1 和 R2 才知道网 1 是不可达的。 这就是坏消息传递慢的原因。
RIP 协议的优缺点
  • 优点:
    • 实现简单,开销较小。
  • 缺点:
    • RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
    • 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
    • “坏消息传播得慢”,使更新过程的收敛时间过长。

5.3 内部网关协议 OSPF

开放最短路径优先 OSPF (Open Shortest Path First)是为克服 RIP 的缺点在 1989 年开发出来的。OSPF 的原理很简单,但实现起来却较复杂。

“开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。“最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法 SPF。采用分布式的链路状态协议 (link state protocol)。 注意:OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。

向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。发送的信息是本路由器所有相邻路由器的链路状态,但这只是路由器所知道的部分路由信息。
“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。 由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。

OSPF 的更新过程收敛得快是其重要优点。为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫做区域。每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。区域也不能太大,在一个区域内的路由器最好不超过 200 个。

图 OSPF 划分为两种不同的区域

划分区域

划分区域的好处:将利用洪泛法所交换的链路状态信息的范围,局限于一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器中,其路由表中只包含本区域的完整网络拓扑,而不知道其他区域的网络拓扑情况。OSPF 使用层次结构的区域划分。在上层的区域叫做主干区域 (backbone area)。主干区域的作用是用来连通其他在下层的区域。 主干区域的标识符规定为:0.0.0.0。

OSPF 分组

OSPF 不用 UDP 而是直接用 IP 数据报传送。OSPF 构成的数据报很短。这样做可减少路由信息的通信量。

数据报很短的另一好处是可以不必将长的数据报分片传送。但分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。 OSPF 对不同的链路可根据 IP 分组的不同服务类型 TOS 而设置成不同的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由。如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫做多路径间的负载平衡。

所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。支持可变长度的子网划分和无分类编址 CIDR。每一个链路状态都带上一个 32 位的序号,序号越大状态就越新。

图 OSPF 数据报格式

简单介绍一下各个字段的含义:

  • 版本: 当前的版本号是2。
  • 类型: 可以是五种类型分组中的一-种。
  • 分组长度: 包括OSPF首部在内的分组长度,以字节为单位。
  • 路由器标识符: 标志发送该分组的路由器的接口的IP地址。
  • 区域标识符 :分组属于的区域的标识符。
  • 检验和: 用来检测分组中的差错。
  • 鉴别类型: 目前只有两种,0 (不用)和1 (口令)。
  • 鉴别: 鉴别类型为0时就填入0,鉴别类型为1则填入8个字符的口令。
OSPF分组类型及其基本操作

当一个路由器刚开始工作时,它只能通过问候分组得知它有哪些相邻的路由器在工作,以及将数据发往相邻路由器所需的“代价”。如果所有的路由器都把自己的本地链路状态信息对全网进行广播,那么各路由器只要将这些链路状态信息综合起来就可得出链路状态数据库。但这样做开销太大,因此OSPF采用下面的办法。

OSPF让每一个路由器用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息

摘要信息主要就是指出有哪些路由器的链路状态信息(以及其序号)已经写入了数据库。经过与相邻路由器交换数据库描述分组后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。通过一系列的这种分组交换, 全网同步的链路数据库就建立了。在转换过程中使用到的各种类型的分组如下:

  • 类型1: 问候 (Hello) 分组。
  • 类型2: 数据库描述 (Database Description) 分组。
  • 类型3: 链路状态请求 (Link State Request) 分组。
  • 类型4: 链路状态更新 (Link State Update) 分组,用洪泛法对全网更新链路状态。
  • 类型5: 链路状态确认 (Link State Acknowledgment)分组。

交换过程如下,在相邻路由的情况下不断的交换信息,就能够完成全局数据网络的构建。

图 OSPF 数据报格式

OSPF协议我们就简单介绍到这里,不过回顾一下,OSPF有哪几种减少发送信息,减少带宽消耗的操作?

  1. 划分区域,只在区域内交换信息。
  2. 交换链路摘要信息而不是交换整个数据。
  3. 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。而不是定时交换信息。

5.4 外部网关协议 BGP

在了解BGP协议之前,我们脑海中应该有这样的网络结构:一个大网络被划分为小的网络,这样的小的网络我们能够进行数据的传输(重点是解决路由表过大的问题,网络较小 就不存在这个问题,所以说可以进行数据传输),在这样的小的网络中进行数据传输,构建路由表就能够使用RIP(理解为点对点,实际是点对点交换信息的方式)或者OFPS(理解为广播,实际是洪范交换信息方式),但是非常明显的就是两个小的网络之间怎么交换信息呢?BGP 是不同自治系统的路由器之间交换路由信息的协议。 在又来上述的概念之后我们继续看BGP协议。

互联网的规模太大,使得自治系统之间路由选择非常困难。对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。当一条路径通过几个不同 AS 时,要想对这样的路径计算出有意义的代价是不太可能的。比较合理的做法是在 AS 之间交换“可达性”信息。自治系统之间的路由选择必须考虑有关策略。因此,边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。

图 BGP 发言人和自治系统 AS 的关系

BGP 发言人

每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“ BGP 发言人” (BGP speaker) 。一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是 BGP 边界路由器。 (实例见上图)

BGP 交换路由信息

一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息。

  • 使用 TCP 连接能提供可靠的服务,也简化了路由选择协议。
  • 使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此成为对方的邻站(neighbor)或对等站(peer) 。
BGP 协议的特点
  • BGP 协议交换路由信息的结点数量级是自治系统数的量级,这要比这些自治系统中的网络数少很多。每一个自治系统中 BGP 发言人(或边界路由器)的数目是很少的。这样就使得自治系统之间的路由选择不致过分复杂。
  • BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
  • 在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表(理解为点对点)。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
BGP 报文
  • 打开 (OPEN) 报文 与相邻的另一个BGP发言人建立关系,初始化通信。
  • 更新 (UPDATE) 报文 发送某一路由的信息,以及列出要撤消的多条路由。
  • 保活 (KEEPALIVE) 报文 确认打开报文和周期性地证实邻站的连通性。
  • 通知 (NOTIFICATION) 报文 发送检测到的差错。
BGP 报文格式

图 BGP 发言人和自治系统 AS 的关系

字段的见简单解释:

  • 标记:对BGP报文做出鉴别,不用时为全1
  • 长度:整个BGP报文的长度(19~4096字节)
  • 类型:指出四中报文中的哪一种
BGP 协议的理解

图 在BGP的角度看到网络结构

看到上图我们因该可以很快的联想到路由器的分组转发,我们做如下的对比:

路由转发 BGP转发
转发 路由器 AS自治系统
转发的出口 路由器的接口 BGP发言人(类似与路由器的接口)
转发算法 RIP相邻转发构建路由表,OSPF洪范转发构建路由表 相邻AS间转发构建路由表

看到这不知道是不是有这种感觉:同样的问题,反复出现,面向的场景不一样使用协议就不一样。比如RIP与OSPF就与数据链路层中的PPP协议与以太网协议类似,一个是点对点(相邻的)交换信息,一个是多点之间的交换信息;又比如RIP与BGP类似,都是相邻间传播信息,构建路由,都能完成数据的转发但是面向的网络大小不一样。

6、IP多播

6.1 基本概念

IP 多播 (multicast,以前曾译为组播) 已成为互联网的一个热门课题。其目的是为了更好地支持一对多通信。也就是一对多通信:一个源点发送到许多个终点。
应用场景:

  • 实时信息的交付(如新闻、股市行情等)
  • 软件更新
  • 交互式会议
  • 多媒体通信

图 单2播通信的情况

图 多播通信的情况

从上面两个图中我们就能明显的看出多播的好处:节省网络带宽。

IP 多播

在互联网上进行多播就叫做 IP 多播。互联网范围的多播要靠路由器来实现。能够运行多播协议的路由器称为多播路由器(multicast router)。当然它也可以转发普通的单播IP数据报。从 1992 年起,在互联网上开始试验虚拟的多播主干网 BONE (Multicast Backbone On the InterNEt)。 现在多播主干网已经有了相当大的规模。

多播 IP 地址

每个多播组都有一个多播标识符用于进行唯一定位。多播数据报将多播标识符作为目标地址。多播组的标识符就是 IP 地址中的 D 类地址(多播地址)。每一个 D 类地址标志一个多播组。多播地址只能用于目的地址,不能用于源地址。

多播数据报

多播数据报和一般的 IP 数据报的区别是:它使用 D 类 IP 地址作为目的地址
首部中的协议字段值是 2,表明使用网际组管理协议 IGMP。多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。对多播数据报不产生 ICMP 差错报文。

6.2 硬件多播

多播分为局域网范围的多播互联网范围的多播。后者要用到前者。

  • 多播MAC地址:互联网号码指派管理局 IANA 拥有的以太网地址块的高 24 位为 00-00-5E,多播MAC地址的第一字节的最低位为1,故TCP/IP 协议使用的以太网多播地址块的范围是从 01 00 5 E 00 00 00 01-00-5E-00-00-00 01 00 5 E 7 F F F F F 01-00-5E-7F-FF-FF 可见,在每一个地址中,只有(最后)23位可用作多播。
  • 多播IP地址.D 类 IP 地址可供分配的有 28 位,其中前 5 位不能用来构成以太网硬件地址。

图 多播通信的情况

  • 两次匹配(软件匹配+硬件匹配=次低5位+最低23位
  • 网络适配器硬件对以太网多播地址进行匹配。
  • 由于多播 IP 地址与以太网硬件地址的映射关系不是唯一的。因此收到多播数据报的主机,还要在网络层利用 IP 层软件对IP多播地址进行过滤,把不是本主机要接收的数据报丢弃。

6.3 IGMP 网络组管理协议

和 ICMP 相似,IGMP 使用 IP 数据报传递其报文(即以IGMP作为数据部分,加上 IP 首部,构成 IP 数据报),但它也向 IP 提供服务。因此,我们不把 IGMP 看成是一个单独的协议,而是属于整个网际协议 IP 的一个组成部分。

IP多播的实现需要两种协议,一个是对组员进行管理、了解组员信息的网际组管理协议(IGMP)。显然,仅有IGMP协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议

IGMP 工作可分为两个阶段
  • 第一阶段:加入多播组。
    当某个主机加入新的多播组时,该主机应向多播组的多播地址发送 IGMP 报文,声明要成为该组成员。在收到 IGMP 报文后,本地多播路由器向互联网上的其他多播路由器转发组成员关系。
  • 第二阶段:探询组成员变化情况。
    因为组成员关系是动态的,因此本地多播路由器要周期性探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。
IGMP 避免增加大量开销的措施

在主机和多播路由器之间的所有通信都是使用 IP 多播。当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中一个来探询主机的成员关系。 多播路由器在探询组成员关系时,只需要对所有多播组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文。默认的询问速率是每 125 秒发送一次。

每次询问,同一组内,只有一个成员响应:在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10 秒)。每个收到询问的组成员等待一个0 到 N 之间的随机时间,对应于最小多播组响应时延的主机发出响应。同一个组内的每一个主机都要监听响应,只要有本组的某个主机发送了响应,自己就可以不再发送响应了。

多播路由选择

一个多播组中的成员是动态变化的,随时会有主机动态加入或离开这个多播组。
路由选择实际上就是要找出以源主机为根结点的转发树。在多播转发树上的路由器不会收到重复的多播数据报。不同多播组,有不同的多播转发树。同一多播组,不同源点,也会有不同的播转发树。

多播路由选择协议尚未标准化。多播路由选择协议在转发多播数据报时使用了三种方法:

  • (1) 洪泛与剪除
  • (2) 隧道技术 (tunneling)
  • (3) 基于核心的发现技术
洪泛与剪除

这种方法适合于较小多播组、所有组成员接入的局域网相邻接的情况。一开始,路由器使用洪泛的方法(就是一种广播方式)转发多播数据报。为了避免兜圈子,采用了叫做反向路径广播 RPB (Reverse Path Broadcasting) 的策略。

RPB 的要点

路由器收到多播数据报时,先检查它是否是从源点经最短路径传送来的:

  • 若是,就向所有其他方向转发刚才收到的多播数据报(但进入的方向除外);否则,就丢弃而不转发。
  • 如果存在几条同样长度的最短路径,那么只能选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的 IP 地址最小。
  • 最终得出多播转发树,以后就按其转发多播数据报。

这种方法避免了多播数据报兜圈子,并避免了路由器收到重复的多播数据报。如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组的成员,就应把它和下游的树枝一起剪除。当某个树枝有新增加的组成员时,可以再接入到多播转发树上。

图 BMP协议实例

隧道技术(tunneling)

隧道技术适用于多播组的位置在地理上很分散的情况。例如下图中网1和网2都支持多播。现在网1中的主机向网2中的一些主机进行多播。但路由器R1和R2之间的网络并不支持多播,因而R1和R2不能按多播地址转发数据报。为此,路由器R1就对多播数据报进行再次封装,即再加上普通数据报首部,使之成为向单一
目的站发送的单播(unicast)数据报,然后通过“隧道”(tunnel)从R1发送到R2。单播数据报到达路由器R2后,再由路由器R2剥去其首部,使它又恢复成原来的多播数据报,继续向多个目的站转发。

图 隧道技术实例

基于核心的发现技术

适用于多播组的大小在较大范围内变化的情况。
方法:对每一个多播组指定一个核心(core) 路由器,给出它的 IP 单播地址。按照前面讲过的方法,创建出核心路由器对应于该多播组的转发树。多播路由器在收到加入组的请求分组后,将该信息加入到路由中, 从而将多播转发树的覆盖范围由核心路由器不断向外扩大。

7、网络地址转换 NAT

本地地址与全球地址

由于 IP 地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。假定在一个机构内部的计算机通信也是采用 TCP/IP 协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其 IP 地址。

  • 本地(专用)地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
  • 全球(唯一)地址——全球唯一的 IP 地址,必须向互联网的管理机构申请。

采用这样的专用 IP 地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫做专用网。因为这些专用地址仅在本机构内部使用。专用IP地址也叫做可重用地址 (reusable address)。

7.1 网络地址转换 NAT

在专用网上使用专用地址的主机如何与互联网上的主机通信?

  • (1) 所有的主机申请全球 IP 地址。但这在很多情况下是不容易做到的。
  • (2)采用网络地址转换 NAT。这是目前使用得最多的方法。

需要在专用网连接到互联网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球IP地址。所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。

图 NAT 路由器的工作原理

内部主机 A 用本地地址 IPA 和互联网上主机 B 通信所发送的数据报必须经过 NAT 路由器。NAT 路由器将数据报的源地址 IPA 转换成全球地址 IPG,并把转换结果记录到NAT地址转换表中,目的地址 IPB 保持不变,然后发送到互联网。NAT 路由器收到主机 B 发回的数据报时,知道数据报中的源地址是 IPB 而目的地址是 IPG。根据 NAT地址转换表,NAT 路由器将目的地址 IPG 转换为 IPA,转发给最终的内部主机 A。 可以看出,在内部主机与外部主机通信时,在NAT路由器上发生了两次地址转换:

  • 离开专用网时:替换源地址,将内部地址替换为全球地址;
  • 进入专用网时:替换目的地址,将全球地址替换为内部地址;

当 NAT 路由器具有 n 个全球 IP 地址时,专用网内最多可以同时有 n 台主机接入到互联网。这样就可以使专用网内较多数量的主机,轮流使用 NAT 路由器有限数量的全球 IP 地址。专用网内部主机不能充当服务器,因为互联网上的客户无法请求专用网内的服务器提供服务。通过 NAT 路由器的通信必须由专用网内的主机发起。

网络地址与端口号转换 NAPT

为了更加有效地利用 NAT 路由器上的全球IP地址,现在常用的 NAT 转换表把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用一个 NAT 路由器上的全球 IP 地址,因而可以同时和互联网上的不同主机进行通信。使用端口号的 NAT 叫做网络地址与端口号转换NAPT (Network Address and Port Translation),而不使用端口号的 NAT 就叫做传统 NAT (traditional NAT)。

NAPT把专用网内不同的源 IP 地址,都转换为相同的全球 IP 地址。但对源主机所采用的 TCP 端口号(不管相同或不同),则转换为不同的新端口号。因此,当 NAPT 路由器收到从互联网发来的应答时,就可以从 IP 数据报的数据部分找出运输层的端口号,然后根据不同的目的端口号,从 NAPT 转换表中找到正确的目的主机。

8、总结

  • TCP/IP体系中的网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络层不提供服务质量的承诺,不保证分组交付的时限,所传送的分组可能出错、丢失、重复和失序进程之间通信的可靠性由运输层负责。
  • IP网是虚拟的,因为从网络层上看,IP网就是一个统一的、抽象的网络(实际上是异构的)。IP层抽象的互联网屏蔽了下层网络很复杂的细节,使我们能够使用统一的、抽象的IP地址处理主机之间的通信问题。
  • 在互联网上的交付有两种:在本网络上的直接交付(不经过路由器)和到其他网络的间接交付(经过至少一个路由器,但最后一次定是直接交付)。
  • 一个IP地址在整个互联网范围内是唯一的。分类的IP地址包括A类B类C类地址(单播地址),以及D类地址(多播地址)E类地址未使用
  • 分类的IP地址由网络号字段(指明网络)主机号字段(指明主机) 组成。网络号字段最前面的类别位指明IP地址的类别。
  • IP地址是一种分等级的地址结构。IP地址管理机构在分配IP地址时只分配网络号,而主机号则由得到该网络号的单位自行分配。路由器仅根据目的主机所连接的网络号来转发分组。
  • IP地址标志一台主机 (或路由器)和一条链路的接口。多归属主机同时连接到两个或更多的网络上。这样的主机同时具有两个或更多的IP 地址,其网络号必须是不同的。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。物理地址(即硬件地址)是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(用软件实现的),在数据链路层看不见数据报的IP 地址。
  • IP数据报分为首部数据两部分。首部的前一部分是固定长度, 共20字节,是所有IP数据报必须具有的(源地址、目的地址、总长度等重要字段都在固定首部中)。 一些长度可变的可选字段放在固定首部的后面。
  • IP首部中的生存时间字段给出了IP 数据报在互联网中所能经过的最大路由器数,可防止IP数据报在互联网中无限制地兜圈子。地址解析协议ARP把IP地址解析为硬件地址,它解决同一个局域网上的主机或路由器的IP 地址和硬件地址的映射问题。ARP的高速缓存可以大大减少网络上的通信量。在互联网中,我们无法仅根据硬件地址寻找到在某个网络上的某台主机。因此,从IP地址到硬件地址的解析是非常必要的。
  • 无分类域间路由选择CIDR是解决目前IP地址紧缺的一个好方法。CIDR记法把IP地址后面加上斜线“/”, 然后写上前缀所占的位数。前缀(或网络前缀)用来指明网络,前缀后面的部分是后缀,用来指明主机。CIDR把前缀都相同的连续的IP地址组成-一个“CIDR地址块”。IP 地址的分配都以CIDR地址块为单位。
  • CIDR的32位地址掩码(或子网掩码)由一串1和一串0组成,而1的个数就是前缀的长度。只要把IP地址和地址掩码逐位进行“逻辑与(AND)”运算,就很容易得出网络地址。A类地址的默认地址掩码是255.0.0.0。B类地址的默认地址掩码是255.255.0.0。C类地址的默认地址掩码是255.255.255.0.路由聚合(把许多前缀相同的地址用一个来代替)有利于减少路由表中的项目,减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
  • 路由聚合(把许多前缀相同的地址用一个来代替)有利于减少路由表中的项目,减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
  • “转发”和“路由选择”有区别。“转发”是单个路由器的动作。“路由选择”是许多路由器共同协作的过程,这些路由器相互交换信息,目的是生成路由表,再从路由表导出转发表。若采用自适应路由选择算法,则当网络拓扑变化时,路由表和转发表都能够自动更新。在许多情况下,可以不考虑转发表和路由表的区别,而都使用路由表这一名词。
  • 自治系统(AS)就是在单一的技术管理下的一组路由器。一个自治系统对其他自治系统表现出的是一个单一的和一致的路由选择策略。
  • 路由选择协议有两大类:内部网关协议(或自治系统内部的路由选择协议),如RIP和OSPF;外部网关协议(或自治系统之间的路由选择协议),如BGP-4。
  • RIP是分布式的基于距离向量的路由选择协议,只适用于小型互联网。RIP按固定的时间间隔与相邻路由器交换信息。交换的信息是自己当前的路由表,即到达本自治,系统中所有网络的(最短)距离,以及到每个网络应经过的下–跳路由器。
  • OSPF是分布式的链路状态协议,适用于大型互联网。OSPF只在链路状态发生变化时,才向本自治系统中的所有路由器,用洪泛法发送与本路由器相邻的所有路由器的链路状态信息。“链路状态”指明本路由器都和哪些路由器相邻,以及该链路的“度量”。“度量”可表示费用、距离、时延、带宽等,可统称为“代价”。所有的路由器最终都能建立一个全网的拓扑结构图。
  • BGP-4是不同AS的路由器之间交换路由信息的协议,是一种路径向量路由选择协议。BGP力求寻找一条能够到达目的网络(可达)且比较好的路由(不兜圈子),而并非要寻找一条最佳路由。.
  • 网际控制报文协议ICMP是IP层的协议。ICMP 报文作为IP数据报的数据,加上首部后组成IP数据报发送出去。使用ICMP并非为了实现可靠传输。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。
  • ICMP的一个重要应用就是分组网间探测PING,用来测试两台主机之间的连通性。PING 使用了ICMP回送请求与回送回答报文。
  • 要解决IP地址耗尽的问题,最根本的办法就是采用具有更大地址空间的新版本的IP协议,即IPv6。
  • IPv6所带来的主要变化是:
    • (1) 更大的地址空间(采用128 位的地址);
    • (2) 灵活的首部格式;
    • (3) 改进的选项;
    • (4) 支持即插即用;
    • (5) 支持资源的预分配;
    • (6) IPv6首部改为8字节对齐。
  • IPv6数据报在基本首部的后面允许有零个或多个扩展首部,再后面是数据。所有的扩展首部和数据合起来叫做数据报的有效载荷或净负荷。
  • IPv6数据报的目的地址可以是以下三种基本类型地址之一:单播多播任播。IPv6的地址使用冒号十六进制记法。
  • 向IPv6过渡只能采用逐步演进的办法,必须使新安装的IPv6系统能够向后兼容。向IPv6过渡可以使用双协议栈或使用隧道技术。.
  • .向IPv6 过渡只能采用逐步 演进的办法,必须使新安装的IPv6系统能够向后兼容。向IPv6过渡可以使用双协议栈或使用隧道技术。
  • 与单播相比,在一对多的通信中, IP 多播可大大节约网络资源。IP 多播使用D类IP地址。IP多播需要使用网际组管理协议IGMP和多播路由选择协议。
  • 使用网络地址转换NAT技术,可以在专用网络内部使用专用IP地址,而仅在连接到互联网的路由器使用全球IP地址。这样就大大节约了宝贵的IP地址。
  • MPLS的特点: (1) 支持面向连接的服务质量; (2) 支持流量工程,平衡网络负载;(3)有效地支持虚拟专用网VPN。MPLS在入口结点给每-一个IP数据报打上固定长度的“标记”,然后根据标记在第二层(链路层)用硬件进行转发(在标记交换路由器中进行标记对换),因而转发速率大大加快。

猜你喜欢

转载自blog.csdn.net/qq_40791129/article/details/106280801