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 表。
学习过程其实就三步:
- 接收帧:交换机从某个端口收到一个数据帧。
- 提取源 MAC:查看帧头部的源 MAC 地址。
- 记录映射:把源 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 地址表负责「记住位置」,设备类型探测负责「判断身份」。三者配合,网络拓扑就清晰了。
最后说一句:这些技术看起来基础,但真正用好的人不多。我见过不少工程师,设备出了问题只会 ping 和 tracert,从来不看 LLDP 邻居和 MAC 表。其实很多时候,问题就藏在这些基础信息里。