设备 A 想把数据发给设备 B,先判断 B 是不是"本地人"。如果是同一个子网,就直接找 B;如果不是,就把数据交给网关,让网关继续转发。
IP 用来标识最终要找谁。
MAC 用来标识下一跳发给谁。
子网掩码用来判断目标是不是本地人。子网掩码用来判断两个 IP 是不是在同一个局域网里。
网关用来访问外部网络。
路由表用来决定下一跳是谁。
"主机"就是网络里的具体设备,比如电脑、手机、服务器、摄像头、PLC、每台主机一般至少有:
IP 地址
子网掩码
默认网关
DNS
MAC 地址
例如设备 A:
IP:192.168.1.10
子网掩码:255.255.255.0
网关:192.168.1.1
MAC:AA-AA-AA-AA-AA-AA工控机等。
每台主机一般至少有:
IP 地址
子网掩码
默认网关
DNS
MAC 地址
例如设备 A:
IP:192.168.1.10
子网掩码:255.255.255.0
网关:192.168.1.1
MAC:AA-AA-AA-AA-AA-AA
"网络"就是一组能互相通信的设备。
比如:
192.168.1.0/24
表示一个局域网,里面通常有这些主机:
192.168.1.1
192.168.1.2
192.168.1.3
...
192.168.1.254
这个网络的地址范围是:
192.168.1.0 - 192.168.1.255
其中:
192.168.1.0 网络地址
192.168.1.255 广播地址
192.168.1.1-254 可用主机地址
网关
网关就是"离开当前网络的门"。
比如 A 的配置:
IP:192.168.1.10
掩码:255.255.255.0
网关:192.168.1.1
如果 A 要访问:192.168.1.20
A 发现对方和自己同网段,直接发给 B。
如果 A 要访问:
192.168.2.20
8.8.8.8
www.baidu.com
A 发现对方不在本地网段,就把数据发给:192.168.1.1
这个 192.168.1.1 通常是路由器、三层交换机、防火墙或者网关设备。
网关现实中指的是
通常说的"默认网关",一般是主机以外的三层设备,比如:
路由器
三层交换机
防火墙
工控网关
Linux 网关服务器
例如:
A:192.168.20.100/24
网关:192.168.20.1
这里 192.168.20.1 通常是另一台设备的 IP。
但也有特殊情况:本机也可以充当网关。比如一台 Linux 主机有两张网卡:
eth0:192.168.20.100/24
eth1:10.10.10.1/24
如果它开启了 IP 转发,它就可以帮别的设备转发数据,此时它对别的设备来说就是网关。
但对"本机自己访问外网"来说,默认网关一般不会配置成自己,而是配置成能帮它继续转发的下一跳设备。
一句话:
网关不是一个固定硬件名,而是"下一跳路由设备"的角色。
ARP 全称是 Address Resolution Protocol,地址解析协议。
它解决的问题是:
我知道对方 IP,但我不知道对方 MAC,怎么办?
在以太网里,真正发出去的数据帧需要目标 MAC 地址。
所以当 A 想发给同网段的 B:
A:192.168.20.100
B:192.168.20.158
A 会广播一句:
谁是 192.168.20.158?请告诉 192.168.20.100
B 收到后回答:
我是 192.168.20.158,我的 MAC 是 xx:xx:xx:xx:xx:xx
然后 A 把这个对应关系缓存起来:
192.168.20.158 -> B 的 MAC
这个缓存叫 ARP 表。
可以理解为:
IP 地址:你家地址
MAC 地址:你本人身份证/门牌的底层标识
ARP:在本地小区里喊一声,问这个 IP 是谁
注意:ARP 只在同一个二层广播域里工作。跨网段时,A 不会 ARP 远端 B,而是 ARP 网关。
真实的网络交互
情况一:A 和 B 在同一个子网
A:192.168.1.10/24
B:192.168.1.20/24
网关:192.168.1.1
A 要访问 B。
第一步,A 判断 B 是否和自己同网段:
A 网络:192.168.1.0/24
B 网络:192.168.1.0/24
发现是同一个网络。
第二步,A 需要知道 B 的 MAC 地址。
因为在局域网里,真正发送数据靠的是 MAC 地址,不是只靠 IP。
于是 A 发 ARP 广播:
谁是 192.168.1.20?请告诉 192.168.1.10
交换机会把这个广播发给同一局域网里的设备。
B 收到后回复:
我是 192.168.1.20,我的 MAC 是 BB-BB-BB-BB-BB-BB
第三步,A 发送数据:
源 IP:192.168.1.10
目标 IP:192.168.1.20
源 MAC:A 的 MAC
目标 MAC:B 的 MAC
交换机根据目标 MAC,把帧转发给 B。
注意:这个过程中 网关不参与。
情况二:A 和 B 不在同一个子网
A:192.168.1.10/24
网关:192.168.1.1
B:192.168.2.20/24
A 要访问 B。
第一步,A 判断 B 是否和自己同网段:
A 网络:192.168.1.0/24
B 网络:192.168.2.0/24
发现不是同一个网络。
第二步,A 决定把数据交给网关:
192.168.1.1
但 A 还是要先知道网关的 MAC 地址。
于是 A 发 ARP:
谁是 192.168.1.1?请告诉 192.168.1.10
网关回复:
我是 192.168.1.1,我的 MAC 是 GG-GG-GG-GG-GG-GG
第三步,A 把数据发给网关。
这里很关键:
源 IP:192.168.1.10
目标 IP:192.168.2.20
源 MAC:A 的 MAC
目标 MAC:网关的 MAC
也就是说:
IP 目标还是 B,但 MAC 目标是网关。
第四步,网关收到后,查看自己的路由表,发现 192.168.2.0/24 怎么走,然后转发出去。
如果 B 就在网关的另一个接口下,网关会再 ARP 找 B 的 MAC,然后发给 B。
发送到 B 时变成:
源 IP:192.168.1.10
目标 IP:192.168.2.20
源 MAC:网关另一个接口的 MAC
目标 MAC:B 的 MAC
所以跨网段通信时:
IP 地址通常端到端不变
MAC 地址每经过一跳都会变
这是理解网络交互的核心。