计算机网络超详细笔记(五):网络层

文章目录

第五章 网络层

5.1 网络层引言

5.1.1 网络层概述
  • 网络层主要功能
    • 源端数据包 (分组),一路送达到目的机
  • 如何实现功能
    • 封装源数据
    • 找到一根好的路径 (路由) [路由选择协议、路由器]
    • 识别目的机
  • 可能会遭遇的问题
    • 地址不够用 (CIDR、IPv6、NAT)
    • 丢包 (ICMP)
    • 拥塞 (拥塞控制)
5.1.2 数据报网络与虚电路网络
  • 源和目的之间的网络的类别

    • 数据报网络 (提供无连接的服务)
    • 虚电路网络 (提供面向连接的服务)
  • 数据报网络与虚电路网路的比较

    • 比较项目 数据报子网 (无连接服务) 虚电路子网 (面向连接服务 - virtual circuit)
      建立电路 不需要建立 一定要建立
      地址信息 每个分组包含完整的源地址和目的地址,每个分组独立寻径 每个 VC 包含一个很短的 VC 号码
      状态信息 路由器不保留任何连接状态和信息 每个 VC 都要求路由器建立表项
      路由 每个分组独立选择路由 每个分组沿建立 VC 时确定的路由
      路由器失效影响 没有影响,只有系统崩溃时丢失分组 所有经过失效路由器的 VC 都终止
      服务质量与拥塞控制 很难实现 总资源 (带宽、缓存) 足够的情况下,采用提前给每个 VC 分配资源的方法,很容易实现。
5.1.3 课程总结
  • 网络层的目标:把数据分组一路送到接收机。
  • 网络层利用下层 (数据链路层) 提供的服务为它的上层 (传输层) 提供服务。
  • 两种类型的网络分别提供两种类型的服务
    • 数据报网络:无连接的服务
    • 虚电路网络:面向连接的服务
  • 问题
    • 网络层的主要目标是什么?
    • 虚电路网络上中,是否不需要进行路径选择?
    • 数据报网络中,路由表从何而来?
    • 数据时怎样穿过数据报网络的?
    • 数据时怎样穿过虚电路网络的?

5.2 IP地址

5.2.1 IP概述
  • IP (Internet Protocol)
    • 特点
      • IP是互联网协议,是协议栈的核心之一
      • IP是胶水,将整个互联网互联起来。
      • IP为路由提供所需要的信息,因此也被称为被路由的协议
    • IP 的任务
      • 提供一种尽力而为 (best-effort) 地把数据从源端传输到接收方的方法。
  • IP包括两个内容
    • IP地址 (用来标识收发主机)
    • IP分组 (信息分装的格式)
5.2.2 IP地址表示形式
  • 特点
    • IP地址由32位二进制表示,提供大约 232=432^32=43 亿个地址。
  • IP地址表示形式
    • 点分十进制
      • 将32位分成4个8位组,相邻 8 位组之间用 ‘.’ 隔开
      • 每个8位组转换成十进制数,从 0~255
      • 举例
        • IP地址:10000011 01101100 01111010 11001100
        • 点分十进制:131 . 108 . 122 . 204
  • IP地址的层次结构
    • 计算机网络超详细笔记(五):网络层
5.2.3 IP地址的分类
  • IP地址由两部分组成:网络地址、主机地址 (前部分为网络地址,后部分为主机地址)

  • A类地址

    • 0xxxxxxx . xxxxxxxx . xxxxxxxx . xxxxxxxx
    • 前 1 字节标识网络地址部分,后 3 字节标识主机地址部分。
    • 第 1 个最高位固定为0,第 1 字节变化范围为 0~127,因此 A 类地址一共只有 128 个。
    • 每个网络最多可容纳 22422^{24}-2 台主机。
  • B类地址

    • 10xxxxxx . xxxxxxxx . xxxxxxxx . xxxxxxxx
    • 前 2 字节标识网络地址部分,后 2 字节标识主机地址部分。
    • 前 2 位固定为 ‘10’,第 1 字节变化范围为 128~191,以此辨识 B 类地址。
    • 每个网络最多可容纳 21622^{16}-2 台主机。
    • 具有 B 类地址特征的网络总数为 2142^{14} 个。
  • C类地址

    • 110xxxxx . xxxxxxxx . xxxxxxxx . xxxxxxxx
    • 前 3 字节标识网络地址部分,后 1 字节标识主机地址部分。
    • 前 3 位固定为 ‘110’,第 1 字节变化范围为 192~223,以此辨识 C 类地址。
    • 每个网络最多可容纳 282=2542^8-2=254 台主机。
    • 具有 C 类地址特征的网络总数为 2212^{21} 个。
  • 三类 IP 地址的比较

    • 通常根据第一个字节的数值来判断 IP 地址的类别。
    • 计算机网络超详细笔记(五):网络层
  • 保留的 IP 地址

    • D类地址
      • 1110xxxx . xxxxxxxx . xxxxxxxx . xxxxxxxx
      • 主要用于组播,(224.0.0.0 ~ 239.0.0.0)
    • E类地址
      • 11110xxx . xxxxxxxx . xxxxxxxx . xxxxxxxx
      • 保留用于将来科研使用,(240.0.0.0 ~ 254.0.0.0)
    • 网络地址
      • 主机部分全部为 “0” 的IP地址,上述 5 类网络中均有对应的网络地址
    • 广播地址
      • 主机部分全部为 “1” 的IP地址,上述 5 类网络中均有对应的网络地址
    • 0.0.0.0
      • 32位全为 0 的地址,标识这个主机、这个网络。也是一些路由器指定的默认路由。
    • 255.255.255.255
      • 32位全为 1 的地址,为泛洪广播地址。
      • 但是由于对整个互联网进行泛洪过于可怕,该地址退化成了本地广播地址,即 Local Broadcast。
    • 127 开头的地址
      • 第一个字节为127的地址,表示环回地址 (Lookback Network)
      • 如 127.0.0.1,即为本机地址,localhost
    • 169 . 254 . x . x
      • 表示非正常地址,不能和外界进行正常通信。
  • 举例:分析一个IP地址,172 . 16 . 20 . 200

    • 根据第一个字节,可以判断这是一个B类地址
    • 因此网络部分:172.16
    • 主机部分:20.200
    • 网络地址:172.16.0.0
    • 广播地址:172.16.255.255
  • IP地址的分配

    • 由ICANN域名和地址分配机构负责对IP进行层级分配

    • 计算机网络超详细笔记(五):网络层

    • 当今世界上,美国共3亿人口,有16亿个IP地址。而中国有7亿网民,只有3亿多个IP地址。

5.2.3 课程总结
  • IP地址共有5类。
  • 保留地址有全0、全1、广播地址、网络地址、环回地址等。
  • 问题
    • IP地址为什么要按类别分配?
    • 什么是保留地址?
    • 保留地址有哪些?

5.3 子网规划

5.3.1 子网概念
  • 现状:局域网不断增长,越来越难于管理,必须将它分割成子网
  • 一个网络被分割成几个部分 (子网),但是在外界看来,该网络仍被看成一个整体 (体现在路由表上,就是外部的路由器只对应一条路由)
  • 这也允许不同的子网在一个组织内部连接起来。
5.3.2 子网掩码
  • 子网掩码作用

    • 路由器使用子网掩码决定分组往哪个子网转发
  • 子网掩码的两种表示方法

    • 点分十进制表示 (1表示网络位,0表示主机位)
      • 如 255.255.255.224
    • "/网络位数+子网位数"表示
      • 如 202.10.23.102/27,27即为子网掩码
  • 如何得到目的网络地址

    • 路由器采用 “AND” 操作 (目的IP和子网掩码),得到目的网络地址
    • 优点:路由器不必记录全部主机的IP地址,缩减了路由器的规模
    • 计算机网络超详细笔记(五):网络层
  • 子网掩码举例

    • A类网络:255.0.0.0 或 /8
    • B类网络:255.255.0.0 或 /16
    • C类网络:255.255.255.0 或 /24
    • 其它网络地址举例
      • 网络地址:166.111.0.0 (主机位全0为网络地址)
      • 子网掩码:166.111/16
      • 广播地址:166.111.255.255 (主机位全1为广播地址)
      • 主机地址:166.111.0.1~166.111.255.254
