前言
本章将专注于已经学习的网络架构、第一层、第二层与第三层技术的复习,将以 Q&A 的形式展示。这一章只是一些知识的总结,具体还请看之前的文章。
网络架构
网络基础
What are the differences between data networks and voice networks?
数据网络和语音网络有何不同?
- 数据网络 (data networks) 是一种使用数字传输的通信网络。数字传输的数据的是一种离散信号 (Discrete signal)。
- 语音网络 (voice networks) 中是语音信息以 模拟连续信号 (continuous analog signals) 的形式传输的通信网络。
How many types of computer networks when it is classified by their scale?
按规模划分,计算机网络有几种类型?
计算机网络可以分为四种规模:
- Personal Area Networks (个域网,PAN)
- Local Area Networks (局域网, LAN)
- Metropolitan Area Networks (城域网, MAN)
- Wide Area Networks (广域网, WAN)
网络架构
What are the definitions of layers, protocols, and services in network architecture?
网络架构中的层、协议和服务的定义是什么?
- 层 (layer) 是按照不同功能 (function) 将网络架构划分成 层级结构。每一层都有特定的功能。
- 协议 (Protocols) 是每一层用于执行具体功能的规则集。协议描述并规定了某个层的操作,相当于函数的定义。
- 服务 (Services) 是低层为高层提供的功能。每一层都利用下一层提供的服务来实现自身的功能,相当于函数的声明。
层级越低功能越简单,自下而上功能越复杂。

What are the famous reference models used in computer networks?
计算机网络中使用的著名参考模型有哪些?
著名的模型有 OSI 模型和 TCP/IP 模型,除此之外还有 Digital Equipment Corporation net (DECnet), Systems Network Architecture (SNA) 等。
What are the differences between OSI and TCP/IP reference model?
OSI 与 TCP/IP 参考模型有何不同?
围绕层、协议和服务进行分析。
- 层数不同。OSI 模型有 7 层,TCP/IP 模型只有 4 层。
- 协议不同。例如 OSI 模型有其独特的 CLNP 协议在其网络层,而 TCP/IP 模型中则是网络层的 IP 协议和传输层的 TCP 协议。
What are the names of seven layers in OSI and TCP/IP reference model?
OSI 和 TCP/IP 参考模型的每层是什么?
如图:
- OSI 模型:应用层 (Application), 表示层 (Presentation), 会话层 (Session), 传输层 (Transport), 网络层 (Network),数据链路层 (Data Link), 物理层 (Physical)
- TCP/IP 模型:应用层 (Application), 传输层 (Transport), 网络层 (Internet), 网络访问层 (Network Access)

OSI 和 TCP/IP 模型的功能与技术
What functions are defined in each layer?
OSI 模型中每一层的功能有哪些?
- Layer 1: 通过有线/无线传输比特的功能。
- Layer 2: 媒体访问 (数据传输顺序) 和保证传输可靠的功能。其中比较重要的功能有:switching (交换), bridging (桥接)。
- Layer 3: 决定主机间的最佳传输路径。重要功能有:routing (路由)
- Layer 4: 保证主机之间的传输可靠。(关注整体数据传输,解决阻塞问题)
- Layer 5: 控制主机之间会话 (Dialogue, 一个带有目的过程) 的信息 (数据的内容) 与功能 (开始与结束)。
- Layer 6: 控制数据 (格式和信息) 的展示的功能。
- Layer 7: 描述数据产生的功能,与网络应用进行交互。

What protocols are defined in each layer?
各层有哪些代表协议?
用 TCP/IP 模型举一些例子。
- 应用层有:
- Domain Name System (DNS):域名系统协议
- Hypertext Transfer Protocol (HTTP):超文本传输协议
- File Transfer Protocol (FTP):文件传输协议
- Simple Mail Transfer Protocol (SMTP):简单邮件传输协议
- Trivial File Transfer Protocol (TFTP):简单文件传输协议
- 传输层有:
- Transport Control Protocol (TCP):传输控制协议
- User Datagram Protocol (UDP):用户数据协议
- 网络层有:
- Internet Protocol (IP):网络协议
- Connection Less Network Protocol (CLNP):无连接网络协议,OSI 模型中提出的。
- 网络访问层有:
- Ethernet:以太网协议
What addresses are defined in each layer?
各层中有哪些地址?
同样以 TCP/IP 协议作为例子,它有这四种主要的地址:
- layer 1:MAC 地址
- layer 2:IP 地址
- layer 3:Port number/端口号
- layer 4:Domain name/域名地址
What network devices are operating at each layer?
各层中有哪些主要设备?
常见的有:
- Physical Layer: Hubs (集线器), repeaters (中继器), cables (网线)
- Data Link Layer: Network adapters (网络适配器/网卡), switches (交换机), bridges (网桥)
- Network Layer: Routers (路由器), layer 3 switches
- Session Layer: Session border controllers (会话边界控制器)
- Application Layer: Gateways (网关), proxies (代理)
What are the technologies of LANs and WANs are usually designed in which layers?
局域网和广域网的技术通常是哪几层?
它们通常在模型的底层,例如在 OSI 模型中的 第一第二层 (layer 1 and layer 2)。
对于 LAN:在 L1,LAN 一般使用以太网技术建立物理连接,在 L2 使用交换机或网桥进行数据交换。对于 WAN:除了前两层技术外,还可能需要用到第三层技术进行路由。
数据封装
What is the process of data encapsulation?
数据封装的过程是怎么样的?
在 OSI 模型中,封装 (Encapsulation) 是指数据在 各层向下传输过程 中,被 逐层添加该层的头部和尾部信息,形成带有 headers 和 trailers 的 PDU。而反封装 (De-encapsulation) 则是数据在 接收端向上层传递过程中,逐层移除该层添加的 headers 和 trailers 的过程。

