Traceroute与Tracert区别?

2019-09-19 16:43:08 阅读量:


一、在UNIX中的程序traceroute(Ciscoand Juniper应用),可以用来跟踪一个数据包从源点到终点的路径,通俗讲就是跟踪路由的工具。如下图来说明traceroute的思想:
 
R1要去往R3数据包要经过路由器R2,但是在大多数情况下,我们并不知道这个网络拓扑。R1和R3之间可能有很多的设备。traceroute使用ICMP超时报文和IP分组中的TTL(生存时间)字段和UDP协议就能找出这个路由。
 
\
 
a.R1上运行traceroute使用UDP协议大于等于33434端口向终点R3发送一个分组,这个报文被封装成IP分组,其TTL值为1,该程序会记下发送该分组的时间。抓包如下:

\
 
b.当R2收到这个IP分组,就会丢弃这个分组(减去TTL值1,TTL为0),同时R2会发送一个超时的ICMP报文(type:11,code:0),表示因为TTL值为0而丢弃该分组。抓包如下:

\
 
 
c.R1收到这个ICMP超时报文,利用封装ICMP的IP分组的源地址找出R2地址,这个程序还记下该分组的到达时间。步骤a的时间(发送分组时间)与减去该时间(接收分组时间)就是往返时间。重复a步骤,其TTL值为2,R2会转发该IP分组,当该分组抵达R3时,R3把TTL减去1,并不会丢弃该报文,因为现在该报文已经到达了最后的终点,R3会向R1发送一个ICMP端口不可达报文(type:3,code:3)。R1收到端口不可达报文后,表示整个路由已经找出,没有必要再发送更多的分组。抓包如下:

\
\
 
注:华为虽然应用命令为tracert,工作原理和traceroute是一样的!
最终的抓包结果如下:

\
 
二、Tracert一般应用于MS操作系统,tracert仅仅是利用的ICMP超时报文来追踪路由,与一情况类似,这里不做详细解释,抓包如下:

\\
 
三、其实在业务环境中,我们经常用到这两个工具,试想下如果中间有防火墙我们该如何做?接下来案例通过不同的厂商防火墙,我们进行进一步分析。
 
案例一、华为防火墙

\
 
解决方法:
ip ttl-expires enable 恢复减TTL功能,默认为了安全起见,防火墙减TTL功能是关闭的
policy interzone trust untrust outbound
policy 0
  action permit
  policy service service-set icmp
测试:

\
 
policyinterzone trust untrust outbound
policy 0
policy service service-set  udp
测试:

\

 
案例二、思科防火墙

\
 
解决方法:
access-list OUT extended permit icmp any any
access-group OUT in interface outside
测试:
Inside#traceroute 202.100.1.1
Type escape sequence to abort.
Tracing the route to 202.100.1.1
  1 202.100.1.1 4 msec *  4 msec

access-list TR extended permit udp any any gt 33433
class-map TR.MAP
match access-list TR
policy-map global_policy
class TR.MAP
  set connection decrement-ttl(恢复减少TTL功能)
 
测试:
tracert 202.100.1.1
traceroute to  202.100.1.1(202.100.1.1), max hops: 30 ,packet length:40,press CTRL_C to break
1 192.168.1.10 20 ms  60 ms  50 ms
2 202.100.1.1 70 ms  50 ms  50 ms
 
 
案例三、JuniperSRX(JunOS)
 
\
 
解决方法:
SRX@Test-SRX#show
policy OUT {
    match {
        source-address any;
        destination-address any;
          application [junos-icmp-ping junos-udp-any ];
    }
    then {
        permit;
 }
测试:
 
\
 
 
案例四、NetScreen(ScreenOS)

\
 
解决方法:

默认不管是traceroute还是tracert,就是通的,是因为NS默认有一条trust fromto untrust any 策略。

\
 
测试:
 
\
 
最后总结:当我们使用traceroute和tracert命令时,如果中间设备有防火墙或者有ACL规则,我们应当放行ICMP和UDP协议,防火墙要恢复减TTL功能。