5.3.3 子网规划
  • 子网划分
    • 划分子网实际上建立了一个由网络、子网和主机构成的三级层次结构
    • 根据用户需求,划分出合适数量和规模的子网
    • 规划要求基于每个子网的规模、每个子网的主机数量和主机地址的分配方式进行决策
  • 子网位
    • 增加子网位来表示子网

      • 计算机网络超详细笔记(五):网络层
    • 子网位如何而来 —— 借位

      • 构建子网是通过从网络地址的主机部分借位来进行
      • 广播地址:主机部分为全 “1” 的 IP 地址
      • 子网络地址:主机部分为全 “0” 的 IP 地址
  • 子网规划原则
    • 子网规划:将大网络分割成小网络
    • 借位原则
      • 从主机域的高位开始借位
      • 主机域至少保留 2 位 (网络位+广播占两位,因此主机位至少 4 位)
    • 子网规划考虑两个因素
      • 所需子网数量
      • 所需主机地址的数量
    • 可用主机数量为 2n22^n-2
      • n为剩余的主机位个数
      • -2,子网中不能使用子网ID和广播地址
  • 子网规划举例
    • 原网络地址:192.168.1.0/24
    • 现从主机位中取前两位作为子网位,由此得到4个子网地址
      • 192.168.1.00 000000 = 192.168.1.0/26
      • 192.168.1.01 000000 = 192.168.1.64/26
      • 192.168.1.10 000000 = 192.168.1.128/26
      • 192.168.1.11 000000 = 192.169.1.192/26
    • 主机位从开始的8位变成了6位,主机数一共有 262=622^6-2=62 个。
5.3.4 课程总结
  • 子网让两层IP地址结构变成了3层
    • 网络、子网和主机
  • 子网掩码两种表示形式:点分十进制、/网络位+子网位
  • 路由器执行按位 “与”,来确定目的网络地址
    • 路由表的查找入口
  • A/B/C 三类地址的缺省子网掩码
    • A:255.0.0.0/8
    • B:255.255.0.0/16
    • C:255.255.255.0/24
  • 通过向主机位借位来创建子网
  • 借位原则
    • 高位开始借
    • 至少保留2位主机位

5.4 IP寻址

5.4.1 IP寻址与MAC寻址概念
  • IP寻址
    • 定义:根据目的IP地址,找到目的网络的过程
  • 路由器
    • 执行IP寻址的主要设备是路由器。
    • 一个路由器称为一跳。(Hop)
    • 当数据到达最后一跳时,即最后一个路由器。路由器将分组拆开查看目的IP地址,然后将分组发往其对应的网络。
      • 到达对应网络之后,进行MAC寻址。
  • MAC寻址
    • 定义:根据目的MAC地址,找到目的机的过程
    • 执行MAC寻址的主要设备:交换机
5.4.2 IP寻址与MAC寻址的比较
  • 适用的网络范围不同
    • MAC寻址:小型网络,在局域网中对应目标
    • IP寻址:互联网,依托路由器逐跳达到目的网络
  • 所依赖的地址结构不同
    • MAC地址:平面地址 (全球唯一)
    • IP地址:结构化地址
  • 所处的OSI参考模型层数不同
    • MAC寻址:数据链路层
    • IP寻址:网络层
  • 地址数目的限制
    • MAC地址:无耗尽危险 (7万亿个)
    • IP地址:正在耗尽
  • 两种地址的格式不一样
    • MAC地址:十六进制
    • IP地址:点分十进制
5.4.3 IP寻址具体过程
  • 路由器进行IP寻址的具体过程
    • 打开分组 (Packet) —— 只打开到第三层 (网络层),提取目的IP地址
    • 定网络,查路由
      • 通过目的IP地址和子网掩码,进行按位与操作,得到目的网络。
      • 在路由表中查找目的网络。
    • 将分组重新封装,转发 (Next Hop)
  • 举例
    • 计算机网络超详细笔记(五):网络层

    • A、B、C路由器只会解封装到第三层,获取目的IP地址。

    • 所有在 C 子网上的机器,都会收到这个分组的比特流,但是由于MAC地址的存在,最后只有 Y 会接收这个比特流。

  • 路由表
    • 定义:路由器转发数据的依据

    • 每个路由器中都有一张路由表,路由表包括目的网络地址、接口、代价、子网掩码、网关等信息

      • 计算机网络超详细笔记(五):网络层
    • 除了路由表之外,路由器内部还有一张 ARP 表

      • ARP 表记录所有子网设备的IP-MAC映射 (包括网关)
    • 路由表可能因厂家的不同而不同

5.4.4 课程总结
  • 两种寻址方式
    • IP寻址:找到目的机所在的网络
    • MAC寻址:通过MAC地址定位到目的机
    • 通常先通过IP寻址找到目的网络,再通过MAC寻址找到目的机
  • 路由器收到分组的处理过程 (三步)
    • 解封装
    • 查表,确定目的网络
    • 封装后转发
  • 路由器决策的依据:路由表
  • 问题
    • 什么是IP寻址?
    • 什么是MAC寻址?
    • IP寻址和MAC寻址有什么不同?
    • 只用IP寻址,或只用MAC寻址是否可以完成找到目的机的任务?
    • 路由器处理分组的过程是怎样的?
    • 路由表是怎样的表?包括哪些主要字段?

5.5 IP分组

5.5.1 IP分组格式
  • IP分组由头部和数据构成

  • 计算机网络超详细笔记(五):网络层

  • 不含选项的字段有12个,一共20字节。按照4个字节,32位为一行进行排列,则一共有5行。

  • 第一个字段:协议版本 (4 bits)

    • 标明IP协议的版本号
      • IPv4:0100
      • IPv6:0110
  • 第二个字段:报头长度 (4 bits)

    • 标明IP分组头部的长度。
    • 单位:32bit (4字节),指向数据开始处。
    • 范围:0101~1111,即头部长度 20~60 字节
  • 第三个字段:区分服务 (8 bits)

    • DS:Differentiated Service
    • 在互联网上基本没怎么使用,表示分组的优先级、丢弃级,用来保证服务质量、拥塞控制等。
  • 第四个字段:数据报总长度 (16 bits)

    • 标明整个数据分组的总长度,包括数据头和数据。
    • 单位:字节
    • 范围:MAX=65535\text{MAX}=65535 字节
  • 第五个字段:数据报标识号 (16 bits)

    • 标明当前数据报的***
    • 由发送者分配,以便接收方可以依据这个标识号对包进行重组。
  • 第六个字段:标志 (3 bits)

    • 标明分组是否分片
    • 三位,第一位是一个不使用的位,第二位是DF (Don’t Fragment),第三位是MF (More Fragment)
      • DF = 1,表示不允许路由器分割该数据报。
      • MF = 1,表示还有更多的段。
  • 第七个字段:分片偏移 (13 bits)

    • 帮助接收方对包进行重组。
  • 第八个字段:生存时间 (8 bits) —— TTL (Time-to-Live)

    • TTL 维护一个计数器 (单位:一跳),每次经过一个路由器,TTL-1
    • 当TTL递减为0时,数据报就被丢弃,同时路由器向源发送一个超时消息,表明这个分组还未找到目的,但由于超时被丢弃了。
    • TTL目的:防止分组在网络中无限循环。
  • 第九个字段:用户协议 (8 bits)

    • 标明传输层协议。常见数值为 17(UDP) 与 6(TCP)。
    • 17:上层采用UDP协议,搭载UDP数据段
    • 6:上层采用TCP传输层协议,搭载TCP数据段
  • 第十个字段:报头校验和 (16 bits)

    • 采用互联网校验和,针对分组头部计算校验和,用于验证分组头部的正确性
  • 第十一个字段:源IP地址 (32 bits)

    • 标明分组来源的IP地址
  • 第十二个字段:目的IP地址 (32 bits)

    • 标明分组发向的IP地址
  • 第十三个字段:数据报选项 (长度不等)

    • 可变长字段。
    • 该字段允许主机支持不同的选项,比如安全、源路由、时戳等。但是很少被使用。
  • 第十四个字段:填充 (长度不等)

    • 可变长字段,如果选项不是 32 bits 的整数倍,就需要增加一个填充字段,使得 填充字段+选项字段 = 32 bits 的整数倍。
  • 举例

    • 计算机网络超详细笔记(五):网络层
