Traceroute与Ping区别

1.Traceroute工具基本原理
    Traceroute是探测网络端到端路由的小工具,它的实现主要利用了TCP/IP协议族中的两个特性:
    1)路由器转发IP数据报时需要把TTL减1,当TTL减为0时路由器会向源端发送ICMP超时报文;
    2)主机(或路由器)处理处理目的地址时本机的UDP报文时,当报文中目的端口字段指定的端口不可用时,将向UDP报文发送端发送ICMP端口不可达报文
    Traceroute的工作流程是源端发送一份TTL为1的UDP报文到目的端,处理这个报文的第一个路由器将TTL减1,丢弃该报文,并向源端发回ICMP超时报文,从而学到第一台路由器地址。然后Traceroute发送TTL为2的数据报,这样第二台路由器同样丢弃报文并发回ICMP超时报文,从而学到第二台路由器地址。如此循环知道目的主机(或路由器)接受到该报文,这样就学习到了全路径的路由。但是目的端接收UDP报文以后可能就不会像其他路由器一样发回ICMP超时报文,那么Traceroute如何知道并停止?处理的办法是将发送的UDP报文中目的端口号填上一个不可能被使用的值(30000以上),这样目的端收到时会发回ICMP端口不可达报文,这样Traceroute就知道已经到达目的端了。
2.Ping工具的工作流程
    Ping是一个用于测试另一台主机是否可达的小程序, Ping的实现虽多种多样,但基本原理都是:发送一份ICMP Echo Request(Echo Request)报文给另一台主机,并等待返回ICMPEcho Reply(Echo Reply)。
    我们通常所说的Ping通是指发送Echo Request后并在一定的时间范围内收到了目的端对该请求的Echo Reply。这里需要强调的是:尽管Ping依次发出多个Echo Request,但是他们的内容不是完全一样的,而是通过序列号区别的。同样,Echo Reply与Echo Request一一对应。因此,就算Ping收到一堆的Echo Reply,但是如果内容和序列号对不上同样得不到认同。
    我们通常所说的Ping不通是指发送Echo Request后并在一定的时间范围内没有收到目的端对该请求的Echo Reply,也收不到其他任何的ICMP错误报文。
    定位问题时通常需要结合选项Ping,Ping选项功能说明如下:
  -a:指定Ping命令的源地址;
  -c:设置发送ICMP ECHO_REQUEST报文的数目,默认数量为5个;
  -d:打开所使用socket上的 SO_DEBUG 选项;
  -f:设置报文发送的过程中不分片,默认允许分片;
  -h:指定发送Echo Request报文的TTL值,默认为255;
  -i:指定PING命令的发送接口,若不指定则在IP层处理时根据FIB表查找出接口;
  -m:设置发送下一个ICMP报文的等待时间,默认为500ms;
  -n:不对目的主机作域名解析;
  -p:设置Echo Request报文的填充字节(pad;
  -q:除统计数字外,不显示其他的详细信息;
  -r:记录路由,设置所使用socket上的RECORD_ROUTE选项和Echo Request包中的RECORD_ROUTE设置,并且显示返回包中的路由缓冲区;根据该选项可以记录PING报文的传送路径。但是要考虑中间设备可能不支持该socket选项;
  -s:设置 ECHO_REQUEST 报文的数据段的长度,默认长度为56bytes;
  -t:设置等待 ECHO_REQUEST 报文响应的超时时间,默认为2000ms;
  -tos指定发送Echo Request报文的TOS值,墨认为0;
  -v显示接收到的非Echo Reply报文,缺省是不显示;
  --instance指定VPN-Instance的名称;

你可能感兴趣的:(Traceroute与Ping区别)