网络层概述

异构网络

两种服务(之前讲过)

虚电路

数据报

现代 网络层一般采用 数据报服务

路由与转发

SDN

这里 引出了 一个概念 SDN (Software Definition Network) SDN,可以将 控制平面与 数据平面解耦;实现对控制平面的集中化管理,和数据平面的分布式部署(因此路由表可以不用承担维护路由表、交换路由信息的任务)

但是对于互联网而言,用户都是分布的,如果将网络架构集中化,是不可行的。

因此 SDN 技术,只能用于一些大型数据中心互联的广域网(局部的大型互连网),该技术能显著提升其网络运行效率。

总结

网络层 非常不靠谱,不可靠 无连接,只能仅最大努力去交付报文

IP

🔥高优先级

绝对重点,需要掌握 IPv4 协议中各个知识点的细节。IPv6 和 移动IP 简单了解一下基本概念,有小概率会在选择题中考察一题。

真题练习

虚拟互联网络

在现实生活中,我们通过“国家‑省份‑城市‑街道‑小区‑楼栋‑门号”等层级信息来定位一个具体地点,例如 中国‑北京市‑海淀区‑某街道‑某小区‑某栋‑某户。

在计算机网络里,定位一台主机同样需要使用唯一的地址,这个地址就是 IP 地址。IP(Internet Protocol)直译为“互联网协议”,它既提供了主机的标识,又规定了数据在网络中的传输方式。

仅有地址并不能保证数据能够顺利从源端到达目的端。互联网是一张由无数路由器、交换机等网络设备相互连接而成的全球性网络。从 一个机器 到 另一个机器 的通信,往往要经过多级转发。如何在众多可能的路径中找到一条通向正确目的地的路线,就需要 IP 协议 与路由协议共同配合完成。后续章节我们会逐步剖析这一过程的细节。

目前 IP 协议有两个版本:

  1. IPv4(Internet Protocol Version 4)
  2. IPv6(Internet Protocol Version 6)

本文的重点在于深入理解 IPv4 的工作原理和细节。

IPv4 地址格式

  • 在TCP/IP体系中,IP地址是一个最基本的概念,我们必须把它弄清楚。

  • IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。

  • IP地址由因特网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配。

    1. 我国用户可向亚太网络信息中心APNIC(Asia Pacific Network Information Center)申请IP地址,需要缴费。

    2. 2011年2月3日,互联网号码分配管理局IANA(由ICANN行使职能)宣布,IPv4地址已经分配完毕。

    3. 我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址。同时全面开展商用部署IPv6。

IPv4 地址由 4 个字节(即 32 位)构成,例如:11000000.10101000.00000100.00000010 就是一个典型的 IPv4 地址的二进制形式。

点分十进制

由于二进制表示不便于人类阅读,IPv4 通常采用 点分十进制 的方式进行表示。

在点分十进制中,每个字节用十进制数表示,并以点号分隔 4 个字节。例如,上述二进制地址对应的点分十进制形式为 192.168.4.2

easy

网络号与主机号

IP 地址的设计本质上是为了在互联网中唯一标识一台设备,因此通常被划分为两个部分:

  • 网络号(Network ID):用于标识设备所在的网络。
  • 主机号(Host ID):用于标识该网络中的具体主机。

网络号负责确定目标网络,主机号用于在该网络中定位到具体设备。

IPv4 首部

IP 协议位于 OSI 7 层模型的网络层,其承载上层(传输层)的数据,对其进行 封装,然后传递给下层(数据链路层)进行进一步的处理。

封装的具体过程就是为 传输层的数据 加上 IP 协议的首部的二进制表示,IPv4 的首部的 逻辑格式 如下图所示,其中包含多个字段,长度通常为 20 个字节

这一小节简单介绍各个字段,帮助大家建立一个粗略的了解,部分字段的细节我会在后面几个小节详解说明。

  1. 版本(Version):

    • 4 位字段,用于指定 IP 协议版本,IPv4 的版本为 4。
  2. 头部长度(Header Length):

    • 4 位字段,用于指示 IPv4 首部的长度,以 4 字节为单位。由于 IPv4 首部的固定部分长度为 20 字节,因此这个字段的值通常是 5(即该字段二进制表示为 01015 * 4(4 字节为单位) = 20,最终表示的长度为 20)。
  3. 服务类型(Type of Service):

    • 8 位字段,用于指定数据报的服务质量(Quality of Service,QoS),包括优先级、延迟、吞吐量等。
  4. 总长度(Total Length):

    • 16 位字段,指定整个 IPv4 数据报(包括首部和数据部分)的总长度,以字节为单位。最大值为 65535 字节
  5. 标识(Identification):

    • 16 位字段,用于唯一标识数据报。通常在数据报分片时用于重新组装数据报。
  6. 标志(Flags):3 位字段,包括以下标志:

    • 最左边位:保留为 0,未使用。
    • DF(Don’t Fragment):
      • 如果设置为 1,表示数据报不允许分片。当路由器发现需要分片才能转发时,则路由器会丢弃该数据报,并发送一个 ICMP 错误消息(“Fragmentation Needed and DF Set”)返回给发送方,告知需要分片但不允许分片。
      • 如果设置为 0,标识允许分片,路由器在传输过程中如果需要,可以将数据报分片,以确保数据报能够通过传输链路。
    • MF(More Fragments):
      • 如果设置为 1,还有更多的分片;
      • 如果设置为 0,表示当前分片是对应数据报的最后一个分片,或者表示当前数据报根本没有分片。
  7. 片偏移(Fragment Offset):

    • 13 位字段,用于指示数据报分片的[起始位置]。以 8 字节为单位,表示相对于原始数据报的偏移量。片偏移的作用
  8. 生存时间(Time to Live,TTL):

    • 8 位字段,指定数据报在网络中可存在的最大时间(跳数),每经过一个路由器,TTL 减 1,当 TTL 减至 0 时,数据报被丢弃。
  9. 协议(Protocol):

    • 8 位字段,指定上层协议,表示数据报的载荷是由哪个协议处理。例如,6 表示 TCP,17 表示 UDP。IPv6 也能作为其数据报的载荷(此时应该填 41)
  10. 首部校验和(Header Checksum):

    • 16 位字段,用于检测 IPv4 首部的错误。
  11. 源 IP 地址(Source IP Address):

    • 32 位字段,指定数据报的发送者的 IP 地址。
  12. 目标 IP 地址(Destination IP Address):

    • 32 位字段,指定数据报的接收者的 IP 地址。
  13. 选项(Options):

    • 可选字段,长度可变,用于包含一些额外的信息。IPv4 首部中的选项字段通常很少被使用。

分片和相关字段

简而言之,IP 数据报的最大长度为 65535 字节,这是因为其“总长度”字段占 16 位,所能表示的最大无符号整数为 65535。然而,数据链路层(如以太网)的 MTU(最大传输单元)往往远小于该值,例如以太网的 MTU 通常为 1500 字节

因此,当 IP 数据报长度超过底层链路的 MTU 时,就需要将其拆分成多个更小的部分进行传输,这一过程称为 IP 分片(IP Fragmentation)。关于分片的详细内容可参考:IP 数据报分片

在进行分片时,会引出两个关键问题:

  1. 如何区分不同数据报的分片?

比如,假设 packet A 被分片为 A1、A2、A3,而 packet B 被分片为 B1、B2,我们如何知道 A1 属于 packet A 而不是 packet B?

  1. 如何将同一数据报的多个分片重新组合为原始数据?

为了解决这些问题,IP 协议在首部中设计了以下两个重要字段:

  • Identification(标识符):为每一个 IP 数据报分配一个唯一的标识值,使接收方能够识别属于同一个数据报的所有分片。
  • Fragment Offset(分片偏移量):指明当前分片在原始数据报中的位置,单位为 8 字节(即偏移值乘以 8 即为实际字节偏移量),用于在接收端正确地重组数据报。

通过这两个字段,接收方可以准确地将来自不同数据报的分片加以区分,并将同一数据报的所有分片按照正确顺序重新组装起来,恢复出原始的 IP 数据报。

差错校验字段

IP 首部的 checksum 为 IP 协议的差错校验字段,用于检验 IP 首部在传输的过程中是否发生错误,接下来我会告诉你如何通过该字段进行校验。

当一个 IP 数据报被创建时,发送端设备会计算 IP 头部的校验和,并填充 IP 数据报中的 checksum 字段

当 路由器 和 目标机器 在收到数据报时会重新计算首部校验和,并将计算得到的校验和和接收到的 IP 数据报中的 checksum 进行比较。如果 不一致 的话,则说明 IP 数据报中的某些数据在传输的过程中出现变动,就需要 丢弃 该 IP 数据报。

需要注意的是,当 IP 数据报 经过某个路由器时,路由器需要 重新计算 并填充 checksum 字段,因为 IP 数据报中的某些字段在经过路由器时会被改变(比如 TTL 会减 1 等)。

一般而言,对于校验和,了解到以上程度即可,如果你好奇校验和究竟是如何计算且学有余力的话,可以查看 IP校验和计算方式

TTL

TTL(Time To Live)用于控制 IP 分组的 生命周期,发送方在发送 IP 分组时会设定一个 TTL 值,这个值是不固定的,但是一般是 32、64、128 或 255 这四个值中的一个。

当 IP 分组经过 路由器 时,路由器会自动 IP 分组中的 TTL 值减 1,路由器 发现其 TTL = 0,则路由器会 丢弃 该 IP 分组,并且返回一个 ICMP “Time Exceed” 消息。

IPv4 分类寻址

在互联网早期,IP 地址采用了 分类寻址(Classful Addressing)。具体而言,就是根据 IP 地址的 网络号的前几位 将地址分为 A、B、C、D、E 五类。