5.5.2 课程总结
  • IP分组的重要字段
    • 头部长度、总长度
    • TTL
    • 用户协议
    • 目的IP
  • 问题
    • IP分组中包括哪些主要字段?
    • 如何得知IP分组的净载荷中封装的是什么数据段?
    • 当路由器发现一个分组的 TTL1=0\text{TTL}-1=0 时,它会如何对待该分组?
    • 如何得知一个分组是否含有选项?

5.6 IPv6的发展

5.6.1 IPv4的弊端
  • IPv4先天不足
    • 地址危机
      • 约43亿地址,在分类中浪费了大量的IP地址。
      • 2011.2.3 IANA地址池枯竭。
    • 路由表的膨胀
      • 路由表中维护的数据成千上万条,过度膨胀
    • 安全问题
      • IPv4的诞生从未考虑过安全问题
    • 配置复杂
    • QoS和性能问题
    • 端到端业务模式
    • 移动性支持不够
5.6.2 IPv6的诞生
  • IPv6的目标
    • 支持几十亿台主机
    • 缩减路由表的规模
    • 简化协议,让路由器可以更快地处理分组
    • 提供比IPv4好的安全性
    • 更加关注服务类型 (尤其是实时数据)
    • 允许通过指定范围来支持组播传输
    • 允许主机在不改变地址的情况下能够漫游
    • 允许协议具有扩展性
    • 允许新老协议共存多年
  • IPv6标准组织 —— IETF
    • 制订IPv6规范和标准
    • 提供关于IPv6的指导
  • 一些命名问题
    • IPv1、IPv2、IPv3、IPv5 在实验中都被使用过了。
5.6.3 课程总结
  • IPv4有哪些问题?
  • 什么是IPv6?
  • IPv6的相关标准主要由哪个标准组织推出?

5.7 IPv6地址

5.7.1 IPv6地址表示
  • IPv6基本术语

    • 基本术语 —— 局域网段、链路、子网、网络、邻节点 (链路上相邻节点)
    • 计算机网络超详细笔记(五):网络层
  • IPv6地址空间

    • IPv6一共128位,2128=34010362^{128}=340*10^{36}
    • 全球人均每人 510285*10^{28} 个,每平方厘米 6.710196.7*10^{19} 个地址。
  • IPv6地址表示 —— 冒分十六进制

    • 每16位一组,每组用4个16进制数表示,一共8组
    • 规则
      • 省略前导0 —— 忽略每组中的前导0
      • 忽略全0 —— 中间都是0,则用双冒号进行表示 (双冒号至多使用一次)
      • 地址前缀长度用 “/xx” 表示,如 1::1/64
    • 同一个地址有不同的表示方法
      • 计算机网络超详细笔记(五):网络层

      • 地址中至多出现一次双冒号,否则无法确定组数。

    • 举例
      • 计算机网络超详细笔记(五):网络层
5.7.2 IPv6地址分类
  • 单播地址 (Unicast Address)

    • 链路本地地址
      • 只用在单一的链路上。
      • 如果分组中目的地址或源地址含有链路本地地址,则该数据包不会转发到其它链路上,只在本链路上通信。
  • 组播地址 (Multicast Address)

  • 任播地址 (Anycast Address)

  • 特殊地址

    • 计算机网络超详细笔记(五):网络层
  • 链路本地地址的生成

    • 前64位:FE80:0:0:0
    • 后64位:EUI-64地址 (由MAC地址生成)
      • MAC地址一共48位,在中间分开,然后加上 11111111 11111110 16位构成64位
      • 再将第7位改为1,即可构成 EUI-64 地址
      • 计算机网络超详细笔记(五):网络层
5.7.3 IPv6子网规划
  • IPv6子网划分根据路由器数量及它们所支持的网络来构建寻址分层结构
  • 子网部分一共16位,支持65536个子网划分。
  • 计算机网络超详细笔记(五):网络层

5.8 IPv6分组

5.8.1 IPv6分组格式
  • 计算机网络超详细笔记(五):网络层

  • IPv6头部一共40个字节。

  • 第一个字段:版本 (4 bits)

    • 标明版本号,0100为IPv4,0110为IPv6
  • 第二个字段:区分服务 (8 bits)

    • 表示数据分组的服务类型,表示该分组的重要程度、优先级
  • 第三个字段:流标签 (20 bits)

    • 为源端和接收端提供了一种建立伪连接的方式,即源端和接收方把一组具有同样需求并希望得到网络同等对待的数据分组打上同样的标签。
  • 第四个字段:净荷长度 (16 bits)

    • 指明了搭载的数据的长度 (不含报头),单位:字节
    • 总长度:2161=655352^{16}-1=65535 字节
  • 第五个字段:下一个头 (8 bits)

    • 指明了紧跟的扩展头类型。
    • 如果当前头是最后一个扩展头或无扩展头,则退化为 “协议”,如TCP(6)、UDP(17)
  • 第六个字段:跳数限制 (8 bits)

    • 与 IPv4 中的 TTL 一致,防止分组无限循环。
  • 第七、八个字段:源、目的 IPv6 地址。

  • IPv6去除了校验和与分段,每次用 PMTU 算法计算出链路上的最小MTU。

5.8.2 IPv6拓展头
  • 拓展头分类

    • 一共有 6 种拓展头。
    • 计算机网络超详细笔记(五):网络层
  • 扩展头使用规定

    • 扩展头是可选的,可以有多个扩展头,但是必须按一定的顺序排列。
    • 扩展头有固定的格式,其他扩展头包含可变数目的可变长度域。
    • 每个可变项都被编码成 (Type, Length, Value) 三元组。
    • 举例
      • 计算机网络超详细笔记(五):网络层
5.8.3 课程总结
  • IPv6分组由基本头部、扩展头部和载荷三部分构成,下一个头 (Next Header) 字段描绘了三者间的关系。
  • 相比 IPv4分组,IPv6的字段精简了,但是头部总长度并没有减少。
  • 问题
    • IPv6分组基本头部包括了哪些字段?
    • 相比IPv4分组,IPv6分组做了哪些删改?
    • 相比IPv4分组,IPv6分组做了增加吗?增加了什么字段?

5.9 IPv6过渡技术

5.9.1 IPv6过渡时代
  • IPv6过渡的三个阶段
    • IPv6孤岛
    • IPv4和IPv6均大量存在
    • IPv4孤岛
  • 三类基本过渡技术
    • 双协议栈
    • 隧道
    • 地址转换技术
  • 检测是否使用了IPv6的网络
    • http://ipv6.ustb.edu.cn/,如果看到了跑动的猎豹,则为IPv6的网络。
    • http://www.kame.net,看到游动的乌龟,也为IPv6网络。
5.9.2 双协议栈 (Dual Stack)
  • 网络设备,服务器等必须支持双栈
  • 主机端设备:可仅IPv6,也可仅IPv4
  • 主机端设备如果支持双栈
    • 优先IPv6访问
    • 不通,再切换IPv4访问
5.9.3 隧道 (Tunnel)
  • IPv4分组搭载IPv6分组 (IPv6分组作为纯数据),作为普通IPv4分组穿过IPv4网络。
  • 反过来,IPv6分组搭载IPv4分组 (IPv4分组作为纯数据),作为普通IPv6分组穿过IPv6网络。
  • 适用于第一、三阶段的过渡时期。
