计算机网络笔记整理(四):网络层

来源:互联网 发布:1977特纳里夫空难 知乎 编辑:程序博客网 时间:2024/05/22 07:01

一、网络层提供的两种服务

  1. 虚电路服务
    借助于电信网的成功经验,让网络负责可靠交付。用面向连接的通信方式,当两个计算机进行通信时,应当向建立连接(在分组交换中建立一条虚电路VC(Virtual Circuit)),以保证双方通信所需的一切网络资源,然后双方沿着已建立的虚电路发送分组。这样的分组的首部不需要填写完整的目的主机地址,而只需要填写这条虚电路的编号(一个不大的整数),因而减少了分组的开销。这种通信方式如果再使用可靠传输的网络协议,就可使所发的分组无差错按序到达终点,也不丢失、不重复。在通信结束后要释放建立的虚电路,图1(a)是网络提供虚电路服务的示意图,主机H1和H2之间交换的分组都必须在事先建立的虚电路上传送。

  2. 数据报服务
    考虑到计算机网络的端系统是有智能的计算机,计算机有很强的差错处理能力(不像电信网的终端(电话机)非常简单,无智能和差错处理能力),因此因特网在设计上就采用了和电信网完全不同的思路。网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接,每一个分组(也就是IP数据报)独立发送,与其前后的分组无关(不编号)。网络层不提供服务质量的承诺。所传送的分组可能出错、丢失、重复和失序,也不保证分组交付的时限。由于传输网络不提供端到端的可靠传输服务,这样的好处是路由器做的比较简单而且价格低廉,大大降低了网络的造价,运行方式灵活,能够适应多种应用。图1(b)是网络提供数据报服务的示意图,主机H1向H2发送的分组各自独立地选择路由,而且传送的过程中还可能丢失。
    网络层提供的服务

表1归纳了虚电路服务和数据报服务的主要区别。

对比的方面 虚电路服务 数据报服务 思路 可靠通信应当由网络来保证 可靠通信应当由用户主机来保证 连接的建立 必须有 不需要 终点地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有终点的完整地址 分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组独立选择路由进行转发 当结点出故障时 所有通过出故障的结点的虚电路均不能工作 出故障的结点可能会丢失分组,一些路由可能会发送变化 分组顺序 总是按发送顺序到达终点 到达终点时不一定按发送顺序 端到端的差错处理和流量控制 可以由网络负责,也可以由用户主机负责 由用户主机负责

二、网际协议IP