在分类寻址中,如果给定一个 IP 地址,我们可以马上判断出该 IP 地址属于哪一类网络(根据前几位的值),以及该 IP 地址的 网络编号 和 主机编号 是多少。

类别起始二进制起始地址结束地址默认子网掩码网络号长度主机号长度用途
A 类0xxxxxxx1.0.0.0126.255.255.255255.0.0.08 位24 位大型网络
B 类10xxxxxx128.0.0.0191.255.255.255255.255.0.016 位16 位中型网络
C 类110xxxxx192.0.0.0223.255.255.255255.255.255.024 位8 位小型网络
D 类1110xxxx224.0.0.0239.255.255.255多播(Multicast)
E 类1111xxxx240.0.0.0255.255.255.255保留(Reserved)

只有 A 类地址的网络号有保留:

排除的地址原因
0.x.x.x(网络号=0)保留,表示”本网络”,不分配
127.x.x.x(网络号=127)保留作本地环回测试(127.0.0.1 = localhost)

注意:

有些教材中指出128.0是保留网络号,B类第一个可指派的网络号为128.1。

但根据2002年9月发表的RFC 3330文档,128.0网络号已经可以分配了。有兴趣的同学可以自行查询以128.0开头的IP地址,看看它们属于哪些国家。


有些教材中指出192.0.0是保留网络号,C类第一个可指派的网络号为192.0.1。

但根据2002年9月发表的RFC 3330文档,192.0.0网络号已经可以分配了。只不过目前还没有分配出去。

特殊地址

在 IP 地址的划分中,有些 主机号 是保留的,不能被用于分配给普通设备:

  • 主机号全为 0:表示网络本身,不能用于主机。
  • 主机号全为 1:表示该网络中的广播地址,用于向网络内所有主机发送信息。

因此,计算某网络 可分配 ip 的数量时 记得 都要 减 2

可以看到 路由表中 的第一个表项就是 目的网络(也就是主机号全 0 的地址)


此外,还有以下两个特殊的全局地址:

  • 0.0.0.0:表示“本机”,通常用于设备尚未获得 IP 地址时的占位。
  • 255.255.255.255:称为“本地广播地址”,用于向本地网络中的所有设备广播数据,主要用作 目的地址 向 DHCP 服务器请求 IP 分配。

例题

局限

分类寻址 曾是 IPv4 设计时的核心思路。它通过把全部 32 位地址空间划分为五大类,既简化了路由器的实现,也方便了地址的分配。
在互联网的萌芽阶段,这种“一刀切”的方案效率极高,完全能够满足当时少量主机的需求。

然而,设计者没有预见到随后出现的 设备爆炸式增长:每台联网设备都需要一个唯一的 IP 地址。IPv4 的 32 位地址空间(约 43 亿 个地址)在全球范围内迅速被耗尽,原本简单的分类方式反而成为制约网络扩展的瓶颈。

具体表现为:

  1. 地址空间浪费

    • B 类地址提供 65 534 个主机位。如果一个组织只有几千台主机,其余地址就被闲置。

    • C 类地址只能容纳 254 台主机。当组织的需求超过这一规模,却又不想使用一个庞大的 B 类地址块时,就会陷入分配困难。

  2. 分配不灵活

    • 分类寻址的层次结构固定,无法根据实际需求进行细粒度的划分,导致大块地址被“硬切”,小块需求又常常得不到满足。

为突破这些局限,业界相继提出了几项关键技术:

  • CIDR(无类域间路由):通过可变长度子网掩码(VLSM)取代固定的 A/B/C 类划分,使得地址块可以按需灵活划分,大幅提升了地址利用率,并简化了路由表的汇总。
  • NAT(网络地址转换):在内部网络使用私有地址,通过在出入口的路由器上进行地址映射,多个终端共享同一个公网 IP,从而在一定程度上缓解了 IPv4 地址匮乏的问题。
  • IPv6:直接扩展地址长度至 128 位,提供几乎无限的地址空间(约 3.4 × 10³⁸ 个地址),从根本上解决了地址枯竭的危机,并为未来的网络功能(如更高效的路由、安全机制等)奠定基础。

CIDR

无类别域间路由(CIDR,classless inter-domain routing)的主要目标是克服传统的基于类别的 IP 地址划分方法,使网络资源的分配更加灵活和高效。

在 分类寻址 中,每一类网络的网络编号的长度是固定的,在 CIDR 中,网络编号的长度是动态的,可以根据需求定制。其中网络编号的长度叫做 前缀长度(Prefix Length),前缀长度通常以 IP 地址 斜杠后跟一个数字表示,例如,192.168.1.13/24 表示前 24 位 是网络部分,剩下的位数用于主机部分。

为后续 子网划分 做理论基础,(网络号不固定,可以区分不同的网段)

子网掩码

为了实现 CIDR,需要引入 子网掩码(subnet mask)这个概念,如果一个 CIDR 网络的 前缀长度 是 n 位的话,那么其子网掩码的二进制表示就是 111 (n 个 1) ... 0000 (32-n 个 0)

子网掩码的作用是用来 区分网络号和主机号

  • 网络号部分:与子网掩码中 1 对应的比特位
  • 主机号部分:与子网掩码中 0 对应的比特位

下表给出了 CIDR 中不同前缀长度对应的子网掩码:

每个 CIDR 地址 都对应一个 地址块,这样一个地址块:包含了其子网包含的 所有地址

包含:广播 和 本网络

子网划分

子网划分(Subnetting) 是将一个较大的 IP 网络进一步划分为多个更小的网络(子网)的过程。这样做的目的包括:

  • 更高效地利用 IP 地址资源
  • 减少广播范围,降低网络拥塞
    • 优化路由效率

那么子网划分如何实现呢?在 CIDR 中,IP 地址由 网络部分 + 主机部分 组成。子网划分的 关键思想 是:从主机部分 “借用” 若干位,加入到网络部分,用来表示新的子网:

注意

传统三层划分(有类网络时代)

传统上,IP 地址分为三部分:

IP 地址 = 网络号 + 子网号 + 主机号



---

**CIDR/现代语境(无类域间路由)**

CIDR 本身**抛弃了"有类"概念**,不再区分"网络号"和"子网号",统一用**前缀(prefix)**表示:

IP 地址 = 网络前缀 + 主机号
└── 掩码长度决定边界

在子网划分过程中,子网掩码(Subnet Mask)用于区分 IP 地址的网络部分和主机部分。常见的做法是通过调整子网掩码的长度,将更多位分配给网络部分,减少主机部分的位数。

子网划分包含 变长子网划分(Variable Length Subnet Masking, VLSM) 和 固定长度子网划分(Fixed Length Subnet Mask, FLSM) 两种方式。

⭐ 变长子网划分

VLSM(Variable Length Subnet Masking)使用不同长度的掩码来划分 IP 地址空间,从而根据实际需求为各个子网分配不同数量的地址。

假设你有一个 C 类 网络192.168.1.0/24,需要划分给四个部门,其中 A 部门需要 100 个 IP 地址,B 部门需要 50 个 IP 地址,C 部门只需要 25 个 IP 地址,D 部门需要 14 个 IP。

使用 VLSM,你可能会这样划分:

部门名称子网地址子网掩码地址个数可用 IP 范围
A 部门192.168.1.0/25255.255.255.128128192.168.1.1 ~ 192.168.1.126
B 部门192.168.1.128/26255.255.255.19264192.168.1.129 ~ 192.168.1.190
C 部门192.168.1.192/27255.255.255.22432192.168.1.193 ~ 192.168.1.222
D 部门192.168.1.224/27255.255.255.24032192.168.1.225 ~ 192.168.1.254

直接在尾部加上 需要地址个数就是 对应的 ip 范围(包含了两个特殊地址)

特殊地址 包含了 广播地址 和 本网络 地址

可以用二叉树结构来处理上述 VLSM 问题:

  • 每向 下一层表示子网掩码加 1 位,即 地址空间减半
  • 每个节点的 “0” 代表当前块的前半段,“1” 代表后半段。
  • 从根节点 /24 开始,依次为 A、B、C、D 部门分配子网。
  • 每个子网 最终落在一个叶子节点,子网大小正好满足其所需地址数。

补充

VLSM 实质上是一种 前缀编码 方式,要求各子网的前缀互不包含,以确保地址空间的唯一划分。

这里采用二叉树进行子网划分的思想和 操作码扩展编码 类似,可以思考其相似性。

例题

尽最大努力抢占对应最大 ip 数量的子网号,涉及到 前缀编码(前面的子网地址要考虑为后面子网划分留一个窗口)最后一个直接占用,不需要考虑后面的子网

变长子网划分的经典例题:用 二叉树的形式 快速找到划分的可能解 是解决这类题目的最佳方案(后续 路由聚合 也能用到该方法)

解题技巧:

能够快速判断 给定 十进制数 对应的 掩码个数

掩码个数12345678
十进制数128196224240248252254255

定长子网划分

FLSM(Fixed Length Subnet Masking)使用相同长度的子网掩码来划分网络。这种方法在划分时更为简单和直接,但通常不如 VLSM 灵活高效,FLSM 具备如下特点:

  • 每个子网使用相同的子网掩码
  • 每个子网拥有相同数量的 IP 地址

假设你有一个 C 类 网络192.168.1.0/24,需要划分给 A、B、C、D 四个部门,可以这样划分:

部门名称子网地址子网掩码地址个数可用 IP 范围
A 部门192.168.1.0/26255.255.255.19264192.168.1.1 ~ 192.168.1.62
B 部门192.168.1.64/26255.255.255.19264192.168.1.65 ~ 192.168.1.126
C 部门192.168.1.128/26255.255.255.19264192.168.1.129 ~ 192.168.1.190
D 部门192.168.1.192/26255.255.255.19264192.168.1.193 ~ 192.168.1.254

