快捷搜索:   服务器  PHP  安全  IIS  linux 安全

Linux下网络故障排查工具之ping|traceroute和tcptraceroute|mtr工具

服务器运维人员在日常运维服务器的过程中经常会遇到服务器网络故障,有服务器硬件造成的,也有服务商网络问题造成的,也有区域网络问题造成的,这个时候就需要用到ping,traceroute,mtr这三个命令

1、ping 最简单的网络请求反馈命令

ping使用了ICMP回送请求和回送应答报文。ping工具发出去的数据包没有通过tcp/udp协议,但是要经过ip协议。ping命令计算的时间是数据包的往返总时间。

ping命令常用的选项如下:

-c num  表示使用ping发出去num个数据包 
-d 使用Socket的SO_DEBUG功能。

-f  极限检测。大量且快速地送网络封包给一台机器,看它的回应。快速ping,Flood ping,发送接收ICMP Echo报文的频率快了非常多

-n 只输出IP,表示ping的输出中包含主机信息的都用ip表示,不在进行ip和主机名之间的映射,那样ping的响应速度会更快。

-q 不显示任何传送封包的信息,只显示最后的结果。

-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。

-R 记录路由过程。

-v 详细显示指令的执行过程。

-c 数目:在发送指定数目的包后停止。LINUX的ping不会自动终止如果不指定这个参数就需要手动按ctrl+c终止

-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。

-I 网络界面:使用指定的网络界面送出数据包。

-l 前置载入:设置在送出要求信息之前,先行发出的数据包。

-p 范本样式:设置填满数据包的范本样式。

-s packetsize 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。

-t 存活数值:设置存活数值TTL的大小。设定数据包在网络上传输的Time To Live(TTL)生命周期

举例:

ping -c 3 -s 512 www.bnxb.com     #表示向www.bnxb.com发送3个512B大小的数据包,来进行网络探测  
ping -f www.bnxb.com    #快速ping


2.traceroute和tcptraceroute 路由追踪命令

traceroute也是使用ICMP协议,使用了ICMP的时间超过差错差错报告报文以及ICMP终点不可达报文。

tcptraceroute则是使用tcp协议,现代网络广泛使用防火墙,导致传统路由跟踪工具发出的(ICMP应答(ICMP echo)或UDP)数据包都被过滤掉了,所以无法进行完整的路由跟踪。尽管如此,许多情况下,防火墙会准许反向(inbound)TCP数据包通过防火墙到达指定端口,这些端口是主机内防火墙背后的一些程序和外界连接用的。通过发送TCP SYN数据包来代替UDP或者ICMP应答数据包,tcptraceroute可以穿透大多数防火墙。


traceroute和tcptraceroute原理为

常规的traceroute和tcptraceroute具有相同的工作原理:  

 发送一个TTL(Time-To-Live)相当小的包,TTL经过每一跳时会递减。当它减为0时,数据包就被丢弃。   

当TTL失效后,看哪个路由器返回一个带有表明的ICMP “time exceeded”   

如果返回的路由器就是最终的目的地,停止trace    否则,TTL加1并返回到步骤1

两者的不同点:    常规的traceroute使用UDP包或ICMP “Echo”包,这两种包都可能会被防火墙拦截。    tcptraceroute使用TCP “SYN”包。发送带SYN标志位的数据段是TCP建立连接时进行“三次握手”的第一次握手,只要目标地址是被允许访问的,通常这种包不会被防火墙拦截。但是防火墙会拦截其他的不是用于建立连接的TCP包。  

 基于TCP的traceroute拥有更高的访问权限。以amazon.com为例。基于UDP的traceroute停在205.251.248.5,这个地址很可能是某种防火墙。基于TCP的traceroute访问80端口,这是amazon.com的默认端口,然后进入下一步,最终停在72.21.194.212


traceroute的重要选项有:

-d 使用Socket层级的排错功能。
-f 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g 设置来源路由网关,最多可设置8个。
-i 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP,与-U\-T是互斥关系。
-m 设置检测数据包的最大存活数值TTL的大小,也就是改变跳数,默认只检测30跳。
-n 直接使用IP地址而非主机名称。
-p 设置UDP传输协议的通信端口。
-q 改变每一次主机之间路由传送包的次数,最大为10
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-s 设置本地主机送出数据包的IP地址。
-t 设置检测数据包的TOS数值。
-T  使用TCP协议来探测,与-U\-I是互斥关系,另外TCP协议默认是80端口,而LINUX下1024以下端口需要管理员ROOT权限才能执行,因此需注意权限。
-U 使用UDP协议来探测,这是默认的检测协议
-v 详细显示指令的执行过程。
-w 设置等待远端主机回报的时间。
-x 开启或关闭数据包的正确性检验。

使用举例如下:

traceroute www.bnxb.com

备注,使用traceroute返回的每行信息中有三个时间值,那是因为对于每个节点或者路由器,源端发了三次探测请求。

