全局网络寻址的需求
一、为什么需要“全局唯一”的地址?
-
在互联网中,每一个主机、路由器等设备都必须可被唯一标识,否则:
- 数据报无法被正确送达目标;
- 路由器无法建立正确的转发表(Forwarding Table/FIB)。
二、路由器与交换机的区别(在地址层面)
-
路由器(Router)
- 在 网络层(IP 层) 转发数据包;
- 需要有唯一的 IP 地址(通常每个接口一个 IP)。
-
交换机(Switch)
- 在 链路层(以太网/MAC 层) 转发帧;
- 依赖以太网地址(MAC address)转发,而不是 IP 地址;
- 讲义中强调:路由器有唯一地址,而“为什么不是交换机?”是思考点,原因就是交换机更多依赖 MAC 学习表,而不是把自己当作“端主机”被寻址。
以太网地址(Ethernet Address)
一、基本概念与表示形式
-
每一块以太网网卡(Network Interface / Adapter)都有一个全球唯一的以太网地址(MAC 地址)。
-
地址是属于网卡适配器,而不是主机本身,一台主机多块网卡就有多个 MAC 地址。
-
通常写成 6 个字节,用十六进制表示,中间用冒号“:”分隔,例如:
8:0:2b:e4:b1:2
-
每个字节由两位十六进制表示(每位对应 4 bit),因此总共 6 × 8 = 48 bit。
示例:
-
讲义中的示例:
8:0:2b:e4:b1:2- 转为二进制:
00001000 00000000 00101011 11100100 10110001 00000010 - 实际书写时可以写成
08:00:2b:e4:b1:02,前导 0 可以省略,所以幻灯片写得更简略。
- 转为二进制:
二、唯一性如何保证:厂商前缀(OUI)
-
为了保证全球唯一性,IEEE 给每个网卡厂商分配一个固定前缀(前 24 位)。
-
例如:
- AMD 被分配的前缀是
8:0:20(即前三个字节)。
- AMD 被分配的前缀是
-
厂商在生产网卡时,只能在后 24 位范围内自行分配,避免和其他厂商冲突。
具体例子:
-
某块 AMD 网卡 MAC 地址:
8:0:20:12:34:568:0:20→ 固定厂商前缀(AMD);12:34:56→ 由 AMD 自己在其分配空间内保证不重复。
三、以太网地址的三种类型
以太网帧在一个广播域中是“一发所有人都能收到”,但是否“接受”要看 MAC 地址匹配。
一、单播地址(Unicast)
- 帧头中的目的 MAC 地址是某个具体网卡的地址;
- 只有该网卡会把这个帧“交给上层(IP 层)”。
二、广播地址(Broadcast)
- MAC 地址全为 1:
FF:FF:FF:FF:FF:FF; - 所有网卡都会接收并上传该帧。
三、多播地址(Multicast)
- 第一位为 1,但不是全 1,即不是广播地址;
- 网卡可以被“编程”成接收某些特定多播地址,以支持一对多通信。
适配器的接受规则总结:
网卡会接收并上传以下几类帧:
- 本机单播 MAC 地址的帧;
- 广播地址的帧;
- 被配置为感兴趣的多播地址的帧。
以太网地址的挑战:平面地址空间(Flat Addressing)
虽然以太网地址全球唯一,但其在路由与管理上存在问题:
一、没有层次结构(Flat)
-
MAC 地址只是一个 48 位的编号,并不携带“网络位置”的信息:
- 看不出来这个主机在哪个子网、哪个机构;
- 所以路由器无法通过 MAC 地址“猜”出路由方向。
二、对路由器与交换设备的压力
-
如果用 MAC 地址来做广域网络路由:
- 路由器需要对每一个主机地址保存一条转发规则;
- 导致 FIB(Forwarding Information Base,转发表)极其庞大,无法扩展。
比喻理解:
- MAC 地址好比“身份证号”,非常精确,但看不出你在哪个城市、哪个小区;
- IP 地址更像“省-市-区-街道-门牌号”的结构化地址,可以按“前缀”聚合,方便导航和路由。
IP 地址:分层的全局地址(Hierarchical Addressing)
一、基本性质与格式
一、属性
-
全局唯一(Globally Unique);
-
层次化结构:由“网络号(network)+ 主机号(host)”两部分构成;
-
IPv4 地址总共约 2³² ≈ 4×10⁹ 个。讲义中提到传统 classful:
- 约一半为 A 类地址;
- 约 1/4 为 B 类;
- 约 1/8 为 C 类。
二、表示方式(点分十进制)
-
典型示例:
10.3.2.4128.96.33.81192.12.69.77
-
每一段是 0–255 的十进制数,实际是一个字节。
层次结构的好处:
- 前缀代表“网络位置”(类似城市/小区);
- 同一个网络号下的主机可以在路由表中聚合成一条规则,大幅减少路由表项数量。
二、IP 地址空间的浪费问题(Classful 的局限)
讲义指出:如果给每个物理网络都分配一个完整的“网络号”,IP 地址会很快耗尽:
一、B 类地址的例子
- 只需要 2¹⁴ ≈ 16,000 个 B 类网络号,就可以支持约 4×10⁹ 个主机;
- 但现实中,很多机构拿到一个 B 类网段(最大可容纳 65,534 个主机),实际只用了几百、几千台主机;
- 于是造成大量“主机号”空间浪费。
二、路由表变大问题
- 使用的网络号越多,路由器需要的前缀越多;
- 转发表越大,存储成本越高,查表越慢,路由器性能下降。
子网 Subnetting:在站点内部再加一层
一、子网设计的目标
-
减少对 全球网络号(network number) 的需求;
-
在一个机构内部,再加一层“子网(subnet)”层次:
- 整体对外表现为一个网络号;
- 内部可以划分多个子网。
二、子网掩码(Subnet Mask)的作用
一、基本思想
-
对于 A/B 类地址,在“原有主机号”字段中,再切一部分出来当“子网号”;
-
通过子网掩码来指定:
- 哪些位是 网络号 + 子网号;
- 哪些位是 主机号。
二、形式
-
子网掩码也是 32 位,用 1 表示“网络/子网部分”,0 表示“主机部分”;
-
常见写法:
- 传统掩码:
255.255.255.0; - CIDR 写法:
/24表示前 24 位为 1。
- 传统掩码:
三、讲义中的要点
- 可以有“默认路由”(default route),当没有更精确匹配时采用默认;
- 子网掩码的 1 理论上不要求必须连续(虽然实际部署中几乎都用连续掩码);
- 多个子网可以映射到同一物理网络(逻辑子网);
- 子网结构只在站点内可见,对外仍然表现为一个统一网络前缀。
三、示例:子网划分
例子:一个公司申请到一个 B 类地址 172.16.0.0/16
-
原始(不子网)的结构:
- 网络号:
172.16(16 位) - 主机号:后 16 位,可容纳约 65,534 台主机
- 网络号:
公司想把内部划分成多个部门子网,比如:
- 部门 1:
172.16.1.0/24 - 部门 2:
172.16.2.0/24 - 部门 3:
172.16.3.0/24 - ……
此时:
-
整个机构对外仍然是
172.16.0.0/16; -
内部路由器根据
/24前缀区分不同部门子网; -
对全球路由表而言,只需要一条:
172.16.0.0/16 -> 该机构的边界路由器
主机网络配置方式
一、以太网地址的配置
- MAC 地址由厂商写入网卡 ROM,通常不可修改(或不建议修改);
- 在网络中默认视为“给定且唯一”的。
二、IP 地址的配置要求
- 必须在整个“互联网络(internetwork)”中唯一;
- 还必须能反映网络的层次结构(网络/子网划分)。
三、手动配置的缺点
大多数操作系统都支持手动设置:IP 地址、子网掩码、默认网关、DNS 等。缺点包括:
-
一、工作量大
- 大型网络中有成百上千台主机,逐台配置非常费时。
-
二、易出错(error-prone)
- 容易填错 IP、掩码或网关,导致冲突或无法上网。
因此需要一种自动配置机制 → DHCP。
DHCP:动态主机配置协议(Dynamic Host Configuration Protocol)
一、DHCP 的角色与基本思想
- 在每个管理域(administrative domain)中至少有一个DHCP 服务器;
- DHCP 服务器维护一个可分配地址池,负责给新接入的主机分配 IP 配置。
二、基本工作流程(讲义视角)
一、主机发现服务器
- 新启动或刚接入网络的主机,并不知道自己在哪个网络、也不知道 DHCP 服务器的 IP;
- 它会向广播地址
255.255.255.255发送DHCPDISCOVER报文;
二、DHCP 中继(Relay Agent)
- 在跨网段场景下,DHCP 中继代理会将广播请求转发(单播)到真正的 DHCP 服务器;
- 服务器处理后,再通过中继将响应回主机。
三、典型 DORA 流程(扩展说明)
在实践中,一个完整的 DHCP 获取地址过程通常包括 4 个步骤(DORA):
- 一、Discover:主机广播
DHCPDISCOVER寻找服务器; - 二、Offer:一个或多个服务器给出
DHCPOFFER,提供可用 IP、租期等信息; - 三、Request:主机选择其中一个 Offer,并发送
DHCPREQUEST确认; - 四、ACK:服务器发送
DHCPACK,确认租约生效。
举例场景:
-
Han 的笔记本接入学校 Wi-Fi:
- 笔记本发出
DHCPDISCOVER; - 校园 DHCP 服务器返回一个如
10.0.42.13/24的地址,默认网关10.0.42.1,DNS 指向学校 DNS; - 从此 Han 的电脑在一段时间内(租期)使用这个 IP 上网。
- 笔记本发出
ICMP:Internet Control Message Protocol
一、ICMP 的作用
- ICMP 定义了一组控制与错误报告报文,用于在 IP 层出现问题时向源主机报告。
- 注意:ICMP 本身是承载在 IP 上的协议,但通常被视作 IP 层的一部分辅助机制。
二、典型错误类型(讲义列举)
当路由器或主机无法成功处理某个 IP 数据报时,会向源主机发送 ICMP 错误消息,包括:
一、目的不可达(Destination Unreachable)
- 可能由于链路/节点失败,或者没有到达目的地的路由。
二、重组失败(Reassembly Failed)
- IP 分片在目的端重组时失败,可能缺片或超时。
三、TTL 到 0
- 为避免数据报无限循环转发,每经过一个路由器,TTL 减 1;
- 减到 0 时丢弃并回送 ICMP “Time Exceeded”。
四、IP 头部校验和错误(Header Checksum Failed)
- 表示数据报在传输过程中损坏。
五、ICMP Redirect(重定向)
- 路由器发现源主机选择的下一跳不是最优路径时,可以发 ICMP Redirect 告诉源主机“下次发给某个更好的路由器”;
- 这可以帮助主机更新自己的默认路由选择。
小结与整体脉络
一、本节核心线索
- 从 以太网地址(平面、仅局部可见) 出发,说明其在全球路由上的不足;
- 引入 IP 地址(层次化、可聚合) 作为全局寻址方案;
- 说明传统 Classful 分配的浪费问题;
- 使用 子网(Subnetting) 在机构内部引入更多层级,减少全局网络号需求;
- 讨论主机 IP 配置方式,从手动转向DHCP 自动配置;
- 最后由 ICMP 负责在 IP 层出现问题时向源主机进行反馈。