与 VLSM 类似,FLSM(Fixed Length Subnet Masking)也可以通过二叉树结构进行子网划分:

不同之处在于,FLSM 中所有子网大小相同,因此划分过程会持续到每个子网达到相同掩码长度为止。最终,每个子网都对应于二叉树的 最底层叶子结点

默认 Subnet Masking

子网聚合

子网聚合(Route Aggregation 或 Supernetting)是将多个相邻的子网 合并为一个更大的网络 的过程。这一技术通常用于 路由汇总,以减少路由表项数量,提高路由器的处理效率。

例如,当一个路由器连接了多个相邻子网:

  • 192.168.0.0/23
  • 192.168.2.0/24
  • 192.168.3.0/24

它可以将这些子网聚合成一个更大的网络:192.168.0.0/22

进行子网聚合需要满足以下的 聚合条件

  • 地址对齐:聚合后的网络地址必须是其新掩码下的网络起始地址(低位必须为 0);
  • 掩码缩短:聚合的结果一定是更短的前缀,比如从 /24 聚合成 /22。

子网聚合的过程也可以根据二叉树来理解:子网划分是将一个中间结点(的网络)拆分为若干个叶子结点(的网络),子网聚合就是将若干个叶子结点合并为一个中间结点。

补充

注意,子网聚合并不要求所有子网都被实际使用;即使部分子网暂未启用,只要地址上可以对齐,它们仍然可以被聚合,用于简化路由表。

IP 数据报分片

IP 数据报分片是一种网络通信中的过程,它允许较大的 IP 数据报在经过一些网络链路时被分割成多个较小的片段,以适应网络链路的 最大传输单元(MTU,Maximum Transmission Unit)。

MTU 是指网络链路能够传输的最大数据报大小,不同网络链路的 MTU 大小可能不同。当一个 IP 数据报的大小超过了某个链路的 MTU 时,它就需要被分片,以确保可以顺利传输。

注意

MTU 指的是链路层帧中有效负载(Payload)部分的最大字节数,不包括链路层的帧头(Frame Header)和帧尾(Trailer)。

数据链路中的负载(Payload)包含 IP 数据报的首部(20B)和数据部分。

以下是 IP 数据报分片的基本过程:

  1. 发送端分片

    • 发送端的主机首先创建一个 IP 数据报,并将它发送到目标主机。这个数据报的大小可能大于某些链路的 MTU
  2. 路由器检查 MTU

    • 当数据报经过 路由器 时,路由器 会检查下一个链路的 MTU 大小。它会比较数据报的大小和链路 MTU

    • 如果数据报的大小 小于或等于 链路 MTU,那么数据报会继续传输,无需分片。

    • 如果数据报的大小 大于 链路 MTU,那么 路由器 需要将数据报分片为多个较小的片段,以适应链路 MTU

  3. 数据报分片

    • 当数据报需要分片时,路由器 会将数据报拆分成多个片段。每个片段都会包含原始数据报的一部分数据。
    • 每个片段的头部将保留原始数据报的首部,但有一个特殊的标志(Fragment Offset)来指示它在原始数据报中的位置。
    • 路由器 将这些片段分别发送到下一个链路。
  4. 目标端重组

    • 当片段到达目标主机时,目标主机将重新组装这些片段以恢复原始的数据报。
    • 目标主机使用每个片段的标志和偏移量信息来确定如何正确地重组数据报。

分片例子:

以上图为例,假设我们有一个 IP 数据报,其总长度为 10000 字节,它需要通过两个链路,两个链路的 MTU 分别为 4000 和 2500 字节。当 IP 数据报经过第一个链路时,它需要被拆分为 3 个分片以通过链路:

数据报首部长度数据长度总长度偏移量片偏移字段MF 标志位ID 字段
原始 IP 数据报201000010020-00578
分片 12039763996001578
分片 2203976399639764971578
分片 3202048206879529940578

注意

分片后 IP 首部字段变化情况

所有分片中的 IP 数据报首部中的标识(ID,Identification)字段保持不变。

如果是最后一个分片,则 MF(More Fragment)标识位为 0,否则 MF 标识位为 1。

片偏移(offset)字段以 8 字节为单位,其值为 分片实际偏移量 / 8

分片后应该满足的条件

总长度 = 首部长度(20B) + 数据长度 ≤ MTU

数据长度必须为 8 的整数倍,因为 offset 字段以 8 字节为单位。

分片经过第二个链路时也会根据 MTU 进行拆分,以分片 1 为例进行说明:

数据报首部长度数据长度总长度实际偏移量片偏移字段MF 标志位ID 字段
分片 12039763996001578
分片 1.12024802500001578
分片 1.2201496151624803100578

IP 多播

IP 多播(IP Multicast)「也称组播」是一种 IP 通信模式,允许一台发送器将数据报发送到多个接收器,而不是传统的单播(点对点通信)模式。组播是一种多对多的通信方式,非常适合用于广播、多媒体流传输和分布式应用中。

以下是 IP 多播的一些关键特点和概念:

  1. 多播组:IP 组播通信由一个或多个多播组组成,每个组都有一个唯一的多播组地址。多播组地址属于 IPv4 地址范围的特殊区域,通常以 224.0.0.0 到 239.255.255.255(D 类地址) 为范围。多个接收器可以订阅同一个多播组。

  2. 发送器:发送器是将数据报发送到 多播组 的设备。发送器只需发送一次数据报,然后由网络基础设施复制并传送给订阅了该 多播组 的接收器。

  3. 接收器:接收器是订阅了特定多播组的设备。它们希望接收 多播组 中的数据。接收器可以是单个主机、路由器或多个主机。

  4. IGMP(Internet Group Management Protocol):IGMP 是用于管理 IP 组播成员的协议。它允许主机通知路由器它们希望加入或离开特定的多播组。路由器使用 IGMP 来了解哪些主机希望接收特定多播组的数据。

  5. 组播路由:组播路由器是网络中的设备,负责将组播数据报从发送器传送到接收器。组播路由器根据 IGMP 报文和组播组地址表,将数据报仅传送到订阅了该组播组的网络分支。

  6. 组播范围:IP 组播地址可以分为不同的范围,如永久组播地址、临时组播地址和本地链路组播地址,以满足不同的需求和使用情况。

[映射到 MAC 地址]

重要

IGMP 协议

IGMP的工作分成两个阶段:

第一阶段

当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员,本地的多播路由器收到IGMP报后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其他多播路由器

第二阶段

组成员关系是动态的,本地多播路由器需要周期探询本地局域网上的主机,以便知道这些主机是否还是组的成员只要有一台主机对某个组响应,那么多播路由器就认为这个组是活跃的如果一个组在经过几次的探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机已经离开了这个组,因此也不再将这个组的成员关系转发给其他的多播路由器

直接看成一个聚会,IGMP 相当于聚会的组织者

IPv6

IPv4 协议于 20 世纪 70 年代设计,经过互联网几十年的快速发展,至 2011 年 2 月,IPv4 地址已完全耗尽。为应对 “IP 地址耗尽” 问题,主要采取了以下三种措施:

  • 采用 CIDR:通过更灵活的地址分配方式,提高 IPv4 地址的使用效率。

  • 使用 NAT:通过允许多个设备共享同一公网 IP 地址,有效节省全球 IP 地址资源。

  • 推广新一代 IPv6 协议:IPv6 拥有更大的地址空间,从根本上解决 IP 地址短缺问题。

前两种方法仅能延缓 IPv4 地址耗尽的进程,而只有 IPv6 的广泛应用才能彻底解决这一问题。

特点

  1. 扩展的地址空间:IPv6 大幅扩展了 IP 地址空间,使用 128 位 地址,相对于 IPv4 的 32 位 地址,IPv6 提供了约 340 亿 亿 亿 亿( 3.4×1038 )个可能的地址,解决了 IPv4 地址枯竭的问题。

  2. 简化的报头:IPv6 报头相对于 IPv4 报头更简化,减少了路由器处理数据报的开销,提高了路由性能。

  3. 自动地址配置:IPv6 支持自动地址配置,其中设备可以通过 Router Advertisement 消息获取自己的 IPv6 地址,减少了手动配置的需要。

  4. 移动性支持:IPv6 内置了对 移动 IP(Mobile IP) 的支持,使移动设备能够无缝地切换网络而无需更改 IP 地址。

  5. 改进的安全性:IPv6 在设计上包括了对 IPsec(IP Security) 的支持,这增加了网络通信的安全性和隐私保护。

  6. 多播和任播:IPv6 对多播和任播 (Anycast) 提供了更强大的支持,使网络更加高效。

  7. 简化的头部处理:IPv6 取消了 IPv4 中的首部校验和,减少了路由器在处理数据报时的负担。
    特殊

  8. 更好的 QoS 支持:IPv6 提供了更多的选项和字段来支持服务质量(Quality of Service)

首部

首部对齐长度变成 8 字节,原先 IPv4 是 4 字节对齐

IPv6 基本首部的字段数减少至仅 8 个,但由于地址长度从 32 位扩展到 128 位,其基本首部长度反而增至 40 B.

IPv6 首部包含的 8 个字段如下:

  1. 版本(Version):表示协议版本,对于 IPv6,该字段值为 6。用于标识数据包的协议类型,确保接收端正确解析。

  2. 流量类别(Traffic Class):用于服务质量(QoS)管理,标记数据包的优先级或服务类型(如实时流量或低优先级流量)。

  3. 流标签(Flow Label):标识属于同一数据流的数据包,便于路由器进行特殊处理(如保持数据包顺序或优先级)。

  4. 有效载荷长度(Packet Length):表示 IPv6 数据包中除首部外的有效载荷长度(单位:字节),包括扩展首部和上层数据。

  5. 下一首部(Next Header):指明紧跟 IPv6 首部之后的首部类型(如 TCP、UDP 或扩展首部),类似于 IPv4 的“协议”字段。(如果有扩展首部,则用来表示扩展首部的协议字段)

  6. 跳数限制(Hop Limit):表示数据包在网络中可经过的最大跳数(最大到 255),每经过一个路由器减 1,若减至 0 则丢弃。

  7. 源地址(Source Address):标识数据包的发送方地址。

  8. 目标地址(Destination Address):标识数据包的目标接收方地址。

