常见网络故障
首先讲一讲常见的网络故障,粗略分为两种:骨干网络故障和内部网络故障。骨干网络故障表示连接多个区域(地区)的高速网络故障(通常是运营商网络),常见的原因有光缆被挖断、网络设备故障等。
对于网络故障的诊断,我要给你重点讲解的是 traceroute 和 MTR 命令的使用场景。通常我们在进行网络故障分析时,最常用到就是 ping 命令了。比如我们想要去判断网络对目的端是否可达,就可以通过 ping 命令去发 ICMP 的包,但是这里存在一个问题,如果我们需要去 ping 多台主机或是一个主机段的主机,在操作时,可能就需要有一个命令能够帮批量的 ping 指定的主机段内的主机,这时仅通过 ping 命令是不可行的,这里建议你使用 fping 命令。
另外一种情况是, ping 命令发送的是 ICMP 的协议,而服务端通常有可能因为安全的考虑关闭了 ICMP 协议的请求导致 ping 命令无法得到结果,如果想通过网络数据诊断,我们就可以换成别的协议去进行 ping 检测,这里推荐你使用 TCP 的包去做检测,因为一般服务端都会开放一些 TCP 的公共服务端口,我们可以基于 TCP 的协议去 ping 服务端,而这个时候推荐你使用 tcpping 命令工具来作分析。
traceroute和MTR命令
- traceroute默认以UDP的方式发送,那么有可能在目的地址,防火墙做了安全限制,这样就会造成客户端向服务端不断地发送UDP数据包,但是服务端始终无法返回ICMP不可达的错误响应,这样就会造成不一致的循环
- 客户端改为使用ICMP协议去给服务端发送数据包,而不是基FUDP的方式,这样到了目标地址的服务端后,由于发送的是ICMP协议,ICMP协议回复会改为"ICMPechoreplay"的数据包给到客户端,这个场景中我们可以通过traceroute-I的选项
(使用发送ICMP的协议数据包来避免这样的问题)traceroute命令使用方法
为什么需要使用mtr工具?
MTR工具集成了ping和traceroute两种工具的优点
可以通过MTR工具来得出每一条路由器的地址
然后通过ping命令去循环得出每一跳的延时和丢包率
所以它(MTR)结合了两个命令的优势
建议:需要做双向的traceroute 和 MTR
- 比如说A到B不通,那么我需要从A上面执行traceroute和MTR,同时也需要从B上面再执行一次traceroute给到A,这样两份结果才更加全面
服务端端口检测
端口检测客户端工具是telnet命令
通过netstat-auntp或者ss-s去检测服务端的端口监听情况NetCat
- -v显示指令执行过程
- -w(超时秒数)表示设置等待连线的时间
- -u表示使用UDP协议发送数据包
- -z是一个0传输输入模式,只在扫描服务端口时使用
检查UDP协议
UDP协议和TCP协议的区别是
UDP不保证可靠性,是一个单向性的传输
所以我们可以在服务端也安装上nc命令
就是NetCat这个工具
客户端也安装一个NC工具
在服务端执行nc-ul1080(1080是它的端口号)
通过NC模拟一个服务端1080的UDP接收端口
然后通过客户端向服务端1080端口发送数据包抓包工具
-i 表示监听抓服务器上哪个网卡tcpdump tcp -i eth0 -t -s 0 -c 100 dst port 6060 and src net 192.168.1.0/24 -w test.cap
-t 表示不显示时间戳
-S 可以抓到完整的数据包
-c 表示一共抓取多少次数据包
dst port 6060 表示抓取目标端口是6060的数据包
src net + 网段 表示数据包的来源网络地址为192.168.1.104