计算机网络笔记——网络层

网络层

4.1 网络层的功能

4.1.1 异构网络互连

世界上有数以百万计的网络,要实现这些网络的互连是一件相当困难的事情,因为这些网络并没有统一的标准。而让大家都使用同一个网络也是不可能的,因为用户的需求是多种多样的,不可能有一种单一的网络能够适应所有用户。虽然网络不可能一样,但是可以想办法使用一种协议让路由器连接的网络都遵守这种协议,在这种情况下可以将互连起来的网络看成一个虚拟互联网络。

虚拟互联网络也就是逻辑互联网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是可以利用协议使这些性能各异的网络让用户看起来好像是一个统一的网络

4种中继系统(将网络互联起来的中间设备)

  • 物理层的中继系统:中继器或集线器。
  • 数据链路层的中继系统:网桥或交换机。
  • 网络层的中继系统:路由器。
  • 网络层以上的中继系统:网关。

当中继系统是中继器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,仍然是一个网络。互联网都是指用路由器进行互连的网络。

用虚拟互联网的好处:当互联网上的主机进行通信时,就好像在同一个网络上通信而看不见互连的具体的网络异构细节(如超时控制、路由选择协议等)

4.1.2 路由与转发

  • 路由选择:根据路由算法确定一个进来的分组应该被传送到哪一条输出路线上。如果子网内部使用数据报,那么对每一个进来的分组都要重新选择路径。如果子网内部使用虚电路,那么只有当创建一个新的虚电路时,才需要确定路由路径

  • 分组转发:路由器根据转发表将用户的IP 数据报从合适的端口转发出去。

    • 路由表是根据路由选择算法得出的,而转发表是从路由表得出的。转发表的结构应当使查找过程最优化,路由表则需要对网络拓扑变化的计算最优化。

    • 路由表中只给出到目的网络的下一跳路由器的IP 地址,然后在下一个路由器的路由表中再给出再下一跳的路由器的 IP 地址,最后才能到达目的网络进行直接交付,实现动态路由选择。

4.1.3 SND基本概念

SDN 是一种支持动态、弹性管理的新型网络体系结构,是实现高带宽、动态网络的理想架构。

主要特征

  • 网络可编程

    SDN为用户提供了一套完整的通用API,使用户可以在控制器上编程以实现对网络的配置、控制和管理。

  • 控制平面与数据平面分离

    控制平面与数据平面之间不再相互依赖,两者可以独立完成体系结构的演进,只需要遵循统一的开放接口进行通信即可,是网络获得更多可编程能力的架构基础。

  • 逻辑上集中管理

    主要是指对分布式网络状的集中统一管理。在SDN 架构中,控制器会担负起收集和管理所有网络状态信息的重任。逻辑集中控制为软件编程定义网络功能提供了架构基础,也为网络自动化管理提供了可能。

SDN网络体系结构

  • SDN网络应用:实现了对应的网络功能应用。
  • 北向接口:北向接口为SDN应用提供了通用的开放编程接口。
  • SDN控制器:SDN控制器也称为网络操作系统。控制器不仅要通过北向接口为上层网络应用提供不同层次的可编程能力,还要通过南向接口对SDN数据平面进行统一的配置、管理和控制。
  • 南向接口:SDN 控制器和数据平面的开放接口。SDN 控制器通过南向接口对数据平面进行编程控制,实现数据平面的转发等网络行为。
  • SDN数据平面:SDN数据平面是基于软件实现和硬件实现的数据平面设备
    在这里插入图片描述

4.1.4 拥塞控制

当计算机网络(如交通网络一样)在一个子网或子网的一部分出现太多分组(车辆)时,网络性能开始下降,这种情况称为拥塞。

拥塞控制可以分为两大类:

  • 开环控制:在网络系统设计时,事先就要考虑到有关发生拥塞的各种因素,力求在系统工作时不会出现拥塞。一旦整个系统启动并运行起来,就不再需要中途进行修改。开环控制手段可包括确定何时可接收新流量、确定何时可丢弃分组及丢弃哪些分组、确定何种调度决策等。所有这些手段的共性是,在做决定时不考虑当前的网络状态。

  • 闭环控制:事先不考虑有关发生拥塞的各种因素,采用监视系统去监视,即时检测到哪里发生拥塞(就像道路上的摄像头,看到哪里发生堵车,立刻派交警去解决),然后将拥塞信息传到合适的地方以便调整系统运行,改正问题。其主要措施包括检测拥塞、报告拥寒和调整措施。

    加上合适的拥塞控制后,网络就不易出现拥塞和死锁现象了,但代价是当提供的负载较小时,有拥塞控制的吞吐量反而比无拥塞控制时要小。

4.2 路由算法

4.2.1 静态路由与动态路由

静态路由选择的特点是简单和开销小,但不能及时适应网络状态的变化。对于很小的网络,完全可以采用静态路由选择,自己手动配置每一条路由。

动态路由选择的特点是能较好地适应网络状态的变化,但实现起来比较复杂,开销也较大。因此,动态路由适用于较复杂的网络。

4.2.2 距离-向量路由算法

所有的节点都定期地将它们整个路由选择表传送给所有与之直接相邻的节点。这种路由选择表包含每条路径的目的地(另一节点)和路径的代价(距离)。

采用“跳数”作为距离的代价

在该路由算法中,所有节点都必须参与距离-向量交换,以保证路由的有效性和一致性。

更新路由选择表的情况:

  • 被通告一条新的路由,该路由在本节点的路由表中不存在,此时本地节点加入这条新的路由。
  • 通过发送路由信息的节点有一条到达某个目的地的路由,该路由比当前使用的路由有较短的距离(例如,RIP 就是有较小的跳数)。在这种情况下,用经过发送路由信息的节点的新路由替换路由表中到达那个目的地的现有路由。

4.2.3 链路状态路由算法

链路状态路由算法要求每个参与该算法的节点都有完全的网络拓扑信息。

  • 主动测试所有邻接节点的状态。两个共享一条链接的节点是相邻节点,它们连接到同一条链路。
  • 定期地将链路状态传播给所有其他节点(或称为路由节点)。

在一个链路状态路由选择中,一个节点检查所有直接链路的状态,并将所得的状态信息发送给网上所有其他的节点,而不仅仅是发送给那些直接相连的节点。每个节点都用这种方式,所有其他节点从网上接收包含直接链路状态的路由选择信息。

每当链路状态报文到达时,路由节点便使用这些状态信息去更新自己的网络拓扑和状态“视野图”,一旦链路状态发生了变化,节点对更新的网络图利用 Dkstra 最短路径算法重新计算路由,从单一节点出发计算到达所有目的节点的最短路径