特殊 IPv6 有六种扩展首部,其中有一个扩展首部叫 分片,but 此分片 是只在原主机发送的时候进行的,中间路由器无分片功能。

每一个扩展首部都由若干字段组成,长度各不相同;但所有扩展首部的第一个字段都是8bit 的下一个首部字段,指出该扩展首部后面的扩展首部是什么

地址

IPv6 地址使用 128 位,通常以冒号分隔的 32 位十六进制数 表示,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334

IPv6 地址在表示时支持 缩写规则 以简化书写,具体如下:

  • 省略前导零:对于每个 16 位 域(4 个十六进制字符),可以省略开头的零,但每个域必须至少保留一个数字。例如,地址 4BF5:0000:0000:BA5F:039A:000A:2176 可简化为 4BF5:0:0:BA5F:39A:A:2176
  • 压缩连续全零域:当地址中存在连续的多个全零域(即 0000:0000:...),可用双冒号(::)代替这些域,进一步压缩地址。但双冒号在一个地址中只能使用一次,因为全零域的个数需根据地址的总域数(8 个域)推算。例如,上述地址可进一步缩写为 4BF5::BA5F:39A:A:2176

通过这些规则,IPv6 地址的表示更加简洁紧凑。

IPv6 数据报按照目的地址可以分为如下类型:

  • 单播地址(Unicast Address):用于将数据报从一个源节点传输到一个目标节点。

  • 多播地址(Multicast Address):用于将数据报传输到一组目标节点,而不是单个节点。

  • 任播地址(Anycast Address):终点是一组计算机,但数据报只传输到一组目标节点中的最近者(最接近的一个)。

  • 未指明地址:不能用作目的地址,仅用于尚未配置 IPv6 地址的主机作为源地址。

  • 环回地址:仅有一个,同 IPv4 的环回地址一致

  • 多播地址:同 IPv4 的多播地址一样。

  • 本地站点单播地址:内部网络使用的是 TCP/IP 协议,但没有连接上互联网,只能和本地站点单播地址通过路由器通信。

  • 本地链路单播地址:只能在局域网中通信,甚至连路由器都没有不能转发。

IPv6 支持 即插即用,不用像 IPv4 一样 需要通过 DHCP 请求分配地址。

过渡方案

IPv4 到 IPv6 的过渡是一个复杂的过程,因为两种协议不直接兼容。以下是两种主要的过渡方法:

  • 双栈技术:网络设备同时实现 IPv4 和 IPv6 两个协议栈,分别配置一个 IPv4 地址和一个 IPv6 地址,这样这台设备既能和 IPv4 网络通信,也能和 IPv6 网络通信。
    • 双协议栈主机使用 DNS 来获取目标主机使用的 IP 地址,根据其类型使用 IPv4 或 IPv6 进行通信。

特殊

  • 隧道技术:是指在 IPv6 数据报要进入 IPv4 网络时,把整个 IPv6 数据报封装成 IPv4 数据报的数据部分,使原来的 IPv6 数据报就好像在 IPv4 网络的隧道中传输。当 IPv4 数据报离开 IPv4 网络时,再将其数据部分交给主机的 IPv6 协议。注意 IPv4 中需要将协议字段 设为 41 表示 IPv6 数据报。

移动 IP

移动 IP(Mobile IP) 是一种网络协议,用于实现移动设备在不同网络之间切换时,仍能够保持连接并无缝通信。移动 IP 的主要目标是支持移动性,允许移动设备在移动时保持与互联网或企业网络的连接。

共识

移动节点通过 DHCP 在家庭网络中获得 固定IP地址,作为其永久网络标识,确保通信会话不因位置变化而中断。


动态IP:由DHCP服务器自动分配,租期到期后可能变化;适合 普通家庭/移动设备,成本低、管理简单。

固定IP(静态IP):手动配置或通过DHCP保留,地址永久不变;适合 服务器远程访问等需要稳定标识的场景,但成本较高、需额外配置。

运用场景

通信过程

  1. 移动节点在家庭网络中连接,并分配了家庭网络的永久 IP 地址,建立了通信会话。

  2. 当移动节点决定移动到外部网络时,它会通知家庭网络的 移动 IP 服务节点,告知其即将离开。

  3. 家庭网络的 移动 IP 服务节点会分配一个临时 IP 地址,并记录移动节点的当前位置。

  4. 移动节点连接到外部网络,使用临时 IP 地址与外部网络中的其他设备通信。

  5. 当其他设备要与移动节点通信时,数据报被发送到移动节点的临时 IP 地址,然后到达外部网络。

  6. 外部网络的 移动 IP 服务节点接收到数据报后,将数据报转发到移动节点的临时 IP 地址。

  7. 移动节点接收到数据报后,可以回复或继续与外部网络中的其他设备通信。

  8. 如果移动节点决定返回家庭网络,它可以通知外部网络的 移动 IP 服务节点,并断开与外部网络的连接。

  9. 移动节点返回家庭网络后,通信会话继续,并且移动节点将继续使用家庭网络的永久 IP 地址。

ICMP

💡低优先级

在选择题中考查,频率不高,关注下差错报文的类型以及 icmp 的应用。

真题练习

ICMP(Internet Control Message Protocol)是一个 网络层协议 用于在 IP 主机和路由器之间发送 控制消息ICMP 是 Internet 协议套件的 重要组成部分,它主要用于 诊断 和 报告错误 和某些特定条件。

  1. 类型 (Type) :8 位

    • 用于指定 ICMP 消息 的类型。
    • 例如, Echo Request 的类型为 8 , Echo Reply 的类型为 0 。
  2. 代码 (Code) :8 位

    • 为更进一步 细分 某个特定类型的 ICMP 消息而设置。
    • 例如,对于 “目的地不可达”( Destination Unreachable )类型的消息,代码可以用来指定具体的不可达原因,如网络不可达、主机不可达等。
  3. 检验和 (Checksum) :16 位

    • 用于验证 ICMP 消息在传输过程中没有被损坏。这个检验和涵盖了整个 ICMP 消息。
  4. 其它字段

    • 这些字段的内容取决于 ICMP 消息 的 类型 和 代码
    • 例如,对于 Echo Request 和 Echo Reply 消息,接下来的字段包括一个标识符( Identifier )和一个序列号( Sequence Number )。

消息类型

ICMP 的消息类型可以分为 差错报文 和 查询报文 这两大类型:

  • 差错报文:用于 报告 网络通信过程中出现的各种 错误 。
  • 查询报文:用于 诊断 或网络信息查询,主要用于网络测试和管理 。

当然了,这里不需要背,了解消息类型的含义即可,比方说给你一个消息类型 源点抑制,你能知道它是干嘛的就行。

差错报文

ICMP 的 差错报文 分为五大类型:

  1. 终点不可达Destination Unreachable

    • 当数据不能被传送到目的地时,发送此消息。
    • 下面是一些常见的“不可达”子类型:
      • Network Unreachable: 无法到达目标网络。
      • Host Unreachable: 无法到达目标主机。
      • Protocol Unreachable: 目标网络不支持所请求的协议。
      • Port Unreachable: 目标主机上的特定端口不可用。
      • Fragmentation Needed and Don't Fragment was Set: 数据包太大,需要分片,但数据包的“不分片”标志已设置。
      • Source Route Failed: 源路由指定的路径失败。
      • Network Unknown: 目标网络未知。
      • Host Unknown: 目标主机未知。
  2. 源点抑制Source Quench

    • 网络中出现拥塞,请求 发送主机 放慢发送数据包的速度。
  3. 路由重定向Redirect

    • 告诉发送主机存在更好的路由。
  4. 超时Time Exceeded

    • 当数据包在网络中传输的时间太长或超过了其 TTL (生存时间)时发送。有两种主要的子类型:
      • TTL Exceeded in Transit: 数据包在传输过程中 TTL 达到零。

        TTL 和 阻塞 不同,一个侧重在规定时间结束了 一个是 等待时间 超出预期 特殊

      • Fragment Reassembly Time Exceeded: 分片重新组装超时。

  5. 参数错误Parameter Problem

    • 当 IP 头包含错误或不可识别的信息时,发送此消息。

重要

存在几种不会发送 差错报文 的情况

  1. 对ICMP差错报告报文,不再发送ICMP差错报告报文

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

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

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

查询报文

查询报文 包含以下类型:

  1. Echo Request 和 Echo Reply (ping)

    • Echo Request: 通常被称为 ping 请求。用于测试目的地是否可达。
    • Echo Reply: 通常被称为 ping 回应。是对 Echo Request 的回应。
  2. Timestamp Request and Timestamp Reply

    • 用于报告当前的时间。
  3. Address Mask Request and Address Mask Reply

    • 用于请求和响应子网地址掩码。

应用

这里需要了解基于 ICMP 协议 的两个 linux 程序,一个是 ping,大家应该都比较熟悉。另一个是 traceroute,用于寻找从起点到终点经过了哪些 IP 地址。

ping

Ping 是一个简单的工具,用于测试两台主机之间的 网络连接性,测量往返时延(RTT,Round-Trip Time),并检测是否有 数据包丢失

