网络通信基础

本文最后更新于 2025年8月11日 晚上

从MAC说起

MAC地址的全名是Media Access Control ,即媒体接入控制,它通常被我们理解为一个网络设备的网络身份标识,用来标识该设备在网络中的唯一身份。它由一个48位(6字节)的二进制标识符构成,通常以十六进制格式表示,用冒号或连字符分隔:

1
2
3

00:1B:44:11:3A:B7 00-1B-44-11-3A-B7

一些特殊的MAC地址提到不同的转发识别功能 :

广播地址

1
2
3

FF:FF:FF:FF:FF:FF

用于向全端口发送数据

组播地址

1
2
3
4
5
6
7

组播地址范围

01:00:5E:xx:xx:xx IPv4组播

33:33:xx:xx:xx:xx IPv6组播

通过特殊的地址位标记,之后由组播协议进行识别

单播地址

1
2
3

00:1B:44:11:3A:B7

发送给特定设备的网络数据帧

通过以上几种MAC地址的分类和构成,我们可以总结出MAC地址的实际作用

  1. 通过特殊字段设置提供特定的控制信息
  2. 通过字段的匹配度来完成控制策略

对于设备来说就是

  1. 路由交换设备可以根据数据帧的MAC头来判断其描述的协议信息/或者完成端口的转发
  2. 主机设备根据MAC头来判断是否是转发给它的数据帧,如果是则交给内核层的网络协议栈处理

处理流程

一个简单的二层数据传输过程

链路层通信

在这个过程中,我们需要理解的重点是数据帧是否会被处理是由接收端进行控制的。发送端的任务只是将源主机构造的数据包封装链路层数据头,并转换为电信号沿物理介质发送。这意味着,MAC地址是否与目的地址一致,只是一个目的报文会被处理的充分条件,而不是必要条件。

转发

冲突域

冲突域

当更多的设备需要接入网络,设备间想要相互通信,就不能只靠网线直连进行数据传递。这时出现了网桥设备。网桥设备提供了多个端口,所有接入到网桥中设备都会监听到其他设备发送到网桥中的电信号信息,之后识别目的Mac来判断自己是否是目标主机。

但此时如果多个设备同时需要向外发出信息时,就会有设备因为网络一直繁忙导致消息阻塞,这样的组网方式被称为所有的设备都处于同一个”冲突域“。

广播域

交换

为了解决设备间数据收发的冲突问题,出现了交换机设备。当交换设备接收到来自某一端口的数据帧信息,会创建一个端口-MAC地址映射条目,放入MAC地址表中,当其他设备请求某一个目的MAC时。交换设备通过查询地址与端口的映射,将数据帧转发到目的端口。最终发送到目标主机。通过映射-转发的模式将一个多主机的冲突域拆分为多个交换机与设备之间的单一冲突域,解决了多设备间通信的冲突问题。

同时我们需要注意到,这里恰好证明了数据帧的处理是由接收端控制的。交换设备接受所有设备的MAC信息,并完成了转发处理。并不需要考虑是否与自己的端口MAC一致。

在解决了冲突域问题后,为了进一步提高传输速率。就需要过滤不需要的帧信息。我们知道目的MAC标记为广播地址的数据帧会向所有端口进行转发,但是在我们对不同设备的通信对象存在划分的情况下,就可以将广播域进行分割,使得广播信息可以得到更高效的传输。

VLAN与转发策略

vlan

vlan 是一种分割广播域的重要手段。它的原理是创建一个虚拟的局域网络,将需要被组合到一起的设备所连接的端口,加入到同一个虚拟网络中。这样当某个网络中的设备发起请求时,会匹配在对应vlan的mac地址表中查询/转发,这样就完成了分割不同广播域的效果。

转发策略 当设备间通信需要进行跨多个交换设备的二层转发时,可以使用端口策略模配置来控制数据的转发行为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

access :

入方向:

收到无tag帧 打上PVID标签 内部转发

收到VLAN 10 tag帧 剥离tag 打上PVID标签 内部转发

收到其他VLAN tag帧 丢弃

出方向:

剥离tag,发送无tag帧

hybird :

入方向:

收到无tag帧 打上PVID标签 内部转发

收到有tag帧 保持原tag 内部转发(如果在允许列表中)

出方向:

内部帧 检查VLAN配置

├── Untagged VLAN列表中 剥离tag 发送无tag帧

└── Tagged VLAN列表中 保持tag 发送有tag帧

trunk:

入方向:

收到无tag帧 打上PVID标签 内部转发

收到有tag帧 保持原tag 内部转发(如果VLAN在允许列表中)

出方向:

内部帧 检查VLAN ID

├── 等于PVID 剥离tag 发送无tag帧

└── 不等于PVID 保持tag 发送有tag帧

控制策略

以图示为例 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

host1->host5:

switch1 -> switch2 switch1 outgress: access switch2 ingress: access

switch2 -> switch3 switch2 outgress: access switch3 ingress: access

switch3 -> host5 switch3 outgress: access

host2->host6:

switch1 -> switch2 switch1 outgress: hybird Untagged switch2 ingress: hybird

switch2 -> switch3 switch2 outgress: hybird Tagged switch3 ingress: hybird

