Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局

发布时间:2026/11/4 7:08:00
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局

📌 核心结论(TL;DR):

  1. IP 与 MAC:IP 是跨网段的终极目标(一般不变),MAC 是局域网内“下一跳”的目标(一直变化)。

  2. MTU:以太网一帧最大 1500 字节,超过会触发 IP 分片,严重损耗性能。

  3. ARP 协议:已知 IP 求 MAC。通过局域网广播请求,单播回应,并缓存在本地。

  4. ARP 欺骗:因为 ARP 协议无验证机制,黑客可伪造网关 MAC,充当中间人截获所有数据。

一、 数据链路层的定位

数据链路层负责在同一个局域网(或同一条链路)内的相邻节点之间传输数据。它就像一个快递员,只负责自己辖区的配送。

二、 核心概念:MAC 地址与 IP 地址

  • IP 地址:网络层地址。描述的是旅途的“起点和终点”。

  • MAC 地址:链路层地址。长度为 48 位,烧录在网卡上。描述的是旅途中“每一小段的起点和终点”。
    结论:在数据包跨网段传输时,IP 地址不变,但每经过一个路由器,目标 MAC 地址就会改变。

三、 ARP 协议:已知 IP,求 MAC

  1. 主机 A 想和主机 B(同网段)通信,但在以太网帧中必须填目标 MAC。

  2. A 发起ARP 广播:“谁是192.168.1.2”

  3. B 收到广播后,回一个ARP 单播:“我是,我的 MAC 是xx:xx:xx:xx:xx:xx。”

  4. A 将映射关系存入本机的ARP 缓存表(可通过arp -a查看)。

四、 致命漏洞:ARP 欺骗与中间人攻击


由于 ARP 协议没有任何认证机制,如果有人伪造 ARP 应答,接收方也会当真。

  • 攻击过程:黑客伪造网关的 ARP 包,广播给局域网内所有用户:“我是网关,我的 MAC 是黑客的 MAC。”

  • 后果:用户的流量全部流向黑客(黑客成为“中间人”),黑客可以窃取密码(甚至篡改数据),再转发给真网关。

  • 防范:在企业网络中,通常使用静态 ARP 绑定,或者部署 DAI(动态 ARP 检测)技术来防御。

五、 实战命令

ip link show # 查看本机 MAC 地址 arp -a # 查看 ARP 缓存表 (IP 与 MAC 的映射关系)

自我实战操作

咱们不搞复杂的黑客工具,直接通过 Linux 命令看看你本机的 MAC 和 ARP 缓存。

cd ~/linux_study/network_test
实战 1:查看你的 MAC 地址
# 查看网卡信息 (找 link/ether 后面的就是 MAC 地址) ip link show # 或者 ifconfig

👉现象:你会看到一串类似00:16:3e:xx:xx:xx的字符,这就是你的 MAC。

实战 2:查看你的 ARP 缓存表

很多新手看到密密麻麻的路由表就头晕,其实只需要盯住第一行:
default via 10.0.0.1 dev eth0。

  1. default表示这是默认路由。

  2. via后面的 IP 就是你的网关(如10.0.0.1)。

  3. dev后面跟的是网卡名称(如eth0)。

  4. src后面是你当前网卡的内网 IP。

在云服务器环境中,你还会看到云厂商在底层植入的特定路由(如183.60.x.x)。这验证了 IP 协议“一跳一跳”找路的过程:目的 IP 如果不在本地局域网,就统统交给网关去处理。

# 先 ping 一下网关,强制触发一次 ARP 解析 ping -c 1 你的网关IP(用 ip route 看 default via 后面的 IP) # 查看 ARP 缓存 arp -a # 或者用较新的命令 ip neigh

现象:在云服务器上执行ping 10.0.0.1(网关)显示100% packet loss。但执行arp -a和ip neigh时,网关的状态却是REACHABLE(可达),且能正确解析出 MAC 地址。

原因分析:

  1. ICMP 被拦截:云厂商为了保证底层网络设备的安全,通常在网关上屏蔽了 ICMP 协议(即禁 ping)。所以网关不会回应你的ping请求。

  2. ARP 层连通:ip neigh获取的是二层的 MAC 地址。只要你能解析到网关的 MAC 地址并显示REACHABLE,就证明你的网卡和网关物理链路是通的。

验证方法:要测试外网是否通畅,直接ping www.baidu.com或curl -I http://www.baidu.com。只要能访问公网,就说明网关转发完全正常。

总结:网络排错要分层看。二层通(ARP),不代表三层(IP/Ping)一定会回应,云环境下的“禁 ping”是常态。

实战 3:ARP 缓存更新测试
  1. 删掉刚才的 ARP 缓存(需要 root 权限):sudo arp -d 192.168.1.1

  2. 再次执行ip neigh,你会发现那个 IP 对应的 MAC 变成了FAILED或者消失了。

  3. 再次 ping 网关,ARP 缓存就会重新建立(重新广播了一次)。