网络故障排查命令
ping命令
Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性
使用方法:ping [参数] 主机IP或域名
参数详解:
-q 不显示任何传送封包的信息,只显示最后的结果
-n 只输出数值
-R 记录路由过程
-c count 总次数
-i 时间间隔
-t 存活数值:设置存活数值TTL的大小
使用示例:
1 | wangjia3@CHJ-20190520VPS:~$ ping -c 3 192.168.1.1 |
traceroute命令
命令用于显示数据包到主机间的路径,traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置
使用方法:traceroute [参数] 主机IP或域名
参数详解:
-m <存活数值> 设置检测数据包的最大存活数值TTL的大小
-n 直接使用IP地址而非主机名称
-v 详细显示指令的执行过程
-w <超时秒数> 设置等待远端主机回报的时间
1 | traceroute to www.baidu.com (180.101.49.12), 30 hops max, 60 byte packets |
显示的访问此主机中间经过的路由,中间路由对应的IP地址及它的延时是多长时间等等,注意如果不支持traceroute方式追踪,会以 * * * 的方式展示出来
mtr命令
在Linux中有一个更好的网络连通性判断工具,它可以结合ping nslookup tracert 来判断网络的相关特性,这个命令就是mtr
此命令要比上述traceroute命令展示的信息更加详细,所以使用的更多
使用方法:mtr [参数] [主机IP或域名]
参数详解:
-r 已报告模式显示
使用示例:
1 | [root@iZm5ehzqow4ijp2ya2g2drZ ~]# mtr -r www.baidu.com |
注意此命令可以不带任何参数及IP单独使用,My traceroute
报告解释:
第一列:显示的是IP地址和本机域名,这点和tracert很像
第二列:snt:10 设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定
第三列:是显示的每个对应IP的丢包率
第四列:显示的最近一次的返回时延
第五列:是平均值 这个应该是发送ping包的平均时延
第六列:是最好或者说时延最短的
第七列:是最差或者说时延最常的
第八列:是标准偏差
nslookup命令
查看哪台DNS服务器进行的域名解析,并解析出域名对应的IP地址
使用方法:nslookup 域名
使用示例:
1 | wangjia3@CHJ-20190520VPS:~$ nslookup www.baidu.com |
以上查询第一行显示的是DNS服务器的地址,这里百度是有对应的别名的:www.baidu.com canonical name = www.a.shifen.com. 别名下有对应的两个地址
telnet命令
telnet命令通常用来远程登录,它为用户提供了在本地计算机上完成远程主机工作的 能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。
telnet命令还可做别的用途,比如确定远程服务的状态,比如确定远程服务器的某个端口是否能访问,这里我们说明的主要使用就是确认端口是否能够访问 畅通
使用方法:telnet [参数] 主机 端口
使用示例:
1 | # 端口可达 |
注意我们需要通过 CTRl + 右侧方括号 来退出此查看,然后使用 CTRL + C 或者 quit命令,退出 telnet
tcpdump命令
很多时候我们的系统部署在Linux系统上面,在一些情况下定位问题就需要查看各个系统之间发送数据报文是否正常,下面我就简单讲解一下如何使用tcpdump抓包。tcpdump是Linux下面的一个开源的抓包工具,和Windows下面的wireshark抓包工具一样, 支持抓取指定网口、指定目的地址、指定源地址、指定端口、指定协议的数据。
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支 持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
使用说明:
监视所有网卡接口的数据包:
tcpdump -i any
监视指定网络接口的数据包:
tcpdump -i eth1
如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口
捕获所有网卡发往80端口的数据包,并且如果包含域名,将域名解析成IP,主要使用 -n 参数
tcpdump -i any -n port 80
监视指定主机收到的和发出的所有的数据包:
tcpdump -i any -n host 210.27.48.1
监视指定主机和端口的数据包:
tcpdump -i any -n port 23 and host 210.27.48.1
netstat命令
Linux netstat命令用于显示网络状态,利用netstat指令可让你得知整个Linux系统的网络情况,查看服务的监听地址
使用方法:netstat [参数]
常用参数说明:
-n 直接使用IP地址,而不通过域名服务器
-t 显示TCP传输协议的连线状况
-u 显示UDP传输协议的连线状况
-p 显示正在使用Socket的程序识别码和程序名称
-l 显示监控中的服务器的Socket
-v 显示指令执行过程
使用示例:
1 | [root@iZm5ehzqow4ijp2ya2g2drZ ~]# netstat -ntpl |
ss命令
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢
ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效
使用方法:ss [参数]
常用参数说明:
-n 直接使用IP地址,而不通过域名服务器
-t 显示TCP传输协议的连线状况
-u 显示UDP传输协议的连线状况
-p 显示正在使用Socket的程序识别码和程序名称
-l 显示监控中的服务器的Socket
-m 显示套接字的内存使用信息
-p 显示使用套接字的进程
使用示例:
1 | [root@iZm5ehzqow4ijp2ya2g2drZ ~]# ss -ntpl |
最后更新: 2019年09月03日 19:45