azwcl
azwcl
Published on 2025-01-08 / 70 Visits
0
0

计算机网络-第四章-网络层

1. 网络层的几个重要概念

1.1. 网络层提供的两种服务

  1. 虚电路服务

  当两台计算机进行通信时,也应先建立连接(在分组交换中是建立一条虚电路 VC(Virtual Circuit));以预留双方通信所需的一切网络资源,然后双方就沿着已建立的虚电路发送分组;这样分组的首部不需要填写完整的目的主机地址,而只需要填写这条虚电路的编号(一个不大的整数),因而减少了分组的开销;

image-20241125081443481

  1. 数据包服务

  互连网采用设计思路:网络层设计的尽量简单,向其上层只提供简单灵活的,无连接的,尽最大努力交付的数据包服务;在发送分组的时候,不需要先建立连接,每个分组(即 IP 数据报)独立发送,与前后分组无关(不进行编号);网络层不提供服务质量的承诺;

image-20241125082104868

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

1.2. 网络层的两个层面

1.2.1. 路由器之间传送的信息

  1. 转发源主机和目的主机之间所传送的数据;
  2. 传送路由信息;

1.2.2. 层面

image-20241125223634843

  把网络层抽象地划分成数据层面(或转发层面)控制层面;转发分组时,独立根据本路由器的转发表转发分组极客,但是控制层面就比较复杂,因为要创建路由表,就必须要依靠许多路由器协同动作;

1.2.3. SDN (Software Defined Network)软件定义网络

image-20241125224029497

  在传统的互换网中,每一个路由器,既有转发表又有路由选择软件;但是在 SDN 结构中,所有路由器都变得简单;即路由器之间不再相互交换路由信息,而是在网络的控制层面有一个在逻辑上集中的远程控制器(在物流商可以由不同地点的多个服务器组成);远程控制器掌握各主机和整个网络的状态,能为每一个分组计算出最佳路由,在每一个路由器中生成正确的转发表,路由器的工作单纯,就收到分组,查询转发表,转发分组;

  SDN 也是最近提出的,网络又变成集中控制的了;本来是分散控制的,当然 SDN 并非要将整个互联网改成集中控制模式,这是不现实,但在一些大型专用数据中心之间的广域网,使用 SDN 来建造,可以使网络运行效率变高,带来经济效益;

2. 网际协议 IP

  • TCP/IP 协议中最主要的两个协议之一;
  • 配套使用的:
    • 地址解析协议 ARP (Address Resolution Protocol)
    • 网际控制报文协议 ICMP (Internet Control Message Protocol)
    • 网际组管理协议 IGMP (Internet Group Management Protocol)

image-20241125224841112

  在互联网标准中,ARP 被列如刀链路层协议,但是 ARP 并不知道自己是协议栈哪一层,从程序调用关系来看,ARP 实际上处于在链路层和网络层之间;网上也有说,OSI 中,属于链路层,TCP/IP 模型中,属于网络层;这里以弄清 ARP 原理为主;

2.1. 虚拟互连网络

网络是复杂的,是需要处理各种各样的问题,没有任何一种单一的网络能够适应所有用户的需求;

2.1.1. 中间设备

网络互相连接起来要使用一些中间设备:

  • 物理层:转发器(repeater);
  • 数据链路层:网桥或桥接器 (bridge),以及交换机(switch);
  • 网络层:路由器(router);
  • 网络层以上使用的:网关(gateway);

  当我们使用中间设备是网桥或转发器之类的,仅仅是把一个网络扩大了,但仍然是一个网络,不称为:网络互连;网关犹豫比较复杂,使用的少,因此网络互连一般指路由器进行网络互连和路由选择;路由器就是一台专用计算机,用来在互联网中进行路由选择;由于历史的原因,许多地方把网络层使用的路由器称为网关;

2.1.2. 虚拟互联网络

  许多计算机网络通过路由器互连,互连后的网络使用相同的网际协议 IP;因此可以将互连后网络看成虚拟互联网络,即逻辑互联网络;

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

image-20241125230521742

2.1.3. 直接交付与间接交付

  • 直接交付:不经过任何路由器;
  • 间接交付:经过某些路由器;

image-20241125230621489

image-20241125230656497

  • 跳:每一次转发称为一跳;也有人说是跃点;路由器转发分组时也常常使用 下一跳 的说法;
  • 上图,只有最后一跳是直接交付,前五跳都是间接;

2.2. IP 地址

2.2.1. IP 地址及其表示方法

  整个互联网就是单一的、抽象的网络;IP 地址就是给连接上互联网的每一台主机(或路由器)的每一个接口分配一个全世界范围内唯一的 32 位的标识符;由 互连网名字和数字分配机构 ICANN 进行分配;

  为了方便记忆,一般采用点分十进制记法 (dotted decimal notation);

image-20241125231220105

  IP 地址组成:IP 地址 ::= {<网络号>,<主机号>};网络号:标志主机所连接到的网络,一个网络号在整个互联网范围内必须是唯一的;主机号:标志该主机,一个主机号在所连接的网络中必须是唯一;故一个 IP 地址在整个互联网内是唯一的;

2.2.2. 分类的 IP 地址

image-20241126082553988

A 类,B 类,C 类 都是单播地址;D 类是多播地址;E 类是保留地址;

  • A 类地址
    • 网络号全 0 的 IP 地址标识本网络;
    • 网络号为 127 即(0111111)的,作为本地软件环回测试本主机的进程之间通信之用;发送这个目的地址的,本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络;
    • 网络号有 126 个(27 - 2);
    • 主机号占 3 个字节,但是全 0 和全 1 一般不指派;全 0 标识本主机所连接的单个网络地址;全 1 表示该网络上的所有主机;因此主机数最大为:224 - 2 个;即 16777214 个;
  • B 类地址
    • 网络号字段有 2个字节;可以指派网络数:214;即 16384 个;
    • 最大主机数 216 - 2;即 65534 个;
  • C 类地址
    • 网络数:221 个;最大主机数:28 - 2;
  • 注意
    • 针对以前,B 类的 128.0.0.0 和 C 类的 192.0.0.0 一般规定不指派;但是现在这两个网络地址可以指派[RFC 6890];

一般不指派的特殊 IP 地址:

网络号主机号源地址使用目的地址使用代表的意思
00可以不可本网络上本主机
0X可以不可本网络主机号为 X 的主机
全 1全 1不可可以只在本网络进行广播(各路由器不转发)
Y全 1不可可以对网络号为 Y 的网络上的所有主机进行广播
127非全 0、非全 1可以可以用于本地软件环回测试

2.2.3. 无分类编址 CIDR

  全称:无分类域间路由选择 CIDR (Classless Inter-Domain Routing);

2.2.3.1. 网络前缀

  将网络号变成 网络前缀;

image-20241130224525677

  CIDR 记法(斜线记法):IP 地址后面加上斜线;斜线后面标识网络前缀占的位数;

  例如:128.14.35.7/20;代表 前 20 位为网络前缀,后 12 位为主机号;

2.2.3.2. 地址块

  CIDR 将网络前缀相同的连续 IP 地址组成一个 CIDR 地址块;我们只需要知道其中一个地址,我们就知道这个地址的起始地址和结束地址,以及其这个地址块的地址数;

  例如说:128.15.35.7/20 这个时候,其最小地址和最大地址都知道;同时,我们也可以用最小地址和网络网络前缀的位数表示一个地址块(128.14.32.0/20);

2.2.3.3. 地址掩码(子网掩码)

  对于计算机来说,看不见斜线记法;所以使用的时候,必须要使用 32 位的地址掩码能够从 IP 地址迅速算出网络地址;

  通常由一连串 1 或者 0 组成;1 的个数代表网络前缀长度;在 CIDR 记法中,斜线后面的数字就是地址掩码的 1 的个数;/20 地址块的地址掩码:20 个连续 1 和 12 个连续的 0;用 CIDR 记法就是:255.255.240.0/20;

image-20241130225742279

