网络诊断的第一步,是了解自己的设备,比如有哪些接口,IP 地址都是什么。
ifconfig
显示网络接口(interface)信息。如接口名称,接口类型,接口的 IP 地址,硬件的 MAC 地
址等。
2 ARP
ARP 协议用在局域网(LAN)内部。借用 ARP 协议,设备可以知道同一局域网内的 IP-MAC 对应
关系。当我们访问一个本地 IP 地址时,设备根据该对应关系,与对应的 MAC 地址通信。通过
ARP 工具,我们可以知道局域网内的通信是否正常。
arp-a
显示本地存储的 IP-MAC 对应关系
sudoarping-Ieth0192.168.1.1
经 eth0 接口,发送 ARP 请求,查询 IP 为 192.168.1.1 设备的 MAC 地址
sudoarp-scan-l
查询整个局域网内的所有 IP 地址的对应 MAC 地址
sudotcpdump-ien0arp
监听 en0 接口的 arp 协议通信
3 网络层
网络层是一个广域的互联网,互联网上的设备用 IP 地址识别。ping 是向某个 IP 地址发送
ICMP 协议的 ECHO_REQUEST 请求。收到该请求的设备,将返回 ICMP 回复。如果 ping 到某
个 IP 地址,那么说明该 IP 地址的设备可以经网络层顺利到达。
ping192.168.1.1
向 IP 地址 192.168.1.255 发送 ICMP 请求。如果该地址的 ICMP 没有被禁用,那么在该网
上的设备将回复。
ping192.168.1.255
向广播(broadcast)地址 192.168.1.255 发送 ICMP 请求。如果 ICMP 没有被禁用,那么
在该网上的设备将回复。
需要注意的是,许多设备会禁用 ICMP。如果 ping 不到一个设备,并不一定是网络层故障。
如果两个设备有相同的 IP 地址,将导致 IP 冲突。许多网络中是由 DHCP 协议自动分配 IP 地
址的,这样可以极大的减少 IP 冲突的可能性。DHCP 服务器与设备达成协议,设备将在一定时
间内占据某个 IP 地址,而 DHCP 服务器不再把该 IP 地址分配给别人。
sudoipconfigseten0DHCP
更新 DHCP 租约。设备将释放 IP 地址,再从 DHCP 服务器重新获得 IP 地址。
sudoipconfigseten0INFORM192.168.0.120
将接口 en0 设定为静态 IP 地址。
4 路由
局域网通过路由器,接入广域的互联网。互联网上的通信往往要经过多个路由器接力。途中路
由器的故障,可能导致互联网访问异常。
netstat-nr
显示路由表。从路由表中,可以找到网关(Gateway)。网关是通向更加广域网络的出口。
traceroute74.125.128.99
追踪到达 IP 目的地的全程路由。
traceroute-I74.125.128.99
通过 ICMP 协议,追踪路由。ICMP 协议经常会被禁用,所以会返回"*"的字符串。
sudotraceroute-T-p8074.125.128.99
通过 TCP 协议,经 80 端口,追踪路由。TCP 协议的默认端口 80 很少会被禁用。
5 网络监听
tcpdump 是一款网络抓包工具。它可以监听网络接口不同层的通信,并过滤出特定的内容,比
如特定协议、特定端口等等。我们上面已经使用 tcpdump 监听了 ARP 协议通信。这里我们来
看更多的监听方式。
sudotcpdump-ien0
监听 en0 接口的所有通信
sudotcpdump-A-ien0
用 ASCII 显示 en0 接口的通信内容
sudotcpdump-ien0'port8080'
显示 en0 接口的 8080 端口的通信
sudotcpdump-ieth1src192.168.1.200
显示 eth1 接口,来自 192.168.1.200 的通信
sudotcpdump-ieth1dst192.168.1.101andport80
显示 eth1 接口 80 端口,目的地为 192.168.1.101 的通信
sudotcpdump-wrecord.pcap-ilo0
将 lo0 接口的通信存入文件 record.pcap
6 域名解析
DNS 是在域名和 IP 之间进行翻译。DNS 故障会导致我们无法通过域名访问某个网址。
hostwww.sina.com.cn
DNS 域名解析。返回域名对应的 IP 地址