3. 设备发现与识别:LLDP/CDP协议、MAC地址表学习、设备类型探测

设备接上网线、通了电,接下来干什么?

说白了,网络设备得先「认出」彼此。就像两个人第一次见面,总得先打个招呼、交换个名片。在网络世界里,这个打招呼的过程就叫设备发现与识别。

我刚开始干这行的时候,觉得这步很简单——不就是插上线就能通吗?后来在数据中心排障,一台新交换机死活学不到对端信息,折腾了两小时才发现是 LLDP 没开。嗯,从那以后我再也不敢小看这个环节了。

3.1 链路层发现协议:LLDP 与 CDP

设备之间互相「递名片」,靠的就是链路层发现协议。思科有自家的 CDP,IEEE 标准是 LLDP。现在绝大多数场景都用 LLDP,因为它是开放的,不同厂商的设备都能互通。

核心区别速览:

特性 CDP LLDP
标准 思科私有 IEEE 802.1AB
兼容性 仅思科设备 多厂商互通
默认状态 思科设备默认开启 多数设备默认关闭
报文封装 SNAP Ethernet II / SNAP
TLV 扩展 支持私有 TLV 支持标准 + 私有 TLV

LLDP 的工作机制其实很简单:设备周期性地发送 LLDPU(LLDP Data Unit),里面塞满了自己的信息——设备名、端口号、系统描述、管理地址等等。对端收到后,把这些信息存到本地的 LLDP MIB 里。

我个人习惯,新设备上架后第一件事就是检查 LLDP 邻居。命令很简单:

# 查看 LLDP 全局状态
show lldp

# 查看所有 LLDP 邻居
show lldp neighbors

# 查看某个端口的详细信息
show lldp neighbors detail gigabitethernet 0/1

输出里你会看到类似这样的信息:

Local Intf: Gi0/1
  Chassis ID: 001a.2b3c.4d5e
  Port ID: Gi0/2
  System Name: Core-SW-01
  System Description: Cisco IOS Software, C9300 Software
  Management Address: 192.168.10.1
  Time To Live: 120 seconds

你看,一条命令下去,对端是什么设备、哪个端口、IP 地址多少,全出来了。这在做网络拓扑发现的时候特别有用。

小技巧: 如果你在排查链路问题,记得先看 LLDP 邻居是否正常。我曾经遇到过一次光纤收发器故障,LLDP 邻居时有时无,顺着这个线索才找到物理层的问题。

3.2 MAC 地址表学习过程

设备互相认出了对方,接下来交换机要干一件更重要的事——学习 MAC 地址。

你想想看,交换机怎么知道哪个设备在哪个端口?它又不是路由器,没有路由表。它的核心武器就是 MAC 地址表,也叫 CAM 表。

学习过程其实就三步:

  1. 接收帧:交换机从某个端口收到一个数据帧。
  2. 提取源 MAC:查看帧头部的源 MAC 地址。
  3. 记录映射:把源 MAC 和接收端口对应起来,写入 MAC 地址表。

举个例子:

# 查看 MAC 地址表
show mac address-table

# 输出示例
VLAN    MAC Address       Type        Ports
----    -----------       --------    -----
10      0050.7966.6800    DYNAMIC     Gi0/1
10      0050.7966.6801    DYNAMIC     Gi0/2
20      001a.2b3c.4d5e    STATIC      Gi0/24

这里要注意几个点:

  • 动态学习:大部分 MAC 是动态学到的,老化时间默认 300 秒(思科设备)。
  • 静态配置:有些关键设备(比如服务器、防火墙)我会手动配静态 MAC,防止被伪造。
  • 安全风险:MAC 泛洪攻击就是利用 MAC 地址表容量有限这个弱点。攻击者发送大量不同源 MAC 的帧,把表填满,交换机就退化成 HUB 了——所有帧都广播。

避坑指南: 我曾经在数据中心遇到过一个问题:新接入的服务器总是丢包。查了半天,发现是 MAC 地址表震荡——服务器做了网卡绑定,两个端口在不同交换机之间来回切换,导致 MAC 地址表不停地更新。解决办法是配置端口安全或使用 VPC/MLAG 技术。

3.3 设备类型探测

知道了对端是谁、MAC 地址在哪,还不够。我们还得知道对端到底是什么类型的设备——是交换机、路由器、防火墙,还是服务器、摄像头?

设备类型探测,说白了就是通过协议特征来「猜」对端是什么。常用的方法有:

探测方法 原理 适用场景
LLDP/CDP 系统描述 解析设备发送的描述字符串 支持 LLDP/CDP 的网络设备
MAC OUI 查询 根据 MAC 地址前 24 位判断厂商 所有设备
DHCP Option 分析 DHCP 请求中的 Option 60/61 终端设备
SNMP 系统 OID 查询设备的 sysDescr / sysObjectID 支持 SNMP 的设备
主动扫描(Nmap) 发送探测报文,分析响应特征 临时排查

我个人最常用的是 LLDP 系统描述。你看上面那个例子:

System Description: Cisco IOS Software, C9300 Software

一眼就知道对端是思科 Catalyst 9300 系列交换机。如果是 Linux 服务器,系统描述里通常会写 "Linux x86_64" 之类的信息。

但有些设备不支持 LLDP,比如老旧的打印机、IP 电话。这时候我会看 MAC 地址的前 24 位——也就是 OUI。比如 00:50:79 开头的是 Dell,00:1A:2B 开头的是思科。网上有 OUI 查询数据库,很方便。

经验之谈: 有一次客户说网络里有个未知设备,查不到任何信息。我抓包一看,DHCP 请求里的 Option 60 写着 "android-dhcp-9.0"。嗯,原来是有人偷偷接了个安卓手机到办公网。设备类型探测,有时候还能帮你发现「非法接入」。

3.4 知识体系总览

下面这张图把设备发现与识别的核心逻辑串起来了。你可以把它当作本章的「地图」:

设备发现与识别核心流程 设备接入网络 LLDP / CDP 协议 MAC 地址表学习 设备类型探测 LLDP 报文交换 系统名称 / 端口 ID / 管理地址 TLV 结构 / 周期发送 MAC 地址表构建 源 MAC 学习 / 端口映射 动态老化 / 静态配置 多维度探测 系统描述 / MAC OUI / DHCP SNMP / 主动扫描 生成网络拓扑与设备清单 三种机制协同工作:LLDP 提供身份信息,MAC 表提供位置信息,类型探测提供设备角色信息 三者结合,才能完整回答「谁在哪儿、是什么」

你看,整个流程其实不复杂。设备接入后,LLDP/CDP 负责「自我介绍」,MAC 地址表负责「记住位置」,设备类型探测负责「判断身份」。三者配合,网络拓扑就清晰了。

最后说一句:这些技术看起来基础,但真正用好的人不多。我见过不少工程师,设备出了问题只会 ping 和 tracert,从来不看 LLDP 邻居和 MAC 表。其实很多时候,问题就藏在这些基础信息里。