三大特征

  • 向本自治系统(参考 4.2.4 小节)中的所有路由器发送信息。这里使用的方式是洪泛法,即路由器通过所有输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又将此信息发往其所有相邻路由器(但不再发送给刚刚发来信息的那个路由器)
  • 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻以及该链路的“度量”对于OSPF 算法,链路状态的“度量”主要用来表示费用、距离、时延、带宽等
  • 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送信息。

4.2.4 层次路由

因特网为什么采用分层次的路由选择协议?

  1. 随着时间的推移,因特网的规模越来越大,现在就有几百万个路由器互连在一起了,如果让所有路由器知道所有网络应该怎样到达,则这种路由表将非常大,处理起来也太耗费时间,而所有这些路由器交换路由信息所需的带宽就会使因特网的通信链路达到饱和
  2. 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到因特网上。

基于上述原因,因特网将互联网划分为许多较小的包含很多局域网的自治系统。每个自治系统有权自主地决定本系统内应采用何种路由选择协议。

如果两个自治系统需要通信,并且这两个自治系统内部所使用的路由选择协议不同,那么怎么通信?

因特网把路由选择协议划分为两大类:

  • 一个自治系统内部所使用的路由选择协议称为内部网关协议(IGP),具体的协议有RIP 和OSPF 等。
  • 自治系统之间使用的路由选择协议称为外部网关协议 (EGP),主要在不同自治系统的路由器之间交换路由信息,并负责为分组在不同自治系统之间选择最优的路径,具体的协议有BGP。

自治系统内部的路由选择称为域内路由选择。相应的,自治系统之间的路由选择称为域间路由选择

对于非常大的网络,OSPF 协议将一个自治系统再划分为若干个更小的范围,叫作区域

自治系统划分区域的好处:

  • 把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统,这样减少了整个网络上的通信量
  • 在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑情况。

为了使每一个区域能够和本区域以外的区域进行通信

OSPF 使用层次结构的区域划分。在上层的区域叫作骨于区域,骨于区域的标识符规定为 0.0.0.0。骨干区域的作用是用来连通其他在下层的区域从其他区域来的信息都由区域边界路由器进行概括。每一个区域至少应当有一个区域边界路由器。在骨于区域内的路由器叫作骨干路由器,一个骨干路由器可以同时是区域边界路由器。在骨干区域内还要有一个路由器,专门与本自治系统外的其他自治系统交换路由信息,这样的路由器叫作自治系统边界路由器

采用分层次划分区域的方法使交换信息的种类增多了,同时也使 OSPF 协议更加复杂。但此方法能使每一个区域内部交换路由信息的通信量大大减小,因而使 OSPF 协议能够用于大规模的自治系统中

在这里插入图片描述

4.3 IPv4

4.3.1 IPv4 分组