因为封装的过程可以知道:安装了第 k 层协议的设备一定安装有 0~k-1 层协议。
封装简单来说就是将上层的 PDU 添加上本层的头部和尾部信息,它会让数据包逐渐变大;相反,反封装将让数据包越来越小。

在这个封装和反封装的过程中,要求封装者的对应层的协议和反封装者的对应层的协议相同。

例如:X 作为发送主机进行封装。首先来到设备 A,它只有第一层,此时它们的都使用 cable 进行连接。而到了设备 B,它是一个三层设备,它同时也会安装有底层所有协议。X 的第三层协议为 IPv4,此时要求设备 B 也要安装 IPv4 协议才能反封装。但是此时设备 B 还可以安装有其他协议,例如 IPv6,当传到设备 Y 时,第三层的协议必须和设备 B 一样为 IPv6.
每两个发送方与接收方的协议必须一样,但接收方可以改变这个协议并发给下个接收方。
What PDUs are used in each layers?
每一层的 PDU 分别是什么?
- Physical Layer - Bits (比特)
- Data Link Layer - Frames (数据帧)
- Network Layer - Packets (数据包)
- Transport Layer - Segments (数据段) (TCP), Datagrams (数据报) (UDP)
- Session Layer - Data
- Presentation Layer - Data
- Application Layer - Data
What are the header format of common used PDUs in each layer?
各层常用 PDU 的报头格式是什么?
这要求我们熟悉常见协议的报头格式,下面是一些常见的报头。
以太网和 IEEE 802.3:

它们的特点是:
- 以太网协议有:前导码,目的地址字段,源地址字段,类型 (指出用以接收以太网处理后数据的高层协议),数据段,帧校验序列。
- IEEE 802.3 则没有类型,而是长度,指示该字段之后帧校验字段之前的数据长度。
WIFI (IEEE 802.11):

无线帧的报头的长了很多。
IP 协议——IPv4, IPv6:

IPv6 相比 IPv4 改进:
- 取消了 IHL 和 校验和。因为在数据链路层和传输层都会进行校验,因此 IPv6 直接取消了 IP 的校验。
- 取消了分片。分片是耗时的过程,IPv6 不允许在中间路由器进行分片与重组,这种操作只能在源与目标主机,这将大大提高了路由器转发的速度。
- 取消选项字段。IPv6 中采用类似链表的结构,存在下一个头部字样指向下一个其他头部。删除了选项字段使得 IPv6 的头部成为固定长度的
40字节。
TCP:

TCP 协议很好辨别,因为它有一段序列号码和确认号码都是 32 bits.
UDP:

UDP 协议非常的简单,它只专注于发送数据,而不保证数据的传输。
网络拓扑和术语
What is the unit of digital bandwidth and analog bandwidth?
数字带宽和模拟带宽的单位是什么?
在模拟系统中,模拟带宽的基本单位是 赫兹 (Hz),即每秒周期数。
在数字系统中,带宽的基本单位是 比特每秒 (bps)。
其中,对于 bps 的单位换算,与 Byte 不一样,有如下的单位换算:
可以做一个简单的小计算:传输 1GB 的文件,速度为 1 Kbps,需要的时间为:。
因为计算机使用的是二进制系统,所以对于 Byte 来说每个单位都是以 1024 为基数递增的。因为 1 Byte 等于 8 bits,所以 1GB 等于 1 x 1024^3 x 8 Kbits。
What is the definition of bandwidth and throughput, and baud? What is the relationship among bandwidth, throughput, and baud?
带宽、吞吐量和波特的定义是什么?带宽、吞吐量和波特之间的关系是什么?
- 带宽 (Bandwidth) 是在给定时间内通过网络连接能够传输的 最大信息量。
- 吞吐量 (Throughput) 指的是在一定时间内经过网络连接 实际传输 的数据量。
- 波特 (baud) 表示 每秒信号状态变化次数。
它们的关系为:
What is the difference between the transmission delay and propagation delay?
传输延迟和传播延迟有什么区别?
- 传播时延 (Propagation delay) 是信号在 传输介质上 传播所需时间的测量。
- 传输时延 (Transmission delay) 是将 一个数据包的所有比特推送到传输链路上 所需的时间。
- 传送时延 (Transfer delay) 是指数据包从源主机到目的主机之间从发送到接收的延迟总和。
我们很容易可以得到这样的公式:
- ,它只与长度有关,传播的速度一般是一定的。
- ,它与传输的大小有关。
相关计算我们可以看之前的例子:
https://hoyue.fun/network1_1.html#i-32
物理层与数据链路层技术
网络媒介
What carrier signals are used in the network media of copper, optical fiber and wireless?
网线 (铜线)、光纤和无线网络介质使用哪些载波信号?
| 物理媒介/Physical media | 载波信号/Carrier signals |
|---|---|
| 铜线/Copper wires | 电压/Electrical voltages |
| 光纤/Optical fiber | 光学模式/Light patterns |
| 无线/Vacuum | 调制电磁波/Modulated electromagnetic waves |
What is the purpose of encoding and modulation?
编码和调制的目的是什么?
- 编码 (Encoding) 是一种将逻辑二进制数据转换为物理信号的方法。
- 调制 (Modulation) 是一种将 一个或多个周期性的载波 混入想发送之信号的技术。
- 它们的目的是:在数据传输中进行信号转换和处理,以实现可靠、高效的通信。
编码分为:
- Transistor-Transistor Logic (TTL) (Level driven):晶体管逻辑,具有比较明显的高低信号,变化频率低,效率高。
- Manchester (Edge driven): 曼切斯特编码,是二进制边缘触发,变化频率高,效率低。
如图:
(经典 TTL,0 表示低信号,1 表示高信号。缺点:无法判断无信号和低信号)
(Manchester,一个信号变化两次,边缘触发,缺点:变化频率高)
(Multi-Level Threshold-3 Manchester,当为 1 时转变为下一循环位置,为 0 时不变。缺点:比较复杂)
在日常使用中,Fast Ethernet (100-Mbps Ethernet) 采用 4B/5B 技术进行编码,发送 5 位来表示 4 位。同时发送时,使用 MLT3 (Multi-Level Threshold-3) 进行编码。
而现在升级的 Gigabit Ethernet (1000-Mbps Ethernet) 采用 8B/10B 进行编码。
网络链路层技术
What is the media access method of CSMA/CD?
CSMA/CD 的媒介访问方法是什么?
How does a host use backoff algorithm for transmission attempt when collision occurred in Ethernet network?
当以太网发生冲突时,主机如何使用 backoff algorithm 尝试传输?
这一部分主要理解概念和理解算法,请见:
https://hoyue.fun/network1_3.html#CSMACD
以太网交换
What is bridging?
什么是桥接?
桥接 (bridging) 是一种技术,网桥设备将两个或多个局域网段连接起来。
当数据报传入时,若网桥知道数据报的目的地与数据报的源网段在同一网段上,它会丢弃该数据报;若网桥知道目的地在另一个网段上,则只在该网段上传输数据报;如果网桥不知道目的地网段,则在源网段以外的所有网段上传输数据报(广播)。
桥接的主要好处是 将流量限制在某些网段。
What addresses in the received frame does a switch use to build the switching table and make forwarding decision?
交换机使用接收帧中的哪些地址来建立交换表并做出转发决定?
交换机使用 Source MAC Address 来建立交换表,建立一个映射关系,例如 MAC1 → (At) Port 1。
同时使用 Destination MAC Address 进行 forwarding decision,根据前面桥接所说的方法进行转发流量。
有一个例子:
在如图的网络结构中,存在一个网桥和四台主机,初始化情况下桥接表为空表,只有当 Source MAC 经过网桥时才会被记录。

我们依次执行如下操作:
- A→B:此时桥接表为空,帧会被广播到冲突域中各个主机,B, C, D 都能收到信息。信息经过网桥的时候知道了 Source MAC 为 A,在 Port1 这一侧。
- B→A:此时桥接表已经存在 A 的 MAC 地址了,当广播到达 Port1 的时候,会被网桥阻断,从而只有 A 收到了消息,同时 B 写入桥接表。
- C→A:此时桥接表已经存在 A 的 MAC 地址了,但是不在 Port2 这一侧,故另一侧也都会传播到,A, B, D 都收到了消息,同时 C 写入桥接表。
- A→C:此时桥接表已经存在 C 的 MAC 地址了,在 Port2 那一侧,消息会通过网桥,此时桥接表已经存在 A 的 MAC 地址了。
- D→C:此时桥接表已经存在 C 的 MAC 地址了,和 D 在同一侧,消息会被网桥阻断,同时 D 写入桥接表。
操作结束后,桥接表如图:

What is the definition of broadcast domain and collision domain?
广播域和冲突域的定义是什么?
- 广播域是指一个网络中,当一台设备发送广播帧时,能够接收到该广播帧的所有设备的集合。通常由第三层设备分隔开。
- 冲突域是指一个网络中,当多台设备同时发送数据帧时,这些数据帧可能会发生碰撞的区域。通常由第二层设备分隔开。
我们有一些例子来复习这些概念:
How many collision domains and broadcast domains are there?
找到其中 L1,L2 和 L3 domain。以及子网数。

首先 L1 domain 是每个设备物理连接之间都会存在的,故只需要数有多少个物理连接即可。如图绿色框有 17 个,L1 domain 有 17 个。

接下来到 L2 domain,它被第二层设备 (Switch) 或第三层设备 (Router) 隔开,故连接着这些设备的各个接口对应着各个冲突域。如图橙色圆圈部分,一共有 14 个。

最后是 L3 domain,它被第三层设备 (Router) 隔开,故连接着这些设备的各个接口对应着各个广播域。如图红色圆圈部分,一共有 8 个。

子网的个数与 L3 domain 相关,故有 8 个子网。
Q1: In an Ethernet network, lf PC1 sends a frme to PC4, and at the same time, PC3 sends a frame to PC2. Will these two transmissions success or not?
Q2: If a collision was detected in above transnission, which two PCs have to wait for an extra period to re-send the frame at next attempt?
Q3: If PC1 is sending a frame on this network which PCs have to wait until PC1 completes the transmission?
Q4: What happens about the collision, if all hubs are replaced by the switches, and full duplex is supported on the switches?
问题 1:在以太网网络中,如果 PC1 向 PC4 发送一个帧,同时 PC3 向 PC2 发送一个帧,这两次传输是否会成功?
问题 2:如果在上述传输中检测到冲突,那么哪两台 PC 在下一次尝试重新发送帧时需要多等待一段时间?
问题 3:如果 PC1 在该网络上发送帧,哪些 PC 需要等待直到 PC1 完成传输?
问题 4:如果交换机取代了所有集线器 (hubs),并且交换机支持全双工 (full duplex),冲突会怎样?

- 我们发现这个网络中,PC1, PC2, PC3 处于同一 L2 domain 中,它们之间同时发送帧会发生冲突,此时传输不会成功。
- PC1 和 PC3 同时发送帧,它们之间产生了冲突,故它们两台 PC 进入等待。(退避算法)
- 在同一冲突域中的其他 PC 都需要等待,故为 PC2, PC3。
- 如果用交换机替代了所有的集线器,此时所有的 PC 都在其自己的冲突域中,没有任何两台 PC 在一个冲突域中,又因为全双工允许二台设备间同时进行双向数据,传输帧传输不会发生任何冲突。
Q1: What MACs are recorded in the switching tables?
Q2: Which PCs will receive the frames?
问题 1:交换表中记录了哪些 MAC?
问题 2:哪些 PC 将接收帧?

如图,初始化的交换表如图表中黑色记录。从 PC1 发送一个数据帧到 PC3,此时数据帧来到 Switch1,此时应该记录 Source MAC 到 Switch Table 中,但交换表已经有该记录了,故什么都不做。数据帧传出交换机,此时不知道往哪个端口传递,进行广播同时发送到 P2 和 P3。
然后数据帧传到 Switch2,从 Port4 传入,检查交换表没发现记录,加上一条记录 MAC_1 → P4。然后发现目的 MAC 在交换表中指向 P5,于是转发到 P5 上的 PC3。
数据帧通过 P2 传到 PC2 上,PC2 检查目的 MAC 与自己的 MAC 是否匹配,发现不匹配丢弃。
故此时交换表为:

