Skip to content

网络层

:material-circle-edit-outline: 约 2572 个字 :material-clock-time-two-outline: 预计阅读时间 9 分钟

PPT 计算机网络(本)2024-11-07 第 3-5 节 智云课堂

IP 地址

[!QUESTION] 为什么要使用两种地址:IP 地址和 MAC 地址

MAC 地址之间的转换非常复杂,对以太网 MAC 地址进行寻址也是极其困难的

在虚拟的 IP 网络上用 IP 地址进行通信非常方便

image-20241115145503354

互联网上的每台主机(或路由器)的每个接口分配一个在全世界唯一的 IP 地址。

[!NOTE]

IP 地址 ::= { <网络号 net-id>, <主机号host-id> }

IP 地址分 ABCDE 五类,普通人只能用 ABC 三类

A 类 net-id 只有一个 byte,然后依次增加

各类 IP 地址的指派范围

image-20241115150915571

[!NOTE] 不使用的特殊的 IP 地址

  1. A 类网络地址中, 网络号 0 和 127 是保留地址,不指派。
    • 0 是网络地址,127 是本地环回测试地址,即广播地址
  2. B 类网络地址中,网络号 128.0 是被 IANA 保留的,不指派。采用无分类编址(CIDR)时可以指派。
  3. C 类网络地址中,网络号 192.0.0 是被 IANA 保留的,不指派。采用无分类编址(CIDR)时可以指派。
  4. 指派主机号时,要扣除全 0 和全 1
    • 全 0 和全 1 有特殊含义和用途。

[!NOTE] 如何判断 IP 地址的类别、网络号和主机号

由第一个十进制数进行判断:

  1. 1-126 为 A 类

    • net-id 的最高位必须是 0
  2. 128~191 为 B 类

    • net-id 的最高位必须是 10
  3. 192~223 为 C 类

    • net-id 的最高位必须是 110

image-20241115153516025

一般不使用的特殊的 IP 地址

image-20241115151945789

[!EXAMPLE]

image-20241115154458629

注意路由器端口也在一个网络内,也需要一个 IP 地址

子网划分

一个网络地址下,主机数量可能比较少,主机号有浪费

我们可以将空闲的主机号复用成子网号,相当于在这个网络里又分为了很多个子网

子网划分(subnetting),在网络内部将一个网络块进行划分以供多个内部网络使用,对外仍是一个网络

子网掩码(subnet mask),与 IP 地址一一对应,置 1 表示网络位,置 0 表示主机位

子网掩码 AND 运算得到的网络地址就是子网的网络地址

image-20241115155244860

无分类编址 CIDR

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

消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,可以更加有效地分配 IPv4 的地址空间

[!NOTE] CIDR 与传统 IP 区别

网络前缀

IP 地址 ::= { <网络前缀network-prefix>, <主机号host-id>}

network-prefix 与 network-id 的区别是,prefix 可以取 0 ~ 32 的任意值,而不是 8 的倍数

地址掩码 (address mask) 和子网掩码一模一样,作用对象和目的变了而已,用来快速获取 IP 对应的网络地址

CIDR 地址块

CIDR 把网络前缀都相同的所有连续的 IP 地址组成一个 CIDR 地址块

地址块的表示:通常是 IP 地址后面跟一个斜杠和数字(例如 192.168.1.0/24),数字表示网络部分的位数

说白了,一个地址块就是一个网络,🐎 的还以为什么玩意儿这么高级

[!EXAMPLE] 路由聚合 (route aggregation)

image-20241115162220210

IP 地址与 MAC 地址

  • IP 地址
    1. 虚拟地址、软件地址、逻辑地址。
    2. 网络层和以上各层使用。
    3. 放在 IP 数据报的首部。
  • MAC 地址
    1. 固化在网卡上的 ROM 中。
    2. 硬件地址、物理地址。
    3. 数据链路层使用。
    4. 放在 MAC 帧的首部。

image-20241115162916656

[!NOTE]

网络层及以上的层级,都以为是用 IP 地址在相互交流,但实际上数据链路层会进一步被加工以用于传输,这里相当于隐藏了下层的复杂度

image-20241115163154534

路由器也只根据目的站的 IP 地址进行转发,所以路由器会有网络层

地址解析协议 ARP

通过网络层的 ARP 协议,我们可以通过机器的 IP 地址找到对应的 MAC 地址

其首先会查询 ARP cache,找不到才另外查找

ARP 工作流程

当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时:

image-20241115164958523

ARP 高速缓存 (ARP cache)

其存放 IP 地址到 MAC 地址的映射表,cache entity 如下

< IP 地址;MAC 地址;生存时间 (Age);类型等 >

超过生存时间的项目都从高速缓存中删除,以适应网络适配器变化

机器可以通过 ARP 请求分组更新自己的 ARP cache

ARP 如何查找 MAC 地址

  1. 在本局域网上广播发送 ARP 请求分组,路由器不会转发这玩意儿
  2. 对应的机器将返回单播 ARP 响应分组