在这里插入图片描述

  • 占4 位,就是说这个IP数据报是 IPv4 还是 IPv6 版,通信方的版本必须一致。
  • 首部长度:占4位,IP数据报的首部实际上是 60B(但是有 40B 基本从不使用,考试时就认为 IP 数据报的首部是 20B,绝对不会错,而IP数据报首部的长度必须是4B 的倍数,这样只要用 15 个标记(每个标记4位)就可以表示6B,例如,0001 表示4B,0010表示8B,…·,1111 表示 60B。
  • 区分服务:占1B。
  • 总长度:占2B,千万不要和首部的基本长度弄,这里的基本单位长度是1B,不再是4B,并且总长度包括了首部和数据部分。
  • 标识:占2B,它是一个计数器,用来产生IP数据报的标识 。
  • 标志:占3 位,目前只有前2位有意义,即 MF 和 DF。
    • MF作用是为了合并数据报。
    • DF的作用是的标识是否允许数据报分片,一般DF=1,不允许分片,DF=0即允许分片。
  • 片偏移:占 13 位,片偏移是 8B 的整数倍。

把数据报切割之后产生分片,接收端怎么合并数据报?

首先接收端收到的数据报要是原数据报的分片(这样的话就需要标识,每个原数据报都可以将这个标识填到每个分片的首部),但是,万一等到的是最后一片,而接收端不知道是最后一片,还会一直等,为了打破僵局,这就需要有一个标志位 MF,去标记该片是不是最后一位。现在继续假设已经收到了最后一个分片,怎样将所有的分片合并呢?这就需要片偏移,只需要按照片偏移从小到大合并即可,在合并的过程中一定要将首部的 20B 删除

在这里插入图片描述

在这里插入图片描述

  • 生存时间:占8位,如果一个数据报一直在网络中转圈,网络资源就被白白浪费了,所以需要设置生存时间(Tme ToLiveTTL),即数据报在网络中可通过的路由器数的最大值
  • 协议:占8位,当接收端收到数据报时,肯定要交付给传输层的某种协议去处理,是交给传输层的TCP,还是交给传输层的 UDP,需要此标志给出
  • 首部校验和:占16 位,只需记住只检验数据报的首部,不检验数据部分。
  • 源地址:发送端主机的 IP 地址。
  • 目的地址:接收端主机的IP 地址。

相关总结:

  • 三个关于长度的标记
    • 首部长度——4B
    • 总长度——1B
    • 片偏移——8B
  • 默认路由中的“默认”二字并没有出现在路由表中,“默认”会被记为 0.0.0.0,但是这里仅仅是将0 .0.0.0 作为默认目的地址,绝对不是目的地址,0.0.0.0不能作为目的地址
  • 得到下一跳路由器的 IP 地址后不是直接将该地址填入到待发送的数据报,而是将该IP 地址转成MAC 地址(通过ARP,参考4.3.6小节),将其放到MAC 首部中,然后根据这个 MAC 地址来找到下一跳路由器。
  • MAC 地址是数据链路层和物理层使用的地址,一定要使用 MAC地址去找路由器
  • 在不同的网络中传送时,MAC 首部中的源地址和目的地址要发生变化,但是网桥在转发帧时,不改变帧的源地址,注意区分。
  • 虚拟分组=IP 数据报

4.3.2 IPv4地址

IPv4地址的分类

把整个因特网看作一个单一的、抽象的网络,IP 地址就是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围是==唯一的32 位的标识符==。

一般将IP地址分为A类地址、B 类地址、C类地址、D类地址和E 类地址。

  • A类地址:

在这里插入图片描述

A类地址的网络号为前面8位,并且第一位规定为0规定网络地址为全0的IP 地址是个保留地址,意思是“本网络”

后面的 3B 为主机号,主机号全0表示该网络,如一主机的IP 地址为 12.0.0.1,那么该主机所在的网络地址就是 12.0.0.0;而主机号全1表示广播地址,如 12.25.255.255。所以说合法的主机地址就是介于网络地址和广播地址之间的地址,如在 12.0.0.0~12.255.255.255 都可以

可指派网络数:27-22表示——全0、全1

网络上的最大主机数:224-2

  • B类地址:在这里插入图片描述

    B 类地址的网络号为前面 16 位,并且前面2位规定为 10,由于不管后面 14 位怎么设置,都不可能出现全0,所以B 类地址不存在网络总数减2的问题

    可指派网络数:214-110000000.00000000.00000000.00000000 (128.0.0.0) 是不指派的,而可以指派的最小网络地址是10000000.00000001.00000000.00000000(128.1.0.0

    网络上的最大主机数:216-2

  • C类地址:在这里插入图片描述

    C类地址的网络号为前面 24 位,并且前面3 位规定为110由于不管后面21位怎么设置,都不可能出现全0,所以C类地址不存在网络总数减2的问题

    可指派网络数:221-111000000.00000000.00000000.00000000 (192.0.0.0) 是不指派的,而可以指派的最小网络地址是 11000000.00000000.00000001.00000000 (192.0.1.0)

    网络上的最大主机数:28-2

在这里插入图片描述

6种特殊地址

在这里插入图片描述

  • 直接广播地址:在A、B、C类地址中,若主机号全1,则这个地址称为直接广播地址。路由器使用这种地址把一个分组发送到一个特定网络上的所有主机,所有主机都会收到具有这种类型的目的地址的分组。

    • 路由器使用这种地址把一个分组发送到一个特定网络上的所有主机,所有主机都会收到具有这种类型的目的地址的分组。

    • 这个地址在 IP 分组中只能用作目的地址。

    • 这个地址也减少了A、B、C类地址中每个网络中可用的主机数。

  • 受限广播地址:IP地址为255.255.255.255,这个地址用于定义在当前网络(绝对不是整个因特网,注意出选择题!)上的广播地址。

    • 一个主机若想把报文发送给所有其他主机,就可以使用这样的地址作为分组中的目的地址,但是路由器会把这种类型的地址阻拦,使这样的广播仅局限于本地局域网。应注意,这种地址属于E类地址
  • 这个网络上的这个主机:IP 地址为0.0.0.0,表示这个网络上的主机。

    • 这发生在当某个主机在运行程序但又不知道自己的IP 地址时,主机为了发现自己的 IP 地址,就给引导服务器发送 IP 分组,并使用这样的地址作为源地址,并且使用 255.255.255.255 作为目的地址。此外,这个地址永远是一个A类地址,而不管网络是什么类别,这种全0地址使A 类地址网络减少了一个。
  • 这个网络上的特定主机:具有全0的网络号的IP地址表示在这个网络上的特定主机

    • 用于当某个主机向同一网络上的其他主机发送报文时。因为分组被路由器挡住了,所以这是把分组限制在本地网络上的种方法。还应注意到,不论是什么网络类型,实际上这是一个A 类地址。
  • 环回地址:第一个字节等于 127 的IP地址作为环回地址。

    • 这个地址用来测试机器的软件。当使用这个地址时,分组永远不离开这个机器,这个分组就简单地返回到协议软件,因此这个地址可以用来测试 IP 软件。这种地址在IP 分组中既能用作目的地址,也能用作源地址。实际上这也是 A 类地址,环回地址也会使 A 类地址中的网络数减少一个

IP地址的重要特点

  • IP 地址是一种分等级的地址结构
    • IP地址管理机构在分配IP地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
    • 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
  • 实际上IP 地址是标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号(net-id)必须是不同的。这种主机称为多接口主机。
  • 用中继器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号。
  • 所有分配到网络号的网络,不论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,两者都是平等的。

4.3.3 NAT

其实某些机构并不需要连接到因特网,只需要与内部的主机通信,这样如果还是按照全球 IP 地址去分配,则会大大浪费 IP 地址。

因特网已经规定了专用地址

  • 10.0.0.0~10.255.255.255(相当于一个A类网络)。
  • 172.16.0.0~172.31.255.255(相当于16个连续的B类网络)。
  • 192.168.0.0~192.168.255.255(相当于256个连续的C类网络)

这种采用专用IP 地址的互联网络称为专用互联网或本地互联网,或直接称为专用网。专用IP 地址也叫作可重用地址

如果专用网的主机想和因特网的主机通信,怎么办?

NAT 就是将专用网内部使用的本地 IP 地址转换成有效的外部全球IP 地址,使得整个专用网只需要一个全球 IP 地址就可以与因特网连通

使用 NAT技术,需要在专用网连接到因特网的路由器上安装 NAT 软件。装有NAT 软件的路由器叫作NAT 路由器,它至少有一个有效的外部全球 IP 地址。但是 NAT 并不能从根本上解决IP 地址的耗尽问题,因为NAT 并没有增加IP 地址的个数。而真正解决 地址耗尽问题的是IPV6

重点专用网的主机是不能充当服务器直接被因特网的主机访问的,即一定要专用网的主机先发起通信。也就是说,专用网的主机不联系因特网的主机,因特网的主机就一定不会联系专用网的主机

4.3.4 子网划分与子网掩码

子网划分

两级IP地址(网络号+主机号)设计得不合理。

  • IP 地址空间的利用率有时很低。例如,对于一个只有 200 台主机的公司,分配一个A类网络,显然IP地址利用率极低。
  • 给每一个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏.
  • 两级的IP地址不够灵活。

聪明的人类想出了“子网号字段”,使得两级的IP 地址变为三级的IP 地址,这种做法叫作划分子网。划分子网属于一个单位内部的事情,单位对外仍然表现为没有划分子网的网络.

划分子网的基本思路从主机号借用若干个比特作为子网号,而主机号也就相应减少了若干个比特,网络号不变

IP 地址::=(<网络号>,<子网号>,<主机号>}

凡是从其他网络发送给本单位某个主机的 IP 分组,仍然根据 IP 分组的目的网络号先找到连接在本单位网络上的路由器,然后此路由器在收到IP 分组后,再按目的网络号和子网号找到目的子网,最后将该IP分组直接交付给目的主机。

子网掩码

子网划分与否是看不出来的,如果要告诉主机或路由器是否对一个A类、B 类、C类网络进行了子网划分,则需要子网掩码。

子网掩码是一个与IP 地址相对应的32 位的二进制串,它由一串 1和0组成其中,1对应于IP 地址中的网络号和子网号0 对应于主机号。因为1对1进行与操作,结果为 1:1对0进行与操作,结果为0。所以使用一串 1 对网络号和子网号进行与操作,就可以得到网络号

在这里插入图片描述

现在的因特网标准规定,所有网络都必须有一个子网掩码。如果一个网络没有划分子网,就采用默认子网掩码。

  • A类——255.0.0.0
  • B类——255.255.0.0
  • C类——255.255.255.0

不管网络有没有划分子网,只要将子网掩码和IP地址进行逐位的“与”运算,就一定能立即得出网络地址

使用子网掩码后,路由表的每行所包括的主要内容是目的网络地址、子网掩码和下一跳地址

此时路由器算法如下:

  • 从收到的分组首部提取目的IP 地址D。
  • 先判断是否为直接交付,用那些和路由器直接相邻的网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付,否则就是间接交付。
  • 若路由表中有目的地址为D的特定主机路由,则将分组传送给指明的下一跳路由器否则执行下一步。
  • 对路由表中的每一行的子网掩码和 D 逐位相“与”。若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行下一步。
  • 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器:否则执行下一步。
  • 报告转发分组出错。

4.3.5 CIDR

划分子网在一定程度上缓解了因特网在发展中遇到的困难。然而,在 1992 年因特网仍然面临3个必须尽早解决的问题.

  • B类地址在 1992年已分配了近一半(眼看就要在1994年3月全部分配完毕)。
  • 因特网主于网上的路由表中的项目数急剧增长(从几千个增长到几万个)。
  • 整个IPv4的地址空间最终将全部耗尽。

无分类编址(CIDR)是为解决IP 地址耗尽而提出的一种措施

  • CIDR 消除了传统的A类、B 类和C类地址以及划分子网的概念,因而可以更加有效地分配IPv4 的地址空间。CIDR 使用各种长度的“网络前缀”来代替分类地址中的网络号和子网号

    IP 地址::=(<网络前缀>,<主机号>}

    为了区分网络前缀,通常采用==“斜线记法”(又称CIDR 记法),即IP 地址/网络前缀所占位数==。

    例如,128.14.32.0/20 表示的地址块共有 212个地址(因为斜线后面的20是网络前缀的位数,所以这个地址的主机号是 12 位)。在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。可以算出,128.14.32.0/20 地址块的最小地址为 128.14.32.0,128.14.32.0/20 地址块的最大地址为128.14.7.255(128.14.00101111.11111111,下画线为网络前缀),全“0”和全“1”的主机号地址一般不使用。

  • 将网络前缀都相同的连续的IP 地址组成“CIDR 地址块”,一个CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合(也称构成超网)

    它使得路由表中的一个项目可以表示很多个原来传统分类地址的路由,因此可以缩短路由表,减小路由器之间选择信息的交换,从而提高网络性能

在使用 CIDR时,路由表中的每个项目由网络前缀和下一跳地址组成。这样就会导致查找路由表时可能会得到不止一个匹配结果。应当从匹配结果中选择具有最长网络前缀的路由,因为网络前缀越长,其地址块就越小,路由就越具体最长前缀匹配原则又称为最长匹配或最佳匹配

4.3.6 ARP

虽然在网络层转发分组用的是 IP 地址,但是最终还是要使用 MAC 地址来在实际网络的链路上传送数据帧,所以知道目的地的 IP 地址是没用的。如果有办法能够把 IP 地址直接转换成物理地址就好了,ARP 就是为了解决这个问题诞生的。

在每个主机中都有一个ARP 高速缓存,里面存放的是所在局域网上的各主机和路由器的IP 地址到硬件地址的映射表ARP 的职责就是动态地维护该表

ARP 是解决同一个局域网上的主机或路由器的IP 地址和硬件地址的映射问题的。如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络,剩下的工作就由下一个网络来做。尽管 ARP 请求分组是广播发送的,但是 ARP 响应分组是普通的单播,即从一个源地址发送到一个目的地址

在这里插入图片描述

从IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器与本网络上的另一个已知IP地址的主机或路由器进行通信,ARP就会自动地将该IP地址解析为链路层所需要的硬件地址

ARP的4种典型情况总结:

  • 发送方是主机,要把IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
  • 发送方是主机,要把IP数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址,剩下的工作由这个路由器来完成。
  • 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用ARP 找到目的主机的硬件地址。
  • 发送方是路由器,要把IP 数据报转发到另一个网络上的一个主机。这时用ARP 找到本网络上的一个路由器的硬件地址,剩下的工作由这个路由器来完成。

4.3.7 DHCP

既然 ARP 可以将 IP 地址转换成物理地址,那么有没有一种设备可以将物理地址转换成IP地址呢?RARP 可以转换,但是基本已经被淘汰了,因为物理地址转换成IP 地址这种功能已经被集成到了DHCP

动态主机配置协议(DHCP) 常用于给主机动态地分配IP 地址。它提供了即插即用连网的机制,这种机制允许一台计算机加入新的网络和获取IP 地址而不用手工参与

DHCP 是应用层协议,DHCP 报文使用 UDP 传输

DHCP服务器分配给 DHCP客户的IP 地址是临时的,因此DHCP 客户只能在一段有限的时间内使用这个分配到的IP 地址。

DHCP 服务器和DHCP客户端的交换过程如下:

  • DHCP客户机广播“DHCP发现”消息,试图找到网络中的DHCP服务器,服务器获得一个IP地址。
  • DHCP服务器收到“DHCP 发现”消息后,就向网络中广播“DHCP提供”消息,其中包括提供DHCP客户机的IP地址和相关配置信息
  • DHCP客户机收到“DHCP 提供”消息,如果接受DHCP 服务器所提供的相关参数则通过广播“DHCP请求”消息向 DHCP服务器请求提供IP地址。
  • DHCP服务器广播“DHCP确认”消息,将IP地址分配给DHCP客户机

DHCP 允许网络上配置多台 DHCP 服务器,当DHCP 客户发出 DHCP 请求时,就有可能收到多个应答信息。这时,DHCP 客户只会挑选其中的一个,通常是挑选“最先到达的信息

4.3.8 ICMP

主机在发送数据报时,经常会由于各种原因发送错误,如路由器拥塞丢弃了或者传输过程中出现错误丢弃了。

如果检测出错误的路由器或主机都能把这些错误报告通过一些控制消息告诉发送数据的主机,那么发送数据的主机就可根据 ICMP 报文确定发生错误的类型,并确定如何才能更好地重发失败的数据报(比如ICMP 报文发过来的是改变路由,那么主机就不能继续按照这个路由线路发送了,需要用另外一条路由线路发送数据)。尽管这些控制消息并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP差错报告报文

  • ICMP差错报告报文的分类
    • 终点不可达。当路由器或主机不能交付数据报时,就向源点发送终点不可达报文
    • 源站抑制。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文使源点知道应当把数据报的发送速率放慢。
    • 时间超过。当IP分组的 TTL 值被减为0后,路由器除了要丢弃该分组外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
    • 参数问题。当路由器或目的主机收到的数据报的首部中有字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文(现在一般都不发)。
    • 改变路由(重定向)。路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给其他的路由器(比当前更好的路由)。
  • ICMP询问报文的分类
    • 有回送请求和回答报文。
    • 时间戳请求和回答报文。
    • 掩码地址请求和回答报文。
    • 路由器询问和通告报文。
  • 不应发送ICMP差错报告报文的几种情况
    • 对ICMP差错报告报文不再发送ICMP 差错报告报文。
    • 对第一个分片的数据报片的所有后续数据报片都不发送ICMP 差错报告报文。
    • 对具有组播地址的数据报都不发送ICMP 差错报告报文。
    • 对具有特殊地址(如127.0.0.0 或0.0.0.0的数据报不发送ICMP 差错报告报文。
  • ICMP的两个典型应用
    • ping(ping用来测试两个主机之间的连通性,使用回送请求和回答报文
    • tracert(用来跟踪分组经过的路由)

ICMP 报文应该包括ICMP 报文的类型和代码,这样源主机收到该报文就知道是由于什么故障需要重传了,但是仅有 ICMP 的类型是不够的,源主机需要知道哪个数据报发生了这样的错误。这就需要将发生错误的那个数据报的首部也要放在该ICMP 报文中,源主机一看就知道是哪个数据错了。最后为什么还要将出错IP 数据报的数据部分的前8个字节放入ICMP 报文?因为该8个字节包含了TCP报文(UDP报文)首部中的TCP端口号(UDP 端口号)。很多人可能会对代码字段产生疑问,既然有了类型为什么还要代码?举个例子,类型值是3表示终点不可达,但是不可达也有很多种,如有网络不可达、主机不可达、协议不可达(仅是例子,不要求掌握),所以需要代码字段来更确切地表示是哪一种不可达

在这里插入图片描述

4.6 IPv6

由于IPv4 地址即将耗尽,因此必须采取相应的办法去解决。前面已经介绍过采用网络地址转换(NAT)方法以节省全球 IP 地址和采用无分类编址(CIDR)使 IP 地址的分配更加合理。这两种方法仅是优化了 IPv4 地址的使用方法,并没有从根本上解决IP 地址的耗尽问题而采用具有更大地址空间的新版本的 IPv6 才能在真正意义上解决 IPv4 即将耗尽的问题。

4.4.1 IPV6的特点

  • 更大的地址空间。IPv6 将地址从IPv4 的32位增大到了128位。
  • 扩展的地址层次结构。因为地址多了,所以可以划分更多的层次。
  • 灵活的首部格式。
  • 改进的选项。
  • 允许协议继续扩充。
  • 支持即插即用(自动配置)。
  • 支持资源的预分配。
  • IPv6 首部长度必须是 8B的整数倍,而IP4 首部是4B 的整数倍

IPv4更好的满足了预定的目标:

  • IPv6第一个主要改进也是最重要的,即 IPv6有比IPv4 长得多的地址。IPv6 的地址用128位表示,地址空间是IPv4的2128-232=296倍。
  • IPv6第二个主要改进是简化了IP分组的基本首部,它包含8个段(IPv4是12个段)这一改变使得路由器能够更快地处理分组,从而可以改善吞吐率。
  • IPv6 第三个主要改进是IPv6 更好地支持选项。这一改变对新的分组首部很重要,因为一些从前是必要的段现在变成可选的了。此外,表示选项的方式也有所不同,使得路由器能够简单地跳过与它们无关的选项。这一特征加快了分组处理速度。

4.4.2 IPv6的格式

在这里插入图片描述

  • 版本(Version):占4位,它指明了协议的版本,对于IPv6,该字段总是6。
  • 通信量类(Traffic Class):占8 位,这是为了区分不同的 IPv6 数据报的类别或优先级。已经定义了0-15共16个优先级,0的优先级最低。0~7 表示允许延迟,8~15 表示高优先级,需要固定速率传输。
  • 流标号(Flow Label):占20 位,“流”是互联网上从特定源点到特定终点的一系列数据报,“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号
  • 有效载荷长度(Payload Length):占16位,它指明IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64KB
  • 下一个首部(Next Header):占8位,它相当于IPv4 的协议字段或可选字段
  • 跳数限制(Hop Limit):占8位,源站在数据报发出时即设定跳数限制,路由器在转发数据报时将跳数限制字段中的值减 1。当跳数限制的值为0时,就要将此数据报丢弃
  • 源地址:占128 位,数据报的发送站的IP 地址
  • 目的地址:占128 位,数据报的接收站的IP地址

IPv6的3种地址类型:

  • 单播:传统的点对点通信。
  • 组播:数据报交付到一组计算机中的每一个广播可看作是组播的一例。
  • 任播:其目的站是一组主机,但数据报在交付时只交付给其中一个,通常是距离最近的那个

为了使地址简洁,通常采用冒号十六进制法表示IPv6地址。它把每16bit 用一个十六进制数表示,各值之间用冒号分隔如68E6:8C64:FFFF:FFFF:0111:1180:960A:FFFF。

通常可以把 IPv6 地址缩写成更紧凑的形式。当16位域的开头有连续的0时,可以采用缩写法表示,但在域中必须至少有一个数字,如可以把地址

5ED4:0000:0000:0000:EBCD:045A:000A:7654

缩写成

5ED4:0:0:0:EBCD:45A:A:7654。

当有相继的0值域时,还可以采用双冒号表示法进一步缩写。这些域可以用双冒号(::)表示。但要注意,双冒号表示法在一个地址中仅可以出现一次,因为0值域的个数没有编码需要从指定的总的域的个数中推算。这样,前述示范地址可以被更紧凑地书写成5ED4::EBCD:45A:A:7654。

4.5 路由协议

4.5.1 路由选择协议分类

在这里插入图片描述

  • 内部网关协议(IGP):内部网关协议是在一个自治系统内部使用的路由选择协议,它与互联网中其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如 RIP 和OSPF 路由协议。
  • 外部网关协议(EGP):若源站和目的站处在不同的自治系统中,当数据报传到另一个自治系统的边界时(这两个自治系统可能使用不同的内部网关协议),就需要使用一种协议将路由选择信息传递到另一个自治系统中,这样的协议就是外部网关协议,如BGP-4。

4.5.2 RIP

在传送数据报到目的网络的途中经过的路由器数目最少,时延小但经过路由器多的路都不走。

例如,假设从 A 地到B 地运送货物有两条路可走,一条路途中经过 10个收费站(收费站看成路由器),但是每个收费站的等待时间是 1min,另外一条路途中经过 2个收费站,但是每个收费站等待的时间是 10min,这时司机都会去选择经过2个收费站的那条路。但是如果途中需要经历超过 15个收费站,这时候司机就认为这个地方很遥远,不能到达。这句话转换到专业知识就是,RIP 只关心自己周围的世界,即只与自己相邻的路由器交换信息,并且范围限制在15跳之内,再远它就不关心了

距离-向量算法

对距离的理解:

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

RIP中的“距离”也称为“跳数”(Hop Count)因为每经过一个路由器,跳数加 1。这里的==“距离”实际上指的是“最短距离”==,RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。RIP 允许一条路最多只能包含 15个路由器。“距离”的最大值为 16 时即相当于不可达。可见,RIP 只适用于小型互联网。RIP 不能在两个网络之间同时使用多条路由,RIP 选择一个具有最少路由器的路由(最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由

RIP的三要点:

  • 仅和相邻路由器交换信息
  • 交换的信息是当前本路由器所知道的全部信息,即自己的路由表
  • 固定的时间间隔(如每隔30s)交换路由信息

距离-向量算法详情:

某路由器收到相邻路由器(其地址为X)的一个RIP报文,按以下步骤进行。

  • 先RIP有项目:把“下一跳”都改为X,并所有的“距离”值加1。

  • 对修改后的 RIP 文中的每一个项目,重复以下步骤:
    if(项中的网络不在路表中) {

    ​ 把该项目加到路由表中

    }else if(下一跳字段给出的路由器地址是同样的){

    ​ 把收到的项目替换原路由表中的项目

    }else if(收到项目中的距离小于路由表中的距离){

    ​ 进行更新

    }else{
    什么都不做

    }

  • 若3min(RIP 默超时时间为 3min)还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离设置为 16(距离为16表示不可达)。若在其后120s内仍未收到更新报文,就将这些路由从路由表中删除。

  • 返回

为什么不能把最大跳数设置更大?

因为如果链路出现故障,更大的跳数只会浪费网络资源来发送这些循环的分组。一对很明显的矛盾就出来了,设置太小,尽管收敛得快(所谓收敛快就是当路由变化时,能以最短的时间达到稳定状态),但是只适合小网络:设置大,尽管能满足大网络的要求,但是收敛慢,所以把跳数设置为16不可达较合理。

RIP报文格式

首先要清楚的是 RIP 报文使用传输层的 UDP(第5详绍)进行传送。RIP 报文从应用层交付下来要在传输层加上UDP首部形成UDP 用户数据报,然后在网络层加上IP 首部形成IP 数据报进行传送。

在这里插入图片描述

  • 首部:首部占用4B。这4B 包括1B命令(识别是进行请求操作还是进行响应操作)和1B 版本(一般有两个版本,版本1 和版本2),但是现在只占用了2B,所以就把剩下的2B用0来填充
  • 路由:每个路由器把自己的路由表告诉相邻的路由器的时候,需要通过 RIP 报文来传送。首先构造 4B 的首部,然后把自己的路由表分成几段,每一段25个路由(例如,该路由器有 100 个路由,分成4部分,每部分25 个路由),将这25个路由放在首部之后,形成一个RIP 报文发给相邻路由器。只需记住每一条路由占据 20B 的位置。至于里面有什么字段不需要理解。

RIP的优缺点:

  • RIP的优点:实现简单、开销小,收敛过程较快。
  • RIP的缺点:
    • RIP 限制了网络的规模,它能使用的最大距离为15(16表示不可达)。
    • 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加了。
    • 当网络出现故障时,RIP 要经过比较长的时间才能将此信息传送到所有的路由器,即“坏消息传播得慢”,使更新过程的收敛时间长。

4.5.3 OSPF

随着网络的扩大,一个自治系统内路由器的个数肯定会很多,但是RIP 不适合大型网络并且其收敛速度很慢,所以必须使用一种协议来完成大型自治系统的通信并尽最大努力去提高收敛的速度,这就是OSPF 协议的由来。

链路状态协议

OSPF 路由协议仅仅当网络拓扑发生变化(如增加或减少一个路由器)时,才向本自治系统的所有路由器发送信息(使用洪泛法)。而这里的信息不再是网络的距离和下一跳路由器(RIP 路由协议),而是链路状态的信息(每个路由器都有许多接口,并且每个接口都通过不同的链路连接其他的路由器,每一条链路的时延、带宽都是不一样的,如从这个路由器到那个路由器需要多少的时延就可以看作链路状态信息)。路由器就将此信息发送给自己相邻的路由器,相邻路由器根据此信息去修改自己的路由表,修改完之后又将该信息从各个端口(当然不包括信息进来的端口)传送给与它相邻的路由器。这样下去,最后的结果就是在这个自治系统内部的所有路由器都会维持一个链路状态数据库,这个数据库实际上就是全自治系统的拓扑结构图,它在全自治系统范围内是一致的,这称为链路数据库的同步

该自治系统内部的每一个路由器都有一个一模一样的链路状态数据库了。因此,每一个路由器都知道全自治系统内有多少个路由器以及哪些路由器是相连的、代价是多少等。每一个路由器就可以使用链路状态数据库中的数据(这里面的数据可以看成是数据结构中图的邻接矩阵,当代价为无穷时,就说明这两个路由器没有相连,即不可达,如果为其他数值,如代价为 5,说明这两个路由器直接相连,并且从这个路由器到那个路由器的代价为5),这样就可以通过最短路径算法去算出各个节点到其他节点的最短路径了。例如,要算路由器1到路由器 234的最短路径(给出邻接阵,即路状态数据库),就可以将路由器1看成是起始节点,然后使用3次 Dikstra 算法分别计算出路由器1到路由器234的最短路径,路由表就出来了。一旦网络拓扑又有变化,如以前没有相连的路由器,现在相连了,就又按照这样的步骤去计算路由表,这就是链路状态协议。

为了使 OSPF 路由协议能够用于规模很大的网络,并且使其收敛得更快,OSPF 路由协议将一个自治系统再划分为若干个更小的范围,称为区域

在这里插入图片描述

虽然使用Diikstra算法可以算出完整的最优路完整路径,而只存储“下一跳”

OSPF协议直接使用IP数据报传送。

OSPF协议的三要点:

  • 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
  • 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
  • “链路状态”就是说明本路由器都和哪些路由器相邻以及该链路的“度量”(metric)。只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。

OSPF的5种分组类型(了解即可)

  • 类型1:问候(Hello)分组,用来发现和维持邻站的可达性。
  • 类型2:数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
  • 类型3:链路状态请求分组,向对方请求发送某些链路项目的详细信息。
  • 类型4:链路状态更新分组,用洪泛法对全网更新链路状态。
  • 类型5:链路状态确认分组,对链路更新分组的确认。

4.5.4 RIP和OSPF的比较

  • 协议参数:RIP 中用于表示目的网络远近的参数为跳数,即到达目的网络所要经过的路由器的个数。在RIP 中,该参数被限制为最大 15。对于OSPF 路由协议,路由表中表示目的网络的参数为费用(如时延),该参数为一虚拟值,与网络中链路的带宽等相关,即OSPF 路由信息不受物理跳数的限制。因此,OSPF 协议适合应用于大型网络,支持几百台的路由器,如果规划合理甚至支持 1000台以上的路由器也是没有问题的。
  • 收敛速度:路由收敛速度是衡量路由协议的一个关键指标。RIP 周期性地将整个路由表作为路由信息广播至网络中,该广播周期为 30s。在一个较大型的网络中,RIP 会产生很大的广播信息占用较多的网络带宽资源,并且由于RIP30s 的广播周期,影响了 RIP 的收敛,甚至出现不收敛的现象。而OSPF 是一种链路状态的路由协议,当网络比较稳定时,网络中的路由信息比较少,并且其广播也不是周期性的,因此 OSPF 路由协议在大型网络中也能够较快地收敛。
  • 分层:在 RIP 中,网络是一个平面的概念,并无区域及边界等的定义。在OSPF 路由协议中一个网络或者一个自治系统可以划分为很多个区域,每一个区域通过OSPF 边界路由器相连
  • 负载平衡:在 OSPF 路由选择协议中,如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这称为多路径间的负载平衡。而 RIP 不会,它只能按照一条路径传送数据。
  • 灵活性:OSPF 协议对不同的链路可根据 IP 分组的不同服务类型而设置成不同的代价(就好像有两个人要去旅游,一个人希望以最少的时间到达目的地,多花点钱也没事;另一个人希望以最小花费到达目的地,晚点到都没事。尽管目的地一样,但这两个人的路径肯定是不一样的),因此OSPF 协议对于不同类型的业务可以计算出不同的路由,十分灵活。而这种灵活性是 RIP所没有的。
  • 以组播地址发送报文:动态路由协议为了能够自动找到网络中的邻居,通常都是以广播地址来发送。RIP 使用广播报文来发送给网络上的所有设备,所以在网络上的所有设备收到此报文后都需要做相应的处理,但在实际应用中,并不是所有设备都需要接收这种报文。因此,这种周期性以广播发送报文的形式对它就产生了一定的干扰。同时,由于这种报文会定期地发送,在一定程度上也占用了宝贵的带宽资源。后来,随着各种技术不断提升和发展,出现了以组播地址来发送协议报文的形式,如 OSPF 使用 224.0.0.5 来发送,EIGRP 使用224.0.0.2 来发送。所以OSPF 协议采用组播地址来发送,只有运行OSPF 协议的设备才会接收发送来的报文,其他设备不参与接收

4.5.5 BGP

边界网关协议 (BGP)是在不同自治系统的路由器之间交换路由信息的协议。BGP 采用的是==路径-向量路由选择协议==。

由于以下原因边界网关协议只能是力求寻找一条能够到达目的网络且比较好的路由(不能转圈),而并非要寻找一条最佳路由

  • 因特网的规模太大,使得自治系统之间路由选择非常困难。
  • 对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。
  • 自治系统之间的路由选择必须考虑有关策略。

BGP的基本概念

BGP的基本原理:

每一个自治系统的管理员要选择至少一个路由器 (可以有多个)作为该自治系统的“BGP 发言人”。一个BGP 发言人要与其他自治系统中的 BGP 发言人交换路由信息,就要先建立TCP连接(可见BGP 报文是通过TCP 传送的,也就是说BGP 报文是TCP报文的数据部分),然后在此连接上交换 BGP 报文以建立BGP 会话,再利用BGP 会话交换路由信息。各 BGP 发言人互相交换网络可达性的信息后,各 BGP 发言人就可找出到达各自治系统比较好的路由了。

BGP的特点

  • BGP 交换路由信息的节点数量级是自治系统数的量级,这要比自治系统中的网络数少很多。
  • 每一个自治系统中 BGP 发言人(或边界路由器)的数目是很少的,这样就使得自治系统之间的路由选择不过分复杂。
  • BGP支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器以及到达该目的网络所要经过的各个自治系统序列
  • 在 BGP刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表,但以后只需要在发生变化时更新有变化的部分。这样对节省网络带宽和减少路由器的处理开销方面都有好处。

BGP的4种报文

  • 打开(Open)报文:用来与相邻的另一个BGP发言人建立关系。
  • 更新(Update)报文:用来发送某一路由的信息以及列出要撤销的多条路由。
  • 保活(Keepalive)报文:用来确认打开报文和周期性地证实邻站关系。
  • 通知(Notificaton)报文:用来发送检测到的差错。

4.5.6 RIP、OSPF、BGP最终陈述

在这里插入图片描述

RIP协议、BGP协议都是应用层,OSPF是传输层协议

一个协议的实现需要依赖协议所在层次的下一层功能。简单地说,如果 TCP 需要依赖网际层协议 IP,那么它就是传输层的协议。同理,如果 RIP 需要依赖传输层的UDP,那至少它应该是被定义在UDP 之上的协议。

4.6 IP组播

4.6.1 组播的概念

组播一定是仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说非常重要。而 TCP 是一个面向连接的协议,它意味着分别运行于两台主机(由IP 地址来确定)内的两个进程(由端口号来确定)之间存在一条连接,所以是一对一的发送.

使用IP组播的缘由

有的应用程序要把一个分组发送给多台目的主机,采用的方法不是让源主机给每台目的主机都发送一个单独的分组,而是让源主机把单个分组发送给一个组播地址,该组播地址标识一组主机。网络把这个分组复制后传递给该组中的每台主机。主机可以选择加入或者离开一个组,而且一台主机可以同时属于多个分组。

IP组播的思想

源主机只发送一份数据,该数据中的目的地址为组播的组地址。组地址中的所有接收者都可以接收到同样的数据副本,并且只有组播内的主机可以接收数据,网络中的其他主机不可能收到该数据。与广播所不同的是,主机组播时仅发送一份数据组播的数据仅在传送路径分岔时才将数据报复制后继续转发。采用组播协议可明显地减少网络中各种资源的消耗。组播需要路由器的支持才能实现,能够运行组播协议的路由器称为组播路由器

在这里插入图片描述

4.6.2 IP组播地址

IP使用D类地址支持组播。D类IP地址的前缀是“1110”,因而地址范围是224.0.0.0~239.255.255.255,每一个D 类地址标识一组主机

  • 组播地址只能用于目的地址,不能用于源地址。
  • 组播数据报“尽最大努力交付”,不提供可靠交付
  • 对组播数据报不产生ICMP 差错报文。换话说,如果在 PING命后面输入组播地址,将永久不会收到响应,在讲解ICMP 的时候已经提到过。
  • 并非所有 D类地址都可以作为组播地址

IP 组播可以分为两种:

  • 只在本局域网上进行硬件组播,
  • 在因特网的范围内进行组播。

前一种虽然简单,但是很重要,因为现在大部分主机都是通过局域网接入因特网的。在因特网上进行组播的最后阶段,还要在局域网上将组播数据报用硬件组播交付给组播组的所有成员。

4.6.3 组播地址与MAC地址的换算

记住换算方法即可,下面进行例题模拟。

现假设组播地址为 224.215.145.230,先把 IP 地址换算成二进制224.215.145.230➡11100000.11010111.10010001.11100110只映射IP 地址的后面23 位,因为MAC 地址是用十六进制表示的,所以只要把二进制的 IP 地址 4位一组合就可以了其中第 24位取0,没有为什么,这是规定,即01010111.10010001.11100110 换成十六进制为 57-91-E6,然后再在前面加上固定的首部,即 01-00-5E。所以,最后结果应该是 01-00-5E-57-91-E6。

4.7 移动IP

随着移动终端设备的广泛使用,移动计算机和移动终端等设备也开始需要接入网络Internet),但传统的IP 设计并未考虑到动节点会在链接中变化互联网接入点的问题。

4.7.1 移动IP的概念

传统的 IP 地址包括两方面的意义:

  • 用来标识唯一的主机。
  • 它还作为主机的地址在数据的路由中起重要作用。

但对于移动节点,由于互联网接入点会不断发生变化,所以其IP 地址在两方面发生分离:

  • 一方面是移动节点需要一种机制来唯一标识自己
  • 另一方面是需要这种标识不会被用来路由。

而移动 IP 便是为了让移动节点能够分离 IP 地址这两方面功能,而又不彻底改变现有互联网的结构而设计的。

移动 IP 技术可以使移动节点以固定的网络 IP 地址,实现跨越不同网段的漫游功能,并保证了基于网络IP 的网络权限在漫游过程中不发生任何改变

实现移动IP需要哪些功能实体?

  • 移动节点:具有永久IP地址的移动节点。
  • 本地代理:有一个端口与移动节点本地链路相连的路由器,它根据移动用户的转交地址,采用隧道技术转交移动节点的数据报。
  • 外部代理:移动节点的漫游链路上的路由器,它通知本地用户代理自己的转交地址,是移动节点漫游链路的默认路由器。

实现移动IP需要哪些技术?

  • 代理搜索。计算机要知道自己是否正在漫游,这里就要用到代理搜索技术。
  • 申请转交地址。移动节点移动到外网时从外代理处得到的临时地址,就好像我现在到了外地,无依无靠,已经居无定所了,所以别人寄信给我没有固定地址,我要找一个有固定住址的朋友,以后如果有人写信给我就直接寄给他,然后再由他转交给我,这个固定住址在移动 IP 领域就称为转交地址。
  • 登录。移动节点到达外网时进行一系列认证、注册、建立隧道的过程。
  • 隧道。本地代理与外部代理之间临时建立的双向数据通道

4.7.2 移动IP的通信过程

  • 移动节点在本地网时,按传统的 TCP/IP 方式进行通信(在本地网有固定的地址)
  • 移动节点漫游到一个外地网络时,仍然使用固定的 IP 地址进行通信。为了能够收到通信对端发给它的IP 分组,移动节点需要向本地代理注册当前的位置地址,这个位置地址就是转交地址移动IP的转交地址可以是外部代理的地址或动态配置的一个地址
  • 本地代理接收来自转交地址的注册后,会构建一条通向转交地址的隧道,将截获的发给移动节点的 IP分组通过隧道送到转交地址处
  • 在转交地址处解除隧道封装,恢复出原始的 IP 分组,最后送到移动节点,这样移动节点在外网就能够收到这些送给它的 IP分组了。
  • 移动节点在外网通过外网的路由器或者外代理向通信对端发送IP数据报
  • 当移动节点来到另一个外网时,只需要向本地代理更新注册的转交地址,就可以继续通信了。
  • 当移动节点回到本地网时,移动节点向本地代理注销转交地址,这时移动节点又将使用传统的TCP/IP 方式进行通信。

4.8 网络层设备

4.8.1 路由器的组成与功能

路由器工作在网络层,实质上是一种多个输入端口和多个输出端口的专用计算机,其任务是连接不同的网络转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。

整个路由器的结构可划分为两大类

在这里插入图片描述

  • 路由选择部分:任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断更新和维护路由表,其==核心部件是路由选择处理器==。
  • 分组转发部分:由3部分组成:一组输入端口、交换结构和一组输出端口,交换结构从输入端口接收到分组后,根据转发表对分组进行处理,然后从一个合适的输出端口转发出去。交换结构是路由器的关键部件,它将分组从一个输入端口转移到某个合适的输出端口
    • 3种常用的交换方法:
      • 通过存储器进行交换
      • 通过总线进行交换
      • 通过互联网络进行交换

在这里插入图片描述

4.8.2 路由表与路由转发

转发就是路由器根据转发表将用户的 IP 数据报从合适的端口转发出去

路由选择则是按照分布式算法根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由

路由表是根据路由选择算法得出的,而转发表是从路由表得出的

详细工作流程如下:

  • 首先路由器从线路上接收分组,也就是图4-31 (上图)的输入端口,经过1时进行物理层处理(进行比特的接收),经过 2 时进行数据链路层处理(剥去头、尾,得到了 IP 数据报),然后分组就被送入网络层的模块,如图 4-32 所示。若接收的分组是路由器之间交换路由信息的分组(如RIP和OSPF 分组),则把这种分组送交路由器的路由选择部分中的路由选择处理器若接收的是数据分组,则按照分组首部中的目的地址查找转发表,根据得到的结果,分组就经过交换结构到达合适的输出端口。当一个分组正在查找转发表时,后面又紧跟着从这个输入端口收到另一个分组,这个分组就必须在队列中排队,因而产生了一定的时延

在这里插入图片描述

  • 从交换结构传送过来的分组先进行缓存,数据链路层处理模块将给分组加上数据链路层的首部和尾部,交给物理层后发送到外部线路。

在这里插入图片描述

若路由器处理分组的速率达不到分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因

猜你喜欢

转载自blog.csdn.net/pipihan21/article/details/129525838