ping 利用了 ICMP 中的 Echo Request/Reply 消息类型:

  1. 发送 ICMP Echo RequestPing 工具向 目标主机 发送一个 ICMP Echo Request 消息。
  2. 接收 ICMP Echo Reply:如果 目标主机 可达且未被防火墙阻止,它会回复一个 ICMP Echo Reply 消息。
  3. 计算时延:Ping 记录发送和接收消息的时间差,计算 RTT
  4. 统计 丢包率:通过发送多个 Echo Request,统计有多少消息未收到回复,计算 丢包率

traceroute

Traceroute 用于跟踪数据包从源到目标的 路径,显示沿途经过的路由器(跳点)及其 延迟

Traceroute 利用 ICMP 的 Time Exceeded 消息和 IP 数据包的 TTL(Time To Live) 字段:

  1. 逐步增加 TTL

    • Traceroute 发送一系列 UDP 数据包(或 ICMP Echo Request,取决于实现),从 TTL=1 开始,每次递增 1。每台路由器在转发数据包时将 TTL 减 1。当 TTL 减为 0 时,路由器丢弃数据包并返回一个 ICMP Time Exceeded 消息(类型 11,代码 0)。
  2. 记录跳点

    • Traceroute 记录发送 Time Exceeded 消息的路由器 IP 地址和响应时间。
    • 重复此过程,直到数据包到达 目标主机(目标返回 ICMP Echo Reply 或 UDP 端口不可达消息)。
  3. 显示路径

    • Traceroute 将每跳的路由器 IP 和 延迟 显示出来,构成从源到目标的完整 路径

虚拟专用网(VPN)

工作流程

DHCP

⭐中优先级

需掌握 DHCP 的功能和流程,可能在选择题中考察,也会在大题中考查一小问。

真题练习

动态主机配置协议(DHCP)是一个网络管理协议,用于自动分配 IP 地址 和其他网络配置参数给网络设备,从而允许它们连接到 IP 网络

当你连接到一个网络中时,不管是通过 无线网,还是在电脑上连接了 以太网线,你会发现无需任何配置,你自动获取了一个 IP 地址,并可以通过该 IP 地址进行网络通信。

流程

[流程必须搞清]

DHCP 的工作流程通常包括以下四个步骤,这个过程也被称作 DORA 过程,即 DiscoverOfferRequest, 和 Acknowledgment

	DHCP 发现     DHCP 提供      DHCP 请求      DHCP 确认
  1. Discover:

    • 客户端通过网络 广播 一个 DHCP DISCOVER 消息,请求可用的网络配置信息。因为客户端还没有分配到 IP 地址,所以这个消息的 源 IP 地址 是 0.0.0.0目的 IP 地址 是 255.255.255.255
  2. Offer:

    • 网络上的 DHCP 服务器接收到 DHCP DISCOVER 消息后,会向客户端发送一个 DHCP OFFER 消息。这个消息包含了一个提供给客户端的 IP 地址 和其他配置信息,如 子网掩码DNS 服务器地址 和 IP 地址租用期
  3. Request:

    • 客户端可能会从多个 DHCP 服务器收到多个 DHCP OFFER 消息。客户端选择其中一个提议,并通过 广播 一个 DHCP REQUEST 消息来响应这个提议,通知网络中的所有 DHCP 服务器它接受了哪个 DHCP 服务器的提议。
  4. Acknowledgment:

    • 提供所选 IP 地址的 DHCP 服务器收到 DHCP REQUEST 消息后,会发送一个 DHCP ACK 给客户端,确认IP 地址和配置信息的租约。如果由于某种原因导致该 IP 地址不再可用或者有其他问题,DHCP 服务器可能会发送一个 DHCP NAK
      重要

DHCP 服务器 和 请求主机 之间的连接

  1. 直连,直接广播 255.255.255.255 ,最简单

  1. 路由器转接,默认网关 会把主机的广播包 改成 单播包并在DHCP的请求报文中填写自己的网关地址(默认网关已知DHCP服务器的地址),用来保证响应包可以原路返回。

默认网关发现当前网段有主机要请求 ip,因此将发送一个包含已知的 DHCP 地址的单播报文,并将当前的广播 IP 分组 丢弃

ARP

⭐中优先级

需要掌握 ARP 的流程,选择题和解答题都会涉及到。

真题练习

看到 ARP 相应的 应该 想起来 交换机 的工作方式,通过自学习算法生成转发表(智能)

概念

ARP(Address Resolution Protocol,地址解析协议) 是一种在 TCP/IP 网络 中使用的协议,用于将 IP 地址 转换为 物理硬件地址(例如,MAC 地址)。ARP 的主要目的是确定要通过网络传输数据的目标设备的 物理硬件地址,以便将数据帧正确地传送到目标设备。

⭐ 流程

以上图为例,主机 10.1.1.2 用 ARP 协议查找主机 10.1.1.4 的 MAC 地址,其流程如下图所示

具体而言,一次 ARP 请求可以被拆分为 如下步骤

  1. ARP 请求
    当一台设备(我们称它为主机 A)需要发送数据包到同一局域网内的另一台设备(主机 B),但它只知道目标设备的 IP 地址 时,它会在本地网络上广播一个 ARP 请求。这个请求的语义大致是这样的:“我拥有 IP 地址 X.X.X.X 的设备,请告诉我你的物理 MAC 地址。”

    ARP 请求的 目的 MAC 地址 为 ff-ff-ff-ff-ff-ff-ff-ff源 MAC 地址 设置为自己的 MAC 地址。

  2. 网络上的广播

    ARP 请求是一个 广播帧,它发送到本地网络上的所有设备。每一台设备都会收到这个请求,但只有 IP 地址匹配请求中 IP 地址的设备会回应这个请求。

  3. ARP 响应

    当主机 B 收到这个 ARP 请求 后,它会识别出请求中的 IP 地址与自己的 IP 地址 相匹配,然后向主机 A 发送一个 ARP 响应。这个响应包含了主机 B 的 MAC 地址,并且这个响应是直接发送给主机 A 的,不是广播。

  4. 更新 ARP 缓存

    主机 A 收到 ARP 响应 后,它会在自己的 ARP 缓存 表中更新这个信息,将主机 B 的 IP 地址 与其 MAC 地址 关联起来。ARP 缓存 表中的这些条目通常会在一段时间后过期,所以可能需要定期更新。

  5. 数据传输
    主机 A 现在知道了主机 B 的 MAC 地址,它可以构建一个以太网帧,将数据包含在其中,并使用 B 的 MAC 地址 作为目的地址发送出去。

重要

ARP 缓存

以太网中的ARP

所有 主机 都会维护一个 ARP 缓存,该缓存存储了网络上其他设备的 IP 地址 和 MAC 地址 的映射。
这减少了广播 ARP 请求 的需要,因为主机可以查看自己的缓存来找到之前解析过的地址。

以下是一个简化的 ARP 缓存 表格示例,展示了 IP 地址 与 MAC 地址 的映射关系:

IP 地址MAC 地址状态接口
192.168.1.100:1A:2B:3C:4D:5E动态eth0
192.168.1.200:1A:2B:3C:4D:5F静态eth0
192.168.1.300:1A:2B:3C:4D:60动态wlan0
192.168.1.400:1A:2B:3C:4D:61动态eth0

注意

ARP 运行在哪一层

地址解析协议(ARP)实际上是一个介于 数据链路层(第二层)和 网络层(第三层)之间的协议。ARP 的功能是将网络层的地址(如 IPv4 地址)解析为数据链路层的地址(如以太网 MAC 地址)。虽然它处理的是网络层地址,但它运行在 数据链路层,直接构建和发送数据链路层的帧。因此,它通常被认为是 网络层 的一个辅助协议,但技术上它操作在 数据链路层

数据报 和 帧 中的地址

IP 地址全程不变(始终是源A、目标B),但MAC 地址每一跳都在换,ARP 在每段链路上负责把”下一个要交给谁”的 IP 翻译成 MAC。这也是为什么说 IP 负责端到端寻址,MAC 只负责逐段寻址。

路由算法

⭐中优先级

本节细节比较多,但是考察得比较多的还是 RIP 协议,可以把 RIP 的一些知识点多看些,然后 OSPF 和 BGP 稍微了解下。

真题练习

路由

这一节我们首先通过三个问题来认识什么是 路由,接下来再在此基础上介绍 路由协议

什么是 路由? 

在一个 IP 网络中,数据包要从一个设备发送到另一个设备,中间通常需要经过多个路由器的转发。每个路由器就像是一个“交通指挥员”,决定数据包该往哪个方向走。

例如,PC-1(IP 地址为 192.168.1.5)通过如下图所示的网络向 PC-2(IP 地址为 10.1.1.5)发送数据包。当路由器 R1 接收到这些数据包时,它必须知道如何到达目标子网 10.1.1.0/24,否则将丢弃这些数据包。

路由器 R2 知道如何到达 PC-2,因为它有一个接口位于子网 10.1.1.0/24,并在 路由表 中包含了一条直接连接路由。然而,默认情况下,路由器 R1 和 R3 不知道如何到达 10.1.1.0/24。网络管理员需要配置一条 静态路由,或者 R2 必须自动告知 R1 和 R3,它们可以将目的地为 10.1.1.0/24 的数据包发送到 R2,这种方式叫做 动态路由

路由器 怎么知道往哪里转发? 

路由器 内部有一个叫 路由表 的数据结构,里面记录了各种目的 IP 地址该怎么走。这个表告诉 路由器:当收到一个 IP Packet 时,应该把包发给哪个 下一跳(下一个路由器)。

路由表 如何建立? 

路由表 主要包含两种建立方式:

  • 静态路由(Static):人工手动配置,适合小型或稳定网络。

  • 动态路由(Dynamic):通过 路由协议 自动学习和更新路由信息。