ARP 分组封装在以太网帧中传输

image-20241115165255051

[!QUESTION] 2 台主机不在同一个局域网上怎么办?

ARP 只用于解决同一个局域网上的,路由器不会转发 ARP 分组

但是路由器可以接收 ARP 请求分组,返回自己端口的 MAC 地址

然后路由器再向目标网络发送新的 ARP 请求分组,获取目标的 MAC 地址

相当于 cache 存不同局域网机器 MAC 地址时,存的实际是路由器端口的

IP 数据报的格式

image-20241115170332563

首部的前一部分是固定长度,共 4 x 5 = 20 字节,是所有 IP 数据报必须具有的。

第一行 主要记录基本信息

  1. 版本——占 4 位,指 IP 协议的版本
    • 目前的 IP 协议版本号为 4 (即 IPv4)
  2. 首部长度——占 4 位,可表示的最大数值,一个单位为表示 4 byte
    • 因此 IP 的首部长度的最大值是 60 字节。
  3. 区分服务——占 8 位,一般的情况下不使用
  4. 总长度——占 16 位,指首部和数据之和的长度,单位 byte
    • 因此数据报的最大长度为 65535 字节。
    • 总长度必须不超过最大传送单元 MTU(数据链路层)

第二行 主要记录分片信息

  1. 标识 (identification) ——占 16 位,当一个大的 IP 数据报被分成多个片段(分片)进行传输时,每个片段会包含相同的标识值
  2. 标志(flag) ——占 3 位,目前只有前两位有意义
    • 标志字段的最低位是 MF (More Fragment)
      • MF = 1 表示后面还有分片,MF = 0 表示最后一个分片。
      • 与原始数据报首部会不同
    • 标志字段中间的一位是 DF (Don't Fragment)
      • 只有当 DF = 0 时才允许分片。
      • 与原始数据报首部一致
  3. 片偏移——占 13 位,指出较长的分组在分片后,某片在原分组中的位置,例如第一个分片是 0
    • 片偏移以 8 byte 为一个单位,从数据部分开始计算
    • 与原始数据报首部会不同

第三行 主要记录基本信息

  1. 生存时间——占 8 位,记为 TTL (Time To Live)
    • 指示数据报在网络中可通过的路由器数的最大值。
  2. 协议——占 8 位,指出数据部分使用何种协议
    • 以便目的主机的 IP 层将数据部分上交给那个处理过程
  3. 首部检验和 checksum——占 16 位,只检验数据报的首部,不检验数据部分
    • 不采用 CRC 检验码而采用简单的计算方法。
    • 将首部按顺序分为一个个 16bit(首部检验和置 0),进行反码算术运算求和,得到 16bit 结果,再取反码,得到首部检验和
    • 接收端就反码算术运算求和并取反码,如果结果为 0 则说明正常,否则保留
    • 了解即可,基本不考

IP 层转发分组的过程

基于终点的转发

发送方先通过网络掩码检查目标地址是否在本网络,在的话就直接交付,否则就发给路由器

路由器 R1 收到分组后查找转发表,转发表里储存的是前缀与端口的映射关系,所以也需要通过网络掩码检查目标地址的网络地址

具体而言,是将目标地址与转发表里前缀的掩码做 AND 操作,将结果与该前缀做比对

转发表中的 2 种特殊的路由

主机和路由器都有转发表

  • 主机路由 (host route)
    • 是对特定目的主机的 IP 地址专门指明的一个路由
    • 网络前缀就是 a.b.c.d/32
    • 放在转发表的最前面
  • 默认路由 (default route)
    • 不管分组的最终目的网络在哪里,都由指定的路由器 R 来处理
    • 用特殊前缀 0.0.0.0/0 表示

最长前缀匹配

使用 CIDR 时,在查找转发表时可能会得到不止一个匹配结果

最长前缀匹配 (longest-prefix matching) 原则:选择前缀最长的一个作为匹配的前缀

网络前缀越长,其地址块就越小,因而路由就越具体

路由器分组转发算法

image-20241115201704329

使用二叉线索查找转发表

二叉线索 (binary trie):一种特殊结构的树,可以快速在转发表中找到匹配的叶节点

从二叉线索的根节点自顶向下的深度最多有 32 层,每一层对应于 IP 地址中的一位

为简化二叉线索的结构,可以用唯一前缀 (unique prefix) 来构造二叉线索

[!EXAMPLE] 用 5 个唯一前缀构成的二叉线索

有五个地址

image-20241115202013800

网际控制报文协议 ICMP

ICMP (Internet Control Message Protocol) 是互联网的标准协议,允许主机或路由器报告差错情况和提供有关异常情况的报告

ICMP 不是高层协议,而是 IP 层的协议

image-20241115202955912

pingTraceroute 就是一种 ICMP

ICMP 报文的种类

类型值不用管

image-20241115203055920

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

image-20241115203430611

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

对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。

对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文

对具有多播地址的数据报都不发送 ICMP 差错报告报文。

对具有特殊地址(如 127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。