根据刚才分析的过程,PC2 和 PC3 接收到了数据帧。但 只有 PC3 接收了该数据帧。
网络层技术
IPv4 寻址
What are the differences between flat addressing and hierarchical addressing?
平面寻址和分层寻址有什么区别?
- 平面寻址:其不使用逻辑层次来确定位置。例如,MAC 地址 就是采用的平面寻址。平面寻址的缺点在于,它无法进行路由选择。如果每一个地址都要求是唯一的,那么因特网上的所有路由器就需要保存因特网上每台主机的每个地址。这样做的工作量将会导致网络路由的效能急剧降低。
- 分层寻址:其使用一个逻辑层次来确定目的地。例如,IP 地址 由网络数字,子网络数字和主机数据组成。分层寻址的优点在于,它可以处理数量巨大的地址空间。此外,分层寻址还允许有效地进行广播地址。
What are the ranges of the Class A, B, C addresses and their default subnet masks?
A 类、B 类、C 类地址及其默认子网掩码的范围是什么?
比较偏概念性的问题:
| IP address class | IP address range (First Octet Decimal Value) | Subnet Mask |
|---|---|---|
| A | 1.0.0.0 to 126.0.0.0/8 (00000001 - 01111110) | 255.0.0.0 |
| B | 128.0.0.0 to 191.255.255.255/16 (10000000 - 10111111) | 255.255.0.0 |
| C | 192.0.0.0 to 223.255.255.255/24 (11000000 - 11011111) | 255.255.255.0 |
What are the three ranges of private IP addresses?
私有 IP 地址的三个范围是什么?
| Class | RFC 1918 internal address range |
|---|---|
| A | 10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8) |
| B | 172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12) |
| C | 192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16) |
除此之外,127.0.0.0 255.0.0.0 和 169.254.0.0 255.255.0.0 也被保留为本地用途。
What is the difference of network address, broadcast address and host address? What are these types of addresses used for?
网络地址、广播地址和主机地址有什么区别?这些地址的用途是什么?
- 网络地址用于标记一个网络本身。它的主机位全为 0.
- 广播地址用于广播数据包到整个网络上的所有主机。它的主机位全为 1.
- 主机地址是可用于分配给设备的地址。它的主机位不全为 0 或 1.
IPv4 子网划分
What is IPv4 classfull subnetting? By giving the number of required subnets or giving the number of required hosts in each subnet, how to determinate the subnet mask of the subnets, the network address, broadcast address and the range of valid host addresses for a given subnet.
什么是 IPv4 全类子网划分?通过给出所需的子网数或每个子网所需的主机数,如何确定子网的子网掩码、网络地址、广播地址和给定子网的有效主机地址范围。
IPv4 全类子网划分是一种网络设计策略,它允许将一个 IP 地址空间划分为多个更小的网络,每个网络都有自己的子网掩码。这种策略可以提高 IP 地址的使用效率,同时也可以提高网络的管理效率。下面通过一个例子来了解全类子网划分:
网络拓扑如图,

网络 192.168.1.0/24 中需要 7 个子网:
子网掩码是多少?
创建了多少个子网?
每个子网中创建了多少个可用主机地址?
子网 #5 的网络地址是多少?
子网 #5 的广播地址是什么?
子网 #5 的范围是多少?
子网 #5 中第 5 个主机地址的 IP 地址是多少?
- 我们知道原网络中,192.168.1.0/24 的掩码为 255.255.255.0,这个网络需要 7 个子网,那至少需要 位借位。故此时网络变成 192.168.1.0/27,它的掩码为 = 255.255.255.224 (11111111.11111111.11111111.11100000)。
- 因为借了 3 位,所以会创建 个子网,其中我们只用 7 个。
- 借了 3 位后还剩余 5 位 (32 - 24 - 3) 为主机位,故每个子网的可用主机地址数量为 个主机。
- #5 在 3 位借位中表示为 101,故此时 #5 的网络地址为 192.168.1.160 (10100000)/27。
- 同理,#5 的广播地址为 192.168.1.191 (10111111)/27。
- 除去网络地址和广播地址,剩下的就是 #5 的范围了。192.168.1.161 (10100001)/27 ~ 192.168.1.190 (10111110)/27。
- 第五位主机的地址表示为 192.168.1.165 (10100101)/27。
于是我们分配 7 个子网到不同的接口,如下:

How to subnetting the network by using VLSM?
如何使用 VLSM 进行网络子网划分?
VLSM 子网划分的特点是它允许在同一网络地址空间内使用多个子网掩码。它在主机数量少的网络中使用长掩码,而在主机数量多的子网中使用短掩码。
同样用一个例子来理解 VLSM 子网划分。对于如下网络拓扑,进行 VLSM 子网划分。

首先分析这个网络中可以分出多少个子网,如下图中一共是 8 个子网,别忘了路由器之间也需要划分子网。

第一步先分主机只有 2 的子网。我们发现图中除了 3 条路由器之间的连接外还有主路由器连接的一个主机 (2 hosts 表示包含路由器一共 2 个主机)。我们还需要考虑网络地址和广播地址,故一个子网中需要的地址为:2 + 2 至少为 4 个,共需要借位两位,子网掩码为 /30。此时要分成 4 个这样的子网,网络地址变化位数为 2 位,于是可以这么分:
蓝色位为固定位,绿色位为划分子网网络地址中变化的位,xx 为主机位。

接下来就是对每个路由器进行子网划分,要注意的是,同一个路由器下有不同子网主机数的时候,它们的子网掩码可以不一样。
我们分别对 10 个主机、30 个主机、60 个主机和 120 个主机进行子网划分,它们分别要借 4 位,5 位,6 位和 7 位。分别可以得到:

注意,为了防止和之前已经划分的低位子网冲突,之后划分子网网络地址中变化的位为 1。
我们把这些网络换成十进制形式,如下表:
| Subnet Number | Subnet Address |
|---|---|
| Subnet0 | 192.168.1.0/30 |
| Subnet1 | 192.168.1.4/30 |
| Subnet2 | 192.168.1.8/30 |
| Subnet3 | 192.168.1.12/30 |
| Subnet4 | 192.168.1.16/28 |
| Subnet5 | 192.168.1.32/27 |
| Subnet6 | 192.168.1.64/26 |
| Subnet7 | 192.168.1.128/25 |
通过一个例子进一步理解 IPv4 的子网划分。
Q1: What is the IP addressing problem of PCs on Subnet 1?
Q2: What is the IP addressing problem of PCs on Subnet 2?
Q3: What is the ranges of valid host addresses that can be used for the Server of Subnet 2?
Q1:子网 1 中主机的 IP 有什么寻址问题?
Q2:子网 2 中主机的 IP 有什么寻址问题?
Q3:子网 2 服务器可使用的有效主机地址范围是什么?

- 分析一下知道子网 1 中子网掩码应该一样,所以 PC2 的子网掩码应该为 /29。因为子网掩码为 /29,说明主机位有 3 位,它的范围 (由路由器端口知道) 为 N.N.N.00001001(9) ~ N.N.N.00001110(14),PC1 和 PC2 的地址都不被允许。
- 子网 2 中,子网掩码均为 18,由路由器端口地址可知道范围:N.N.00000000.00000001 (172.16.0.1) ~ N.N.00111111.11111110 (172.16.63.254)。我们可以发现 PC4 不在子网 2 中。Server 的地址取值可以是 172.16.0.1 - 172.16.63.254。
IPv6 寻址
How to represent IPv6 address in full form and simplified form?
如何用完整格式和简化格式表示 IPv6 地址?
IPv6 地址由 128 位组成,通常被表示为 8 组 16 位的十六进制数,每组之间用冒号 (:) 分隔。例如,一个 IPv6 地址可能看起来像这样:2001:0db8:85a3:0000:0000:8a2e:0370:7334。
为了简化 IPv6 地址的表示,可以采取以下两种方式:
- 省略前导零:每组中的前导零可以被省略。例如,
2001:0db8:85a3:0000:0000:8a2e:0370:7334可以简化为2001:db8:85a3:0:0:8a2e:370:7334。 - 双冒号缩写:如果地址中有一组或连续多组为零的组,可以用双冒号(::)来代替。例如,
2001:db8:85a3:0:0:8a2e:370:7334可以简化为2001:db8:85a3::8a2e:370:7334。但是请注意,在一个 IPv6 地址中只能使用一次双冒号。
What are the three types of IPv6 addresses? What specific addresses are defined for these types IPv6 addresses?
IPv6 地址有哪三种类型?这些类型的 IPv6 地址定义了哪些具体地址?
IPv6 地址主要有以下三种类型:
- 链路本地单播地址 (Link-local unicast):单播地址是最常见的地址类型,用于一对一的通信。当一个节点启动 IPv6 协议栈时,启动时节点的每个接口会自动配置一个链路本地地址。这种机制使得两个连接到同一链路的 IPv6 节点不需要做任何配置就可以通信。地址范围是
FE80::/10。 - 全球单播地址 (Global unicast addresses):全球唯一的单播地址,类似于 IPv4 的公网 IP。地址范围是
2000::/3。 - 组播地址 (Multicast address):组播地址用于一对多的通信,即一个发送者发送数据包给多个接收者。IPv6 的组播地址范围是
FF00::/8。组播地址又可以分为- 链路本地范围全节点组播地址 (Link-local scope all-nodes multicast address):用于在同一链路上的所有节点之间进行通信,地址
ff02::1。所有 IPv6 设备都会加入这个组播组,因此 发送到这个地址的数据包将被链路上的所有节点接收。 - 链路本地范围全路由器组播地址 (Link-local scope all-routers multicast address):用于在同一链路上的所有路由器之间进行通信,地址
ff02::2。所有 IPv6 路由器都会加入这个组播组,因此 发送到这个地址的数据包将被链路上的所有路由器接收。 - 被请求节点组播地址 (Solicited-node multicast address):用于 邻居发现协议(NDP)。每个 IPv6 设备都会计算并加入一个 solicited-node 组播组地址。这个地址是通过 将最后 24 位的单播 或任播地址添加到前缀
ff02::1:ff00:0/104来创建的。例如,如果一个设备的 IPv6 单播地址是fe80::2aa:ff:fe28:9c5a,那么它对应的 solicited-node 组播地址就是ff02::1:ff28:9c5a。
- 链路本地范围全节点组播地址 (Link-local scope all-nodes multicast address):用于在同一链路上的所有节点之间进行通信,地址
How to form a link-local address? How to form a global unicast address using stateless autoconfiguration?
如何形成链路本地地址?如何使用无状态自动配置形成全局单播地址?
链路本地地址的前 64 位是前缀,后 64 位为接口 ID。接口 ID 可以由扩展唯一标识符 (EUI-64) 派生、随机生成或通过 MAC 地址转换。
通过 MAC 地址转换的步骤为:
- 在 MAC 地址中间 (6 段十六进制数的中间) 插入 FF
。 - 将 MAC 地址中第一个 byte (前两个十六进制) 的倒数第二个位取反。
- 组成一个新的 EUI-64 地址。
e.g. MAC 为 C6-46-7B-E7-B0-9B
- 插入 FF
得: C6-46-7BFF:FE-B0-9B - 将第一个 byte 的倒数第二个位取反:1100 0110 → 1100 0100 => C4
- 组成 EUI-64 地址得:
C446:7BFF:FEE7:B09B
但是因为 MAC 地址唯一表示了一台设备,为了用户的网络隐私,接口 ID 通常会随机生成。
全局单播地址类似的,但是我们不知道它的前缀。可以使用邻居发现协议,发送 RS 请求前缀信息。
一台主机刚启动的时候,它连接进入网络,但是还不知道它的网络是怎么样的,此时它会发送一个 RS 请求,它会发送到所有路由器上。