5.9.4 地址转换技术
  • 从IPv4转换到IPv6,或反过来。不仅发生在网络层,还有传输层和应用层。
  • 当双栈和隧道都无法使用的时候才使用,适用于纯IPv4节点和纯IPv6节点间的通信。

5.10 路由表概述

5.10.1 路由器功能
  • 路由器转发分组的依据:路由表
  • 路由表来源
    • 直连路由:路由器学习感知
    • 静态路由:人工配置
    • 动态路由:路由选择协议生成、更新和维护
  • 路由器收到一个分组之后的操作:
    • 打开分组至第三层,提取出目的IP地址
    • 确定目标网络,查找路由表,进行按位"AND"操作
    • 重新封装,转发
      • TTL-1,置换源和目的MAC地址,计算校验和,可选分片等
5.10.2 直连路由
  • 直连路由
    • 开启路由器接口之后,路由器自动将子网与接口进行匹配存储。
  • 计算机网络超详细笔记(五):网络层
5.10.3 静态路由
  • 静态路由:管理员手工配置的路由
  • 一种常用的静态路由:默认/缺省路由
    • 是默认的路径,找不到路的时候可以从这里通过
      • 避免错误丢包
      • 缩减路由表的规模
      • 减少路由器的运行负担
  • 静态路由的优缺点
    • 优点
      • 在小型网络中容易实施
      • 非常安全,不会发送通告
      • 总是通过同一路径到达同一目的网络
      • 不需要CPU、RAM、带宽等开销
    • 缺点
      • 仅适用于简单网络或特殊用途 (比如默认路由)
      • 随着网络增大,配置复杂性显著增长
      • 需要人工更新和维护
5.10.4 动态路由
  • 动态路由:由路由选择协议动态地建立、更新和维护的路由

    • 适合大型的、经常变动的网络,需要维护开销
    • 减少了网络管理员的负担
  • 动态路由的获取 —— 路由选择算法

    • 距离矢量路由选择 (DV)
      • RIP:路由信息协议
      • 过程:计算最优路径、装载最优路径到路由表、引导IP分组转发
    • 链路状态路由选择 (LS)
      • OSPF:开放的最短路径优先
  • 如何量度路径的优劣?

    • 路径长度
      • 由网络管理员定义每条网络链路的代价 (cost),从源到宿的代价总和为路径长度,hop (跳数)
    • 带宽
      • 链路的最大传输能力以及网络流量
      • 在代价模型中,带宽越大代价越小,因此描述优劣时,带宽在分母上
    • 可靠性:链路数据传输的可靠性 (误码率)
    • 延迟:数据包从源到宿需要花费的传输时间
    • 负载:网络资源 (例如路由器的CPU) 使用率
    • 通信代价:占用通信线路的费用
  • 最优化原理

    • 如果一个路由器 J 处在路由器 I 到路由器 K 的最优路径上,那么从路由器 J 到路由器 K 的最优路径也在同样的这条路径上。
  • 汇集树 (sink tree)

    • 从所有的源到一个给定的目的的最优路径形成的一棵树,树根是目的。
    • 汇集树不必是唯一的。
    • 路由算法的目的:为所有的路由器发现和使用汇集树。
    • 计算机网络超详细笔记(五):网络层
  • 动态路由的优缺点

    • 计算机网络超详细笔记(五):网络层
5.10.5 课堂总结
  • 什么是静态路由?
  • 静态路由有什么优点、缺点?
  • 默认的静态路由有什么用处?
  • 什么是动态路由?
  • 为什么需要动态路由?(优点)
  • 按照原理划分,动态路由分为几类?
  • 路由算法的目的是什么?(为所有路由器发现和使用汇集树)
  • 路径的常用量度有哪些?

5.11 距离矢量路由选择协议

5.11.1 DV概述
  • 距离矢量路由选择 (DV - Distance Vector)
  • D-V是分布式 Bellman-Ford 路由算法
    • 常被用于小型网络
    • RIP是一个典型的DV算法,在早期互联网中被广泛使用
5.11.2 DV的具体过程
  • 工作原理:

    • 每个路由器 (节点) 维护两个向量,DiD_iSiS_i,分别表示从该路由器到所有其它路由器的距离以及相应的下一跳 (next hop)

    • 在邻居路由器之间交换路由信息 (矢量)

    • 每个路由器 (节点) 根据收到的矢量信息,更新自己的路由表。

    • 核心三要素 —— 维护、交换、更新

  • 维护两个向量

    • di1d_{i1}:从节点 i 到节点 1 的度量 (代价)
    • Si1S_{i1}:沿着从节点 i 到节点 1 的最优路径上的下一跳
    • nn:网络中的节点数,节点从1、2、…、n
    • 计算机网络超详细笔记(五):网络层
  • 更新路由表

    • 当邻居间交换了矢量信息之后:
      • 更新距离:dij=Min[dix+dxj],xAd_{ij}=\text{Min}[d_{ix}+d_{xj}],x\in A
        • A:节点 i 的邻居集合
        • dijd_{ij}:从节点 i 到节点 j 的最短距离
        • dixd_{ix}:从节点 i 到节点 x 的最短距离
        • dxjd_{xj}:从节点 x 到节点 j 的最短距离
      • 更新下一跳:Sij=xS_{ij}=x
  • D-V算法特点

    • 优点:简单
    • 缺点
      • 交换的信息太大了
      • 路由传播慢,可能导致路径信息不一致
      • 收敛 (寻找最优路径的过程) 慢,度量计数到无穷
      • 不适合大型的网络
  • 例题

    • 计算机网络超详细笔记(五):网络层

    • 计算机网络超详细笔记(五):网络层

5.11.3 课堂总结
  • 什么是距离矢量路由选择协议?
  • DV的工作原理是怎样的?
  • 运行DV的好处是什么?

5.12 RIP

5.12.1 RIP概述
  • RIP定义
    • 路由选择信息协议 (Routing information protocol)
      • 1988年,RFC1058
      • RIPv1:有类的路由选择协议
      • RIPv2:无类的路由选择协议,支持CIDR、VLSM等
      • RIPng:支持IPv6
    • 在现代网络中已经极少使用RIP协议。
  • 主要特点
    • RIP是一种典型的D-V路由选择协议
    • RIP采用了跳数 (hop) 作为量度
    • 当量度超过 15 跳时,目的被认为不可达
    • 默认地,每 30s 交换一次矢量/向量信息 (全部路由表)
5.12.2 RIP主要缺陷
  • 不能到达量度超过15跳的目标网络

  • RIP的度量 (代价) 是跳数,即沿途经过的路由器的个数,有时候并不合理,不能真正反映网络的状况

  • 无穷计数

    • 好消息跑得快,坏消息跑得慢
      • 当网络中有一条比较短的路径时,这个信息会被快速传播
      • 但是当网络中有一个节点出现故障时,这个信息会缓慢的在周围进行传播,因为其他路由器只能该节点距离越来越大,但无法判断哪里出了故障。
  • 路由环

    • 错误的消息在C与B之间不断复制和修改,形成路径传播的环路。

    • 计算机网络超详细笔记(五):网络层

    • 解决方法:定义路径度量 (代价) 的最大值

      • 当代价超过最大值即可认为该路由器不可达
      • 其余方法:水平分割、毒性逆转、抑制定时器、触发更新
  • 收敛慢

  • 路由面临的复杂情况

    • 站得高才能看得远,确定全局最佳路径,但是站的高需要付出代价 (带宽、延迟)
    • 途径线路、站点以及目的网络都是动态变化的,最佳路径也要随之发生变化,需要及时获取状态变化信息。
    • 在站的不够高、跟的不够紧的情况下,只能直接获取近邻信息,远处信息通过逐站信息传播而间接获取,有可能传播、学习到错误的、过时的信息。
    • 最坏情况,全网传播和学习过时的信息,永远无法达到稳定状态:算法不收敛。
  • 例题

    • 计算机网络超详细笔记(五):网络层
