IP寻址

发布于 作者: Ethan

全局网络寻址的需求

一、为什么需要“全局唯一”的地址?

  • 在互联网中,每一个主机、路由器等设备都必须可被唯一标识,否则:

    • 数据报无法被正确送达目标;
    • 路由器无法建立正确的转发表(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(即前三个字节)。
  • 厂商在生产网卡时,只能在后 24 位范围内自行分配,避免和其他厂商冲突。

具体例子:

  • 某块 AMD 网卡 MAC 地址:8:0:20:12:34:56

    • 8: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.4
    • 128.96.33.81
    • 192.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 层出现问题时向源主机进行反馈。