计算机网络中 MAC地址 vs IP地址 vs 端口号
MAC地址 vs IP地址 vs 端口号
大家好,我是小北。
关于 IP 地址和 MAC 地址是经常容易混淆的概念,在网络是怎么连接中? 有提到关于 IP 地址和 MAC 地址的一些基本知识。
在这篇文章中我们将重点讲解这两个地址的关系、以及是如何协作的,因为端口号也可以理解为一种寻址,所以也顺带讲一下端口号。
网络通信中的地址体系就像现实世界的定位系统,只不过更加精确和层次化。
比如我们在淘宝买东西,需要填写省份、城市、街道、门牌号,甚至需要收件人的名字。
网络里也有类似的定位需求,这就是为什么我们需要MAC地址、IP地址和端口号这三个关键的地址概念。
IP 地址
IP地址本质上是一个逻辑标识符,而非物理标识符。
这是理解IP地址最关键的一点,与 MAC 地址不同,IP地址是可分配、可变更的,它标识的是网络接口在特定网络拓扑中的位置和角色,而非网络设备本身。
可以把IP地址类比为城市中的门牌号:
- 门牌号(IP地址)标识建筑物在城市规划中的位置
- 建筑物可以拆除重建,门牌号仍然保留(类似更换电脑设备,IP 地址不变)
- 同一个人(设备)可以搬家,获得新门牌号
- 门牌号由城市规划部门统一规划分配,而非咱们自行决定
IP 地址还是有层级的,记住这一点很重要,这也是为了 IP 地址用于全球范围内的主机的定位。
接下来我们会讲一下,为什么 IP 地址可以有层级,是怎么产生的?
IP地址的构成
IP地址的分配机制
IP地址的分配是一个分层体系,由国际组织(IANA)、区域机构(RIR)和本地ISP(电信联通这类)共同管理:
IANA(nternet Assigned Numbers Authority):
这是全球最高管理机构,负责将IP地址块分配给五大区域互联网注册机构(RIRs),如:APNIC(亚太)、ARIN(北美)、RIPE NCC(欧洲)等。
**RIRs:**将地址分配给本地ISP(如电信、联通)或大型企业(腾讯、阿里这种)。
ISP/企业: ISP为普通用户动态分配IP;企业可申请固定 IP 段供内部使用。
上面的分配过程,一次性分配的 IP 地址大多都是连续的地址块,为什么要这样呢?
这样的好处是,路由地址可以聚合,减少全球核心路由器中的路由条目,简单解释下:
假设电信获得IPO 地址段:203.0.113.0/22(包含 203.0.113.0 到 203.0.116.255 共1024个连续IP)。
那么我们的路由条目可以是:
- 203.0.113.0/22 -> 中国电信
也就是这个范围的 IP 地址请求,都转发给中国电信的核心路由器,交给他自己内部去路由,那么电信在将这些地址分配给:
广东电信、上海电信、深圳电信的时候,也会尽量连续去分配。
比如 203.0.113.0- 203.0.113.115 分配给广东电信,203.0.113.0- 203.0.113.50 分配给深圳。
那最后我们拿到一个 203.0.113.10,经过简单几跳之后就能路由到深圳,这也是为什么说 IP 地址是有层级的。
层级来自于顶层分配和设计,从分配的时候就尽量让在一个地方/地区的 IP 地址尽量多的连续一段,降低碎片化的路由。
六、思考题:IP设计的哲学启示
为什么IPv4不采用全局唯一MAC地址直接通信?
答:MAC地址缺乏层次化结构,路由表规模爆炸(想象全球数十亿设备的路由条目)
容器网络如何实现IP动态分配?
答:通过CNI插件(如Calico、Flannel)管理虚拟IP池,每个Pod获得独立IP
5G网络中的UPF如何影响IP分配?
答:用户面功能单元实现本地分流,为边缘计算提供灵活IP管理能力
报文(Message)、包(Packet)、帧(Frame)是数据在不同网络分层中的不同“包装形式”,对应不同层级的协议处理逻辑,区别在于所属层级、封装信息、传输范围三方面。
1. 各层数据包
关键逻辑:不同层级处理不同维度的信息
网络分层 | 数据包名称 | 典型协议 | 核心任务 |
---|---|---|---|
应用层 | 报文(Message) | HTTP, FTP | 用户可理解的完整数据块 |
传输层 | 段(Segment) (TCP)或数据报(Datagram)(UDP) | TCP, UDP | 端到端传输控制(端口号) |
网络层 | 包(Packet) | IP | 全局寻址(IP地址) |
数据链路层 | 帧(Frame) | Ethernet, WiFi | 本地设备间物理传输(MAC地址) |
2. 数据包的逐层封装
这里引用之前文章TCP/IP 模型中提到的图:
1️⃣ 应用层:生成原始数据(如 HTTP请求报文
)
2️⃣ 传输层:添加TCP头部(端口号、序列号)→ 变成 TCP段
3️⃣ 网络层:添加IP头部(源/目标IP地址)→ 变成 IP包
4️⃣ 链路层:添加帧头帧尾(源/目标MAC地址、CRC校验)→ 变成 以太网帧
❗ 注意:
• MTU(最大传输单元):链路层帧的数据部分最大长度(如以太网默认1500字节),若IP包超过MTU,需在网络层分片(Fragment)。
总结
术语在不同协议中可能有别名(如TCP叫Segment,UDP叫Datagram),但核心逻辑一致。
实际开发中"包"可能泛指所有数据单元,需结合上下文判断~