switch3 -> host6 switch3 outgress: hybird Untagged

host3->host7:

switch1 -> switch2 switch1 outgress: hybird Tagged switch2 ingress: hybird

switch2 -> switch3 switch2 outgress: hybird Untagged switch3 ingress: access

switch3 -> host7 switch3 outgress: access

host4->host8:

switch1 -> switch2 switch1 outgress: hybird Tageed switch2 ingress: trunk

switch2 -> switch3 switch2 outgress: trunk switch3 ingress: hybird

switch3 -> host8 switch3 outgress: hybird Untagged

路由

虽然我们现在可以通过vlan这种帧扩展形式完成数据帧的跨设备转发过程。但是我们依然只能按照预先设置好的转发路径与目标主机通信。因为对于MAC地址通信来说,只能依赖于目的地址来完成转发过程。

IP

这时我们就需要使用IP层的路由查询。IP层是承载于数据链路层之上的一种控制结构。在二层转发中,目的MAC是目标主机唯一的识别标识,只有确认了MAC地址,才能使目的主机接收处理该数据帧。这就导致这个通信过程中该目的MAC地址需要被正确保留。也就只能通过转发途径完成数据的传输。而通过使用IP 我们就可以在源/目两端更加灵活的处理通信过程。

路由

路由

因为IP层是承载于链路层之上的,所以每一个网关实体都必然是具备MAC地址的。因为它需要先做“目的MAC“是否是”自身MAC” 的判断,才能进行进一步的解析。以静态路由为例。一般的数据通信架构由多个交换机最终连接到路由器的端口上,这个端口被称为网关。所有受它管理的主机都要通过它完成数据的转发。

当 一个主机发起请求时,由协议栈组装具有目的IP源IP的数据包。之后

  1. 查询本地路由,向最合适的路由网关转发(没有合适的就发往默认网关)。
1
2
3

[网关MAC][主机MAC][0x0800][IP:目的IP/源IP][数据][CRC]

  1. 网关收到数据包后检查MAC地址,与自身MAC地址一致,则检查目的IP信息,与本地的路由表进行匹配,选择最合适的路由表项进行路由
1
2
3

[下一跳路由器MAC][网关MAC][0x0800][IP:目的IP/源IP][数据][CRC]

  1. 最终数据包被路由到目标网段的网关,目标网段网关查询ARP表项,获取目的IP与目的主机的MAC映射,构造数据帧发送给目的主机
1
2
3

[目标主机MAC][目标网关MAC][0x0800][IP:目的IP/源IP][数据][CRC]

从这里我们可以看出来当数据包离开自身网段时,数据帧中就不再持有源主机的MAC地址。而是通过匹配网关持有的路由表信息,来完成路由过程,因为路由过程是一个拆/封装数据包的过程,所以不能直接通过硬件转发,而是需要使用软件解析目的MAC,并替换源/目MAC 来完成的二层网络传输,以达到持有“目标网段”的下一跳设备上。最终完成的数据传输过程

NAT(网络地址转换)技术介绍

NAT的作用与价值

IPv4地址资源有限(32位地址空间约43亿个地址),无法满足全球设备联网需求。NAT技术通过地址复用和转换,有效缓解了IP地址短缺问题,同时为内网用户提供了安全隐私保护。

主要优势

-地址复用:多个内网设备共享少量公网IP地址

-安全隐私:隐藏内网拓扑结构和真实IP地址

-成本节约:减少公网IP地址的购买和维护成本

NAT工作原理

NAT本质上是一个地址和端口的映射转换过程

出站流量处理

1
2
3
4
5

内网发起请求时:

[内网IP:端口] NAT设备 [公网IP:端口] 外网服务器

入站流量处理

1
2
3
4
5

外网响应返回时:

外网服务器 [公网IP:端口] NAT设备 [内网IP:端口]

NAT转换表示例

1
2
3
4
5
6
7
8
9

转换前(内网) 转换后(公网)

192.168.1.100:3000 203.0.113.1:50000

192.168.1.101:8080 203.0.113.1:50001

192.168.1.102:443 203.0.113.1:50002

NAT的三种主要实现方式

1. 静态NAT(Static NAT)

特点:一对一固定映射关系

1
2
3
4
5
6
7

配置示例:

内网192.168.1.10 固定映射 公网203.0.113.10

内网192.168.1.11 固定映射 公网203.0.113.11

2. 动态NAT(Dynamic NAT)

特点:从公网IP地址池中动态分配

1
2
3
4
5
6
7
8
9
10
11

工作流程:

1. 内网主机发起连接请求

2. NAT从地址池中选择可用公网IP

3. 建立临时映射关系

4. 连接结束后释放公网IP回地址池

适用场景:拥有多个公网IP,需要为内网提供临时外网访问

3. PAT(端口地址转换)/NAPT

特点:单个公网IP + 不同端口号实现多用户共享

1
2
3
4
5
6
7
8
9

典型家庭/企业场景:

内网192.168.1.100:3000 公网IP:50000

内网192.168.1.101:8080 公网IP:50001

内网192.168.1.102:443 公网IP:50002


网络通信基础
http://gadoid.io/2025/08/11/网络通信基础/
作者
Codfish
发布于
2025年8月11日
许可协议