2.2.3.4. 特殊地址块
  1. 前缀 n = 32 ;这其实就是一个 IP 地址,特殊的地址用于主机路由;
  2. 前缀 n = 31 ;这个地址只有两个 IP 地址,其主机号分别为 0 或 1;这个地址块用来点对点链路;
  3. 前缀 n = 0 ; 同时 IP 地址也是全 0,即 0.0.0.0/0 ;默认路由;
2.2.3.5. 其他
  1. 在一个大的 CIDR 地址块,往往包含小的 CIDR 地址块,因此,路由器转发表中就利用较大的 CIDR 地址块来代替许多较小的地址块,这种方法称为路由聚合(routing aggregation);减小空间,提高效率;
  2. 可以灵活分配;
  3. 网络前缀越短,地址数量越多;

image-20241130230322815

2.2.4. IP 地址的特点

  1. IP 地址是一种分等级的地址结构;
    1. IP 地址管理机构只分配网络前缀,剩下的主机号由得到的单位自行分配;
    2. 路由器根据目的主机所连接的网络前缀来转发分组,而不考虑目的主机号,减少转发表所占,缩短查找时间;
  2. IP 地址是标识一台主机和一条链路的接口;如果一台主机同时连接到两个网络,则必须要同时具有两个相应的 IP 地址,其网络前缀必须不同,这种主机称为多归属主机
  3. 一个网络(或子网)是指具有相同的网络前缀的主机的集合;因此:用转发器或交换机连接起来的若干个局域网仍为一个网络;具有不同网络前缀的局域网必须要使用路由器进行互连;
  4. 所有分配到网络前缀的网络,都是平等的;

image-20241130231212560

上图可以知道:

  1. IP 地址是标志一个主机连接在网络上的接口;
  2. 在同一个局域网上的主机或路由器的 IP 地址中的网络前缀必须要是相同的;即相同的网络号;
  3. 图中网络地址的主机号必定是 全 0 ;
  4. 所有设备都有自己的 MAC 地址,对于以太网交换机,因为是链路层设备,只有 MAC 地址;
  5. 以太网交换机连接起来的,仍然是一个网络;
  6. 路由器总是具有两个或以上的 IP 地址,其每个接口的 IP 地址的网络前缀都不同;
  7. 当两个路由器直接相连,那么连线两段接口处可以分配也可不分配 IP 地址;如果分配 IP 地址,则这段连线称为一种特殊“网络”,即点对点链路的网络,使用 /31 地址块;但为了节省 IP 地址资源,对于点对点链路网络,现在也常常不分配 IP 地址,通常称这种网络为 无编号网络 或 匿名网络;即图中 N1、N2、N3

2.3. IP 地址与 MAC 地址

   MAC 地址是数据链路层使用的地址,是硬件地址(物理地址),固化在网卡的 ROM 中;IP 地址是网络层和以上各层使用的地址,是一种逻辑地址;

image-20241130232140614

image-20241130232231079

强调几点:

  1. IP 层抽象的互联网上只能看到 IP 数据报;
  2. 路由器只根据 IP 地址进行转发;
  3. 在局域网的链路层,只可以看到 MAC 真;
  4. IP 层抽象地互联网屏蔽了下层这些复杂细节;只要我们在网络层讨论问题,就可以使用统一的、抽象的 IP 地址研究主机或路由器之间的通信了;

2.4. 地址解析协议 ARP

  实际上,我们经常会遇到,我知道机器的 IP 地址,但是需要找到响应的 MAC 地址;这就是 ARP 协议的作用;

image-20241201105338238

  RARP:根据自己的 MAC 地址,通过其找到其 IP 地址;现在 DHCP 协议已经包含 RARP 协议功能;不介绍此协议;

2.4.1. ARP 协议具体

  网络层使用 IP 协议,但实际网络的链路上传送数据帧时,最终还是要使用链路层 MAC 地址;ARP 协议解决这个问题方法:在主机的 ARP 高速缓存中,存放一个从 IP 地址到 MAC 地址的映射表,且动态更新;

2.4.2. 如何构建 ARP 高速缓存

  主机 A 要向本局域网 B 发送 IP 数据报,现在 ARP 高速缓存中查看有无 B 的 IP 地址;有则直接拿出 MAC 地址,写入 MAC 帧,发送到此 MAC 地址;如果无则:

  1. ARP 进程 在本局域网上广播发送一个 ARP 请求分组;主要内容:我的 IP 地址:xxx,MAC 地址:xxx,需要知道 IP 地址为 xxx 的 MAC 主机地址;
  2. 本局域网所有主机运行的 ARP 进程都收到此 ARP 请求分组;
  3. 主机 B 发现就是我的,收下这个请求分组,写入自己 MAC 地址,向 A 发送 ARP 响应分组;其余主机不一致,则不进行理财;ARP 请求分组为广播发送,其响应分组为普通单播;
  4. 主机 A 收到,写入高速缓存;

image-20241201132217447

2.4.3. 注意点

  1. ARP 是用来解决同一个局域网上的主机 IP 地址和 MAC 地址映射问题的;如果不是同一局域网,是转发给路由器的;这个时候 MAC 帧目的地址是路由器的;
  2. IP 地址到 MAC 地址解析是自动进行的;主机用户对这种地址解析过程是不知的;

2.4.4. ARP 四种典型情况

  1. 发送方是主机 H1,将 IP 数据报发送同网络的另一台主机 H2;H1 发送 ARP 请求分组,找到目的主机 H2 的 MAC 地址;
  2. 发送方是主机 H1,发送给另一个网络的主机 H3;H1 发送 ARP 请求分组,找到目的 N1 网络上路由器 R1 的 MAC地址;剩下的工作由 R1 来完成;
  3. 发送方是 路由器(R1),将 IP 数据报转发与 R1 连接在同一网络 N2 上的主机 H3,此时 R1 发送 ARP 请求分组,找到目的 MAC 地址;
  4. 发送方是 路由器(R1),将 IP 数据报转发到网络 N3 的一台主机(H4);此时 它进行发送 ARP请求分组,找到连接在 N2 网络上的路由器 R2 的 MAC 地址,剩下由 R2 来完成;

image-20241201134813420

2.4.5. 为什么使用两种地址?

  最终网络链路上传送的帧是按照 MAC 地址找到目的主机的,那么为什么要使用两种地址;而不是直接使用 MAC 地址来进行通信?!

  因为在全世界有各式各样的网络,使用不同的 MAC 地址;使这些异构网络互相通信必须要进行非常复杂的 MAC 地址转换工作;因此用户或主机来完成,是不可能的;即便是在对分布在全世界的以太网 MAC 地址进行寻址,也是极其困难的;IP 编址解决了这个问题,连接在互联网的主机只需要拥有一个 IP 地址,之间的通信就像在同一个网络一样方便,即便需要使用多次 ARP 来找 MAC 地址,但是这个过程是软件自动进行,对用户不可见;

2.5. IP 数据报的格式

image-20241201183314446