路由器接收到它的 RS,会发送一个 RA 用于给出网关、前缀等等信息。

这样主机就得到了这个网络的前缀,于是它的 IPv6 地址就可以自动配置了。我们称这样配置的 IPv6 为无状态自动配置 (Stateless autoconfiguration),因为它并不是存储在路由器上配置的。
通过一个例子进一步理解 IPv6 的寻址。
Q1: What is the link-local address of PC1?
Q2: When stateless auto-configuration is used, what is the global unicast address of PC1?
Q3: What ICMPv6 messages are used for PC1 to discovery the subnet prefix and default gateway?
Q4: What ICMPv6 messages are used for PC1 to perform the duplicate address detection before it can use the address?
Q1:PC1 的链路本地地址是什么?
Q2:使用无状态自动配置时,PC1 的全局单播地址是什么?
Q3:PC1 在发现子网前缀和默认网关时会使用哪些 ICMPv6 消息?
Q4:PC1 在使用地址前会使用哪些 ICMPv6 消息进行重复地址检测?

- 我们根据 MAC 地址生成链路本地地址。插入 FFFE 后修改第 7 位后得:
02AA:AAFF:FEAA:AAAA,于是接上链路本地地址的前缀 FE80 得,IPv6:FE80::2AA:AAFF:FEAA:AAAA/64。 - 使用无状态自动配置时,PC1 的全局单播地址由路由器的前缀和它的接口 ID 组成。路由器的前缀为 2001:1:2:3,IPv6:
2001:1:2:3:2AA:AAFF:FEAA:AAAA/64。 - PC1 在 发现子网前缀和默认网关时 会使用邻居发现协议的 RS 和 RA 请求。
- PC1 在使用地址前会使用邻居发现协议的 NS 和 NA 请求进行 重复地址检测。
邻居发现协议
What 4 ICMPv6 messages are used in NDP?
NDP 中使用了哪 4 种 ICMPv6 报文?
在 IPv6 中,将 ICMP 协议中特殊的四种信息定义为邻居发现协议 (Neighbor Discovery Protocol, NDP)。
| ICMPv6 Message | Type | Description |
|---|---|---|
| 路由器请求 Router Solicitation (RS) | 133 | 当一个主机启动时会发送一个 RS 去获取网络信息。 |
| 路由器接收 Router Advertisement (RA) | 134 | RA 包含用于链路确定或地址配置的前缀、建议的跳数限制值、MTU 值等。RA 可定期发送,也可作为对 RS 信息的回应发送。 |
| 邻居请求 Neighbor Solicitation (NS) | 135 | 由主机发送,用于确定邻居的链路层地址 (MAC)。用于验证邻居是否仍然可达。 |
| 邻居接收 Neighbor Advertisement (NA) | 136 | 对 NS 消息的回应。 |
What ICMPv6 messages are used for the functions provided by NDP? (For example, Address resolution, Duplicate address detection, Prefix and Router discovery.)
哪些 ICMPv6 信息用于 NDP 提供的功能?(例如,地址解析、重复地址检测、前缀和路由器发现)。
对于地址解析,与 IPv4 的 ARP 协议类似的:
IPv6 节点的地址解析过程包括 交换 “邻居请求” (Neighbor Solicitation) 和 “邻居接收” (Neighbor Advertisement) 报文,以解析给定目的地的链路层地址 (link-layer address) 和链路上的下一跳地址 (next-hop address)。发送主机在适当的接口上发送多播 “邻居请求” 信息。NS 报文的组播地址是从目标 IP 地址导出的请求节点组播地址。NS 信息在源链路层地址选项中包含发送主机的链路层地址 MAC。