5.12.3 课堂总结
  • DV、RIP的主要问题是计算到无穷,产生路由环
  • 问题
    • 什么是RIP?
    • RIP的优点是什么?
    • RIP的缺点是什么?
    • RIP的基本工作原理是怎样的?
    • 如何配置RIP?
    • 定义一个路径代价的最大数产生了什么后果?
    • RIP会彻底消失吗?

5.13 链路状态路由选择

5.13.1 链路状态路由概述
  • 定义
    • 链路状态路由 (LS - Link State)
  • 主要思想
    • 发现:发现它的邻居节点们,了解它们的网络地址
    • 设置:设置到它的每个邻居的成本度量
    • 构造:构造一个分组LSP,包含它所了解到的上述所有信息
    • 发送:将这个分组发送给所有其他的路由器
    • 计算:基于完整的网络图,计算到每个目标的最短路径
5.13.2 发现邻居节点
  • 当一个路由器启动的时候,在每个点到点的线路上发送一个特别的HELLO分组
  • 收到HELLO分组的路由器应该回送一个应答,应答中有它自己的名字 (采用一个全球唯一的名字 globally unique name)
  • 这样路由器就可以发现它的所有邻居节点了。
5.13.3 设置链路成本
  • 链路成本 (开销 / 量度 / 代价)
    • 通常为自动发现设置或人工配置
      • 常见量度:链路带宽 (反比)
  • 延迟也可作为量度
    • 路由器发送一个特别的ECHO分组,另一端立刻回送一个应答
    • 通过测量往返时间 (RTT),发送方路由器可以获得一个合理的延迟估计值
      • 为了得到更准确的结果,可多次测量,取平均值
5.13.4 链路状态分组/公告 (LSP)
  • 链路状态分组/公告 (LSP - Link State Packet / Advertisement)

  • LSP组成

    • 发送方的标识 (ID of the sender)
    • *** (sequence number)
    • 年龄 (age)
    • 邻居列表 (list of neighbors)
    • 到邻居的成本 / 量度 (delay to each neighbor)
  • 构造LSP的时间

    • 周期性地构造和发送
    • 如果有特别的事件发生,也会构造LSP。(某条线路或邻居down了、某个接口上来了等)
  • 举例

    • 计算机网络超详细笔记(五):网络层

    • 计算机网络超详细笔记(五):网络层

5.13.5 发送LSP
  • 算法过程

    • 每个分组都包含一个***,***随着新分组产生而递增
    • 路由器记录下它看见的所有 (源路由器,***) 对
    • 当一个新的分组到达时,路由器根据它的记录进行判断:
      • 如果该分组是新的,就被从除了来线路外的所有其他线路转发出去 (flooding,泛洪)
      • 如果是重复分组,即被丢弃 (喜新厌旧)
      • 如果该分组的***比对应的源路由器发送的到过此地的分组的最大***还小,则该分组被当作过时的信息而被拒绝。(拒绝过时分组)
  • 算法遇到的问题

    • ***回转,引起新老分组识别混淆 (如 000 和 111 哪个是新,哪个是旧)
      • 解决方法:使用 32 位的***,即使每秒产生一个分组,也需要 137 年才发生号码回转。
    • 如果一台路由器崩溃,那么它将丢失自己的***记录,如果他再从 0 开始,新分组会被当做旧分组而被拒绝。
      • 解决方法:age
    • 如果一个***被破坏了,比如发送方的***是4,但是由于产生了1位错误,***被看作65540。那么,***为5-65540的分组都被当作过时分组而被拒绝。
      • 解决办法:age
  • age

    • 解决上述的路由器崩溃和***损坏的方法:
      • 每个分组***之后是年龄 (age),并且每秒钟年龄减 1。
      • 当年龄为0时,来自该路由器的信息被丢弃
      • 通常,每隔一段时间,如10秒钟,一个新分组就会到来。所以,只有路由器down机才可能导致超时 (或者,连续6个间隔因为丢失,没有收到新的分组)。
  • 其他改进方法使算法更健壮

    • 保留区
      • 当一个链路状态路由分组到达某个路由器时,它首先被放到一个保留区中等待一段时间。
      • 如果来自相同路由器的另一个分组到达了,这两个分组的***会被比较:
        • 如果相等,是重复分组,丢弃
        • 如果不相等,旧的那个被丢弃
    • 为了防止路由器到路由器的线路发生错误,所有的链路状态分组都要被确认
    • 当一条线路空闲的时候,路由器扫描保留区,以便选择一个分组或确认,并将其发送出去
      • 计算机网络超详细笔记(五):网络层

      • 其中E此时的状态为通过A、F到达,要转发到C。发送标记为010,确认标记位101,向A、F发送确认,向C转发LSP。

5.13.6 计算新的路由路径
  • 一旦一个路由器获得了全部的链路状态分组就可以构造出全网络图来了
  • 可以使用最短路径算法 (Dijkstra) 来计算路由器之间的最短路径
    • 计算结果是一棵树 (汇集树),会形成相应的路由,安装在路由表中,引导数据分组的转发。
5.13.7 课程总结
  • LS路由算法的特点
    • 优点
      • 每个路由器的认识一致
      • 收敛快
      • 适合在大型网络里使用
    • 缺点
      • 每个路由器需要较大的存储空间
      • 计算负担很大
  • LS路由算法基本原理
    • 发现邻居、设置成本、构造LSP、分发LSP、计算
  • 问题
    • 相比DV,LS具有哪些优点
    • 相比DV,LS具有哪些缺点
    • LS的基本工作原理是怎样的?哪一步最关键?(分发LSP)
  • 例题
    • 计算机网络超详细笔记(五):网络层

5.14 单区域OSPF

5.14.1 OSPF概述
  • 定义

    • 开放的最短路径优先 (OSPF - Open Shortest Path First)
  • OSPF在OSI参考模型中的地位

    • 计算机网络超详细笔记(五):网络层
  • 特点

    • 使用图来表述真实网络
      • 每个路由器/LAN都是一个节点
      • 测量代价/量度 (metric)
    • OSPF是一种基于开放标准的链路状态路由协议,是目前IGP中应用最广、性能最优的一个协议。
      • OSPF可以在大型网络中使用,并且无路由自环。
      • OSPF支持VLSM、CIDR等。
      • 使用带宽作为量度值 (108BW\frac{10^8}{BW})
      • 收敛速度快
      • 通过分区实现高效的网络管理
    • OSPF必须划分区域
      • 存在一个Area0 (区域0),作为骨干区域
      • 所有其它区域都必须连接到区域0上。
  • 重要术语

    • RouterID:一个32位的无符号整数,是一台路由器的唯一标识,在整个自治系统内唯一。

    • 协议号:IP头中代表OSPF报文的协议号是89

      • 计算机网络超详细笔记(五):网络层
    • TTL = 1:通常OSPF报文不转发,只被传递一条,即在IP报头的TTL值被设为 1,但虚连接除外。

    • 代价

      • 使用带宽作为代价的量度,计算时用 =108代价=\frac{10^8}{带宽}
      • 例如,10M 链路的代价为 10810106=10\frac{10^8}{10*10^6}=10
5.14.2 OSPF分组类型
  • OSPF 五大分组 (packet) 类型

    • OSPF数据包类型 描述
      Type1 — Hello 与邻居建立和维护毗邻 (keep alive) 关系
      Type2 — 数据库描述包 (DD) 描述一个OSPF路由器的链路状态数据库内容。

      (即所有LSP信息的摘要信息,占总大小的30%)
      Type3 — 链路状态请求 (LSR) 请求相邻路由器发送其链路状态数据库中的具体条目。
      (查看摘要DD之后,再确定要交换哪些信息)
      Type4 — 链路状态更新 (LSU) 向邻居路由器发送链路状态通告。

      (新网络事件发生,或对于LSR的应答)
      Type5 — 链路状态确认 (LSA) 确认收到了邻居路由器的LSU。

      (收到LSU之后,发送应答。)
