ping traceroute命令详解

常用的工具有ping,traceroute,按照工具的作用,原理,用法三个维度来理解。

一、ping

1.作用

探测端到端的连通性,包往返时延。

2.原理

icmp协议,是在IP协议之上的一种协议,包括首部和数据两个部分。icmp协议头部的三个固定字段,type,code,checksum。ping使用其中type为8和0的两种类型。type8为request,type 0 为reply。首部其他字段因不同包类型有所区分。

通过抓到的包,来看下各个字段。

ping报文

request包


ping-request包
ping-reply包

可以看出,ping包头部除了三个固定字段之外,还有Identifier,Sequence。data字段为Timestamp。其中Identifier,Sequence主要是为了让request,reply能配对,比如哪个reply是回复哪个request的。看上图的request和reply包,Identifier BE LE 相同,Identifier一般是发送的进程号。Sequence number BE LE 也相同,表示发送的序列号,一对请求和答复包Sequence number BE LE 相同。Timestamp里面记录了传输时间戳和序列号。首先看request包里面的发送时间,

和reply包里面的发送时间相同。


request中的timestamp字段


reply中的timestamp字段

Response  time,rtt正是 reply包里面relative时间减去request包里面的时间。

所以ping包可以连续的去给对端发request,而不用等对端回复某一个包之后再发,默认1s 发送一个request包。

3.用法

不带任何参数,默认ping 的数据包大小是 56 字节。会持续不断的ping下去。

输出参数解释: min/avg/max/stddev 前三个好理解,最后一个参数,mac下是stddev,linux下面是 mdev Mean Deviation,代表 ICMP 包的 RTT 偏离平均值的程度,可以通过这个值看出网络抖动的情况,mdev值越大说明,整个链路上的包延时越不稳定。值越小,说明越稳定。

ping不带参数结果

ping参数用法:

-l  指定发送包的大小

-c 指定发送包的次数

-i 指定发送间隔,默认是1s

-I  指定发送包的网卡 ,一般是查看路由表,哪个网卡路由匹配用哪个网卡发送。

ping参数学习

以上指定了 包大小,-M do表示不要分片,-c 4 次数,这个命令在探测链路mtu的时候会用到。

二、traceroute

1.作用

探测端到端,链路每一跳的时延。

2.原理

先看一个traceroute的访问截图和抓包截图

traceroute访问截图

源IP :192.16843,87 家里的局域网地址

traceroute抓包截图

源IP :192.16843,87 家里的局域网地址

目的IP: 61.135.169.121 百度的地址

可以看出traceroute开始的时候,源地址发包,ttl 值依次从为1,1,12,2,2,3,3,3...ttl依次增大,并且每个ttl值发三个包。在看发包源端口 44136,一直没有变,访问的目的端口从 33435依次增大。tracroute假设服务器的端口 33435没有监听,如果恰巧这个端口服务端监听了,那么traceroute就不能正常判断了。路径上的每一跳,或者返回icmp ttl超时的错误包,或者不返回,直到达到主机之后,主机会返回一个服务不可达的包,这个时候trcaeroute认为探测到了主机。

ttl为1的包发出去之后,收到了中间路由器的回包,像ttl为 2,3的包没有收到回包,控制台看的结果为 *


traceroute没有收到回包为*

看下发包的详细特征:

traceroute发包

可以看出这个包是UDP包

traceroute-ttl超时响应包

可以看出这个包是 ICMP包,type 11,code 0 ,TTL超时包。这个包的源地址为 192.168.43.138为中间路由器的发回来的包。这个包将发包的信息封装到了自己里面,可以和上一个图对比。

3.用法

常规的用法如上面,看下哪一个路径上的延时变大。除了UDP包探测之外,traceroute还可以指定使用TCP协议探测,可以使用-p指定端口

命令:traceroute -T  www.baidu.com

探测mtu大小: traceroute www.baidu.com -F 1472

trcaeroute-tcp返回结果


你可能感兴趣的:(ping traceroute命令详解)