注意,此时目标主机可以广播本地链路所有主机告知自己的 MAC 地址,也可以选择只单独回复源主机。
对于重复地址检测:因为我们还不知道生成的这个 IPv6 有没有被别人用过,接口 ID 可以是随机生成的。这时就需要使用 邻居请求 (NS)。
重复地址检测 (Duplicate Address Detection, DAD) 是为了确保在无状态自动配置过程中,其他设备未在使用自动配置地址。 主机会主动向该 请求节点组播地址 (FF02::1:FFxx
如果节点以 NA 消息回应请求,则表示 IPv6 地址已被使用,主机需要手动配置。

IP 路由
What are the differences between layer 2 switching and layer 3 routing?
第 2 层交换和第 3 层路由有什么区别?
- 第 2 层交换:交换是根据数据包中的 MAC 地址信息进行转发。当交换机从某个端口收到一个数据包,它会读取包头中的源 MAC 地址和目的 MAC 地址,并在 交换地址表 中查找相应的端口。然后,根据这些信息,交换机会将数据包 转发到目标端口 或者广播。
- 第 3 层路由:路由是根据 IP 地址进行寻址,并通过 路由表 来决定数据包的转发路径。决定了转发路径后会将数据包 转发到下一跳。
What is the difference between the next-hop and the default gateway?
下一跳和默认网关有什么区别?
我们可以认为:
- 下一跳:在路由表中,下一跳是指向数据包应该被发送到的下一个路由器或目标主机的 IP 地址,它一般是设备的网关。
- 默认网关:默认网关是网络中用于连接到其他网络(如 Internet)的设备(通常是路由器)。当一个设备需要发送一个数据包到不在本地网络中的目标时,它会将数据包发送到默认网关。可以理解为是设备中设置的默认下一跳地址。
What are the differences between the intra-subnet and inter-subnet communications?
子网内通信和子网间通信有何不同?
- 子网内通信:目的主机与源主机位于同一子网内/广播域内。
- 子网间通信:在不同 IP 子网的主机之间通信。
How to use Address Resolution Protocol (ARP) in the intra-subnet and inter-subnet communications?
如何在子网内和子网间通信中使用地址解析协议(ARP)?
地址解析协议 (Address Resolution Protocol, ARP) 可以将 IP 地址映射到 MAC 地址。
如果是 子网内通信,源主机会先广播一个 ARP 请求,询问广播域中拥有目的主机的 IP 地址。目的主机收到 ARP 请求后,会回复一个 ARP 应答,告诉源主机自己的 MAC 地址。 此时 ARP 会将这个映射记录到源主机的 ARP 表中,以便将数据包封装成以太网帧。

如果是子网间通信,我们广播的 ARP 请求最后只能到达网关,对应的网关收到 ARP 请求后,会回复一个 ARP 应答,告诉源主机网关的 MAC 地址。
它们的区别在于:
- 子网内通信 ARP → 目的主机 MAC
- 子网间通信 ARP → 网关 MAC
For inter-subnet communication, how do IP addresses and MAC addresses change in the packet during the data transmission?
对于子网间通信,数据包中的 IP 地址和 MAC 地址在数据传输过程中如何变化?
- IP 地址在通信过程中不会改变。
- MAC 地址在每个子网间都会改变为下一跳的 MAC 地址。
我们通过一个例子加深理解:
如图,PC1 发送一个数据包给 Server4,找到其过程中 IP 地址与 MAC 地址的变化。

数据包初始化情况下源 IP 地址为 192.168.1.11,目的 IP 地址为 192.168.2.88。源 MAC 地址为 A…,目标 MAC 地址为 R…1。此时默认网关是 192.168.1.33,故目标 MAC 地址为 router1 的 MAC 地址。
- 首先经过交换机,它会根据交换表直接转发数据包,此时 IP 地址和 MAC 地址都不变。
- 数据包来到 Router1,IP 地址不变,根据路由表找到下一跳是路由器的另外一个接口,源 MAC 地址变为
R...1,目标 MAC 地址为R...2。 - 在另一个出口处,IP 地址不变,根据路由表找到下一跳是 Router2,源 MAC 地址变为
R...2,目标 MAC 地址为R...3。 - 数据包来到 Router2,IP 地址不变,根据路由表找到下一跳是 Router2 的另外一个端口,源 MAC 地址变为
R...3,目标 MAC 地址为R...4。 - 在另一个出口处,IP 地址不变,根据路由表找到下一跳是目标地址 Server4,源 MAC 地址变为
R...4,目标 MAC 地址为D...。 - 数据到达 Server4。
