在一般运维工作中,时常要检查服务器的网络配置,例如服务器有几个网卡,有没有做绑定,上联网络情况等。一般可以从以下几个方面判断:
- 查看布线表
- 查看CMDB搜索相关信息
- 通过上行交换机接口mac地址以及接口描述确认
- 拔网线查看交换机接口up/down
但是如果布线表不准确,或者cmdb信息录入错误,交换机接口描述错误,查错交换机,轻则影响运维工作,重则会导致生产事故,拔网线一般都是最后的无奈之举。
在这种情况下我们可以在服务器上通过tcpdump抓包程序,抓取lldp报文来判断。
TOR交换机
现在的数据中心服务器基本上是通过TOR方式连入网络。所谓TOR就是接入交换机的布线方式(Top of Rack),既每个机柜或者每组机柜上放置一个或者多个交换机,这个交换机就叫做TOR交换机,服务器连接TOR交换机,TOR交换机连接上一级交换机。
TOR交换机作为接入层网络设备,采用万兆电口或者电口连接服务器网卡,配置链路聚合对应服务器的网卡绑定,或者是使用单接口连接服务器单网卡。一般TOR交换机都会配置lldp协议,广播报文抑制,VLAN等基础配置。
LLDP协议
LLDP的协议号 :0x88cc
LLDP(Link Layer Discovery Protocol)是IEEE 802.1ab中定义的链路层发现协议。LLDP是一种标准的二层发现方式,可以将本端设备的管理地址、设备标识、接口标识等信息组织起来,并发布给自己的邻居设备,邻居设备收到这些信息后将其以标准的管理信息库MIB(Management Information Base)的形式保存起来,以供网络管理系统查询及判断链路的通信状况。
LLDP提供了一种标准的链路层发现方式。通过LLDP获取的设备二层信息能够快速获取相连设备的拓扑状态;显示出客户端、交换机、路由器、应用服务器以及网络服务器之间的路径;检测设备间的配置冲突、查询网络失败的原因。企业网用户可以通过使用网管系统,对支持运行LLDP协议的设备进行链路状态监控,在网络发生故障的时候快速进行故障定位。
LLDP报文
- DA(Destination MAC Address):目的MAC地址,为固定的组播MAC地址0x0180-C200-000E。
- SA(Source MAC Address):源MAC地址,为发送端的MAC地址。
- Type:报文类型,LLDP报文中该字段的值为0x88CC。
- LLDPDU:LLDP数据单元,LLDP信息交换的主体。
- FCS:帧检验序列。
TLV
TLV(Type/Length/Value),包含了链路状态的一些基础信息。
基本TLV字段描述如下
CDP
在思科或者锐捷网络设备中,使用的是CDP协议,协议号是0x2000
CDP是Cisco Discovery Protocol的缩写,它是由思科公司推出的一种私有的二层网络协议,它能够运行在大部分的思科设备上面。通过运行CDP 协议,思科设备能够在与它们直连的设备之间分享有关操作系统软件版本,以及IP地址,硬件平台等相关信息。
使用场景根LLDP类似。
tcpdump
tcpdump是一个可以根据需求来抓取网络上传输的数据包的工具
常用的命令选项有:
-c:设定抓取的数量
-i:指定监听的网口
-w:将抓取的数据包保存到文件
-s:截取报文的内容,默认截取96字节,-s0表示截取全部
-r:读取数据包内容
-C 10:每10M保存一个包
-G 600:每10分钟保存一个包
使用举例
1、抓取所有的经过eth0网卡的网络包,并存到 result.cap 文件中。
tcpdump -i eth0 -w result.cap
2、抓取源地址是192.168.22.16的包,并将结果保存到 result.cap 文件中。
tcpdump src host 192.168.22.16 -w result.cap
3、抓取地址包含是192.168.22.16的包,并将结果保存到 result.cap 文件中。
tcpdump host 192.168.22.16 -w result.cap
4、抓取目的地址包含是192.168.22.16的包,并将结果保存到 result.cap 文件中。
tcpdump dest host 192.168.22.16 -w result.cap
5、抓取主机地址为 192.168.22.16 的数据包
tcpdump -i eth0 -vnn host 192.168.22.16
6、抓取包含192.168.1.0/24网段的数据包
tcpdump -i eth0 -vnn net 192.168.1.0/24
7、抓取网卡eth0上所有包含端口22的数据包
tcpdump -i eth0 -vnn port 22
8、抓取指定协议格式的数据包,协议格式可以是「udp,icmp,arp,ip」中的任何一种,例如以下命令:
tcpdump udp -i eth0 -vnn
9、抓取经过 eth0 网卡的源 ip 是 192.168.22.16 数据包,src参数表示源。
tcpdump -i eth0 -vnn src host 192.168.22.16
10、抓取经过 eth0 网卡目的 ip 是 192.168.22.16 数据包,dst参数表示目的。
tcpdump -i eth0 -vnn dst host 192.168.22.16
11、抓取源端口是22的数据包
tcpdump -i eth0 -vnn src port 22
12、抓取源ip是 192.168.22.16 且目的ip端口是22的数据包
tcpdump -i eth0 -vnn src host 192.168.22.16 and dst port 22
13、抓取源ip是192.168.22.16或者包含端口是22的数据包
tcpdump -i eth0 -vnn src host 192.168.22.16 or port 22
14、抓取源ip是192.168.22.16且端口不是22的数据包
tcpdump -i eth0 -vnn src host 192.168.22.16 and not port 22
15、抓取源ip是192.168.22.16且目的端口是22,或源ip是192.168.1.102且目的端口是80的数据包。
tcpdump -i eth0 -vnn ( src host 192.168.22.16 and dst port 22 ) or ( src host 192.168.1.102 and dst port 80 )
16、把抓取的数据包记录存到/tmp/result文件中,当抓取100个数据包后就退出程序。
tcpdump –i eth0 -vnn -w /tmp/result -c 100
17、从/tmp/result记录中读取tcp协议的数据包
tcpdump -i eth0 tcp -vnn -r /tmp/result
18、想要截获所有192.168.22.16 的主机收到的和发出的所有的数据包:
tcpdump host 192.168.22.16
19、如果想要获取主机192.168.22.16除了和主机192.168.1.101之外所有主机通信的ip包,使用命令:
tcpdump ip host 192.168.22.16 and ! 192.168.1.101
20、如果想要获取主机 192.168.22.16 接收或发出的 telnet 包,使用如下命令:
tcpdump tcp port 23 host192.168.22.16
服务器上抓取报文
tcpdump -i eth0 -nve ether proto 0x88cc -A -s0 -t -c 1 #lldp协议
tcpdump -i eth0 -nve ether proto 0x2000 -A -s0 -t -c 1 #cdp协议
抓取结果如下:
通过system name和port description就能判断出上联交换机名称和接口