两个 路由表 建立方式各自适用于不同的场景:

特点静态路由动态路由
配置方式手动配置自动学习和适应
适用性适用于小型网络或需要特定路由策略的情况适用于大型、复杂的网络
稳定性较稳定可能更灵活,但较复杂
自动故障恢复不支持自动故障恢复支持自动故障检测和恢复
网络变化响应速度静态,不会自动适应网络变化自动适应网络变化,响应速度较快
管理复杂性相对简单较复杂,需要更多计算和资源
适用情况较小规模的网络,特定路由策略需求大型、复杂网络,需要动态适应

进行静态路由配置需要认真考虑和谨慎操作,否则可能出现以下问题:
■路由条目配置错误,甚至导致出现路由环路。
■聚合路由条目时可能引入不存在的网络。

默认网关

默认网关属于 对应子网中的 某个可分配的 ip 地址,是数据通往其他网络的大门

当主机要发送数据包时,会先判断:

目标 IP 是否在同一子网?
     ├── 是 → 直接通过 ARP 找目标 MAC,直接发送
     └── 否 → 把数据包发给默认网关,由它转发

重要

默认网关的典型特征

  • 通常是路由器的某个接口 IP,与主机在同一子网
  • 家庭网络中一般是 192.168.1.1192.168.0.1
  • 主机本身不需要知道外部网络的路由细节,“甩手”给网关就行

当你访问 google.com,数据包先到 192.168.1.1,再由路由器决定下一跳往哪走。

路由协议

路由协议 是一种 用于路由器之间交换网络路由信息的通信规则。它的主要作用是让路由器能够自动学习和维护到达各个目的网络的路径,从而实现数据包的正确转发。

路由协议 的主要作用有两个:

  • 自动学习路由:当网络结构发生变化(如新增路由器、链路断开),路由协议 能自动更新 路由表,省去了手动配置的麻烦。

  • 选择最佳路径:如果到同一个目标有多条路径,路由协议 能根据跳数、带宽、延迟等因素计算出最优路径,提高网络效率。

路由协议 分为不同种类,各自适用于不同场景,在介绍其分类前,首先要理解计算机网络中 自治系统 的概念。

自治系统

一个 自治系统(AS,Autonomous System)是由一个或多个网络组成的集合,这些网络 在统一的管理和策略控制下运行,并对外表现为一个单一的路由实体。

互联网是由无数个独立组织维护的网络组成的。每个组织内部的网络结构和路由策略不同,AS 的概念让每个组织可以作为一个独立的“区域”,既能自主控制路由,又能通过标准协议与外部沟通,保证整个互联网正常运作。

AS 通常由一个 ISP(互联网服务提供商)、大型企业、大学等拥有和运营。AS 之间通过外部 路由协议 互联,组成整个互联网。

分类

路由协议 根据其使用范围的不同,可以分为两大类:内部网关协议(IGP,Interior Gateway Protocol)和外部网关协议(EGP,Exterior Gateway Protocol)。

  • 内部网关协议:在单个组织或 自治系统(AS)内部使用的路由协议,常见的 IGP 协议包括 RIP 和 OSPF。这些协议的主要作用是在一个组织的网络内部传播和更新路由信息,以实现高效的网络通信。

  • 外部网关协议:用于在不同组织或不同 自治系统 之间交换路由信息。如今,唯一广泛使用的 EGP 协议是 BGPBGP 的设计初衷是为了控制跨组织网络之间的路由信息传递,从而实现 自治系统 之间的互联和路径控制。

对比

重点掌握 RIPOSPFBGP 三个协议的区别,三者的对比如下表所示:

项目RIPOSPFBGP
封装协议UDPIPTCP
传播方式逐跳泛洪TCP 会话间传递
更新内容全表,周期性链路状态,事件驱动路径属性,事件驱动
拓扑视图无全局视图拥有全图无全图,仅路径属性
计算算法Bellman-FordDijkstra策略驱动
收敛速度慢(但更稳定)
带宽占用高(周期发全表)中(仅更新变化)低(TCP 控制精细)
扩展性较好极强
应用场景小型网络企业内部网络运营商/跨 AS 互联
路径选择跳数最少代价最低较好,非最佳

如何记忆

RIP

重点

RIP(Routing Information Protocol,路由信息协议)是一种基于 距离向量 的路由协议,主要用于小型和中型网络中的 内部网关协议

RIP 认为 好的路由 就是通过路由器数量最少的 路由(不看带宽,只看距离)

如果出现多条 “距离相等” 的路由,可以进行等价负载均衡

补充

RIP相关报文使用运输层的用户数据报协议UDP进行封装,使用的UDP端口号为520

从RIP报文封装的角度看,RIP属于TCP/IP体系结构的应用层。
但RIP的核心功能是路由选择,这属于TCP/IP体系结构的网际层。

距离向量

一个典型的 距离向量(Distance Vector)可以表示为一个列表,其中每个条目包含以下信息:

  • 目的地(To):目标网络或子网的地址。
  • 跳数/度量值(Metric):从当前路由器到达目标网络的 代价,通常以跳数、延迟、带宽等度量标准表示。
  • 下一跳(Next Hop):到达目标网络的 下一跳 路由器的地址。

下表是一个 距离向量示例

目标网络跳数下一跳
192.168.1.0/240A
192.168.2.0/241B
192.168.3.0/241C

注意

有些厂商的路由器并没有严格按照RIP标准文档的规定来实现RIP。例如,思科路由器中的RIP,将路由器到直连网络的距离定义为0,但这并不影响RIP的正常运行。

RIP 规定 最大跳数 为 15,等于 16 时则认为 目标网络不可达

此外,路由器将自己的距离向量广播给其他路由器时,距离向量中的下一跳是可以省略的,因为接收者默认认为所有距离向量中的下一跳就是发送该向量的那个路由器本身。
        
  

举例:

根据得到的信息又需要分成不同的条件去确定是否更新

距离向量算法

在 距离向量算法 中,通过 周期性地 与 相邻路由器 交换 距离向量 信息,每个路由器能够逐渐获得整个网络的拓扑信息,并更新其路由表以 选择最佳路径

具体而言,工作流程如下:

  • 初始化:每个路由器初始化其 距离向量,只包含自己直接连接的网络,距离设为 0。

  • 周期性更新:每个路由器周期性地(30s)将其 距离向量 广播给所有相邻的 路由器

  • 接收和更新:每个路由器接收到相邻路由器的 距离向量 后,检查是否有新的或更短的路径。如果有,则更新自己的 距离向量 和 路由表

  • 收敛:经过多次交换和更新后,所有路由器的 距离向量 和 路由表 最终会收敛到最优路径。

若干次交换和更新后,每个路由器都知道到达本自治系统AS内各网络的最短距离和下一跳路由器,称为收敛。

最短路径计算方法

当路由器    接收到来自相邻路由器    发送的关于某个子网    的 距离向量  ​  时,它需要将    中的跳数加一 ,然后与当前的到达子网    的 距离向量 ​  进行比较(需要加一的原因时 从   出发要经过    ,所以多了一跳),具体 比较方式 如下:

  • 如果    不存在到达子网    的路由的话,直接添加  ​  进入路由表

  • 如果  ​  的跳数小于  ​  的跳数的话,使用  ​  替换  

以上过程使用的算法名称叫做 Bellman-Ford 算法,是一种寻找单源最短路径的算法,单源最短路径的意思是从一个结点出发到达其他结点的最短路径。这个算法不会直接考察,了解这个算法的名称即可。

坏消息传得慢

“坏消息传播得慢”的问题又被称为路由环路或RIP距离无穷计数问题。这是距离向量算法的一个固有问题。

可以采取以下多种措施减少出现该问题的概率或减小该问题带来的危害:

  1. 限制最大RIP距离为15(16表示不可达)。

  2. 当路由表发生变化时就立即发送路由更新报文(即“触发更新”),而不仅是周期性发送。

  3. 让路由器记录收到某个特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“水平分割”)。

假设一个路由器检测到它无法到达一个网络,这个信息可能需要比较长的时间才能被网络中的所有路由器感知到,这个问题也叫做 “计数到无穷”(count to infinity)问题。

举例说明:

对于以下拓扑结构:

A ---> B ---> C ---> X

🟢 正常情况是这样

  • C 广播:“我可以 1 跳到达 X”
  • B 收到后更新:B 到 X 跳数 = 2(通过 C)
  • A 收到后更新:A 到 X 跳数 = 3(通过 B)

🔴 C 和 X 之间的连接断开

  • C 发现 X 不可达,设置到 X 的跳数为 16(不可达)。
  • 但 B 和 A 互相认为“另一个可能知道路径”。
  • A 说:“我能通过 B 到 X”,B 也说:“我能通过 A 到 X”,
  • 这个过程导致 跳数慢慢增加(4、5、6…),直到达到 _16_(不可达)**,才终止。

这也是 RIP 的 核心缺陷,主要由以下几个 RIP 的特性导致:

📌 1. RIP 是“距离向量协议”,而不是“链路状态协议

  • RIP 每 30 秒定期广播自己的“路由表”(包含目标网络和跳数),而不是主动通告“链路断了”。
  • 也就是说:C 不会特意说“我原本能到 X,现在不能了”,它只是不再提 X,或者说“到 X 是 16(不可达)”。

📌 2. RIP 更新是“基于 下一跳”的,不能判断环

B 不知道“我从 A 学到的这条路径,实际上也是绕了一圈又回到我这里”,因为:

  • B 从 A 收到:“X 的跳数是 4”
  • B 就以为“哦,那我到 A 是 1 跳,所以我到 X 是 5 跳”
  • B 没有办法判断这条路径是否环绕回了自己!

它只根据“谁告诉我能到哪里”来加一跳数做判断,而不会检查路径是否形成了环路。

