Files
cs-note/hhs/NETWORK/01-基础概念/03-寻址体系MAC-IPTPort.md
T
2026-05-24 11:42:38 +08:00

5.9 KiB
Raw Blame History

tags, create time
tags create time
计算机网络
MAC地址
IP地址
端口号
2026-05-17 22:30

寻址体系:MAC / IP / Port

概述

网络中的每个端点需要三层地址才能精确定位到一个进程:MAC 地址(物理层/链路层)定位到哪台设备、IP 地址(网络层)定位到哪个子网、端口号(传输层)定位到哪个进程。三层地址组合起来,就是经典的 ip:port 定位公式。

[!QUESTION] 为什么需要三种地址?一层不够吗? 每种地址解决不同尺度的问题。MAC 在同一个广播域内有效,但路由器不转发广播——跨网段必须用 IP 路由。IP 能到达目标主机,但不区分进程——同一台服务器可能跑着 Web、数据库、邮件等多个服务,所以需要端口来分发。

一、MAC 地址(48 位)

基本结构

前 3 字节            后 3 字节
─────────────     ─────────────
OUI (厂商编号)      NIC 序列号
由 IEEE 分配        由厂商自定

示例:aabb.ccdd.eeff = AA:BB:CC:DD:EE:FF

  • 前三个字节 AA:BB:CC → OUI,代表厂商
  • 后三个字节 DD:EE:FF → 设备唯一序列

MAC 地址类型

类型 格式 含义
单播 LSB=0 发给单个设备
广播 ff:ff:ff:ff:ff:ff 发给局域网内所有设备
组播 LSB=1 发给一组设备

ARP 地址解析

当知道一个主机的 IP 地址 时,需要通过 ARP 协议找到它的 MAC 地址。

sequenceDiagram
    participant Src as 源主机<br/>192.168.1.10/?.mac
    participant Bcast as 局域网广播
    participant Dst as 目标主机<br/>192.168.1.20/aa:bb:cc:11:22:33
    participant Cache as 源主机 ARP 缓存

    Src->>Bcast: ARP Request "192.168.1.20 是谁?→ ff:ff:ff:ff:ff:ff"
    Dst-->>Src: ARP Reply "我是!MAC = aa:bb:cc:11:22:33"
    Src->>Cache: 写入缓存条目 (TTL ≈ 15~30 分钟)
    Note over Src,Dst: 之后的通信直接用此 MAC,不再发 ARP

ARP 缓存查看与管理

# Linux
$ ip neigh show          # 等价于 arp -n
192.168.1.20 dev eth0 lladdr aa:bb:cc:dd:ee:ff STALE

$ ip neigh del 192.168.1.20 dev eth0  # 删除缓存条目

# macOS / Windows
$ arp -a

二、IP 地址(IPv4 32 位 / IPv6 128 位)

IPv4 地址结构

版本(4 bits)  IHL(4 bits)   DSCP(8 bits)   Total Length(16 bits)
...
Identification(16 bits) | DF/MF | Fragment Offset(13 bits)
TTL(8 bits) | Protocol(8 bits) | Header Checksum(16 bits)
Source Address(32 bits)
Destination Address(32 bits)
Options (可选)...

IPv4 vs IPv6

特性 IPv4 IPv6
地址长度 32 bit (4 字节) 128 bit (16 字节)
地址数量 ~43 亿 (2³²) ~3.4×10³⁸ (2¹²⁸)
表示法 192.168.1.1 2001:0db8::1
首部固定长度 20 bytes(可变选项更长) 40 bytes(固定)
Checksum ✅ 有 ❌ 无(依赖上层校验)
NAT 广泛使用(缓解地址耗尽) 不需要(地址充足)
SLAAC — 支持无状态自动配置
组播 有限支持 原生支持

IP 地址分类(历史)

类别 首字节范围 默认掩码 可用主机数 用途
A 1–126 /8 16,777,214 大型组织
B 128–191 /16 65,534 中型组织
C 192–223 /24 254 小型网络
D 224–239 — — 组播
E 240–255 — — 保留

[!warning] CIDR 已淘汰分类编址 现代网络全部使用 CIDR(Classless Inter-Domain Routing) 无类编址,子网掩码可以是任意位数(如 /23、/27)。

三、端口号(16 位)

端口范围

范围 名称 说明
0–1023 熟知端口 (Well-Known) 预分配给标准服务(HTTP:80, HTTPS:443, SSH:22, DNS:53)
1024–49151 注册端口 (Registered) 申请注册的商业软件
49152–65535 动态端口 (Ephemeral) 客户端临时分配,用完即释放

服务端 vs 客户端端口

flowchart LR
    Client["客户端 192.168.1.100:54321"] -->|"SYN"| Server["服务端 10.0.0.1:80"]
    Server -->|"SYN-ACK"| Client
    Client -->|"ACK"| Server

    style Client fill:#DDA0DD,color:#000
    style Server fill:#98FB98,color:#000
  • 服务端端口:固定且知名(如 80),告诉客户端"我在哪"
  • 客户端端口:操作系统动态分配(49152–65535),保证连接的唯一标识 (src_ip, src_port, dst_ip, dst_port)

常见端口速查

端口 协议 服务
21 FTP 文件传输控制
22 SSH 安全远程登录
25 SMTP 邮件发送
53 DNS 域名解析
80 HTTP Web 网站
443 HTTPS 加密 Web
993 IMAPS 加密邮件收取
3306 MySQL 数据库
5432 PostgreSQL 数据库
6379 Redis 缓存
8080 HTTP Alt Web 备用端口

四、完整寻址链:从请求到进程

flowchart TD
    S["你在浏览器输入 example.com"] -->|"DNS 查询"| A["DNS 返回 93.184.216.34"]
    A -->|"TCP 三次握手"| B["建立 TCP 连接<br/>src:192.168.1.100:54321 → dst:93.184.216.34:80"]
    B -->|"以太网帧头"| C["Dst MAC: router的出口MAC<br/>Src MAC: 本机MAC"]
    C -->|"ARP缓存"| D["如果没缓存,先发ARP请求"]
    D -->|"发送 HTTP GET"| E["Web 服务器的 PID 1234<br/>nginx worker 进程读取数据"]

    style S fill:#DDA0DD,color:#000
    style E fill:#98FB98,color:#000

结论: 三层地址缺一不可——没有 IP 找不到机器,没有 MAC 连不上网线,没有端口不知道该交给哪个进程。

关联笔记