网际协议IP是TCP/IP体系中最主要的协议之一,也就是最重要的因特网标准协议之一,与IP协议配套使用的还有四个协议:地址解析协议ARP(Address Resolution Protocol)、逆地址解析协议RARP(Reverse Address Resolution Protocol)、网际控制报文协议ICMP(Internet Control Message Protocol)、网际组管理协议IGMP(Internet Group Management Protocol)。

  1. 虚拟互连网络
    由于用户的需求是多种多样的,没有一种单一的网络能够适应所有用户的需求,所以市场上有很多种不同性能、不同网络协议的网络。面对不同的寻址方案、不同的最大分组长度、不同的网络接入机制、不同的超时控制、不同的差错恢复方法等等,网络的互连变得复杂。
    TCP/IP体系在网络互连上采用的做法是在网络层(即IP层)采用了标准化协议,但相互连接的网络可以是异构的。由于参加互连的计算机网络都使用相同的网际协议IP,因此可以把互连以后的计算机网络看成虚拟互连网络,所谓虚拟互连网络就是逻辑互连网络,也就是互连起来的各种物理网络的异构性本来是客观存在的,但是利用IP协议可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络
    网络层使用中间设备路由器(router) 用来在互联网中进行路由选择。(物理层/数据链路层/网络层以上分别对应的中间设备是转发器(repeater)/网桥或桥接器(bridge)/网关(gateway))。如图2所示,主机H1先要查找自己的路由表,看目的主机是否就在本网络上,则不需要经过任何路由器而是直接交付,任务就完成。如不是,则必须把IP数据报发送给某个路由器 (R1),R1在查找了自己的路由表后,知道应当把数据报转发给R2进行间接交付,这样一直转发直到路由器R5直到自己是和H2在同一网络上,就把数据报直接交付给目的主机H2。图中协议栈中的数字1~5分别表示物理层、数据链路层、网络层、运输层和应用层。
    分组传送

  2. 分类的IP地址
    有了虚拟互连网络的概念,再讨论在这样的虚拟网络上如何寻址。

    • 2.1 IP地址及其表示方法
      IP地址就是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围是唯一的32位的标识符。IP地址现在由因特网名字与号码指派公司ICANN(Internet Corporation for Assigned Names and Numbers) 进行分配。
      IP地址被划分为若干个固定类,每一类地址都由两个固定长度的字段组成,其中第一个字段是网络号(net-id),它标志主机(或路由器)所连接到的网络。一个网络号在整个因特网范围内必须是唯一的。第二个字段是主机号(host-id),它标志该主机(或路由器)。一个主机号在它前面的网络号所指明的网络范围内必须是唯一的。由此可见,一个IP地址在整个因特网范围内是唯一的。这种两级的IP地址可以记为IP地址 ::= {<网络号>, <主机号>}
      图3给出了各种IP地址的网络号字段和主机号字段,这里的A类、B类和C类地址都是单播地址(一对一通信),是最常用的。
      IP地址分类
      由图3可以看出:

      • A类、B类和C类地址的网络号字段分别是1,2,和3字节长 ,而在网络号字段的最前面有1~3位的类别号,其数值分别规定为0,10和110。
      • A类、B类和C类地址的主机号字段分别为3个、2个和1个字节长。
      • D类地址(前四位是1110)用于多播(一对多通信)。
      • E类地址(前四位是1111)保留为以后用。

      此处指出,由于近年来已经广泛使用无分类IP地址进行路由选择,A类、B类和C类地址的区分已经成为历史。
      从IP地址的结构来看,IP地址并不仅仅指明一个主机,同时指明了主机所连接到的网络。将IP地址分为三个类别主要是考虑到不同网络需要的主机数量不同,把IP地址划分为A类、B类和C类满足不同用户的要求。当某个单位申请到一个IP地址时,实际上是获得了具有同样网络号的一块地址。其中具体的各个主机号则由该单位自行分配,只要做到在该单位管辖范围内无重复的主机号即可。

    • 2.2 常用的三种类别的IP地址
      A类地址 的网络号字段占一个字节,只有7位可供使用(该字段的第一位已固定为0),最终可指派的网络号是126个(即2^7-2)。减2是去除了:(a) 网络号字段为全0的IP地址是个保留地址,表示“这个(this)”、“本网络”;(b) 网络号为127(即0111 1111)保留作为本地软件环回测试(loopback test) 本主机的进程之间通信使用。若主机发送一个目的地址为环回地址(如127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。目的地址为环回地址的IP数据报永远不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。
      A类地址的主机号占3字节,因此每一个A类网络中的最大主机数是2^24-2。此处减2去除的是:(a) 全0的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址(如一主机的IP地址为5.6.7.8,则该主机所在的网络地址就是5.0.0.0),而全1表示“所有的(all)”,因此全1的主机号字段表示该网络上的所有主机。
      IP地址空间共有 2^32 个地址。整个A类地址空间共有 2^31 个地址,占有整个IP地址空间的50%。
      B类地址 的网络号字段有2字节,但前面两位(10)已经固定,只剩下14位可以进行分配。因为网络号字段后面的14位无论怎样取值也不可能出现使整个2字节的网络号字段成为全0或全1,因此这里不存在网络总数减2的问题。但实际上B类网络地址128.0.0.0是不指派的,而可以指派的B类最小网络地址是128.1.0.0。因此B类地址可指派的网络数为2\^14-1。B类地址的每一个网络上的最大主机数是2\^16-2,减2扣除全0和全1的主机号。整个B类地址空间共约有2^30个地址,占整个IP地址空间的25%。
      C类地址 有3个字节的网络号字段,最前面的3位是(110),还有21位可以进行分配。C类网络地址192.0.0.0也是不指派的。可以指派的C类最小网络地址是192.0.1.0。因此C类地址可指派的网络总数是2\^21-1每一个C类地址的最大主机数是2\^8-2。整个C类地址空间共约有2^29个地址,占整个IP地址的12.5%。
      表2 给出IP地址的指派范围如下:

      网络类别 最大可指派的网络数 第一个可指派的网络号 最后一个可指派的网络号 每个网络中的最大主机数 A 126(2^7-2) 1 126 16777214(2\^24-2) B 16383(2\^14-1) 128.1 191.255 65534(2\^16-2) C 2097151(2\^21-1) 192.0.1 223.255.255 254(2\^8-2)

      表3给出了一般不使用的IP地址,这些地址只能在特定的情况下使用:

      网络号 主机号 源地址使用 目的地址使用 代表的意思 0 0 可以 不可 在本网络上的本主机 0 host-id 可以 不可 在本网络上的某个主机host-id 全1 全1 不可 可以 只在本网络上进行广播(各路由器均不转发) net-id 全1 不可 可以 对net-id上的所有主机进行广播 127 非全0或全1的任何数 可以 可以 用作本地软件环回测试只用

      IP地址的重要特点

      • 每一个IP地址都由网络号和主机号两部分组成。从这个意义上说IP地址是一种分等级的地址结构。分两个等级的好处是:(a) IP地址管理机构在分配IP地址时只分配网络号(第一级),而剩下的主机号(第二级)则由得到该网络号的单位自行分配。这样就方便了IP地址的管理。 (b) 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间以及查找路由表的时间
      • 实际上IP地址是标志一个主机(或路由器)和一条链路的接口。所以当一个主机拥有多个属于不同网络号的IP地址时,称为多归属主机(multihomed host),该主机同时连接到两个网络。由于一个路由器至少应当连接两个网络,因此一个路由器至少应当有两个不同的IP地址(两个路由器之间直接相连,连线两端的接口可以分配地址也可以不分配,为了节省IP地址资源,对于这种仅由一段连线构成的特殊“网络”,现在也常常不分配IP地址,通常把这样的特殊网络叫做无编号网络(unnumbered network)无名网络(anonymous network))。
      • 一个网络是指具有相同网络号net-id的主机的集合。因此,用转发器或网桥连接起来的若干个局域网仍为一个网络,这些局域网都具有相同的网络号。具有不同网络号的局域网必须使用路由器进行互连
      • 在IP地址中,所有分配到网络号的网络都是平等的。
  3. IP地址与硬件地址
    从层次的角度看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(称IP地址是逻辑地址是因为IP地址是用软件实现的)。
    IP地址放在IP数据报的首部,而硬件地址则放在MAC帧的首部。当IP数据报放入数据链路层的MAC帧中以后,整个IP数据报就成为MAC帧的数据,因而在数据链路层看不见数据报的IP地址
  4. 地址解析协议ARP和逆地址解析协议RARP
    ARP和RARP用于解决IP地址和物理地址之间的对应问题的两个协议。ARP协议找出IP地址对应的物理地址,RARP协议找出物理地址对弈的IP协议。
    由于现在的DHCP协议(应用层)已经包含了RARP协议的功能,因此现在已经不再单独使用了。只要了解其作用是只知道自己硬件地址的主机能够通过RARP协议找出其IP地址。
    由于主机的硬件地址可能会改变,而IP地址和硬件地址不存在简单的映射关系。此外,在一个网络上可能经常会有新的主机加入或者撤走一些主机。地址解析协议ARP解决IP地址和硬件地址的映射问题的方法是在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且该映射表还经常动态更新(新增或超时删除)
    每一个主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表。当主机A要想向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址,若有则在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。当查不到主机B的IP地址时,主机A就会自动运行ARP:(a) ARP进程在本局域网上广播发送一个ARP请求分组,请求的主要内容是“我的IP地址时209.0.0.5,硬件地址是00-00-C0-15-AD-18。我想知道IP地址为209.0.0.6的主机的硬件地址。”;(b) 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。(c) 主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP响应分组,并写入自己的硬件地址。其余的所有主机都不理睬这个ARP请求分组,ARP响应分组的主要内容是“我的IP地址是209.0.0.6,我的硬件地址是08-00-2B-00-EE-0A。”注意ARP请求分组是广播发送的,ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。同时主机A的这一地址映射也写入了主机B自己的ARP高速缓存中。(d) 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
    ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间。凡是超过生存时间的项目就从高速缓存中删除掉。生存时间在某些主机硬件地址发生改变或者消失时十分有意义,可以及时更新或者删除映射地址。
    注意ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。对于不在同一个局域网的主机,并不需要知道其硬件地址,只要先通过IP地址找到路由器(需要其硬件地址)进行转发即可。
    既然有硬件地址,为什么我们要使用抽象的IP地址来寻找目的主机并调用ARP来找出硬件地址呢?主要是因为网络类型多种多样,其硬件地址格式也不同,要使得这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作。统一的IP地址解决了这个复杂的问题,不同主机之间的通信就像连接在同一个网络上一样。
  5. IP数据包的格式
    在TCP/IP标准中,各种数据报格式常常以32位(即4字节)为单位来描述。IP数据报的完整格式如图4所示:
    IP数据报
    IP数据报首部各字段的意义如下。

    • IP数据报首部的固定部分中的各字段
      (1) 版本 占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(IPv4),之后可能使用IPv6。
      (2) 首部长度 占4位,可表示的最大十进制数值是15。这个字段所表示的单位是32位字(1个32位字长是4字节),因此当IP的首部长度为1111时(即十进制的15),首部长度就达到最大值60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制的缺点是有时不够用。最常用的首部长度是20字节(即首部长度为0101),此时不使用任何选项。
      (3) 区分服务 占8位,用来获得更好的服务。在旧标准中叫做服务类型,但实际一直未被使用。1998年IETF把这个字段改名为区分服务DS(Differentiated Services),只用在使用区分服务才会使用该字段(不同数值表示提供不同等级的服务质量)。
      (4) 总长度 首部和数据之和,单位为字节。总长度字段为16位,则数据包的最大长度为2\^16-1=65535字节。
      有关IP的标准文档规定,所有主机和路由器必须能处理的IP数据报长度不得小于576字节,这个数值也就是最小的IP数据报的总长度。当数据报长度超过网络说容许的最大传送单元MTU时,就必须把过长的数据报进行分片,此时数据报首部中的总长度字段指的是分片后的每一个分片的首部长度和数据长度总和。
      (5) 标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。主要是当数据报分片是,这个标识字段被复制到所有数据报片中,接收端根据标识字段把各数据报片重装成原来的数据报
      (6) 标志(flag) 占3位。目前只有两位有意义。

      • 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据包。MF=0表示这已经是若干数据报片中的最后一个。
      • 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”,只有当DF=0时才允许分片。

      (7) 片位移 占13位。较长的分组在分片后,某片在原分组中的相对位置。也就是说相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。每个分片的长度一定是8字节(64位)的整数倍。
      (8) 生存时间TTL(Time To Live) 占8位,表明是数据报在网络中的寿命,目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。初始的TTL值的单位为秒,每经过一个路由器,TTL就减去数据报在路由器所消耗的一段时间,当TTL值减为0时,就丢弃该数据报。
      由于现在路由器处理数据报所需时间不断缩短,一般远远小于1秒,后来就把TTL字段的功能改为“跳数限制”(但名称不变)。路由器在转发数据报之前就把TTL值减1。也就是TTL的单位不再是秒,而是跳数。其意义是表明数据报在因特网中至多可经过多少个路由器。若TTL初始值为1,则表示该数据报只能在本局域网中传送。
      (9) 协议 占8位,协议字段指出此数据报携带的数据使用何种协议,以便目的主机的IP层知道应将数据部分上交给哪个处理过程。常用的一些协议及其协议字段值如下表:

      协议名 ICMP IGMP TCP EGP IGP UDP IPv6 OSPF 协议字段值 1 2 6 8 9 17 41 89

      (10) 首部检验和 占16位,这个字段只检验数据报的首部,不包括数据部分。因为数据报每经过一个路由器,路由器都要重新计算首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。检验码的计算方法是:在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。接收方收到数据报后,将首部的所有16位字再使用反码算术运算相加一次,将得到的和取反码,即得出接收方检验和的计算结果。若首部未发生变化,则结果必为0,保留数据报,否则丢弃数据报。
      (11) 源地址 占32位。
      (12) 目的地址 占32位。

    • IP数据报首部的可变部分
      是一个选项字段,用来支持排错、测量以及安全等措施。此字段的长度从1个字节到40个字节不等,最后用全0的填充字段补齐成为4字节的整数倍。增加可变部分是为了增加IP数据报的功能,但是这使得IP数据报的首部长度变为可变的,增加了路由器处理数据报的开销。IPv6把IP数据报的首部长度设置为固定的
  6. IP层转发分组的流程
    现在的路由表是按主机所在的网络地址来制作路由表,每一行对应于一个网络,大大降低了路由表的规模。在路由表中,对每一条路由最主要的是以下两个信息:(目的网络地址下一跳地址)。
    虽然因特网所有的分组转发都是基于目的主机所在的网络,但是在大多数情况下都允许有这样的特例,即对特定的目的主机指明一个路由,这种路由称为特定主机路由,能够更方便地控制和测试网络。路由器还可采用默认路由(default route) 以减少路由表所占用的空间和搜索路由表所用的时间,这种转发方式在一个网络只有很少的对外连接时是很有用的。
    注意到,在IP数据包的首部中没有什么地方可以用来指明“下一跳路由器的IP地址”,待转发的数据报是怎么找到下一跳路由器呢?当当路由器收到一个待转发的数据报,在从路由表得到下一跳路由器的IP地址后,把这个地址送交下层的网络接口软件,使用ARP将下一跳路由器的IP地址转换成硬件地址,并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一条路由器。
    根据上述,可归纳得出分组转发算法如下:
    • 从数据报的首部提取目的主机的IP地址D,得出目的网络地址N。
    • 若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付给目的主机(把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就是间接交付,执行下一步(3)。
    • 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所表明的下一跳路由器;否则,执行下一步(4)。
    • 若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行下一步(5).
    • 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行下一步(6)。
    • 报告转发分组出错。

三、划分子网和构造超网

  1. 划分子网
    • 从两级IP地址到三级IP地址
      IP地址的设计不够合理:(1) IP地址空间的利用率有时很低。比如有些单位考虑到今后可能的发展,申请了一个较大的地址网络,有许多IP地址被浪费。(2) 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。(3) 两级IP地址不够灵活。有时一个单位需要在新的地点马上开通一个新的网络,但是在申请到一个新的IP地址之前,新增加的网络是不可能连接到因特网上工作的。希望能够使一个单位能随时灵活地增加本单位的网络,而不必事先到因特网管理机构去申请新的网络号。原来的两级IP地址无法做到这一点。
      为了解决上述问题,从1985年起IP地址中又增加了一个“子网号字段”,使两级IP地址变成三级IP地址,这种做法叫作划分子网(subnetting),或子网寻址子网路由选择
      划分子网的基本思路如下:
      • (1) 一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网(subnet)。本单位以外的网络纯属一个单位内部的事情,本单位以外的网络看不见这个网络是由多少个子网组成,因为这个单位对外仍然表现为一个网络
      • (2) 划分子网的方法是从网络的主机号借用若干位作为子网号subnet-id,当然主机号也就相应减少了同样的位数。可以使用记法如:IP地址:={<网络号>, <子网号>, <主机号>}
      • (3) 凡是从其他网络发送给本单位某个主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付给目的主机。
    • 子网掩码
      假定有一个数据报,已经到达网络外部和内部交接处的路由器,那么路由器时怎么转发到子网的呢?
      32位的IP地址本身以及数据报的首部都没有包含任何有关子网划分的信息,所以并不知道源主机或者目的主机所连接的网络是否进行了子网的划分,所以子网掩码应运而生。
      子网掩码是32位的,由一串连续1和跟随一串0组成。子网掩码中的1对应于IP地址中原来的net-id和subnet-id,而子网掩码中的0对应于现在的host-id。将子网掩码和收到的数据报的目的IP地址按位与(AND),得到了所要找的子网的网络地址
      为了便于查找路由表,不划分子网时,也要使用子网掩码。因为现在因特网的标准规定:所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。若一个网络不划分子网,那么该网络的子网掩码就用默认子网掩码。默认子网掩码中1的位置和IP地址中网络号字段net-id正好相对应。
      根据已成为因特网标准协议的RFC 950文档,子网号不能为全1或全0,但随着无分类域间路由选择CIDR的广泛使用,现在全1和全0的子网号也可以使用,但一定要谨慎使用,路由器所用的路由选择软件不一定支持。
      划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。
  2. 使用子网时分组的转发
    使用子网划分后,路由表必须包含以下三项内容:目的网络地址子网掩码下一跳地址
    在划分子网的情况下,路由器转发分组的算法如下:
    (1) 从收到的数据报的首部提取目的IP地址D。
    (2) 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”(AND操作),看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还需要把D转换成物理地址,把数据报封装成帧发送出去),转发任务结束,否则就是间接交付,执行(3)。
    (3) 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行(4)。
    (4) 对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相与,其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(5)。
    (5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
    (6) 报告转发分组出错。
  3. 无分类编址CIDR(构造超网)

    1. 网络前缀
      无分类编址的方法是用于解决两个问题:(1) B类地址在1992年已分配了近一半,眼看很快就将全部分配完毕;(2) 因特网主干网上的路由表中的项目数急剧增长(几千->几万)。IPv6协议是用于解决另一个问题:整个IPv4的地址空间最终将全部耗尽。
      早先在RFC1009中就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码。使用变长子网掩码VLSM(Variable Length Subnet Mask) 可进一步提高IP地址资源的利用率。
      无分类编址 方法,正式名字是无分类 域间路由选择CIDR(Classless Inter-Domain Routing,读音是“sider”)是在VLSM的基础上研究出的。
      CIDR最主要的特点是:
      (1) CIDR消除了传统的A类、B类和C类地址以及划分子网的概念。CIDR把32位的IP地址划分为两部分,前面部分是“网络前缀”(network-prefix)(或简称为“前缀”)用来指明网络,后面的部分则用来指明主机。因此CIDR使IP地址从三级编址(使用子网掩码)又回到两级编址,但这已是无分类的两级编址,其记法是:IP地址::={<网络前缀>, <主机号>}。
      CIDR还使用“斜线记法”(slash notation),或称为CIDR记法,即在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。
      (2) CIDR把网络前缀都相同的连续IP地址组成一个“CIDR地址块”,只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址中的地址数。
      由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络,这种地址的聚合常称为路由聚合(route aggregation),使得路由表中的一个项目可以表示原来传统分类地址的很多个路由,路由聚合也称为构成超网(supernetting)。
      CIDR记法有多种形式,如地址块10.0.0.0/10可简写为10/10(把点分十进制中低位连续的0省略);另一种简化表示实在网络前缀的后面加一个星号*,如:00001010 00*。

    2. 最长前缀匹配
      使用CIDR后,路由表中的每个项目由“网络前缀”和“下一跳地址”组成,但是在查找路由表时可能会得到不止一个匹配结果。正确的匹配是:从匹配结果中选择具有最长网络前缀的路由,这就是最长前缀匹配(longest-prefix matching),又称为最长匹配最佳匹配

    3. 使用二叉线索查找路由表
      为了进行更加有效的查找1,通常是把无分类表示的路由表放在一种层次的数据结构中,然后自上而下地按层次进行查找,这里最常用的就是二叉线索(binary trie),它是一种特殊结构的树。IP地址从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
      在表中所有IP地址中,该前缀是唯一的,这就是每一个IP地址的唯一前缀(unique prefix)。利用这些唯一前缀来构造二叉线索。在进行查找时,只要能够和唯一前缀相匹配就行了。构造的二叉树中的每个叶节点代表一个唯一前缀。举例如图5所示:
      二叉线索
      “唯一前缀匹配”和“网络前缀匹配”的关系
      要将二叉线索用于路由表中,还必须使二叉线索中的每一个叶节点包含所对应的网络前缀和子网掩码。当搜索到一个叶节点时,就必须将寻找匹配的目的地址和该叶节点的子网掩码进行逐位“与”运算,看结果是否与对应的网络前缀相匹配。若匹配,就按下一跳的接口转发该分组。否则,就丢弃该分组。
      二叉线索只是提供了一种可以快速在路由表中找到匹配的叶节点的机制。但这是否和网络前缀匹配,还要和子网掩码进行一次逻辑与的运算。

四、网际控制报文协议ICMP

网际控制报文协议ICMP(Internet Control Message Protocol)允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。ICMP报文格式如图6所示:
ICMP报文

  1. ICMP报文的种类
    ICMP报文的种类有两种,即ICMP差错报告报文ICMP询问报文
    ICMP报文的前4个字节是统一的格式,共有三个字段:类型、代码和检验和。接着的4个字节的内容与ICMP的类型有关。最后面是数据字段,其长度取决于ICMP的类型。下表给出了几种常用的ICMP报文类型:

    ICMP报文种类 类型的值 ICMP报文的类型 差错报告报文 3 终点不可达 差错报告报文 4 源点抑制(Source quench) 差错报告报文 11 时间超过 差错报告报文 12 参数问题 差错报告报文 5 改变路由(Redirect) 询问报文 8或0 回送(Echo)请求或回答 询问报文 13或14 时间戳(Timestamp)请求或回答
    • ICMP差错报告报文共有五种,即:
      (1) 终点不可达 当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
      (2) 源点抑制 当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
      (3) 时间超过 当路由器收到生存时间为零的数据包时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已经收到的数据报片都丢弃,并向源点发送时间超过报文。
      (4) 参数问题 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就该丢弃该数据报,并向源点发送参数问题报文。
      (5) 改变路由(重定向) 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
      例如当主机要发送数据报时,首先查找主机自己的路由表,看应当从哪一个接口把数据报发送出去。在主机刚开始工作时,一般都在路由表中设置一个默认路由的IP地址,不管数据报要发送到哪个目的地址,都一律先将数据报传送给网络上的这个默认路由器。假如默认路由发现主机发往某个目的地址的数据报不应当经过默认路由器,就用改变路由报文把这情况高速主机。

    所有的ICMP差错报告报文中的数据字段都具有同样的格式(如图7所示)。把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出作为ICMP报文的数据字段。再加上相应的ICMP差错报文的前8个字节,就构成了ICMP差错报告报文。提取收到的IP数据报的数据字段的前8个字节是为了得到传输层的端口号(对于TCP和UDP)以及运输层报文的发送序号(对于TCP)。这些信息对源点通知高层协议是有用的,整个ICMP报文作为IP数据报的数据字段发送给源点。
    ICMP差错报告报文格式

    • 常用的ICMP询问报文有两种,即:
      (1) 回送请求和回答 ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态
      (2) 时间戳请求和回答 ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。时间戳请求与回答可用来进行时钟同步和测量时间
  2. ICMP的应用举例
    • 分组网间探测PING(Packet InterNet Groper) 用于测试两个主机之间的连通性。PING使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的一个例子,没有通过运输层的TCP或UDP。
    • traceroute(UNIX)/tracert(Windows) 用于跟踪一个分组从源点到终点的路径。该应用从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报,第一个数据报的生存时间TTL设置为1,当数据报到达路径上的第一个路由器R1,路由器收下该数据报,再把TTL的值减1,由于TTL等于0,R1就把第一个数据报丢弃了,并向源主机发送一个ICMP**时间超过**差错报告报文,接着第二个数据报、第三个数据报依次类推。

五、因特网的路由选择协议

  1. 有关路由选择协议的几个基本概念
    • 理想的路由算法
      一个理想的路由算法应该有这些特点:(1) 算法必须是正确且完整;(2) 算法在计算上应简单;(3) 算法应能适应通信量和网络拓扑的变化,即要有自适应性,或者说稳健性(robustness);(4) 算法应具有稳定性;(5) 算法应是公平的;(6) 算法应是最佳的(使得分组的平均时延最小而网络的吞吐量最大),最佳只是相对于某一种特定要求下得出的较为合理的选择而已。
      路由算法根据能否随网络的通信量或拓扑自适应地进行调整变化来划分,则有两大类,即静态路由选择策略(非自适应路由选择)动态路由选择策略(自适应路由选择)
      静态路由选择的特点是简单和开销较小,但不能及时适应网络状态的变化,对于很简单的小网络,完全可以采用静态路由选择,用人工配置每一条路由。
      动态路由选择的特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大,因此动态路由协议选择适用于较复杂的大网络。
    • 分层次的路由选择协议
      因特网采用分层次的路由选择协议的原因:(1) 因特网的规模非常大,如果让所有的路由器知道所有的网络应怎样到达,那么路由表将非常大,处理起来也花时间。而这些路由器之间交换路由信息所需的带宽就会使因特网的通信链路饱和。(2) 许多单位不愿意外接了解自己单位网络的布局细节和本部门所采用的路由选择协议,但同时还希望连接到因特网上。
      因特网将整个互联网划分为许多较小的自治系统(autonomous system),一般都记为AS。自治系统AS的经典定义是在单一的技术管理下的一组路由器,而这些路由器使用一种AS内部的路由选择协议和共同的度量以确定分组在该AS内的路由,同时还使用一种AS之间的路由选择协议用以确定分组在AS之间的路由。尽管一个AS使用了多种内部路由选择协议和度量,但重要的是一个AS对其他AS表现出的是一个单一的和一致的路由选择策略
      在目前的因特网中,一个大的ISP就是一个自治系统。这样,因特网就把路由选择协议划分为两大类,即:
      (1) 内部网关协议IGP(Interior Gateway Protocol) 在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类选择协议使用的最多,如RIP和OSPF协议。
      (2) 外部网关协议EGP(External Gateway Protocol) 若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议EGP。使用最多的外部网关协议是BGP的版本4(BGP-4)。
      自治系统之间的路由选择叫做域间路由选择(interdomain routing),而在自治系统内部的路由选择叫做域内路由选择(intradomain routing)。
  2. 内部网关协议RIP

    • 工作原理
      路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议。RIP是一种分布式的基于距离向量的路由选择协议,是因特网的标准协议,其最大优点就是简单。
      RIP的协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(因此,这是一组距离,即“距离向量”)。RIP协议的“距离”实际上指的是“跳数”(hop count)。RIP认为好的路由就是通过的路由器的数目少。RIP允许一条路径最多只能包含15个路由器。因此“距离”等于16时即相当于不可达。可见RIP只适用于小型互联网。RIP不能在两个网络之间同时使用多条路由。RIP选择一条具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
      RIP协议的特点如下
      (1) 仅和相邻路由器交换信息
      (2) 路由器交换的信息是当前本路由器所知道的全部信息,即自己的路由表。也就是“我到本自治系统中所有网络的(最短)距离,以及到每个网络应经过的下一跳路由器”。
      (3) 按固定的时间间隔交换路由信息。然后路由器根据收到的路由信息更新路由表。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。

      此处强调,路由器在刚刚开始工作时,只知道直接连接的网络的距离。接着,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。但经过若干次更新后,所有的路由器最终都会知道本自治系统中的任何一个网络的最短距离和下一跳路由器地址。

    • 距离向量算法
      路由表更新的原则是找出到每个目的网络的最短距离。对每一个相邻路由器发送的RIP报文,进行以下步骤:
      (1) 对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加1.每一个项目都有三个关键数据,即:到目的网络N,距离是d,下一跳路由器是X。
      (2) 对修改后的RIP报文中的每一个项目,进行以下步骤:
      若原来的路由表中没有目的网络N,则把该项目添加到路由表中。
      否则(即在路由表中有目的网络N,这时就再查看下一跳路由器地址)
      若下一跳路由器地址是X,则把收到的项目替换原路由表中的项目。
      否则(即这个项目是:到目的网络N,但下一跳路由器不是X)
      若收到的项目中的距离d小于路由表中的距离,则进行更新,
      否则什么也不做。
      (3) 若3分钟还没有收到相邻路由表的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离置为16。
      (4) 返回。
    • RIP协议的报文格式
      RIP2可以支持变长子网掩码和CIDR。此外,RIP2还提供简单的鉴别过程支持多播。RIP2的报文格式如图8所示,可以看出RIP协议使用运输层的用户数据报UDP进行传送(使用UDP的端口520)。
      RIP2报文格式
      RIP报文由首部和路由部分组成。RIP的首部占4个字节,其中的命令字段指出报文的意义。如,1表示请求路由信息,2表示对路由信息的响应或未被请求而发出的路由更新报文。首部后面的“必为0”是为了4字节字的对齐。
      RIP2报文中的路由部分由若干个路由信息组成。每个路由信息需要用20个字节。地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。如采用IP地址就令这个字段的值为2(原来考虑RIP也可用于其他非TCP/IP协议的情况)。路由标记填入自治系统号ASN(Autonomous System Number),这是考虑使RIP有可能收到本自治系统以外的路由选择信息。再后面指出某个网络地址、该网络的子网掩码下一跳路由器地址以及到此网络的距离。一个RIP报文最多可包括25个路由,因而RIP报文的最大长度是4+20*25=504字节。
      RIP存在的一个问题是 当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。RIP协议的特点是:好消息传播得快,而坏消息传播得慢。网络出故障的传播时间往往需要较长的时间,使得更新过程的收敛时间过长,这是RIP的一个主要缺点。 RIP协议最大的优点就是 实现简单,开销较小
  3. 内部网关协议OSPF

    • OSPF协议的基本特点
      这个协议的名字是开放最短路径优先OSPF(Open Shortest Path First)。该协议最主要的特征就是使用分布式的链路状态协议(link state protocol),OSPF的三个要点是:
      (1) 向本自治系统中所有路由器发送信息,此处使用洪泛法(flooding),这就是路由器通过所有输出端口向所有相邻的路由器发送信息,而相邻路由器又再将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)(RIP仅仅向自己相邻的几个路由器发送信息)。
      (2) 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。OSPF将这个“度量”用来表示费用、距离、时延和带宽等等,有时为了方便就称这个度量为“代价”(RIP发送的信息是:到所有网络的距离和下一跳路由器)。
      (3) 只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送其信息。(RIP是定期交换路由表信息)。

      由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库(link-state database),这个数据库实际上就是全网的拓扑结构图。注意RIP协议的每一个路由器虽然知道所有的网络的距离以及下一跳的路由器,但却不知道全网的拓扑结构
      OSPF的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF的更新过程收敛得快是其重要优点。
      为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫作区域(area)。划分区域的好处就是利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。为了使每一个区域能够和本区域以外的区域进行通信,OSPF使用层次结构的区域划分。在上层的区域叫做主干区域(backbone area),用于连通其他在下层的区域。
      OSPF不用UDP而是直接用IP数据报传送(其IP数据报首部的协议字段值为89)。OSPF构成的数据报如图9所示。OSPF分组使用24字节的固定长度首部。
      OSPF
      OSPF首部各字段的意义如下:
      (1) 版本 当前版本号为2;
      (2) 类型 可以是五种类型分组中的一种;
      (3) 分组长度 包括OSPF首部在内的分组长度,以字节为单位;
      (4) 路由器标识符 标志发送该分组的路由器的接口的IP地址;
      (5) 区域标识符 分组属于的区域的标识符;
      (6) 检验和 用来检测分组中的差错;
      (7) 鉴别类型 目前只有两种。0(不用)和1(口令);
      (8) 鉴别 鉴别类型为0时就填入0。鉴别类型为1则填入8个字符的口令。
      OSPF具有下列的一些特点
      (1) OSPF对于不同类型的业务可计算出不同的路由。
      (2) 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径,这叫作多路径间的负载平衡(load balancing)。
      (3) 所有在OSPF路由器之间交换的分(如链路状态更新分组)组都具有鉴别的功能,因而保证了仅在可信赖的路由器之间交换链路状态信息。
      (4) OSPF支持可变长度的子网划分和无分类的编址CIDR。
      (5) OSPF让每一个链路状态都带上一个32位的序号,序号越大网络中的链路状态越新。

    • OSPF的五种分组类型
      (1) 问候(Hello) 分组,用来发现和维持邻站的可达性。
      (2) 数据库描述(Database Description) 分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
      (3) 链路状态请求(Link State Request) 分组,向对方请求发送某些链路状态项目的详细信息。
      (4) 链路状态更新(Link State Update) 分组,用洪泛法对全网更新链路状态。
      (5) 链路状态确认(Link State Acknowledgment) 对链路更新分组的确认。
  4. 外部网关协议BGP
    边界网关协议BGP是不同AS的路由器之间交换路由信息的协议。BGP的使用环境与内部网关协议不同:(1) 因特网的规模太大,使得AS之间路由选择非常困难;(2) AS之间的路由选择必须考虑有关策略,相互连接的网络的性能相差很大。
    由于上述情况,边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由,而并非要寻找一条最佳路由,BGP采用了路径向量(path vector)路由选择协议
    在配置BGP时,每一个AS的管理员要选择至少一个路由器作为该AS的“BGP发言人”,一般BGP发言人往往是BGP边界路由器。一个BGP发言人与其他AS的BGP发言人要交换路由信息,就要先建立TCP连接(端口号为179),然后在此连接上交换BGP报文以建立BGP会话(session)。使用TCP连接交换路由信息的两个BGP发言人,彼此成为对方的邻站(neighbor)或对等站(peer)。BGP协议交换路由信息的结点数量级是自治系统AS数的量级,这要比这些AS中的网络数少很多。要在许多AS之间寻找一条较好的路径,就是要寻找正确的BGP发言人(或边界路由器)。
    BGP支持CIDR,因此BGP的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达目的网络所要经过的AS序列。若一个BGP发言人收到了其他BGP发言人发来的路径通知,他就要检查一下本AS是否在此通知的路径中,若在这条路径中,就不能采用这条路径(因为会兜圈子)。
    BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。在RFC 4271中规定了BGP-4的四种报文
    (1) OPEN(打开) 报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化。
    (2) UPDATE(更新) 报文:用来通告某一路由的信息,以及列出要撤销的多条路由。
    (3) KEEPALIVE(保活) 报文:用来周期性地证实邻站的连通性。
    (4) NOTIFICATION(通知) 报文:用来发送检测到的差错。
    在RFC 2918中增加了ROUTE-REFRESH报文,用来请求对等端重新通告。
    BGP报文的格式如图10所示。四种类型的BGP报文具有同样的通用首部,其长度为19字节。通用首部分为三个字段。标记(marker)字段为16字节长,用来鉴别收到的BGP报文(预留假定以后有人发明出合理的鉴别方案)。不使用鉴别时,标记字段要置为全1。长度字段指出包括通用首部在内的整个BGP报文以字节为单位的长度,最小值是19,最大值是4096。类型字段的值为1到4,分别对应上述四种BGP报文。
    BGP报文

六、IP多播(multicast)

  1. IP多播的基本概念
    有许多的应用需要由一个源点发送到许多个终点,即一对多通信。例如,实时信息的交付(如新闻、股市行情等),软件更新、交互式会议等。
    与单播相比,在一对多的通信中,多播可大大的节约网络资源。用单播方式向N个主机传送同样的视频节目,为此需要发送N个单播,即同一个视频分组要发送N个副本。当用多播方式向N个主机传送节目,此时只需要发送一次多播数据报。在路由器转发分组时,可能需要把收到的分组复制出一些副本,发往不同的线路。当分组到达目的局域网时,由于局域网具有硬件多播功能,因此不需要复制分组,在局域网上的多播组成员都能收到这个视频分组。
    在因特网上进行的多播就叫做IP多播,IP多播锁传送的分组需要使用多播IP地址。多播组的标识符是IP地址中的D类地址,一个D类地址标志一个多播组,所以D类地址共可标志2\^28个多播组。显然多播地址只能用于目的地址,而不能用于源地址,多播数据报使用IGMP协议(首部的协议字段值为2)。
    IP多播可以分为两种。一种是只在本局域网上进行硬件多播,另一种则是在因特网的范围进行多播。
  2. 网际组管理协议IGMP和多播路由选择协议
    • IP多播需要两种协议
      网际组管理协议IGMP(Internet Group Management Protocol)是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。而连接在局域网上的多播路由器还必须和因特网上的其他多播路由器协同工作,也就是还需要另外一个协议对因特网范围内的所有多播组成员进行管理的协议,这就是多播路由选择协议
    • 网际组管理协议IGMP
      和ICMP相似,IGMP使用IP数据报传递其报文(即IGMP报文加上IP首部构成IP数据报),但它也向IP提供服务。多播数据报的发送者和接受者都不知道(也无法找出)一个多播组的成员有多少,以及这些成员是那些主机。因特网中的路由器和主机都不知道哪个应用进程将要向哪个多播组发送多播数据报,因为任何应用进程都可以在任何时候向任何一个多播组发送多播数据报,而这个应用进程并不需要加入这个多播组。
    • 多播路由协议
      多播路由选择实际上就是要找出以源主机为根节点的多播转发树

七、参考文献

[1] 谢希仁. 计算机网络(第五版)

原创粉丝点击