例题

文字陷阱:R3 的更新只给了 R2,后续更新 是 R1 发送的谣言给 R2 ,导致了 路由环路

nmd, 这还是个有向图,B —> C C —> B

OSPF

OSPF(Open Shortest Path First)是一种基于 链路状态 的 内部网关协议(IGP),广泛应用于中大型网络中。

链路状态

链路状态(Link-State)是OSPF的核心概念;

定义:每个路由器收集并描述自己直连接口的”状态信息”,包括:

  • 接口IP地址/子网

  • 邻居关系(与谁相连)

  • 链路开销(带宽/度量值)

  • 链路状态(up/down)

工作方式:

  1. 路由器通过Hello协议发现邻居

  2. LSA(链路状态通告)描述自己的链路状态

  3. 将LSA泛洪到整个区域

  4. 每台路由器收集所有LSA,构建LSDB(链路状态数据库)

  5. 用Dijkstra算法计算最短路径树

[图解——工作方式]

与距离矢量的区别:

  • 距离矢量:只知道”邻居告诉我的方向和距离”
  • 链路状态:知道”全网拓扑图”,自己计算最优路径

链路状态让 OSPF 能避免路由环路(每个路由器都知道全局拓扑结构),实现快速收敛。

路由器通过 链路状态通告(LSA,Link State Advertisement)来了解其与邻居之间的链路状态。

在 RIP 路由算法中,路由器会定期将自己的 距离向量 发送给相邻的路由器。在 OSPF 中,也有类似的概念,不过这里传送的不是距离向量,而是 链路状态通告

路由器将其自身的状态和与邻居的链路状态信息打包成 链路状态包(LSP,Link State Packet),并在网络中 洪泛传播(flooding)。

每个 LSA 专注于描述一种类型的链路状态或网络信息。一个 LSA 包含的信息通常是:

  • 路由器与某一特定链路的连接状态(如 Router LSA)

  • 某个网络的状态和与其相连的路由器信息(如 Network LSA)

  • 区域间或外部路由信息(如 Summary LSA 和 AS External LSA)

OSPF 划分区域

为了使OSPF协议能够用于规模很大的网络,OSPF把一个自治系统AS再划分为若干个更小的范围,称为区域(area)。

链路状态数据库

链路状态数据库(LSDB,Link State Database)是 OSPF 协议中的关键组件,它存储了网络中所有 链路状态通告(LSA)。通过 LSDB,每个路由器可以构建整个网络的拓扑图,并使用 Dijkstra 算法计算最短路径树。

这里举个例子方便大家理解 LSDB 的概念。假设我们有一个简单的网络拓扑,包含 4 个路由器(R1, R2, R3, R4)和几个网络网段(NetA, NetB, NetC)。

在 链路状态算法 收敛之后,某个路由器的 LSDB 可能是如下这种形式:

LSA 类型LSA ID路由器ID链路 ID链路类型路径成本连接的路由器或网络
Router1R1NetA广播链路10R2
Router1R1NetC广播链路5
Router2R2NetA广播链路10R1
Router2R2NetB广播链路15R4
Router2R2R3点对点链路20R3
Router3R3R2点对点链路20R2
Router3R3R4点对点链路10R4
Router4R4NetB广播链路15R2
Router4R4R3点对点链路10R3

OSPF 的五种分组类型

  1. 问候(Hello)分组:用来发现和维持邻站的可达性

  2. 数据库描述(Database Description)分组:向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息

  3. 链路状态请求(Link State Request)分组:向对请求发送某些缺少的链路状态项目的详细信息

  4. 链路状态更新(Link State Update)分组:用洪泛法对全更新链路状态,这是最复杂的分组

  5. 链路状态确认(Link State Acknowlegment)分组:对链路更新分组的确认

第一个分组:确认 相邻路由是否可达,如果不可达应立即修改链路状态数据库,并重新计算路由表

后四个 分组都是 用来进行链路状态数据库 的 同步

链路状态路由算法

距离向量 算法(如 RIP)中,每个路由器只维护到各个目的网络的距离(如跳数)和 下一跳 信息,周期性地 将整个路由表发送给直接相邻的 路由器,依赖邻居的更新来调整自己的 路由表,缺乏全局视角,容易形成路由环路,收敛速度较慢,并且存在坏消息传得慢的问题。

而 链路状态 算法(如 OSPF)则由每个路由器通过 链路状态广播(LSA)将本地链路信息 泛洪 给全网,所有路由器据此构建一致的网络拓扑图,然后独立运行 Dijkstra 最短路径算法计算路由,具备 全局视角,收敛速度 ,稳定性好,适合大型复杂网络。

下图通过一个实例对比了 距离向量 和 链路状态 算法的区别:

BGP

24年考过 看一下

BGP(Border Gateway Protocol,边界网关协议)是互联网的核心路由协议,用于在不同 自治系统 之间交换路由信息,属于路径向量(Path Vector)协议,力求选择出一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要计算出一条最佳路由;目前广泛使用的版本是 BGP-4。

在 BGP 中,自治系统(AS)是互联网的基本单位,每个 AS 是一个由单个组织控制的网络集合(如一个运营商或大型企业)。AS 与 AS 之间的路由交换就是通过 BGP 完成的,AS 之内的路由交换通过 内部网关协议 完成。

BGP 原理 

1) 选择 AS 发言人

  • 每个 AS 内部可以有多个 BGP 路由器,但对外通常由一个或多个 “BGP 发言人” 代表整个 AS 与其他 AS 进行路由信息的交换。

  1. 路径向量信息的交换
  • BGP 发言人之间通过 TCP 连接建立 BGP 会话,并交换路由前缀及其路径属性。

  • 每个 AS 在接收到路径信息后,可以根据自身策略决定:

    • 是否接受该路由
    • 是否将其传播给其他邻居
    • 是否作为本地的最佳路径使用

  1. 路由更新与维护机制
  • BGP 是 事件驱动协议,不像 RIP 周期性更新,而是在以下事件发生时才发送 UPDATE 消息:
    • 新的可达前缀出现
    • 现有前缀的属性发生变化
    • 某个前缀不再可达(发送 Withdraw 消息)

选择算法

报文种类

网络层设备

🔥高优先级

掌握路由器的组成和功能,以及掌握路由表的画法,会在选择题和解答题中考察。

真题练习

路由器

路由器(Router)是一种实现网络互连的设备,在 OSI 网络模型中的第三层,提供 路由 与 转发 的两种重要机制;可以决定数据包从来源端到目的端所经过的路由路径,这个过程称为 路由;将路由器输入端的数据包移至适当路由器输出端,称为 转发

组成

简单来说,路由器主要由以下软硬件组成:

  • 硬件:
    • CPU:运行操作系统,处理 路由协议
    • 交换结构:高速传输数据包,连接输入输出端口。
    • 网络接口:以太网、光纤等,收发数据包。
  • 软件:
    • 操作系统:运行专用的嵌入式 操作系统,提供 路由协议 支持、配置管理等功能。

⭐ 路由表

路由表 是路由器内部的数据结构,其中包含了有关网络之间如何进行 路由 的信息。路由表 是根据 路由协议(如 RIP、OSPF、BGP 等)和手动配置动态生成和维护的。

路由表包含如下信息:

  • 目标网络(Network Destination):表示数据包要传递到的目标网络或主机。

  • 子网掩码(Network Mask):确定了 目标网络 的范围,路由器 使用它来匹配数据包的 目标地址

  • 网关(Gateway):数据报转接口的 IP 地址。

  • 接口(Interface):指明了路由器上哪个物理或逻辑 接口 将被用来 转发 数据包。

  • 跳数/度量值(Metric):跳数或度量值是 路由选择 的一个度量标准,用来表示到达 目标地址 的成本。如果存在多条 路由 到同一个目的地,路由器通常会选择跃点数最低的 路由

核心理解

功能

路由表的 核心功能 就是 路由决策 和 分组转发,接收数据包,查询路由表,然后从某个端口 转发出去。

⭐ 分组转发

分组转发 是指路由器根据数据包的 目的 IP 地址 和其内部的 路由表,决定将数据包发送到下一个网络节点(下一跳)或 目标设备 的过程。其详细工作流程如下:

  1. 接收和解析 数据包

  2. 查询 路由表:

    • 路由器将 目的 IP 地址 与路由表中的条目进行匹配(通过子网掩码和目的地址按位与运算),使用 最长前缀匹配(Longest Prefix Match, LPM)算法选择 最佳路由
  3. 处理 TTL 和其他字段:

    • 路由器减少数据包的 TTL(Time To Live)值,防止循环转发。
    • 如果需要,执行其他处理,如分片、重组或 NAT
  4. 转发 数据包

    • 根据 路由表 查找结果,将数据包发送到指定的 下一跳 地址或直接连接的设备。

注意

路由表在分组转发的时候,需要修改 IP 数据包中的哪些字段?

  1. TTL:TTL 减 1。

  2. checksum:因为 IP 首部有字段被修改,所以校验和需要重新计算。

  3. 如果是 NAT 路由器的话,需要修改 源 IP 或者 目的 IP 地址。

  4. 如果 IP 数据包长度超过输出链路的 MTU,则 总长度字段标志字段片偏移字段 都需要修改。

重要 必背

分组转发分两种

  1. 直接交付

    目标主机和发送方在同一个子网内,路由器不需要把包转给下一跳,直接通过 ARP 解析目标 IP 对应的 MAC 地址,然后在本地链路上交付。路由表里体现为”出接口”直接对应那个子网,下一跳字段为空(或填自身)。

  2. 间接交付

    目标不在本地子网,路由器查表找到下一跳 IP,把包转发给下一个路由器,由它继续处理。就是你路由表里接口 A、B、C 那种情况。