5.14.3 OSPF运行过程
  • 建立路由器毗邻关系
    • 建立路由器毗邻关系的过程

      • 计算机网络超详细笔记(五):网络层
    • OSPF状态

      • Down、Init (初始)、Two-way (双向)、ExStart (准启动)
      • Exchange (交换)、Loading (加载)、Full adjacency (全毗邻)
  • 选举DR和BDR
    • 选举DR和BDR的原因
      • 建立毗邻关系的过程称为同步。网络*进行同步的话,同步次数为 n(n1)2\frac{n*(n-1)}{2}。但是如果指定一台路由器作为DR (Designated Router),则同步次数降为 n1n-1 次,即每台路由器都只与 DR 进行同步。
    • DR选举过程 (类似于村长选举)
      • 本网段内的OSPF路由器
      • 本网段内的 priority > 0 的OSPF路由器
      • 所有的 priority > 0 的OSPF路由器都认为自己是DR
      • 选priority值最大的,若priority值相等,选RouterID最大的作为DR
    • DR中的核心思想
      • 选举制:DR是路由器选出来的,而非人工指定,可以自动运行。
      • 终身制:DR一旦当选,除非路由器故障,否则不会更换。
      • 世袭制:DR选出的同时,也选出BDR,DR故障后,由BDR接替DR称为新的DR。
    • DR带来的变化
      • 同步的次数减少了 [O(n)],减少了带宽的利用
      • 路由器的角色:DR、BDR、DROther
      • 路由器间的关系:Unknown、Neighbor、Adjacent (全毗邻关系)
  • 发现路由
  • 选择最佳路由
    • 每台路由器分别以自己为根节点计算最小生成树
  • 维护路由信息
    • 触发更新
      • 如果发生了一些网络事件,则触发自动更新机制,发送LSU通告
    • Hello分组发送的时间间隔:缺省10s
    • Hello分组的失效间隔:缺省40s
      • 路由器40s没有收到邻居的Hello分组,那么对方down了。
    • 即使没有拓扑变化,LSA在条目过期 (缺省30分钟)后,会发送LSU,通告链路存活。
5.14.4 课程总结
  • OSPF克服了路由自环
    • 每一条LSP都标记了生成者,(用生成该LSP的路由器的RouterID标记),其他路由器只负责传输,这样不会在传输的过程中发生对该信息的改变和错误理解。
    • 路由计算的算法是SPF,计算的结果是一棵树,路由是树上的叶子节点,从根节点到叶子节点是单向不可往返路径。
    • 区域之间的环路通过规定骨干区域避免。
  • 问题
    • OSPF的量度 (代价、开销) 采用了什么?一个100M的快速以太网链路,其量度是多少?
    • OSPF克服了路由环吗?为什么?
    • 怎样建立全毗邻关系?
    • 为什么要选举DR?

5.15 无类域间路由 CIDR

5.15.1 CIDR概述
  • IP地址问题
    • IP分类造成了数百万个地址浪费。超过一半的B类网络拥有的主机数不超过50台。
    • 路由表膨胀
  • 无类别域间路由 (CIDR - Classless InterDomain Routing)
    • 缓解了地址枯竭的趋势,控制甚至缩减了路由表的开销
    • CIDR基本思想
      • 分配IP地址时不再按类别来分,而是按照可变长的地址块来分配。
  • 举例,CIDR分配
    • 计算机网络超详细笔记(五):网络层

    • 上述牛津申请的4096没有直接从8或者12开始,原因是子网网络号的最高位必须与子网中任意一个网络地址一致,而8和12无法做到。

5.15.2 CIDR具体原理
  • 路由表扩展

    • 增加一个32位的子网掩码
    • 路由表中维护三元组:(目的IP地址、子网掩码、输出线路),(IP address、subnet mask、outgoing line)
  • 路由表工作过程 (一个分组到来时)

    • 分组中的目的IP地址被检查
    • 目标IP和子网掩码进行与操作,获得目标网络地址,以查找路由表
    • 如果路由表中有多个表项匹配 (这些表项有不同的子网掩码),使用子网掩码最长的那个表项
      • 子网掩码越长,意味着网络越小,最靠近目的网络。
    • 举例
      • 计算机网络超详细笔记(五):网络层
5.15.3 路由聚合
  • 路由聚合前提条件

    • 子网构成的地址空间是连续的
    • 下一跳相同
  • 路由聚合方法

    • 找到IP地址中最长的不变的位数,再令该地址为该路由网络位即可。
    • 计算机网络超详细笔记(五):网络层
  • 路由聚合结果

    • 形成超网 (SuperNet)
  • 功能

    • 缩减路由表规模
      • CIDR功能,只需记录子网网络号
    • 隔离路由翻动
      • 某路由器下的其他路由的Down/Up状态,不会影响到汇总后的路由状态。
5.15.4 课程总结
  • CIDR的功能是什么?
  • 采用了CIDR技术,怎样完成路由聚合?
  • 怎样计算一个无类网络的可用/合法IP地址?

5.16 网络地址翻译 NAT

5.16.1 NAT概述
  • 定义

    • NAT (net address translate)

      • 私有IP地址和公有IP地址之间的转换
    • PAT (port address translate) [超载]

      • 多个私有IP地址影射到同一个IP地址的不同端口
  • 三类私有地址

    • 私有地址 (Private IP address)
      • 不可路由的地址、也不可用于广域网链路上
    • 计算机网络超详细笔记(五):网络层
  • NAT转换器 (NAT Box) 的位置和功能

    • 由NAT转换器完成私人地址和公有地址的转换,并且维护一个地址转换表。
    • 当有外网的分组到达时,NAT转换器查找地址转换表,转换分组目标地址之后,转发该分组到内网。
    • NAT转换器可以是一个专用的服务器,也可以运行在内网的边界路由器上,也可以在家用路由器 (AP) 上。
5.16.2 NAT 具体工作过程
  • 具体工作过程
    • 私有网络中 10.0.0.3:5503 与 外网中 140.203.8.22:80 进行通信。

    • 计算机网络超详细笔记(五):网络层

    • 第一步

      • 私有网络 10.0.0.3 发出一个分组。分组中信息从上到下分别是源IP地址、目的IP地址、源端口 (5503)、目的端口 (80)。
    • 第二步

      • NAT收到这个分组之后,将源IP地址转换为共有IP地址,即140.203.14.66,将源端口转换为5001。
      • 并将这个转换信息记录在NAT转换表中,其中Index为转换后的端口。
      • 将这个分组发向外网
    • 第三步

      • 外部工作站收到分组之后,将信息封装重新发回原网络中,其中源IP地址、目的IP地址与源端口、目的端口互换。
      • NAT收到这个分组之后,根据NAT转换表中的信息,将目的IP地址和目的端口进行转换,重新发往内网中。到此即完成通信。
  • NAT带来的问题
    • 违背了IP的结构模型
      • 每个IP地址唯一地标识了一台机器
    • 将互联网从"无连接"变成"面向连接"的网络
      • NAT转换器维护着连接的状态,一旦它崩溃,连接就没有了。
    • 违背了最基本的协议分层原则
      • 不但置换了IP地址,还置换了端口号,跨层工作。
    • 如果传输层不是采用TCP或UDP,而是采用了其它的协议,NAT将不再工作
    • 有些应用会在payload中插入IP地址,然后接收方会提取出该IP地址并使用,但是NAT转换器对此一无所知,导致该类应用不再有效
    • NAT让一个IP地址可以承载 61440 (65536-4096) 个私人地址 (超载,PAT)
  • 无NAT服务的网络中使用私有地址
    • 无NAT却使用私有地址,因此仅支持私网内部通信
    • 私网不能与其它外网和私网通信,可以避免被外网攻击,有一定安全性。
  • 例题
    • 计算机网络超详细笔记(五):网络层