2.5.1. IP 数据报首部的固定部分各字段

  1. 版本:4 位,IP 协议版本;通信双方使用的 IP 协议版本必须要一致;这里讨论的 IP 版本为 4;即 IPv4;

  2. 首部长度:4 位,单位为 32 位字长,即 4 字节;因为 IP 首部固定部分是 20 字节,故这个最小值为 5;首部长度最大为 60 字节;

  3. 区分服务:占 8 位,旧标准叫服务类型,一直未使用过;1998 年 IETF 将字段改名为 区分服务(计网第八章介绍了) ,只有在使用区分服务,才起作用;一般情况不使用这个字段;

  4. 总长度:指首部和数据之和的长度,单位:字节;最大长度为 65535 字节;

  5. 标识:IP 软件在存储器维持一个计数器,每产生一个数据报,计数器就加 1,将此值赋值给标识字段;但这个标识并非是序号,因为 IP 是无连接服务,数据报不存在按序接受的问题;当数据报长度超过网络 MTU 需要分片,这个标识字段就会复制到所有数据报片的标识字段;相同的使分片后个数据报片能够正确地组装成为原来的数据报;

  6. 标志:占三位;目前只有两位有意义;

    1. 最低位记为 MF(More Fragment);MF = 1 标识后面还有分片的数据报;MF = 0 标识这已经是最后一个;
    2. 标志中间位为 DF (Don't Fragment);标识不能分片的意思;DF = 0 才允许分片;
  7. 片偏移:占 13 位;较长分组在分片后,某片在原分组的相对位置;以 8 个字节为偏移单位;即除最后一个数据报分片外,其他每个分片一定是 8 字节整数倍;

  8. 生存时间:占 8 位;标识数据报在网络中的寿命;防止无法交付的数据报无限制在互联网中兜圈子;最开始,以秒做单位,每经过一个路由器,TTL 减去数据报在路由器所消耗的事件;小于 1 秒,则减 1;直到 0 丢弃;现在改成跳数限制;每次转发前 TTL - 1 ;减小为 0 则丢弃;

  9. 协议:占 8 位;标识此数据报携带的数据使用何种协议;让 IP 层知道上交哪个协议处理;

  10. 首部校验和:16 位;只进行校验数据报的首部,不校验数据部分;因为数据报每经过一次路由器,都要重新计算;

  11. 源地址

  12. 目的地址

2.5.2. IP 数据报首部的可变部分

  一个选项字段;用来支持 排错、测量以及安全等;1 字节到 40 字节不等;用 0 填充,补齐为 4 字节整数倍;是为了增加 IP 数据报的功能,但是很少使用;新的 IPv6 将其首部长度做成固定了;

3. IP 层转发分组的过程

3.1. 基于终点的转发

  分组在互联网传送和转发是基于分组首部的目的地址,因此这种转发方式称为 基于终点的转发

3.1.1. 转发过程

  32 位 IP 地址是由两级组成的;前一部分是前缀,后一部分是主机;我们先查找目的网络,找到后,将分组在这个网络上直接交付目的主机;因为网络数远远小于主机数,所以极大压缩转发表大小,加速转发;

3.1.2. 转发分组如何找到下一跳路由器?

  分组首部并没有指明下一跳路由器的 IP 地址,如何找到下一跳路由器?当路由器收到一个待转发分组后,从转发表得出下一跳路由器的 IP 地址,不是把这个地址填入首部,而是递交数据链路层的网络接口软件;由其将路由器的 IP 地址转换成 MAC 地址(ARP 协议),将此 MAC 地址放入链路层 MAC 帧首部,利用 MAC 地址传送给下一跳路由器链路层,再取出 MAC 帧数据部分,交给网络层;

3.1.3. 寻找前缀匹配的过程

  对于查找转发表来说,就是寻找前缀匹配的过程;

3.2. 最长前缀匹配

  采用 CIDR 编址,如果一个分组在转发表中可以找到多个匹配的前缀,应该选择前缀最长的作为匹配的前缀,这个原则称为:最长前缀匹配;网络前缀越长,那么地址块越短,因而路由就越具体;为了迅速查找,可以按照前缀长短排序,查找到最长,就可以直接结束查找;

3.2.1. 特殊的两种路由

  1. 主机路由:特定主机路由;指定目的主机的 IP 地址专门制定的路由;在转发表对应主机路由的网络前缀是 a.b.c.d/32;主机路由在转发表中放在最前面;让网络管理人员更方便控制网络和测试网络,同时也可以考虑某种安全问题;
  2. 默认路由:即不管目的网络在哪里,都由指定的路由器 R 来处理;这在网络只有很少的对外连接时非常有用;在转发表中用特殊前缀 0.0.0.0/0 来表示默认路由;不管啥地址,进行 AND 运算,结果一定全 0,必然与 0.0.0.0/0 匹配,则这个时候交给下一跳;

3.2.2. 分组转发算法

  1. 从收到的分组的首部提纯目的主机的 IP 地址 D(即目的地址);
  2. 从查找有特定主机路由(目的地址为 D),就按照这条路由的下一跳转发分组;否则从转发表中找下一行开始检查,执行 3;
  3. 这一行的子网掩码与目的地址 D 按位进行 AND 运算;如果运算与本行前缀匹配,则查找结束;否则若有下一行,则对下一行进行 3;
  4. 若转发表中有一个默认路由,则按照指明的接口,将分组传送到指明的默认路由器;否则,报告转发分组出错;

3.3. 使用二叉线索查找转发表

  使用 CIDR 之后,因为不知道目的网络的前缀,使转发表查询过程更加复杂,转发表项目很大,效率就是很重要的;例如:连接路由器的线路速率是 10Gbit/s ,而分组平均长度:2000 bit ;那么路由器平均每秒可以处理 500 w 分组,记作:5 Mpps;路由器处理一个分组只有 200 ns;

  对于 CIDR 的转发表最简单的查找算法就是对所有可能的前缀进行循环查找,从最长的前缀开始查找;对一个可能的前缀,进行目的地址与子网掩码按位 AND 运算;为了有效查找,使用 二叉线索,一种特殊的数,IP 地址从左到有,决定了从根节点向下层延伸的路径,而二叉线索中的哥哥路径就代表转发表中存放的各个地址;这样,深度最多只有 32 层;

image-20241203083059649

  当其 IP 地址按路径寻找到最后一个叶节点时,仍需要进行 AND 运算的;结果匹配转发,不匹配丢弃;为了提高查找速度,广泛使用各种压缩技术;例如上图最后两个地址都是1011,那么只要一个地址前四位是 1011,即跳过前面四位,直接从第五位开始,当然,制作经过压缩的二叉线索需要更多时间,但查找转发表就可以提高速度;

4. 网际控制报文协议 ICMP

  为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP;ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告;ICMP 是互连网标准协议,但不是高层协议,而是 IP层协议;ICMP 作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送;

image-20241203222739102

4.1. ICMP 报文的种类

  分为:ICMP 差错报告报文ICMP 询问报文

ICMP 报文种类类型的值ICMP 报文的类型
差错报告报文3终点不可达
差错报告报文11时间超过
差错报告报文12参数问题
差错报告报文5改变路由(redirect)
询问报文8 或 0回送请求或回送回答
询问报文13 或 14时间戳请求或时间戳回答

  ICMP 标准在不断更新,一些已经不再使用了;

  代码字段用来进一步做区分某种类型中的几种不同情况;校验和来校验整个 ICMP 报文;(IP 数据报首部校验和不校验 IP 数据报内容,因此不能保证 ICMP 报文不产生差错);

4.1.1. ICMP 差错报告报文

image-20241203230712923

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

4.1.2. 不应发送 ICMP 差错报告的几种情况

  1. 对 ICMP 差错报告报文,不再发送 ICMP 差错报告报文;
  2. 对第一个分片的数据报片的所有后续数据报片,都不发送 ICMP 差错报告报文;
  3. 对具有多播地址的数据报,都不发送;
  4. 对特殊地址(如127.0.0.0 或 0.0.0.0)的数据报,不进行发送;

4.1.3. 常见 ICMP 询问报文

  1. 回送请求或回送回答:由主机或路由器向一个特定的目的主机发出询问;收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文;用来测试目的站是否可达以及了解其有关状态;
  2. 时间戳请求或时间戳回答:利用报文记录的时间戳,计算当前网络往返时延;

4.2. ICMP 的应用

  1. ping 命令
  2. traceroute命令

5. IPv6

5.1. IPv6 基本首部

5.1.1. 主要变化

  1. 更大的地址空间;IPv6 从 32 位增大到 128 位;地址空间增大了 296 倍;
  2. 扩展的地址层次结构;地址空间大,可以划分为更多的层次;
  3. 灵活的首部格式;与 IPv4 不兼容;定义很多可选地扩展首部,提供比 IPv4 更多功能,还可以提高路由器处理效率,因为路由器对扩展首部不进行处理(除逐跳扩展首部外);
  4. 改进的选项:IPv6 允许数据报包含有效项的控制信息;但首部长度固定;
  5. 允许协议继续扩充
  6. 支持即插即用(即自动配置);因此 IPv6 不需要 DHCP;
  7. 支持资源的预分配;IPv6 支持实时视像等要求保证一定带宽和时延的应用;
  8. IPv6 首部改为 8 字节对齐;

  IPv6 由两大部分组成,即基本首部和后面的有效载荷;有效载荷称为净负荷;有效载荷允许有零个活多个扩展首部,再后面是数据部分;

image-20241203233548926

5.1.2. 对首部中的某些字段的更改

对于 IPv4,IPv6 对首部的某些字段进行更改:

  1. 取消了首部长度,因为首部长度固定(40字节);
  2. 取消的服务类型字段,因为优先级和流标号实现了服务类型字段功能;
  3. 取消了总长度的字段,该用有效载荷长度字段;
  4. 取消了标识、标志、片偏移字段,包含在分片扩展首部中;
  5. 将 TTL 改成跳数限制字段,作用一样;
  6. 取消协议字段,该用下一个首部字段;
  7. 取消校验和字段,加快路由器处理速度;
  8. 取消了选项字段,用扩展首部来实现选项功能;

5.1.3. IPv6 首部字段

image-20241204083223555

  1. 版本:4 位;指明协议版本,IPv6 这里是 6;

  2. 通信量类:8 位;为了区分不同的 IPv6 数据报的类别活优先级;与 IPv4 中区分服务字段作用类似;

  3. 流标号:20 位;IPv6 的一个新的机制是支持资源的预分配,允许路由器把每一个数据报与一个给定的资源分配相联系;IPv6 提出 流 的首相概念;即 **互连网络上从特定源点到特定终点(单播或多播)的一系列数据报(如实时音频或视频传输),而在这个 “流” 所经过的路径上的路由器都保证指明的服务质量;**所有属于同一个流的数据报都具有同样的流标号;因此,流标号对实时音频/视频数据的传送特别有用;对传统邮件或非实时数据,流标号无用,置 0 即可;

  4. 有效载荷长度:16 位;指明 IPv6 数据报除基本首部外的字节数(所有扩展首部都算在有效载荷之内);最大值:65535 字节;

  5. 下一个首部:8 位;相当于 IPv4 协议字段或可选字段;

    1. IPv6 数据报没有扩展首部时,下一个首部字段作用和 IPv4 的协议字段一样;告知后面数据应该交付 IP 层上面的哪一个高层协议;
    2. 当出现扩展首部,下一个首部值表示后面第一个扩展首部的类型;
  6. 跳数限制:8 位;防止数据报无限期存在;最大为 255 跳;

  7. 源地址:128 位;

  8. 目的地址:128 位;

扩展首部:

  • 逐跳选项;
  • 路由选择;
  • 分片;
  • 鉴别;
  • 封装安全有效载荷;
  • 目的站选项;

如果 IPv6 使用扩展首部,那么他的 下一个首部 字段会指出;

5.2. IPv6 地址

5.2.1. 基本类型地址

  1. 单播
  2. 多播
  3. 任播:终点是一组计算机,但数据报只交付其中一个,通常是路由算法得出最近的一个;

5.2.2. 相关概念

  1. 节点:实现 IPv6 的主机和路由器;

  2. 接口:节点的每一个接口;其都会指派一个 IPv6 地址;

  3. 冒号十六进制记法

    1. fe80::a08a:86e9:0:e58e
    2. 在该记法中,允许将数字前面的 0 省略了;
    3. 可以允许 零压缩;即:FF05:0:0:0:0:0:0:B3 --> FF05::B3;零压缩只可以在地址中使用一次;且不可省略末尾零;

5.2.3. IPv6 常用地址分类

地址类型地址块前缀前缀的 CIDR 记法说明
未指明地址00...0 (128 位)::/128只可当源地址
环回地址00...1(128位)::1/128IPv4 环回地址一样
多播地址11111111FF00::/8功能和IPv4 一样,占总数的 1/256
本地站点单播地址1111111011FEC0::/10占 1/1024;可以使用本地站点地址通信,不可与互联网上其他主机进行通信
本地链路单播地址1111111010FE80::/10单一链路上使用‘;占 1/1024
全球单播地址非常灵活,使用最多的;

全球单播地址:IPv6 单播地址划分方法非常灵活;可以按照下面任意一种;

image-20241223225750326

5.3. IPv4 --> IPv6 过渡

5.3.1. 双协议栈

  在完全过渡到 IPv6 前,让一部分主机同时具有两种协议栈;代价很高;

5.3.2. 隧道技术

image-20241223230054078

  在 IPv6 数据报要进入 IPv4 的网络时,将其封装成 IPv4 数据报;整个 IPv6 变成 IPv4 数据报的数据部分;离开 IPv4 的时候,再将数据部分交给煮鸡蛋额 IPv6 协议栈;(IPv4 的首部的协议字段设置为 41,代表 IPv6 数据报)

5.4. ICMPv6

  与 IPv4 相同,IPv6 也不能保证数据报的可靠交付,因为互联网中的路由器可能会丢失数据报;因此 IPv6 也需要使用 ICMP 来返回一些差错信息;对应则是 ICMPv6,比 ICMPv4 复杂很多,地址解析协议 ARP 和网际组 IGMP 的功能均合并到 ICMPv6 中;

image-20241224083142862

ICMPv6 报文分类:

  • 差错报文;
  • 信息报文;
  • 邻站发现报文(ND 协议);
  • 组成员关系报文(MLD 协议);

6. 互联网的路由选择协议

6.1. 基本概念

6.1.1. 理想的路由算法

  1. 算法必须要完整和正确;
  2. 算法在计算上应简单;
  3. 算法应能适应通信量和网络拓扑的变化,即自适应性;(按照这个分:静态路由选择策略 & 动态路由选择策略)
  4. 算法应该具有稳定性;
  5. 算法应该是公平的;
  6. 算法应该是最佳的(最佳只是相对于某种特定要求下得出的较为合理的选择而已);

6.1.2. 分层次的路由选择协议

  1. 原因:

    • 互联网规模非常大;

    • 许多单位不愿意外接了解自己单位网络的布局细节和本部门采用的路由选择协议,但同时希望连接到互联网上;

      故,将互联网划分成较小的自治系统(autonomous system)即 AS;每一个 AS 对其他 AS 表现出:一个单一的和一致的路由选择策略

  2. 路由选择协议

    • 内部网关协议 IGP:在一个自治系统内部使用的路由选择协议;(AS 内部的路由选择:域内路由选择);具体协议有多种:如 RIP 和 OSPF 等
    • 外部网关协议 EGP:在不同 AS 之间选择的;(AS 之间的路由选择:域间路由选择);目前使用时 BGP-4;

    image-20241224221935059

6.2. 内部网关协议 RIP

6.2.1. 协议 RIP 的工作原理

  1. 简介

      中文名:路由信息协议;一种分布式的基于距离向量的路由选择协议;最大优点:简单;

  2. 要求

      网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录;距离的定义:从一个路由器到直接连接的网络距离定义为 1,从一个路由器到非直接连接的网络的距离定义为所经过的路由器数+1;

  3. 限制

      RIP 协议的距离也称为 跳数;RIP 允许一条路径最多只可以包含 15 哥网络;因此距离等于 16 即相当于不可达;所以 RIP 协议只适用于小型互联网;

      除了跳数限制外,RIP 不能在两个网络之间同时使用多条路由;RIP 选择一条具有最少网络数的路由,即最短路由;哪怕有一条高速但网络数较多的路由,也不会选择;

  4. 特点

    1. 仅和相邻路由器交换信息;
    2. 交换的信息是当前本路由器所知道的所有信息,即自己现在的路由表;
    3. 按固定时间间隔交换;
  5. 算法

      对于 RIP 协议中路由表最主要信息是:到某个网络最短的距离以及下一跳的地址;更新原则是找到最短距离;这种更新算法称为距离向量算法;

6.2.2. 距离向量算法

  1. 对于每一个相邻路由器发送的 RIP 报文执行的步奏:
    1. 对地址为 X 的相邻路由器发送来的 RIP 报文,先修改报文的所有项目,将下一跳的地址改成 X ,且距离都 +1;每一个项目都有三个关键数据:(到目的网络 Net,距离 d,下一跳路由器 X);
    2. 对修改的 RIP 报文的每一个项目进行与自己路由表替换;无则添加;有则比较:如果下一跳地址也是 X,则更新掉;否则,如果距离小于路由表的原来距离,则更新,不然不做任何操作;
    3. 三分钟还没有接收到相邻路由器的更新路由表,则把此相邻路由器记作不可达路由器,即距离设置为 16;
    4. 结束
  2. 这就是 Bellman-Ford 算法(或 Ford-Fulkerson 算法)

6.2.3. RIP 报文

image-20241224224304008

  RIP 报文由首部和路由部分组成;在路由部分需要填入自治系统号 ASN(autonomous system number ),目的网络地址(包括网络的子网掩码),下一跳路由器地址以及到此网络的距离;一个 RIP 报文最多可以包括 25 哥路由;如果超过,必须要再用一个 RIP 报文来进行传送;

6.2.4. 坏消息传的慢

  RIP 存在一个问题,当网络故障的时候,需要较长时间,才能将此信息传送到所有的路由器;好消息传送快,但是坏消息传送慢;

  原因:当 R1 到 Net1 出现故障,那么 R1 会将到网络 Net1 改为 16;但是很可能需要 30 秒才能更新信息给 R2;在这之前,将自己的路由表发送给 R1,其中有:Net1,2,R1;这一项,让 R1 误认为可以经过 R2 到达 Net1,即 Net1,3,R2;然后将更新后的路由表给 R2;R2 收到后,又认为 R1 可以到达,更新为 Net1,4,R1;如此更新下去,直到到达 16;这导致坏消息非常慢,需要数分钟;

  为了使坏消息传播更快,采用:让路由器接收到某特定路由信息的接口,而不让同一路由信息再通过此接口反向传送;增加更新频率;触发式更新;优化网络拓扑等;

6.2.5. 总结

  • 实现简单,开销较小;
  • 限制网络规模;规模越大,开销也增加;坏消息传的慢;

6.3. 内部网关协议:OSPF 协议

6.3.1. 简介

  1. 名称:开放最短路径优先 OSPF ( Open Shortest Path First );开放:公开发表的;最短路径优先:Dijkstra 提出的最短路径算法 SPF;(转向-->算法详细介绍);
  2. OSPF 只是协议的名字,不是代表其他的路由选择协议不是“最短路径优先”;

6.3.2. 特点

  1. OSPF 最主要的特征是:使用 链路状态协议,而不是 RIP 的距离向量协议;
  2. 向 AS 中所有路由器发送信息,采用 洪泛法;
  3. 发送的是与本路由器相邻的所有路由器的链路状态;
  4. 链路发生变化或隔一段时间,就采用洪泛法向所有路由器发送链路状态信息;

6.3.3. 详细介绍

  1. 从特点可以看出,因为各个路由器频繁交换链路状态信息,因此最终所有路由器能建立一个链路状态数据库;这个其实就是全网的拓扑结构图;这个在全网范围内是一致的(链路状态数据库的同步);所以每个路由器知道全网有多少路由器,怎么相连,代价是多少;最终构造出来自己的路由表;(RIP 不知道全网的);
  2. OSPF 的链路状态数据库可以较快地更新,使路由器可以及时更新路由表;OSPF 的更新过程收敛的快是其重要优点;
  3. 为了使 OSPF 适应大的网络,OSPF 将一个 AS 划分成若干个小的范围,叫做区域;
  4. 区域划分的好处:洪泛法交换在区域内,而不是整个 AS ,减少通信量;OSPF 使用层次结构的区域划分;在上层的区域叫做主干区域(backbone area);主干区域的标识符规定为:0.0.0.0;主干区域用来连接其他在下层的区域;从其他区域来的信息都由 **区域边界路由器(area border router)**进行概括;例如下图,R3,R4,R7 就是区域边界路由器;其中 R6 称为自治系统边界路由器;

image-20241228153903024

  1. 不仅如此,OSPF 还有别地特点:如支持管理员指定代价;支持多路径的负载均衡;支持鉴别功能,保证在可信路由器之间交换;支持可变长度的子网划分和CIDR;每个链路状态带上 32 位序号,序号越大越新,其增长速率不会超过 5 秒 1 次,故 600 年内不会重复;

6.3.4. OSPF 的五种分组

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

  OSPF 分组指作为 IP 数据报的数据部分进行传送;不用 UDP,而是直接使用 IP 数据报;OSPF 构成数据很短,减少通信量,且无需分片传送;

image-20241228160017713

  OSPF 规定,每两个相邻路由器隔 10 秒需要交换一次问候分组;保证可达;40 秒未收到问候分组,表示不可达,立即修改链路状态数据库,重新计算;两个同步的路由器叫做 完全邻接的 路由器;不完全邻接的,虽然在物流上邻接,但是其链路状态数据库并没有达到一致;

6.3.5. 工作流程

  1. 一台路由刚开始工作,通过问候分组知道哪些相邻路由器;以及数据发往相邻路由器所需代价;但是如果所有路由广播自己的本地状态信息,那么会导致开销过大;所以采用如下:
  2. OSPF 让每个路由器用数据库描述分组和相邻路由器交换本数据库已有的链路状态摘要信息,摘要信息主要是指出哪些路由器的链路状态信息已经写入了数据库;交换之后,采用请求分组,请求缺少的详细信息;如此依赖,就建立了链路数据库;
  3. 只要有一个路由器链路状态发生变化,就使用链路状态更新分组,用洪泛法向全网更新;OSPF 采用可靠的洪泛法,如图其为,先发送给相邻三个路由器,接收到的再转发,且需要确认;

image-20241228160915305

6.4. 外部网关协议 BGP

6.4.1. 协议 BGP 的主要特点

  在外部网关协议中,目前采用第 4 版本;BGP 是尤为重要的;如果没有 BGP,那么 RIP 和 OSPF ,只能在一个 AS 内工作,大家都是孤岛一般的存在;因为内部网关协议,主要是设法使数据报在一个 AS 中尽可能有效地从源站传送到目的站;在一个 AS 内部也不需要考虑其他方面的策略;然而 BGP 使用环境不同;因为如下:

  1. 互联网的规模过于庞大,使得 AS 之间路由选择非常困难;
  2. 自治系统 AS 之间的路由选择必须考虑有关策略;可能,我 AS1 到 AS2 需要经过 AS3,但是 AS3 不愿意给你经过;

  因为如上的规则,所以,BGP 只能是力求选择一条能够到达目的网络前缀且比较好的路由,而并非计算出一条最佳路由;BGP 采用路径向量路由选择协议,它与距离向量协议和链路状态协议都有很大区别;

6.4.2. BGP 路由

  在一个 AS 中有两种不同功能的路由器,即边界路由器(或边界网关)和内部路由器;一个AS 至少有一个边界路由器和相邻 AS 的边界路由器直接相连,才可以讨论 BGP;也正因为边界路由器的存在,AS 才可以利用协议 BGP 交换可达性路由信息;

image-20241230082356157

  当两个边界路由器(R1,R2)进行通信的时候,必须先建立 TCP 连接(半永久连接);像 R1 和 R2 之间这种连接称为 eBGP (e: external 外部);R1 可通过 eBGP 向 R2 发送 BGP 路由:X,AS1,R1 ;这样,通过 eBGP连接,AS2 的边界路由器 R2 就知道到达 AS1 中的前缀X 的 BGP 路由;

  但是只有 R2 知道,到 AS1 的前缀 X 的 BGP 路由 是不够的;R2 应该把知道的 BGP 路由转发给 AS 内部的其他路由器;为此,协议 BGP 规定,在 AS 内部,两个路由器之间还需要建立 iBGP(i: internal),iBGP 也使用 TCP 连接传送 BGP 报文;R2 在 AS2 内部转发自己收到的 BGP;至此,AS2 内所有路由器知道这条 BGP 路由信息;

image-20241230083138224

  且 BGP 规定,在一个 AS 内部所有的 iBGP 必须要是全连通的,即使两个路由器之间没有物理连接,但是他们之间仍然有 iBGP 连接;

  eBGP 和 iBGP 不是两个不同的协议;eBGP 是不同 AS 的两个对等端的 BGP 连接,而 iBGP 是同一 AS 的两个对等端的 BGP 连接;从 eBGP 接收到的 BGP 路由,可以通过 iBGP 告诉同一 AS 内的对等端,反之亦然;

  BGP路由一般格式:BGP 路由 = 前缀,BGP 属性 = 前缀,AS-PATH,NEXT-HOP;前缀就是 BGP 路由终点(子网前缀);BGP 属性有很多,但最重要的就是 自治系统路径和下一跳;

image-20241231082552138

  在 AS2 内的路由器 R4 收到 BGP 路由 "X, AS1, R1" 之后,怎么构建转发表?首先,R4 将 BGP 路由七点转换,原来 BGP 路由是 R1 -> X;但是 R4 不知道 R1,所以转换成 R2 -> R1 -> X;其次 R4 需要利用内部网关协议,找到 R4 到 R2 最佳路由中的下一跳 R3;则在 R4 之中路由表为:<X, R3, 转发表下一跳 R3 表示前缀 X 可达>;同时在 R3 构建转发表 <X, R2>;然后 R4 只要收到要到达 X 的前缀分组,则按照 R4 -> R3 -> R2 -> R1 -> X;

  每一个路由收到新的 BGP 路由通告,必须要经过上述步奏来填充自己的转发表;实际中,转发表中前缀匹配项目都采用 CIDR 记法来表示;因为路由器有两个以上的接口,故下一跳项目用进入该路由器的 IP 地址来表示;

6.4.3. 三种不同的自治系统 AS

image-20241231083535353

  1. 末梢 AS:这些 AS 只会接受分组,或者发送给其直接连接的 AS,不会将其他 AS 的分组转发给另一个 AS;末梢 AS 必须要向所连接的 AS 付费才可以发送或接受分组;当然,也可以同时连接到 两个或者多个 AS,称为多归属 AS;增加链接可靠,如果有一条线路寄勒,还有另一条可以用;
  2. 穿越 AS:往往是拥有很好的高速通信干线的主干 AS,其任务就是为其他的 AS 有偿转发分组;
  3. 对等 AS:事先协商的 AS,彼此之间发送和接受分组都不收费;

6.4.4. BGP 路由选择

  如果从一个 AS 到另外一个 AS 中前缀 X 只有一条 BGP 路由,那么不存在选择 BGP 路由的问题,因为此时 BGP 路由是唯一的;但是如果有多条,则按照以下顺序来进行选择:

  1. 本地偏好 LOCAL-PREF (local preference) 值 最高的路由首先选择;可以由路由器管理员来设置;

  2. 选择 AS 跳数最少得路由;(不是最优的,下图中,会选择 AS1 -> AS4 -> AS5,但是 AS4 是个很大的 AS,转发次数反而更多);

    image-20250101220601762

  3. 热土豆选择算法;如果两条 BGP 路由本地偏好相同,且经过 AS 个数也想通;这个时候,AS 中每个路由器采用热土豆路由算法,即通过内部网关协议,让分组尽快离开 AS,而不考虑从哪个路由器离开;即经过最少转发次数离开本 AS;

  4. 选择路由器 BGP 标识符的数值最小的路由器;当上述方法都无法选择的时候,那么使用 BGP 标识符来选择;在 BGP 交互的报文中,其首部有一个 4 字节的字段,为 BGP 标识符,即 BGP ID;富裕一个无符号整数作为运行 BGP 路由器的唯一标识符;如果具有多个接口的路由器有多个 IP 地址,则 BGP ID 使用该路由器的 IP 地址中数值最大的一个;

6.4.5. BGP 四种报文

  1. OPEN 报文:用来建立 BGP 连接对等端建立关系;
    • 相互识别对方,协商一些协议参数(如计时器时间);
  2. UPDATE 报文:用来通告某一路由信息,以及列出要撤销的路由;
    • 用来撤销它以前曾今通知过的路由,或者宣布增加新的路由;
    • 撤销可以一次撤销多条;但是新增,更新报文只能增加一条;
  3. KEEPALIVE 报文:用来周期性验证与对等端的连通性;
    • 对等端之间定期传送 BGP 路由表是不可取的,因为 BGP 路由表往往过于庞大,让网络通信量巨大;
    • 因此协议 BGP 采用两个对等端之间,周期性交换 KEEPALIVE 报文,标识协议工作正常;其报文只包含 BGP 报文的通用首部(19字节长);
    • 每个路由器都有一个保持时间计时器;路由器每收到一个 BGP 报文,这个计时器就重置一次,从 0 开始计时;如果商定的保持时间内没有收到对等端发来的任何一种 BGP 报文,就认为对方不能工作了;发送 KEEPALIVE 报文的事件间隔取双方事先商定的保持时间的 1/3;若两个对等端不一致,则取时间小的为准;保持时间也可以为 0 ,代表永不发送 KEEPALIVE 报文,标识永远正常;
  4. NOTIFICATION 报文:用来发送检测到的差错;

6.4.5. 坏消息不会传的慢

  BGP 很容易解决坏消息传的慢,如果一个路由器或链路出现故障,可以从不止一个邻站获得路由信息,很容易选择新的路由;

6.4.6. 新旧 BGP

  ASN 升级到 4 字节之后,ASN 范围从 0-65535 扩大到 0 - 4294967295;BGP 路由新,路径数学标记为 AS4-PATH;同时使用新旧,需要解决正确识别 ASN 问题;

6.4.7. BGP 载体

  作为 TCP 报文数据部分来传送的;

image-20250102083336727

6.5. 路由器构成

6.5.1. 路由器的结构

  1. 简介

    一种多输入多输出端口的专用计算机,任务是转发分组;整个路由可以分成两个部分:路由选择部分和分组转发部分;

  2. 构成框图

image-20250104212047982

  1. 路由选择部分

      路由选择部分也叫 控制部分,或 控制层面,其核心构件是路由选择处理机;路由选择处理机的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断更新和维护路由表;

  2. 分组转发部分

      分组转发部分,即数据层面,由三部分组成:交换结构、输入端口、输出端口;其中交换结构又称为交换组织,作用就是根据转发表对分组进行处理;将分组从一个端口进入,从一个合适端口转发出去,交换结构本身就是一种网络,但这种网络包含在路由器之中,因此交换结构可以看成是“在路由器中的网络”;

      当一个分组正在查找转发表,后面紧跟从这个输入端口收到另一个分组;这个后到的分组就必须在队列中排队等待;因而也会产生一定时延;同理,输出端口也会产生一定时延;由此可见,如果说分组处理速度跟不上进入队列速度,那么队列存储空间最终必定减少,这会使队列溢出,从而后面进入的分组丢失;

6.5.2. 交换结构

  交换结构式路由器的关键构件;作用是将分组从一个输入端口转移到某个合适的输出端口;

  最开始路由器是利用普通计算机,用计算机的 CPU 作为路由器的路由选择处理机;路由器的输入和输出功能就像传统 OS 的 I/O 设备一样;当路由器的某个输入端口收到一个分组的时候,中断方式 --> 通知路由选择处理机;分组复制到存储器;然后处理;再复制到合适输出端口;现在很多也通过存储器交换;

  总线式:数据报从输入端口通过共享总线直接传送到合适的输出端口,而不需要路由选择处理机的干预;

  纵横交换结构(互连网络):有 2N 条总线,使 N 个输入端口和 N 个输出端口相连;无阻塞;

image-20250105210620462

7. IP 多播

7.1. IP 多播的基本概念

image-20250105224815624

  与单播相比,在一对多通信中,多播可以大大节约网络资源;如上图,单播,需要发送 90 个单播;但是多播,只需要发送一次,路由器转发的时候,复制成三个副本向 R2,R3,R4 转发即可;当分组到达目的局域网,因为局域网有硬件多播功能,所以**不需要复制分组,**在局域网上的多播组成员都可以接收到;

  多播组的主机数很大的时候,采用多播可以明显减轻网络资源消耗;互联网上多播靠路由器实现,路由器需要增加识别多播数据报的软件;可以运行多播协议的路由器称为多播路由器(multicast router);多播路由器也可以转发普通的单播 IP 数据报;

  在互联网上进行多播就是 IP 多播;IP 多播,需要使用多播 IP 地址;多播组的标识符就是 IP 地址的 D 类地址,其前四位为 1110,范围:224.0.0.0 - 239.255.255.255;每一个 D 类地址标志一个多播组;这样 D 类地址可以标志 228 个(即 2.6 亿多)多播组;多播数据报是尽力交付的;首部协议字段为 2,使用 IGMP 网际组管理协议;

  IP 多播分为两种,一种是局域网上硬件多播,一种是互联网范围多播;

7.2. 在局域网上硬件多播

  MAC 地址 01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF 地址作为以太网多播地址;有 23 位可做多播,D 类 IP 地址有 28 位,这 28 位只有后 23 位才可以映射以太网多播地址中的后 23 位,因此是多对一的关系;例如 IP 多播地址:224.128.64.32 (E0-80-40-20)与 224.0.64.32 (E0-00-40-20) 转换后都是 01-00-5E-00-40-20;因此收到多播数据报的主机,还要在 IP 层利用 IP 数据报首部 IP 地址进行过滤,把不是本主机要接收的数据报丢弃;

image-20250106083433143

7.3. 网际组管理协议 IGMP 和多播路由选择协议

7.3.1. IP 多播需要的两种协议

image-20250107080513479

  1. 网际组管理协议 IGMP( Internet Group Management Protocol ):IGMP 让多播路由器知道多播组成员信息;针对是本地局域网上的使用范围,不针对互联网范围对多播组成员进行管理;

  2. 多播路由选择协议:仅 IGMP 协议不能完成多播任务,连接在局域网上的多播路由器还必须和互联网上其他的多播路由器协同工作,以便将多播数据报用最小代价传送给所有的组成员;该协议会复杂很多;

  3. 需要考虑的问题:

    a. 如下图,路由器 R 不应该不应该向 N3 网络发送多播组 M1 分组;但是每一台主机可以随时加入和离开一个多播组,如果主机 G 加入了多播组M1,那么此时就需要转发多播组的分组给 N3;即:多播转发必须动态地适应多播组成员的变化;

    b. 如果主机 E 和 F 都是多播组 M2 的成员;如果多播数据报来自 F,那么 R 需要转发给 N2;如果是来自主机 A ,那么应转发给 N2 和 N3;因此:多播路由器在转发多播数据报时,不可仅仅根据多播数据报中目的地址;

    c. 多播数据报可以由未加入多播组的主机发出,也可以通过没有组成员加入的网络发出;

image-20250107080848252

7.3.2. IGMP 网际组管理协议

7.3.2.1. 工作阶段
  1. 当某台主机加入心多播组,该主机应向多播组的多播地址发送一个 IGMP 报文,声明我要成为该组成员;本地的多播路由器收到 IGMP 报文后,利用多播路由选择协议将组成员关系转发给互联网上其他的多播路由器;
  2. 组成员关系是动态的;本地多播路由器周期性探询本地局域网上的主机,以便知道这些主机是否还是组的成员;只要有一台主机响应,那么多播路由器认为这个组是活跃,多次探询发现无主机响应,则不再转发组成员关系给其他的多播路由器;
7.3.2.2. 避免多播控制信息给网络增加大量开销解决措施
  1. 主机和多播路由器之间多有通信都是用 IP 多播;只要有可能,携带 IGMP 报文的数据报都用硬件多播来传送;因此在支持硬件多播的网络上,没有参加 IP 多播的主机不会受到 IGMP 报文;
  2. 多播路由器在探询组成员关系时,只需要对所有组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文(单允许对特定组发送询问报文);默认询问速率 125 秒一次;
  3. 当同一个网络连接有几个多播路由器时,它们能够迅速和有效选择其中一个来探询主机的成员关系;因此,网络上多个多播路由器不会引起 IGMP 通信量剧增;
  4. IGMP 询问报文有一个数值 N,指明了最长响应时间(默认为 10 秒);收到询问时,主机在 0 到 N 之间随机选择发送响应所需经过的时延;因此,若一台主机同事参加了几个多播组,则主机对每一个多播组选择不同的随机数,对应最小时延的响应最先发送;
  5. 同一个组内的每一台主机都要监听响应,只要本组有其他主机发送,自己就不发送了;对询问报文只需一台主机响应;
  6. 多播路由器并不保留组成员关系准确记录,只需要知道网络是否至少还有一台主机是本组成员即可;如果一台主机多个进程加入多播组,那么发送这个多播组每个多播数据报只接受一个,给主机每一个进程发送一个本地复制的副本;

7.3.3. 多播路由选择协议

  虽然 TCP/IP 中 IP 多播协议已成为建议标准,但是多播路由选择协议(用来在多播路由器之间传播路由信息)尚未标准化;

  多播过程,一个多播组成员是动态变化;多播路由选择实际是要找出以源主机为根节点的多播转发树;对于不同多播组,有不同的多播转发树,同一个多播组,对不同的源点也会有不同的多播转发树;

  已经有多种实用的多播路由选择协议,在转发多播数据报时使用一下三种方法:

  1. 洪泛与剪除;适合较小的多播组,所有组成员接入的局域网也是相邻接的;一开始路由器转发多播数据报使用洪泛方法;为了避免兜圈子,采用反向路径广播 RPB( Reverse Path Broadcasting )策略;即:每一个路由器收到一个多播数据报时,检查数据报是否是从源点经过最短路径传送的;若是,向所有其他方向转发刚才收到的多播数据报(除进入方向),否则丢弃不转发;如何检查:只要从本路由器寻找到源点的最短路径上的第一个路由器是都就是刚才多播数据报送来的路由器;如果本路由器有好几个相邻路由器都处在源点最短路径,那么就看谁的 IP 地址小;如果在多播转发树上,某个路由器发现它的下游树脂已没有该多播组成员,就将下游和它一起剪除;

image-20250108082517182

  2. 隧道技术:适用于多播组位置在地理上分散的情况;路由器对多播数据报进行再次分装,加上普通数据报头部,让其成为向单一目的站发送的单播数据报,然后通过隧道过去;

image-20250108082747240

  3. 基于核心的发现技术:对于多播组的大小在较大范围内变化时都适合;对每一个多播组 G 指定一个核心路由器,给出他的 IP 单播地址;核心路由器创建对应于多播组 G 的转发树;如果一个路由器 R1 向这个核心路由器发送数据报,那么它在途中经过的每一个路由器都要检查其内容;当数据报到达参加多播组 G 的路由器 R2 时,R2处理这个数据报;如果 R1 发出多播数据报,其目的地址是 G 的组地址;R2 就向多播组 G 的成员转发这个多播数据报;R1 发出的数据报是请求加入 G 的,R2就将这个信息加入到它的路由,再用隧道技术转发向 R1 转发多播数据报的一个副本;这样参加多播组 G 的路由器从核心向外增多了,扩大多播转发树的覆盖范围;

7.3.4. 其他的多播路由选择协议

  1. 距离向量多播路由选择协议 DVMRP;
  2. 基于核心的转发树 CBT;
  3. 开放最短通路优先的多播扩展 MOSPF;
  4. 协议无关多播-稀疏方式 PIM-SM;
  5. 协议无关多播-密集方式 PIM-DM;

8. 虚拟专用网 VPN 和网络地址转换 NAT

8.1. 虚拟专用网 VPN

8.1.1. 内部地址块

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
  • 互联网所有路由器,对目的地址是专用地址的数据报一律不进行转发;

8.1.2. 虚拟局域网 VPN:Vistrual Private Network

  利用公网的互联网作为本机构各专用网之间的通信载体,这样的专用网称为虚拟局域网;如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须要加密;

image-20250108203912574

8.2. 网络地址转换

8.2.1. 前提

  1. 需要专用网连接互联网的路由器上安装 NAT 软件;装 NAT 软件的路由器叫做 NAT 路由器;
  2. NAT 路由器至少有一个有效的外部全球 IP 地址;

8.2.1. 工作原理

image-20250108205626187

  • 当 NAT 路由器具有 n 个全球 IP 地址时,专用网内最多可以同时有 n 台主机接入互联网;这样可以使专用网内较多数量的主机,轮流使用 NAT 路由器有限数量的全球 IP 地址;

  • 显然,通过 NAT 路由器的通信必须由专用网内的主机发起;如果专用网外面的主机要发起通信,IP 数据报到达 NAT 路由器时,NAT 路由器不知道应该把 IP 地址转换专用网内的哪一个本地 IP 地址;

  • NAT 也叫网络地址与端口号转换 NAPT:Network Address and Port Translation;

  • 示例:

    方向字段原先 IP 地址和端口转换后
    专用网 --> 互联网源 IP 地址:TCP源端口192.168.0.3:30000172.38.1.5:40001
    专用网 --> 互联网源 IP 地址:TCP源端口192.168.0.4:30000172.38.1.5:40002
    互联网 --> 专用网目的 IP:目的端口172.38.1.5:40001192.168.0.3:30000
    互联网 --> 专用网目的 IP:目的端口172.38.1.5:40002192.168.0.4:30000
    • 从层次来说,NAPT 路由器收到应答,需要根据不同目的端口号,来转换找到正确主机;NAPT 从 IP 数据报的数据部分找出运输层的端口号,根据端口号找到不同主机;普通路由器,转发 IP 数据报,源和目的 IP 地址不变,NAT 转发,一定要变化,且查看和转换运输层端口号,这也属于运输层范围;所以有些人批评 NAPT,没有严格按照层次关系;

9. 多协议标签交换 MPLS

  多协议表示 MPLS 上层可以采用多种协议;综合许多公司的类似技术,如思科的标签交换以及 Ipsilon 公司的 IP 交换等;

  MPLS 利用面向连接技术,使每个分组携带一个叫做标签的小整数(打上标签),当分组到达交换机(即标签交换路由器),交换机读取分组的标签,并用标签值来检索分组转发表;这样就比查找路由表转发分组要快很多;

  MPLS 常与 **异步传递方式ATM( Asynchronous Transfer Mode)**联系起来,仅仅因为都采用面向连接的工作方式;以前本以为网络发展是以 ATM 为核心的宽带综合业务数字 B-ISDN;但是价格便宜的 高速 IP 路由器仍然占领了市场,MLPS 最终作为 IP 增强技术被广泛使用;

  其特点:1.支持面向连接的服务质量;2.支持流量工程,均衡网络负载;3.有效支持 VPN;

9.1. 工作原理

9.1.1. 基本工作过程

  传统 IP 网络中,分组每到达一个路由器,必须要查找转发表,并按照“最长前缀匹配”的原则找到下一跳的 IP 地址;当网络很大,查找就会花费过多时间;

  MPLS 的一个重要特点就是在 MPLS 域的入口处,给每个 IP 数据报打上固定长度**“标签”,然后对打上标签的 IP 数据报用硬件转发**,使得 IP 数据报转发过程加快;采用硬件技术对打上标签的 IP 数据报进行转发就称为 标签交换;交换也表示在转发时不上升第三层查找转发表,而是在第二层(链路层)用硬件转发;MPLS 可以使用多种链路层协议,如 PPP、以太网、ATM 以及帧中继;

  MPLS 域指该域中许多彼此相邻的路由器,且所有路由器都是支持 MPLS 技术的标签交换路由器 LSR(Label Switching Router);LSR 同时具有标签交换和路由选择,标签交换功能为了快速转发,但是在之前需要使用路由选择功能构造转发表;

image-20250108214326710

  1. MPLS 域中各 LSR 都使用专门的标签分配协议 LDP( Label Distribution Protocol )交换报文,并且找出和特定标签相对应的路径,即标签交换路径 LSP(Label Switched Path);例如 A->B->C->D 一样;
  2. 当一个 IP 数据报进入到 域中,MPLS 入口处打上标签(即插入一个 MPLS 首部),并按照转发表转发给下一个 LSR;;以后所有 LSR 都按照标签进行转发;
  3. 一个标签仅仅在两个标签交换路由器 LSR 之间才有意义;分组每经过一个 LSR ,就做两件事情,一个是转发,一个是更换新标签,将入标签,换成出标签;
  4. 离开域,则去除 MPLS 标签;

  由入口 LSR 确定进入 MPLS 域以后的转发路径,称为显示路由选择

9.1.2. 转发等价类 FEC

  即 路由器按照同样方式对待的 IP 数据报集合;同样方式:即表示从同样接口转发到同样的下一跳地址,具有同样服务类别和同样丢弃优先级等;其例子:

  1. 目的 IP 地址域某一个特定 IP 地址前缀匹配的 IP 数据报;
  2. 所有源地址和目的地址都相同的 IP 数据报;
  3. 具有某种服务质量需求的 IP 数据报;

  其划分不受到限制,都由网络管理员来控制,因此非常灵活;入口节点不是给每一个 IP 数据报指派一个不同标签,而是同样的 FEC 的 IP 数据报都指派相同的标签;FEC 和标签是一一对应的关系;

image-20250108215457647

上图中后一种,可以使网络负载较为均衡,这种做法也称为 流量工程 TE 或通信量工程;

9.2. MPLS 首部的位置与格式

  MPLS 并不要求下层网络都使用面向连接技术;因此一对 MPLS 路由器之间的物理连接,即可是专用电路,也可以是以太网网络;但是这些网络不提供打标签,且 IPv4 数据报首部也没有多余位置存放标签;这需要一种封装,将 IP 数据报封装成以太网帧之前,先要插入一个 MPLS 首部;从层次来看,MPLS 首部就处在第二层和第三层之间;在把加上 MPLS 首部的 IP 数据报封装成以太网帧时,以太网帧在单播情况下设置为 0x8847,多播情况为 0x8848;这样接收方就可判断是否携带 MPLS 标签,还是一个常规 IP 数据报;

image-20250108221513816

image-20250108221532349

  1. 标签值:20 位;可以同时容纳 1048576 个流,但是几乎不会使用这么大;因为通常需要管理员人工管理和设置每条交换路径;
  2. 试验:3 位;目前保留;
  3. S:1 位,表示栈;在有“标签栈”时使用;
  4. TTL:8 位,生存时间,防止在 MPLS 兜圈子

9.3. 新一代 MPLS

  虽然 MPLS 可以更快转发分组,但是其控制协议缺比较复杂,扩展性差,运行维护男;协议 LDP 也无法支持基于时延和带宽等要求的流量调度;为了灵活选择流量的转发路径,还需要使用 资源预留协议 RSVP;但是 其信令非常复杂,每个节点需要维护庞大的链路信息数据库;且 ESVP 不支持 等价多路径路由选择 ECMP,只会选择一条最优路径转发;

  新一袋,保留 MPLS 主要特点,更加简单的新的源路由选择协议:段路由选择协议;

10. SDN 软件定义网络

  软件定义网络(SDN)是一种将网络资源抽象到虚拟化系统中的 IT 基础架构 方法。这被称为 网络虚拟化。SDN 将 网络转发功能 与 网络控制功能 分离开来,目的是创建可集中管理且可编程的网络,这也就是说将控制平面与数据平面分离。SDN 允许 IT 运维团队通过集中面板来控制复杂网络拓扑中的网络流量,而无需手动处理每个网络设备。


Comment