部分以mini方式安装的CENTOS会没集成traceroute可以自行安装

安装命令

yum -install traceroute


tcptraceroute是第三方工具,需要下载后上传服务器安装

首先需要安装依赖包libpcap

[root@localhost ~]# yum install -y libpcap

下载和上传tcptraceroute 的rpm包  开源代码:https://sourceforge.net/projects/traceroute/

RPM包下载:http://rpmfind.net/linux/mageia/distrib/6/armv5tl/media/core/release/tcptraceroute-1.5-1.beta7.9.mga6.armv5tl.rpm

tcptraceroute-1.5-1.beta7.9.mga6.armv5tl.zip笨牛网下载

[root@localhost ~]# rpm -ivh tcptraceroute-1.5-1.beta7.9.mga6.armv5tl.rpm

下面来说说 该命令的用法

-i  指定接口

-f  设置开始TTL值(第一条显示的路径)

-l  包长度

-q  每一跳延时查询的次数(default 3)

-t  设置TOS(服务类型)可用于传出数据包。默认 未设置

-m  设置最大TTL值

-p  指定使用本机的特定端口作为源端口(默认随机)

-s  如果本机有多个IP,可指定使用一个IP进行追踪

-w  等待超时时间

host  必跟参数,可以使用主机名或者IP地址

des port  可选选项,默认使用目的地址的80端口


example:  tcptraceroute www.google.com 443 -n -q 1



3.mtr

在Linux中有一个更好的网络连通性判断工具,它可以结合ping | nslookup | tracert 来判断网络的相关特性,这个命令就是mtr,注意:MTR使用的raw sockets是绕过TCP/IP协议,需要ROOT权限来执行,因此如果以普通用户身份来执行mtr会出错,提示“mtr: unable to get raw sockets”

默认系统里面是不带MTR,需要自己手动安装

CENTOS进入SSH,手动输入命令

yum install mtr -y


UBUNTU

sudo apt-get install traceroute

使用格式:

mtr [options] hostname

常用的选项:

-n       ——不探测主机名,no-dns不对IP地址做主机名解析
-r     ——将mtr设置为报告模式,追踪结果以报告模式输出。若没有-r显现,那么将进入mtr的实时交互模式。  
-c num ——定义追踪的次数,每次是1s,且-c必须和-r配合使用,默认的10次。
mtr -s 用来指定ping数据包的大小
mtr -a 来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
mtr -i 使用这个参数来设置ICMP返回之间的要求默认是1秒
mtr -4 IPv4
mtr -6 IPv6

使用举例:

(1)mtr的实时显示模式,这里会一直刷新探测,可以按ctrl+c退出

mtr www.bnxb.com 


(2)mtr的报告模式


[root@172.245.168.1 ~]# mtr -r www.bnxb.com
Start: Sun Dec  3 21:32:45 2017
HOST: Bnxb-VM          Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 172-245-168-1-host.colocr  0.0%    10    1.2  14.6   0.9  97.1  29.8
  2.|-- 10.8.7.117                 0.0%    10    0.9   1.1   0.9   2.4   0.0
  3.|-- 10.8.19.173                0.0%    10    0.5   5.4   0.4  42.4  13.1
  4.|-- buf-b1-link.telia.net      0.0%    10    0.5   0.6   0.5   1.4   0.0
  5.|-- nyk-bb4-link.telia.net     0.0%    10   10.7  10.9  10.7  11.2   0.0
  6.|-- nyk-b5-link.telia.net      0.0%    10   11.3  11.3  11.2  11.8   0.0
  7.|-- 6-1-20.ear2.NewYork1.leve 90.0%    10  535.6 535.6 535.6 535.6   0.0
  8.|-- 4.69.153.125               0.0%    10   87.8  88.0  87.7  90.4   0.7
  9.|-- network-innovations-inc.v  0.0%    10   91.4  90.0  88.2  91.4   0.9
 10.|-- te-6-0-0.cs2.lax2.us.zenl  0.0%    10   88.7  90.0  88.7  95.0   1.7
 11.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 12.|-- 198.181.37.102.16clouds.c  0.0%    10   87.5  87.5  87.3  87.9   0.0

输出解释:

第一列:显示的是IP地址和本机域名,这点和tracert很像
第二列:snt:10 设置追踪的次数,默认值是10 可以通过参数 -c来定制,例如mtr -r -c 15 www.bnxb.com
第三列 Loss: 是显示的每个对应IP的丢包率
第四列 Last: 显示的最近一次的返回时延
第五列 Avg : 是平均值 这个应该是发送ping包的平均时延
第六列 Best: 是最好或者说时延最短的
第七列 Wrst: 是最差或者说时延最常的
第八列 StDev: 是标准偏差

(3)mtr报告模式,只显示IP不显示主机名

mtr -n -r www.bnxb.com 


顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论