一个包从源到目的地的完整路径里,中间每一跳都是间接交付,最后一跳一定是直接交付所以直接交付是每次通信的终点动作,缺了它 数据永远到不了目标主机。

个人的一点思考

当 主机需要 某个转发 IP 的 MAC 地址时,如果该 IP 不在当前主机所在网段,说明他要转发的 IP 在其他广播域,那就需要一个 能转发到其他广播域的 设备——路由器。

因此 当前主机 会把 首要任务 设置为 寻找 当前路由器的接口 MAC ,随后把 数据报传输 对象设置为当前路由器,该路由器对当前主机来说 就是要传输的目标。

主机 A                 路由器 R1              路由器 R2             主机 B
  │                       │                      │                    │
  │  帧:dst=R1的MAC       │                      │                    │
  │  包:dst=B的IP         │                      │                    │
  │──────────────────────>│                      │                    │
  │                       │ 拆掉帧,看IP          │                    │
  │                       │ 重新封装新帧           │                    │
  │                       │  帧:dst=R2的MAC      │                    │
  │                       │  包:dst=B的IP        │                    │
  │                       │─────────────────────>│                    │
  │                       │                      │ 同理,找B的MAC      │
  │                       │                      │─────────────────────>

每一跳路由器都是:

  1. 剥掉旧的以太网帧头(丢弃上一段的 MAC 信息)
  2. 查自己的路由表,决定下一跳
  3. 重新封装新的帧头(用下一跳的 MAC)
  4. IP 报文里的源/目标 IP 始终不变(除非遇到 NAT)

例题

较难,熟练掌握本题,能够将交换机和路由器之间 路由转发 和 MAC帧发送 的过程完整脑补一番

最长前缀匹配

当路由器收到一个数据包时,它会提取数据包的 目的 IP 地址,并与 路由表 中的条目进行比较。最长前缀匹配的核心是选择与目的 IP 地址 前缀匹配最长 的路由表项,因为更长的前缀表示更具体的路由,优先级更高。

举个实际例子,假设有如下路由表:

网络前缀子网掩码下一跳
192.168.1.0/24255.255.255.0接口 A
192.168.0.0/16255.255.0.0接口 B
0.0.0.0/00.0.0.0接口 C

对于 目的 IP 地址 192.168.1.100

1. 与 192.168.1.0/24 匹配:前 24 位完全匹配。
2. 与 192.168.0.0/16 匹配:前 16 位匹配。
3. 与 0.0.0.0/0 匹配:默认路由,总是匹配。

由于 /24 是 最长的前缀,路由器选择接口 A 作为下一跳。

因为 掩码 24位时,两者匹配的信息量最大,所以优先选择该

主机路由 默认路由

主机路由:设备转发数据时如果在同一个子网中,可以通过路由器中路由表的主机路由 直接转发;

默认路由:当某个 IP 地址 不在路由器的任何表项中时,需要一个能归类的路由。

NAT

NAT(Network Address Translation,网络地址转换)的核心作用是把一个 IP 地址空间映射 到另一个 IP 地址空间,常见的情形是把局域网内部的 私有 IP 地址 转换为 公网 IP 地址(或将公网地址转换回私有地址),从而实现内部设备与外部网络(如 Internet)的互联。NAT 分为 基础 (一对一) 和 (一对多) ,本节主要讲解后者。

NAT 主要有以下功能

  • 解决 IPv4 地址匮乏:在 IPv4 中,公网地址资源有限。通过 NAT,整个局域网可以共享同一个或少量的公网 IP,极大地节约了地址分配。采用了私有IP地址

  • 提供安全屏障:外部主机只能看到 NAT 设备的公网地址,内部的真实 IP 地址被隐藏,形成了一个简单的防护层,降低了直接攻击的风险。

NAT 设备必定有一个可用的 全球 IP。

如果使用的是 一对多的 NAPT,该 路由器 应该工作在 传输层 和 网络层中

不管是什么 类型的 NAT,都不可能让 外网直接访问 内网,因为对应的 NAT 路由器中还没有对应的 NAT 表项,你发给 NAT,它也不知道把 数据 转给谁

NAT 表

上图中路由器的 NAT 表 (NAPT)的示例如下:

私有 IP 地址私有端口公有 IP 地址公有端口协议连接状态
192.168.100.312345145.12.131.754321TCPESTABLISHED
192.168.100.48888145.12.131.754322UDPNEW
192.168.100.515839145.12.131.754323TCPSYN_SENT
192.168.100.37890145.12.131.754324TCPESTABLISHED

表中条目包含如下内容:

  • 内部私有 IP 地址:局域网中设备的私有 IP 地址。

  • 内部端口号:发送数据包的私有网络设备所使用的端口号。

  • 外部公有 IP 地址:路由器 在广域网(WAN)侧使用的 IP 地址,通常是单个 IP 地址,但也可能有多个。

  • 外部端口号:与内部端口号对应的,由 NAT 分配用于标识特定会话的公有端口号。

  • 协议类型:数据包使用的协议(如 TCP、UDP 等)。

NAT 表的条目通常是 动态创建 的。当内部设备发起到外部网络的连接时,路由器会在 NAT 表中创建一个条目。通过 NAT 表,路由器可以将从外部网络收到的数据包转发到正确的内部设备。当 NAT 表中的条目因为超时或者NAT 表容量限制而被删除时,新的数据包会触发创建新的NAT条目。

NAT 在运行时使用了哪些表?

三张表的分工

路由表:决定包往哪个方向转发(下一跳是谁)

ARP 表:解析下一跳的 MAC 地址

NAT 转换表:记录私有 IP(+端口)与公网 IP(+端口)的映射关系

一个包经过 NAT 路由器时,三张表都会用到

以 A(192.168.0.3)发包给 B(213.18.2.4)为例:

  1. 包到达 NAT 路由器,路由器先查 NAT 转换表,把源 IP 从 192.168.0.3 替换成公网 IP 172.38.1.5
  2. 再查路由表,决定这个包应该从哪个接口转发出去、下一跳是谁
  3. 再查 ARP 表,封装目标 MAC,发出去

回程方向反过来:先查路由表确认包能到达,再查 NAT 转换表把目标公网 IP 还原成私有 IP,再转发进内网。

地址转换过程

在 NAT(网络地址转换)中,数据包的地址会根据其流向进行相应的改写,主要可以分为两种情况:

  1. 从内网发送到公网

    • 当内网主机向外部(Internet)发起通信时,数据包首先经过 NAT 路由器。
    • 在此过程中,NAT 会把数据包的 源 IP 地址和源端口 替换为 路由器的公网 IP 地址和分配的公网端口(即进行源地址/端口转换,SNAT)。
    • 这样,外部主机只能看到公网 IP+端口,而看不到内部私有地址,确保内网结构对外部保持透明。
  2. 从公网返回到内网

    • 当外部主机向 NAT 路由器的公网 IP+端口发送响应报文时,报文同样会先到达 NAT 路由器。
    • NAT 根据之前记录的映射表,将报文的 目的 IP 地址和目的端口 改写回对应的 私有 IP 地址和私有端口(即进行目的地址/端口转换,DNAT),随后将报文转发给内网的目标主机。

简要概括

  • 出站(内网 → 公网):修改  地址/端口为公网地址。
  • 入站(公网 → 内网):修改 目的 地址/端口为对应的私有地址。

通过上述两步映射,NAT 实现了内网主机对外通信的隐藏与地址复用,同时保证了返回流量能够正确回到发起请求的内部主机。

[基础 NAT]

专用网(本身就分配了 全球 ip)接入 NAT,那么 NAT 上必须有和专用网同等 ip 数量的 ip。

[NAPT]
一般来说,局域网使用的都是 NAPT,带有端口号(端口 复用),可以有效利用全球 IP 地址(一对多)

重要

私有 IP 地址

定义: 对外不可见的正常 IP, 对内可以 用普通路由转发,出公网必须由 NAT 改头换面。

在局域网(内部网络)中常用的 私有 IP 地址 共有三个连续的地址段。它们分别对应不同规模的网络,使用时只需在相应范围内任选一个未被占用的地址即可。

地址段(CIDR 表示)起始地址结束地址适用场景
10.0.0.0/810.0.0.010.255.255.255大型网络、企业内部骨干网
172.16.0.0/12172.16.0.0172.31.255.255中型网络,例如校区网、部门网
192.168.0.0/16192.168.0.0192.168.255.255小型网络、家庭或小型办公网

私有 IP 不可路由

私有 IP 是真实但仅限本地有效的地址。NAPT 让整个局域网”共享”一个公有 IP 对外通信,私有 IP 的重复在全球范围内不会造成冲突,因为它们永远不会直接暴露在公网上。

原因在于:互联网上的路由器会丢弃目标地址是私有 IP 的数据包,它们不会被全球路由表所承认,所以”出不了”公网。

随便看看

路由器 IP 地址

路由器接口的 IP 地址 配置方式取决于其连接的网络类型。常见有以下两种场景:

  1. 点对点连接:当两个路由器通过专用链路直接相连时,通常为该链路划分一个小型子网,例如 IPv4 的 /30

    • /30 子网提供 2 个可用主机地址,正好分配给两端路由器接口。
    • 这种方式能够高效利用地址空间,特别适合点对点链路。
  2. 连接到局域网或子网:当路由器接口接入一个局域网(LAN)或更大的子网时,需要分配该子网中的一个 IP 地址。

    • 通常选择子网的第一个或最后一个可用地址,作为网络中设备的 默认网关。
    • 例如,在 192.168.1.0/24 子网中,路由器接口常被配置为 192.168.1.1 或 192.168.1.254

总结

再次加深了我对 计网的概念

整个计算机网络的 构成 就是 对数据的转发 增加标识 和 拆解标识。