5.16.3 课程总结
  • NAT优点
    • 节省了共有IP地址
    • 提供了内部私网访问外网的灵活性
    • 有一定的保密性。
  • NAT缺点
    • 影响了部分协议和应用的通信
    • 增加了网络延时
    • NAT转换设备可能成为网络的瓶颈
    • 影响了路由追踪工具的使用
  • 问题
    • 为什么需要 NAT/PAT?
    • 私人地址空间有哪些?
    • NAT转换器完成什么功能?
    • NAT有什么优点?
    • NAT有什么缺点?

5.17 互联网控制协议 ICMP

5.17.1 ICMP 概述
  • 互联网控制消息协议 (ICMP - Internet Control Message Protocol)

    • 作用:用来报告意外的事件或测试互联网
  • ICMP类型

    • 计算机网络超详细笔记(五):网络层
  • ICMP消息格式

    • 计算机网络超详细笔记(五):网络层

    • IP分组用户协议中为 1 表示是ICMP消息。

    • ICMP消息将IP分组数据部分分为 ICMP头标+ICMP数据

      • ICMP头标中包含三部分:类型、代码、校验和
      • 类型和代码用来表示是哪一种ICMP消息
      • 计算机网络超详细笔记(五):网络层
    • ICMP三大应用

      • Ping
      • Tracert
      • PMTU
5.17.2 Ping
  • 具体过程

    • 使用ping命令时,将向目的站点发送一个ICMP回声请求报文 (包括一些任选的数据)
    • 如目的站点接收到该报文,必须向源站点发回一个ICMP回声应答报文,源站点收到应答报文 (且其中的任选数据与所发送的相同),则认为目的站点是可达的,否则为不可达。
  • Ping作用

    • 检测TCP/IP是否正常工作:ping 127.0.0.1
    • 网络设备是否正确:ping 本机IP地址
    • 检查对外连接的路由器:ping 默认网关IP
    • 检查与某台设备的畅通情况:ping IP
    • 检查DNS设置:ping www.baidu.com
    • 执行DNS反向查询:ping -a IP地址
  • 举例

    • 计算机网络超详细笔记(五):网络层
5.17.3 Tracert
  • 具体过程
    • Tracert过程是通过ICMP数据报超时报文来得到一张途径的路由器列表
    • 源主机向目的主机发一个IP报文,并置 TTL = 1,到达第一个路由器时,TTL-1=0,则该路由器回发一个ICMP数据报超时报文,源主机取出路由器的IP地址即为途径的第一个路由端口地址。
    • 接着源主机再向目的主机发第二个IP报文,并置 TTL = 2,然后再发第三个、第四个IP数据报,…直至达到目的主机。
    • 但互联网的运行环境状态是动态的,每次路径的选择有可能不一致,所以,只有在相对较稳定 (相对变化缓慢) 的网络中,Tracert才有意义。
    • Tracert 最大为30跳,超过30跳就会终止这个过程。
  • 举例
    • 计算机网络超详细笔记(五):网络层
5.17.4 PMTU
  • 路径MTU:指能经过路径而无需分段的最大数据包
    • 通过在发出的数据包中设置DF位,发送方知道这个数据包要要么完整地到达目的地,要么有个报错信息反馈回来。
    • 标志位中 DF = 1,表示数据包不能分段。
  • PMTU:动态发现互联网上任意一条路径的最大传输单元的技术
    • 发数据包,分段标记DF=1,尝试1400、1200、900,直到到达目的机。
5.17.5 课程总结
  • 注意
    • 一般来说,ICMP消息仅送给源机。
    • ICMP数据传输方式和其他数据传输方式一样,也可能遇到同样的错误,规定:ICMP消息不生成自己的差错报告。(否则消息可能会大量激增)
  • ICMP可用来报告网络事件和测试网络
  • ICMP消息封装在IP分组中
  • 问题
    • 为什么需要ICMP?
    • ICMP消息的封装格式是怎样的?
    • ICMP应用ping是利用的什么类型的消息?
    • ICMP应用Tracert是利用的什么类型的消息?

5.18 地址解析协议 ARP

5.18.1 ARP概述
  • 地址解析协议 (ARP - Address Resolution Protocol)

    • 目的:找到一个给定IP地址所对应的MAC地址
    • 是网络层上的协议(涉及到了IP),用广播帧来实现。
  • ARP请求 (Request)

    • 计算机网络超详细笔记(五):网络层
  • ARP回答 (Reply)

    • 计算机网络超详细笔记(五):网络层
5.18.2 ARP优化
  • ARP优化措施
    • 缓存ARP结果
    • 在ARP请求中包括源机的 IP-to-MAC 地址的映射
    • 每台机器在启动的时候,广播它的 IP-MAC 地址对
  • 免费ARP
    • 当一台主机启动时,会发送一个免费ARP (如果意外收到一个应答,则IP地址发生冲突)
    • 当一个接口的配置发生了改变,会发送一个免费ARP
    • 免费ARP帧中,目的IP地址 = 源IP地址
5.18.3 远程主机MAC地址解析
  • 缺省网关 (默认网关、代理ARP)
    • 当源设备需要目的地址与自己不在同一个网络时,如果源机不知道目的MAC地址,它必须使用路由器的服务使它的数据达到目的,当路由器在这种方式下使用时,称为缺省网关。
    • 缺省网关是与源设备所处的网段相连的路由器接口上的IP地址。
  • 工作过程
    • E1要与E6通信,需要发送ARP请求获取E6 MAC地址

      • 计算机网络超详细笔记(五):网络层
    • ① E1 发现 E6 不在同一个LAN中

    • ② E1 将目的MAC地址改为默认网关MAC地址发向默认网关。

      • 默认网关:和主机直接相连的路由器,承接所有发向外网的数据,数值 = 直接相连路由器的那个端口上的IP地址。
      • 如果主机不知道默认网关的MAC地址,会先发送一个ARP请求获得默认网关MAC地址。
    • ③ 默认网关拿到帧之后,用arp请求获取E6的MAC地址

      • 将源MAC地址改为默认网关MAC地址,并发送arp请求获取目的机器的MAC地址
    • 全过程中,源IP地址和目的IP地址都不会发生变化。但是源MAC地址和目的MAC地址在重新封装时都会被置换。

5.18.4 ARP表
  • ARP Table
    • IP地址到MAC地址的映射表。
    • 为了减少ARP请求的次数,每个设备拥有自己的ARP表,包括路由器。
    • 储存在存储器 (RAM) 中,自动维护。(掉电消失)
  • 自动维护ARP表
    • 通过广播ARP请求中的源设备信息添加更新表
    • 利用自己的ARP请求的应答信息来添加、更新表
    • 删除超过一定时限的信息
5.18.5 ARP欺骗
  • ARP欺骗

    • 计算机网络超详细笔记(五):网络层
  • 如何避免ARP欺骗

    • 静态ARP,取消动态更新维护
    • 不马上写ARP缓存
    • 设置ARP服务器
    • 硬件屏蔽 (如路由器采用静态ARP且作全权代理)
5.18.6 课程总结
  • ARP工作原理是怎样的?
  • 远程主机的MAC地址如何解析?
  • 如何维护ARP表?
  • 什么是默认网关/缺省网关?
  • ARP病毒是怎么产生的?

5.19 拥塞控制

5.19.1 拥塞概述
  • 拥塞:当一个子网或子网的一部分出现太多分组时,网络的性能急剧下降,这就是拥塞 (Congestion)

    • 计算机网络超详细笔记(五):网络层
  • 导致的拥塞的因素

    • 本质 —— 负载 > 资源
      • 输入流量大于输出线路的容量
      • 慢速的处理器也可能引起拥塞,如线路容量充足,但处理器来不及处理
      • 线路容量和处理器能力需要平衡
