1
1
---
2
- title : 计算机网络中 MAC地址 vs IP地址 vs 端口号
3
- shortTitle : MAC地址 vs IP地址 vs 端口号
2
+ title : 彻底搞懂计算机网络中 MAC 地址和 IP 地址
3
+ shortTitle : MAC地址 vs IP地址
4
4
description :
5
5
head :
6
6
- - meta
7
7
- name : keywords
8
8
content : 网络数据包, 报文, 数据帧, 数据包, 网络分层, TCP/IP, OSI模型, MTU, 数据封装, 网络通信
9
9
---
10
10
11
- ## MAC地址 vs IP地址 vs 端口号
11
+ ## IP 地址和 MAC 地址
12
12
13
13
14
14
大家好,我是小北。
15
15
16
16
关于 IP 地址和 MAC 地址是经常容易混淆的概念,在[ 网络是怎么连接中?] ( https://csguide.cn/network/overview/30_how_networks_connect.html ) 有提到关于 IP 地址和 MAC 地址的一些基本知识。
17
17
18
- 在这篇文章中我们将重点讲解这两个地址的关系、以及是如何协作的 ,因为端口号也可以理解为一种寻址,所以也顺带讲一下端口号。
18
+ 在这篇文章中我们将重点讲解这两个地址的关系,因为端口号也可以理解为一种寻址,所以也顺带讲一下端口号。
19
19
20
20
21
21
网络通信中的地址体系就像现实世界的定位系统,只不过更加精确和层次化。
@@ -26,22 +26,243 @@ head:
26
26
27
27
## IP 地址
28
28
29
- IP地址本质上是一个逻辑标识符,而非物理标识符。
29
+ IP地址是分配给网络上每台计算机和设备的唯一标识符,是 IP 协议的地址。
30
+
30
31
31
- 这是理解IP地址最关键的一点,与 MAC 地址不同,IP地址是可分配、可变更的,它标识的是网络接口在特定网络拓扑中的位置和角色,而非网络设备本身 。
32
+ IP地址本质上是一个逻辑标识符,而非物理标识符 。
32
33
33
- 可以把IP地址类比为城市中的门牌号:
34
- * 门牌号(IP地址)标识建筑物在城市规划中的位置
35
- * 建筑物可以拆除重建,门牌号仍然保留(类似更换电脑设备,IP 地址不变)
36
- * 同一个人(设备)可以搬家,获得新门牌号
37
- * 门牌号由城市规划部门统一规划分配,而非咱们自行决定
34
+ 这是理解IP地址最关键的一点,与 MAC 地址不同,IP 地址是可分配、可变更的,它标识的是网络接口在特定网络拓扑中的位置和角色,而非网络设备本身。
38
35
39
36
** IP 地址还是有层级的,记住这一点很重要,这也是为了 IP 地址用于全球范围内的主机的定位。**
40
37
41
38
接下来我们会讲一下,为什么 IP 地址可以有层级,是怎么产生的?
42
39
40
+ ### IP 地址的构成
41
+
42
+ IP 地址分为 IPv4 和 IPv6,这篇文章我们将主要讨论 IPv4,因为这是当前主流使用的 IP 地址,理解 IPv4 基本也就理解了 IPv6。
43
+
44
+
45
+ IP 地址由四个字节总共 32个bit 构成,以点分十进制表示法显示(如192.168.1.1)。
46
+
47
+ 如果用二进制表示则是:11000000.10101000.00000001.00000001。
48
+
49
+ 由于总共有 32 位,所以 IP 地址的总数是 2^32 个,总共大约 43亿个。
50
+
51
+ 一直从 0.0.0.0 ~ 255.255.255.255。
52
+
53
+ 互联网上每一台计算机都可以被分配一个 IP 地址(暂不考虑 NAT)。
54
+
55
+ IP 地址分为两部分,一个是用来标识属于哪一个网络,叫做** 网络号** ,一个是标识属于网络中哪一个主机,叫做** 主机号** 。
56
+
57
+ 比如 192.168.1.1,如果我们规定前面 24 位为网络号,后面 8 位为主机号的话。
58
+
59
+ 网络号就是 192.168.1,主机号为 1。
60
+
61
+ 同一个网络中的主机 IP 地址网络号相同,只有主机号不同。
62
+
63
+
64
+ 那么问题来了?
65
+
66
+ 拿到一个 IP 地址,我怎么知道它的网络号是多少,主机号是多少呢?
67
+
68
+
69
+ 这要提到“子网掩码”了
70
+
71
+
72
+ ### 子网掩码(subnet mask)
73
+
74
+ 子网掩码是一个32位的二进制数(对于IPv4而言),它的核心功能是帮助确定一个IP地址中哪些位是网络ID(网络部分),哪些位是主机ID(主机部分)。
75
+
76
+ 判断子网对于网络通信和路由非常重要。
77
+
78
+ ** 子网掩码由连续的1和连续的0组成(记住这个特征)**
79
+
80
+ * 所有值为1的位对应IP地址中的网络ID部分
81
+ * 所有值为0的位对应IP地址中的主机ID部分
82
+
83
+ 例如,子网掩码 255.255.255.0 转换为二进制是:
84
+
85
+ ` 11111111.11111111.11111111.00000000 `
86
+
87
+ 这表示IP地址的前24位是网络ID,后8位是主机ID。
88
+
89
+
90
+ 当网络设备需要确定一个数据包中目的 IP 是本地网络还是远程网络时,会使用子网掩码进行计算:
91
+
92
+ 1 . 将IP地址和子网掩码都转换为二进制
93
+ 2 . 对它们执行按位 AND 运算
94
+ 3 . 得出的结果就是网络地址
95
+
96
+ 道理很简单,因为子网掩码后面主机号部分都是 0,所以任何 IP 后面主机部分不管是 0 还是 1,和 0 做 AND,全部都是 0
97
+
98
+ 那么剩下的也就是前面网络部分了。
99
+
100
+ ** 举个例子**
101
+
102
+ 假设我们有:
103
+
104
+ IP地址: 192.168.1.15
105
+ 子网掩码: 255.255.255.0
106
+
107
+ 二进制表示:
108
+
109
+ IP地址: 11000000.10101000.00000001.00001111
110
+ 子网掩码: 11111111.11111111.11111111.00000000
111
+
112
+ 按位AND运算:
113
+
114
+ ```
115
+ 11000000.10101000.00000001.00001111 (IP地址)
116
+ 11111111.11111111.11111111.00000000 (子网掩码)
117
+ ------------------------------------ (AND运算)
118
+ 11000000.10101000.00000001.00000000 (网络地址: 192.168.1.0)
119
+ ```
120
+
121
+ 所以 IP 地址 192.168.1.15 属于网络192.168.1.0,主机 ID 为15。
122
+
123
+
124
+ ### 传统 IP 地址分类
125
+
126
+ 以前,为了简化管理和路由,IPv4 地址被划分为五类(A、B、C、D、E),其中前三类(A、B、C)用于一般的网络通信:
127
+
128
+ | 地址类别 | 首位比特 | 网络位 | 主机ID | 地址范围 | 适用场景 | 子网掩码 |
129
+ | ---------| -------| -----| ---------| ---------| ---------| ---------|
130
+ | ** A类** | 0 | 8| 24 | 1.0.0.0 - 126.255.255.255 | 超大型网络,每个网络可容纳约1600万台主机 | 255.0.0.0(/8) |
131
+ | ** B类** | 10 | 16 | 16 | 128.0.0.0 - 191.255.255.255 | 大型网络,每个网络可容纳约65,000台主机 | 255.255.0.0(/16) |
132
+ | ** C类** | 110 | 24 | 8 | 192.0.0.0 - 223.255.255.255 | 小型网络,每个网络最多254台主机 | 255.255.255.0(/24) |
133
+
134
+ 规定了首位比特的特征,可以保证每一个地址的头部独一无二,拿到一个 IP 地址,可以快速根据首位特征定位到属于哪一类地址,然后根据子网掩码,快速分别网络号和主机号。
135
+
136
+
137
+ > 对于 A、B、C 类 IP 地址,RFC 1918定义了三个主要的私有IP地址块:
138
+ > 10.0.0.0/8 (10.0.0.0 - 10.255.255.255)
139
+
140
+ > A类私有地址块
141
+ > 提供16,777,216个IP地址
142
+ > 前缀长度为8位
143
+
144
+
145
+ > 172.16.0.0/12 (172.16.0.0 - 172.31.255.255)
146
+ > B类私有地址块
147
+ > 提供1,048,576个IP地址
148
+ > 前缀长度为12位
149
+
150
+
151
+ > 192.168.0.0/16 (192.168.0.0 - 192.168.255.255)
152
+ > C类私有地址块
153
+ > 提供65,536个IP地址
154
+ > 前缀长度为16位
155
+
156
+ 其中 A 类私有地址,大家一定经常在学校、大公司、云服务器厂商看到,大家在这些内网里面的地址,常常就是 10.xx.xx.xx
157
+
158
+ 而 C 类地址一般是家庭、小型办公室经常会使用的,比如大多数家庭默认的内网 IP地址类似 192.168.xx.xx
159
+
160
+ 这些私有地址的共同特点:
161
+
162
+ ** 不可路由** :这些地址在互联网上不可路由,路由器会丢弃目的地为这些地址的数据包
163
+
164
+ ** 可重用性** :世界各地的不同局域网可以使用相同的私有IP地址空间
165
+
166
+ ** 需要NAT转换** :要与互联网通信,需要通过网络地址转换(NAT)将私有地址转换为公网IP地址
167
+
168
+ ** 无需注册** :使用这些地址不需要向IANA或任何互联网注册机构申请
169
+
170
+
171
+ 这种A、B、C 分类方式虽然简单直观,但存在地址空间浪费严重的问题。
172
+
173
+ 例如,一个只需要 500 台主机的组织分配到 B 类地址,会浪费超过64,000个 IP 地址。
174
+
175
+ 为解决这个问题,现代网络采用了无类域间路由(CIDR)技术,允许更灵活的网络划分。
176
+
177
+
178
+ ### CIDR (无类域间路由) 详解
179
+
180
+ CIDR (Classless Inter-Domain Routing,无类域间路由) 是在1993年引入的一种IP地址分配和路由聚合方法,用来取代之前的分类寻址系统。
181
+
182
+ CIDR的核心理念是打破传统A、B、C类IP地址的固定边界,提供更灵活的网络规划方式。
183
+
184
+ CIDR使用"前缀长度"表示法来定义网络,格式为:
185
+
186
+ ` IP地址/前缀长度 `
187
+
188
+ 例如:192.168.1.0/24表示前24位是网络部分,后8位是主机部分。
189
+
190
+ 前缀长度可以是1到32之间的任何数字(对于IPv4),不再局限于传统的8、16或24位边界。
191
+
192
+
193
+ 至于网络号的计算还是使用 AND
194
+
195
+ ** CIDR的优点**
196
+
197
+ * 更高效的地址分配:可以根据实际需要分配恰当大小的网络,避免地址浪费
198
+
199
+ 比如需要500个地址?使用/23网络(提供512个地址),需要2000个地址?使用/21网络(提供2048个地址)
200
+
201
+ * 灵活的子网划分:可以将较大的网络划分为大小不等的子网,根据不同部门或功能需求分配
202
+
203
+ * 路由聚合(超网):多个小型网络可以聚合为一个更大的CIDR块,减小互联网路由表规模
204
+
205
+ 例如:192.168.0.0/24, 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24 可聚合为 192.168.0.0/22
206
+
207
+ (就是找到这些 IP 子网前缀相同的部分,这几个相同的是前面 22 位,那么就可以聚合为一个新的子网)
208
+
209
+
210
+ 最初我看到 CIDR 就有个疑问:
211
+
212
+ CIDR对于同一个 IP 地址,有不同的解释方法? 比如按不同的网络号解释,而不是像 A B C 类,看前缀特征就能知道是哪一类,这在实际路由中是怎么解决的呢?
213
+
214
+ 以IP地址192.168.1.20为例,在传统分类系统中,它始终是C类地址(因为它以"192"开头),网络前缀固定为24位。
215
+
216
+ 但在CIDR中,这个地址可能属于多种不同的网络,取决于CIDR前缀长度:
217
+
218
+ 192.168.1.20/24 - 属于192.168.1.0/24网络(256个地址)
219
+ 192.168.1.20/23 - 属于192.168.0.0/23网络(512个地址)
220
+ 192.168.1.20/16 - 属于192.168.0.0/16网络(65,536个地址)
221
+ 192.168.1.20/8 - 属于192.0.0.0/8网络(16,777,216个地址)
222
+
223
+ ** 如何确定IP地址的网络归属**
224
+ 在CIDR环境中,一个IP地址属于哪个网络不再由地址本身决定,而是由网络管理员定义的网络前缀确定。
225
+
226
+ 这就是为什么同一个IP地址可以在不同配置中有不同解释。
227
+
228
+ 确定一个IP地址属于哪个网络需要两个信息:
229
+
230
+ ** 1. IP地址本身**
231
+ ** 2. 应用于该地址的网络前缀长度(子网掩码)**
232
+
233
+
234
+
235
+ 路由器和主机通过以下方式处理可能的多重解释:
236
+
237
+ 1.显式配置:网络设备上明确配置子网掩码或CIDR前缀,例如:
238
+ ```
239
+ IP地址: 192.168.1.20
240
+ 子网掩码: 255.255.255.0 (/24)
241
+ ```
242
+
243
+ 这是我家路由器上的配置:
244
+
245
+ ![ ] ( https://cdn.how2cs.cn/gzh/2025-04-26-152956.png )
246
+
247
+ 2 . 路由表查找:路由器在路由表中存储目标网络及其前缀长度:
248
+
249
+ ```
250
+ 目标网络 前缀长度 下一跳
251
+ 192.168.1.0 /24 直连
252
+ 10.0.0.0 /8 192.168.1.1
253
+ 0.0.0.0 /0 192.168.1.254
254
+ ```
255
+
256
+ 3 . 最长前缀匹配原则:当多个条目可能匹配时,路由器选择前缀最长(最具体)的路由。例如,对于目标地址10.1.1.1:
257
+
258
+ ```
259
+ 10.0.0.0/8 匹配
260
+ 10.1.0.0/16 匹配(更具体)
261
+ 10.1.1.0/24 匹配(最具体)
262
+ ```
263
+
264
+ 这种灵活性使CIDR成为现代网络设计和IP地址管理的基础,远比传统的A、B、C类寻址系统更适合各种规模的网络需求。
43
265
44
- ### IP地址的构成
45
266
46
267
### IP地址的分配机制
47
268
@@ -79,55 +300,67 @@ IP地址的分配是一个分层体系,由国际组织(IANA)、区域机构(RI
79
300
80
301
81
302
82
- 六、思考题:IP设计的哲学启示
303
+ ## MAC 地址
83
304
84
- 为什么IPv4不采用全局唯一MAC地址直接通信?
85
- 答:MAC地址缺乏层次化结构,路由表规模爆炸(想象全球数十亿设备的路由条目)
86
305
87
- 容器网络如何实现IP动态分配?
88
- 答:通过CNI插件(如Calico、Flannel)管理虚拟IP池,每个Pod获得独立IP
89
306
90
- 5G网络中的UPF如何影响IP分配?
91
- 答:用户面功能单元实现本地分流,为边缘计算提供灵活IP管理能力
307
+ MAC地址(Media Access Control Address)是一个用于在网络中唯一标识设备的物理地址,也称为物理地址、硬件地址或以太网地址。
92
308
309
+ 它是数据链路层的寻址机制,用于在同一网络内识别和通信。
93
310
94
- ** 报文(Message)、包(Packet)、帧(Frame)是数据在不同网络分层中的不同“包装形式” ** ,对应不同层级的协议处理逻辑,区别在于所属层级、封装信息、传输范围三方面。
311
+ 从本质上讲,MAC地址是:
95
312
96
- ---
313
+ * ** 一个48位(6字节)的二进制数值**
314
+ * ** 由硬件厂商烧录到网卡中**
315
+ * ** 理论上全球唯一,不可更改(尽管现在允许软件修改)**
316
+ * ** 与网络拓扑无关,不提供位置信息**
97
317
98
- ### 1. 各层数据包
99
- ** 关键逻辑:不同层级处理不同维度的信息**
100
- | 网络分层 | 数据包名称 | 典型协议 | 核心任务 |
101
- | ----------------| --------------| ---------------| --------------------------|
102
- | 应用层 | 报文(Message) | HTTP, FTP | 用户可理解的完整数据块 |
103
- | ** 传输层** | ** 段(Segment)** <br >(TCP)或** 数据报(Datagram)** (UDP) | TCP, UDP | 端到端传输控制(端口号) |
104
- | ** 网络层** | ** 包(Packet)** | IP | 全局寻址(IP地址) |
105
- | ** 数据链路层** | ** 帧(Frame)** | Ethernet, WiFi | 本地设备间物理传输(MAC地址) |
106
318
107
- ---
319
+ ### MAC 地址的表示
108
320
109
- ### 2. 数据包的逐层封装
321
+ ` ifconfig ` 命令可以查看本机的 IP 地址和网络接口MAC 地址,比如我的:
110
322
111
- 这里引用之前文章 [ TCP/IP 模型 ] ( https://csguide. cn/network/overview/20_protocol.html#%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE%E5%B0%81%E8%A3%85%E5%92%8C%E8%A7%A3%E5%8C%85 ) 中提到的图:
323
+ ![ ] ( https://cdn.how2cs. cn/gzh/2025-04-26-162358.png )
112
324
113
- ![ TCP/IP 数据包 ] ( https://cdn.how2cs.cn/gzh/2025-03-04-tcp-ip-encapsulation.svg )
325
+ 一般是六组十六进制数,每组两个字符,用冒号分隔
114
326
327
+ 例如: 00:1A:2B:3C:4D:5E
115
328
116
- 1️⃣ ** 应用层** :生成原始数据(如 ` HTTP请求报文 ` )
117
- 2️⃣ ** 传输层** :添加TCP头部(端口号、序列号)→ 变成 ` TCP段 `
118
- 3️⃣ ** 网络层** :添加IP头部(源/目标IP地址)→ 变成 ` IP包 `
119
- 4️⃣ ** 链路层** :添加帧头帧尾(源/目标MAC地址、CRC校验)→ 变成 ` 以太网帧 `
329
+ 一个 MAC 地址前24位(3字节),由IEEE分配给制造商,后面 24 位由制造商自己分配给设备,这样就能保证全球唯一。
120
330
121
- ** ❗ 注意** :
122
- • ** MTU(最大传输单元)** :链路层帧的数据部分最大长度(如以太网默认1500字节),若IP包超过MTU,需在网络层分片(Fragment)。
123
331
124
- ---
332
+ ### MAC地址的作用
333
+
334
+ MAC 地址作用于 OSI 模型的第二层(数据链路层),负责局域网内设备的直接通信,与网络层的IP地址形成互补。
335
+
336
+ 发送方在数据帧头部写入目标设备的 MAC 地址,交换机根据 MAC 地址表精准转发到目标端口。
337
+
338
+ 而如何知道对方的 MAC 地址呢?
339
+
340
+ 答案是** 广播** ,将目标MAC填为 FF:FF:FF:FF:FF: FF ,交换机将数据帧广播至所有端口(如ARP请求)
341
+
342
+
343
+ ** ARP协议流程:**
344
+
345
+ * 设备A向局域网广播ARP请求(含目标IP);
346
+ * 设备B响应并返回自身MAC地址;
347
+ * 设备A缓存IP-MAC映射(arp -a可查看)。
348
+ * 动态更新:ARP缓存条目会老化(默认2-4分钟),防止过时映射。
349
+
350
+
351
+
352
+ ### IP地址和MAC地址的关系
353
+
354
+ MAC 地址是identify,而 IP 地址是 locate
125
355
356
+ MAC地址 = 身份证号(唯一标识)
357
+ IP地址 = 居住地址(实际定位)
126
358
359
+ ** 为什么有了 MAC 地址为什么还要有 IP 地址?**
127
360
128
- ## 总结
361
+ 因为 MAC 地址无法定位,就比如我无法根据一个身份证号找到你这个人现在在哪,身份证号只能看出你的籍贯(类似网卡的生产厂商)。
129
362
363
+ 确没法找到你现在的位置,所以还需要一个能够定位你现在的位置的地址体系,这就是 IP 地址,IP 地址是有层级的。
130
364
131
- 术语在不同协议中可能有别名(如TCP叫Segment,UDP叫Datagram),但核心逻辑一致 。
365
+ 只要给出一个 IP 地址,就能在网上查出大概所在的位置 。
132
366
133
- 实际开发中"包"可能泛指所有数据单元,需结合上下文判断~
0 commit comments