5.19.2 拥塞控制
  • 拥塞控制 VS 流量控制
    • 拥塞控制
      • 确保子网能够承载所到达的流量
      • 这是个全局的问题,涉及到主机、路由器,存储转发的过程等方方面面的问题。
    • 流控
      • 只与特定的发送方和接收方之间的点到点流量有关
      • 确保一个快速的发送方不会持续地以超过接收方接受能力的速率传输数据
  • 拥塞控制的两个原则
    • 开环 (Open Loop)
      • 试图用良好的设计来解决问题,本质是从一开始就保证问题不会发生。
      • 开环决策指定不考虑网络的当前状态
      • 缺点:网络情况更新太快,难以确定
    • 闭环 (Closed Loop)
      • 建立在反馈环路的概念上,分三个步骤
        • 监视系统,检测何时何地发生了拥塞
        • 把这些信息传递到能够采取行动的地方
        • 调整系统的运行,以改正问题
  • 如何知道发生了拥塞 (拥塞量度) —— 数值越大则拥塞程度越重
    • 因为缺乏缓存空间而丢弃的分组百分比
    • 平均队列长度
    • 超时和重传的分组数
    • 平均分组延迟
    • 分组延迟的标准方差
  • 拥塞信息传播
    • 检测到拥塞的路由器发送一个警告分组给流量源
    • 每个分组保留一位或一个域,当拥塞量度超过阈值的时候,路由器填充该位或域,以此警告它的邻居。(警告位)
    • 主机或路由器周期性地向外发送探寻分组,显式地询问有关拥塞的情况,然后,在有问题的区域利用回收的信息来路由流量
  • 如何解决拥塞问题 (负载 > 资源)
    • 增加资源
      • 在某些点之间使用更多的通道增加带宽
      • 把流量分散到多条路径
      • 启用空闲或备份的路由器
    • 降低负载
      • 拒绝为某些用户提供服务
      • 给某些用户的服务降低等级
      • 让用户更有预见性地安排他们的需求
5.19.3 开环系统中的拥塞控制
  • 开环系统
    • 一开始就将拥塞发生的可能性降到最低,而不是随它发生了之后再去反应
    • 从左到右,方法见效速度越来越快。
    • 网络供给、流量感知路由、准入控制、流量调整、负载脱落
      • 计算机网络超详细笔记(五):网络层
  • 数据报子网中流量限制
    • 每台路由器可以监视它的输出线路和其它资源的使用情况
    • 每条线路和一个实变量 u 关联在一起,其值位于 (0.0-1.0) 之间
    • 无论何时,只要 u 超过了阈值,对应的线路就进入到警告 “warning” 状态
    • 每个新到达的分组都将被检查,看它的输出线路是否处于 “警告状态”
  • 处于警告状态后的措施
    • 警告位、抑制分组、逐跳抑制分组、负载脱落
5.19.4 警告位
  • 分组头部中的一个特殊的位
  • 该位被复制到下一个确认分组中,被传回源
  • 源机会监视设置了警告位的分组的比例,相应地调整它的发送速度。
5.19.5 抑制分组
  • 进入警告状态之后,路由器给源机发回一个抑制分组,并在抑制分组中指明原分组的目标地址
  • 当源机收到抑制分组后,它会以某种百分比减少它发向该目标的流量
  • 在一段固定时间内,源机会忽略同样一个目标的抑制分组
  • 过了这段时间,会继续侦听有无新的抑制分组,如果没有,源机将增加流量。
5.19.6 逐跳抑制分组
  • 逐跳抑制分组 (Hop-by-Hop Choke Packets)
    • 当网络速度很高或者路由器距源主机的距离很远的时候,给源主机发送抑制分组并不能很好地起作用,因为反应太慢。
  • 改进方法
    • 让抑制分组路径的每个路由器都采取相应的措施
  • 逐跳抑制的效果
    • 拥塞点上的拥塞很快得到了缓解,但是付出的代价就是,上游路由器需要更多的缓存空间。
5.19.7 负载丢弃/载荷脱落
  • 负载丢弃/载荷脱落
    • 处理拥塞的最极端方法,也是最有效的方法。
  • 当路由器收到的分组超载了,一些分组会被丢掉。
  • 丢分组的策略
    • 随机丢弃
    • 丢弃新到达的 (葡萄酒策略,适合文件传输类)
    • 丢弃早到达的分组 (牛奶策略,适合多媒体类)
    • 丢弃不太重要的分组
      • 需要发送方在它们的分组中标明优先级
  • 随机早期检测RED (防患于未然)
    • 当情况变得恶化无可救药之前就开始丢弃分组
    • 为了确定什么时候开始丢弃分组,路由器维护着最近的队列平均长度
    • 当某条线上的队列平均长度超过了某阈值时,该线路被认定是拥塞的,可以采取相应的措施。
5.19.8 课程总结
  • 拥塞的量度有哪些?
  • 怎么控制拥塞?
  • 抑制分组和逐跳抑制分组是怎么控制拥塞的?
  • 载荷脱落有哪些策略?分别适合什么样的应用?

5.20 流量整形

5.20.1 流量整形概述
  • 流量整形
    • 目的:调节数据传输的平均速率 (和突发数据流),减少拥塞
      • 原因:用户发送的数据流量忽大忽小,需要调节
  • 流量整形算法
    • 漏桶 (leaky bucket)
    • 令牌桶 (token bucket)
    • 其它:资源预留、准入控制、分组调度
5.20.2 漏桶算法
  • 具体算法描述

    • 每个主机连接到网络的接口中都有一个漏桶,即一个优先长度的内部队列。
    • 当桶中有分组的时候,输出速率是恒定的,当桶空的时候,输出速率是0。
    • 当一个分组到达满的桶的时候,分组将被丢弃 (满则溢)
    • 每个时钟滴答 (tick),仅允许一个分组或固定数量的分组发送出去
  • 算法效果

    • 主机内用户进程产生的分组流往往是一个不稳定的流,漏桶可以让它输出到网络时变成一个稳定流,抹平了突发尖峰,极大地减少了发生拥塞的机会。
  • 举例

    • 水龙头速度很快,但是漏桶速度不变。

    • 计算机网络超详细笔记(五):网络层

    • 数据产生速率:25MBps,路由器工作速率:2MBps,数据突发时间持续:40ms,漏桶输出速率:2MBps,漏桶容量:1MB

    • 则漏桶需要 500ms 才能处理完这些突发数据。

  • 漏桶的缺点

    • 当漏桶满了之后,数据将被丢弃
    • 不能大量地突发数据
5.20.3 令牌桶算法
  • 具体算法描述

    • 当大量数据突发的时候,令牌桶算法允许输出加快到某种程度
    • 令牌桶拥有令牌 (tokens),且以每 ΔT\Delta T 秒产生一个令牌的速度往桶中输入令牌。
    • 一个分组要发送的时候,它必须从桶中取出和获取到一个令牌。
    • 令牌桶算法允许累计令牌,但最多可以累计 n (令牌桶的容量) 个令牌。
  • 与漏桶算法相比

    • 令牌桶允许突发,但是最大突发受制于令牌桶容量的限制
    • 当桶满的时候,令牌桶算法丢掉的是令牌 (不是分组)
  • 举例

    • 每个分组必须拿到一个令牌才能被发送。
    • 计算机网络超详细笔记(五):网络层
  • 算法计算最大突发时间

    • 突发时间:S秒,令牌桶容量:B字节,令牌到达的速率:R 字节/秒,最大输出速率:M 字节/秒
    • B+RS=MS,S=BMRB+RS=MS,S=\frac{B}{M-R} ,即求出了能够承受的最大突发时间。
      • 最大突发时间与 B 成正比,与 (M-R) 成反比。
    • 练习题
      • 计算机网络超详细笔记(五):网络层

      • 计算机网络超详细笔记(五):网络层

5.20.4 课程总结
  • 漏桶算法可让一个不稳定的流整为一个稳定的流
    • 无法突发
    • 桶满时丢掉的是分组
  • 令牌桶可以累计突发数据的令牌,允许有上限的突发,有时候在令牌桶之后再串接一个漏桶
    • 桶满时丢掉的是令牌
  • 通过整形算法,可以减少拥塞可能,提高服务质量 QoS
  • 问题
    • 什么是流量整形?
    • 漏桶的工作原理是怎样的?
    • 令牌桶的工作原理是怎样的?
    • 比较漏桶和令牌桶两种整形算法?