`

在路由器后面,traceroute返回一系列*原因分析

阅读更多

首先:traceroute是如何工作的?

Traceroute transmits packets with small TTL (Time To Live) values. The TTL is an IP header field that is used to prevent packets from running into endless loops. When a router that handles the packet subtracts one from the packet's TTL. The packet expires and it's discarded when the TTL reaches zero.

Traceroute sends ICMP Time Exceeded messages, (RFC 792 ), back to the sender when this occurs. By using small TTL values, the packets will quickly expire, so traceroute causes all routers along a packet's path to generate the ICMP messages that identify the router.

For example, TTL = 1 should produce the message from the first router, TTL = 2 generates a message from the second router in the path , and so on...

问题和解决办法

If you’re using a *nix or BSD-based operating system and trying to use traceroute at home behind a NAT router , you probably have problems with intermediate routers timing out, i.e.:

3 * * *
4 * * *
5 * * *
6 * * *

Furthermore, you may have also noticed that Windows’ tracert program doesn’t have this problem. The Unix traceroute program uses a bunch of UDP packets on a bunch of client ports to do its magic , whereas tracert uses ICMP packets, which I guess would have to be port forwarded on your router normally . Regardless, the solution is to use:

traceroute -I targethost.com


This forces traceroute to use ICMP packets the way the Windows program does. Amazing! I’m sure there’s a downside to this approach, but so far it works like a charm.

traceroute 有

使用两种:使用ICMP的和使用UDP的。

Microsoft使用ICMP,所以win95上发出的traceRT应使用的是ICMP,但我没有用 sniffer查过;其它包括unix和cisco router都使用UDP.

ICMP traceroute :
===========
使用ICMP Echo RequestEcho Reply and TTL-expired .

源发出 ICMP
Equest,第一个request的TTL为1,第二个request的TTL为2,以后依此递增直至第30个;中间的router送回ICMP TTL-expired ( ICMP type 11)通知source,(packet同时因TTL超时而被drop),由此source知晓一路上经过的每一个router;最后的 destination送回ICMP Echo Reply

所以中间任何一个router上如果封了ICMP Echo Request , traceroute就不能工作 ;如果封了type 11 (TTL-expired), 中间的router全看不到 ,但能看到packet 到达了最后的destination;如果封了ICMP Echo Reply,中间的全能看到,最后的destination看不到

UDP traceroute:
==========
使用ICMP TTL-expired (type 11), ICMP port unreachable (type 3, code 3), UDP
port >32768
.

source发出UDP packet, source port使用随机的任何大于32768的高段port, destination port从33434开始每送个probe依此递增,直至33434+29,(cisco router上使用extended-traceroute命令可以修改这个起始的33434 port #),
同时TTL从1开始依此递增,直至1+29=30(最多送30个probe)。中间的router送回 ICMP TTL-expired,使得source得知了中间的每一个router,最后的destination送回TTL-expired 和ICMP port unreachable (因为任何主机上都没有应用使用UDP port# >32768这样的高段port )。

所以中间某处封掉UDP port>32768回导致traceroute不工作封掉TTL超时会使source看不到中间的router (有的router根本不支持回送TTL超时);封掉type3 code3可能看不到destination .

另外需要知道的是,由于回送TTL-expired的信息需要CPU生成一个packet,必须打断 CPU,为保证其它工作的正常进行,cisco router每隔一秒才处理traceroute ,所以在source 上你可能看到中间一路 * * *,但却看得到最后的destination. 这时你应知道这是中间的router CPU太忙或者中间路由器不回送TTL-expired包的原因 ,不必大惊小怪的。:-)

下面是我自己的问题终于得到了解答:

在虚拟机的red hat上使用nat方式上网:

到百度2跳就到了。

然而使用windows公网来:

要9跳才完成。。。

分析如下:

windows中的tracert和linux中的traceroute -I,都是使用icmp协议,但是linux是在虚拟机的nat路由器后面,个人估计在收到linux上的ip包时候,nat路由器在替换ip头的时候没有考虑tracert这个功能,直接换了,然后直接传递到目的地址,目的地址有一个icmp echo Reply.从而我2跳就到了。。。

如果在linux上使用traceroute,默认使用udp协议,除了第一跳,剩下的都是* * *。八成是因为虚拟机nat 路由器,默认丢弃port>32767的包。 所以一切都解释了。圆满了。

分享到:
评论

相关推荐

    路由器常见故障排除的解决方法

    Cisco 2600 系列路由器故障排除** - **原因分析**:此类故障通常由硬件故障、软件配置错误或网络攻击等引起。 - **解决策略**:执行基本的故障排除步骤,例如检查电源、风扇和内存模块;使用show命令进行诊断;...

    发tcp,udp发包加上路由器就不通的原因,加上路由器就收不到数据包,程序遇上路由器就不通的原因 我教你,百分百管用

    每经过一个路由器,TTL值会减1,当TTL为0时,路由器会丢弃该数据包,防止数据包在网络中无限循环。 4. **抓包工具与网络诊断**:通过抓包工具(如Wireshark)可以查看网络中的数据包传输情况,如果在路由器之后收不...

    traceroute 网络工具源码

    Traceroute发送一系列带有不同TTL(生存时间)值的数据包,每个TTL值代表数据包可以经过的路由器数量。当TTL值为0时,路由器会将数据包丢弃并返回一个ICMP“时间超时”(Time Exceeded)消息。通过收集这些响应,...

    traceroute源码

    traceroute是Linux环境中一个非常重要的网络诊断工具,它主要用于跟踪数据包在网络中传输的路径,帮助网络管理员了解数据包从源主机到目标主机之间经过的路由器节点。通过分析traceroute命令的源码,我们可以深入...

    TraceRoute

    它通过发送一系列具有不同时间戳和IP分片标识(TTL)的ICMP回显请求(Echo Request)或UDP数据包到目标主机,从而揭示出数据包从源到目的地所经过的每一个跃点或路由器的IP地址。这些跃点构成了数据包在互联网上的...

    网络布线和基本路由器配置

    - 在R1和R2路由器之间部署串行链路,使用背对背的DTE-DCE电缆模拟WAN环境。 3. **配置与验证**: - 完成设备接线及控制台连接。 - 清除配置并重新加载路由器。 - 进行基本的路由器配置,包括接口启用、IP地址...

    TraceRoute的工作原理TraceRoute的工作原理

    在途经的每个路由器都会返回超时消息,除了最后一个路由器,它会因为目标端口未开放而返回一个端口不可达的ICMP消息(Type 3,Code 3)。 通过收集这些返回的消息,TraceRoute可以确定数据包在到达目标主机前经过的...

    路由器配置实例--100例

    这个功能检查每一个经过路由器的数据包,在路由器的路由表中若没有该数据包源IP地址的路由,路由器将丢弃该数据包。</P><P>2 启用OSPF路由协议的认证。默认的OSPF认证密码是明文传输的,建议启用MD5认证。并设置一定...

    traceroute-2.1.0.rar

    Traceroute通过发送一系列TTL值递增的数据包,当TTL值等于某个路由器的跳数时,该路由器就会回应,从而得知数据包经过的完整路径。 二、Traceroute命令用法 在Linux终端中,我们可以直接输入`traceroute`命令加上...

    如何在Cisco设备上停止Traceroute或Ping?.docx

    当报文到达一个路由器时,该路由器会将其 TTL 值减 1,并将 ICMP 回显应答(Echo Reply)返回给源主机。通过追踪回显应答的路径,Traceroute 可以确定从源主机到目标主机经过的路由器。 Ping 的基本原理 Ping 用于...

    CISCO 路由器 使用手册(适用型号:1800系列)

    总的来说,CISCO 1800系列路由器的使用手册会详细指导如何进行上述各项配置,确保路由器的正常运行和网络的高效稳定。无论是对于网络管理员还是初学者,深入理解并熟练掌握这些知识点都至关重要,它们将帮助你更好地...

    基于路由器的网络故障诊断与排除.pdf

    在计算机网络中,路由器作为关键设备,其工作状态直接影响网络的连通性和性能。当网络出现故障时,我们需要按照特定的步骤进行诊断和修复。 1. 故障诊断步骤: - **确定故障现象**:识别问题的具体表现,如主机...

    网络编程—Traceroute程序实例.pdf

    Traceroute的核心在于其工作原理,即通过增加TTL值逐跳探测,每次发送的数据包都会在TTL达到零时被目标路由器丢弃并返回一个ICMP "时间超时"消息,从而获取到当前路由器的信息。 4. **Traceroute的实现原理**: ...

    基于ICMP的路由跟踪(traceroute)程序

    TTL字段在每个经过的路由器处都会被减一,当TTL为零时,路由器会将数据包丢弃并返回一个ICMP“超时”(Time Exceeded)报文给发送方。 **基于ICMP的traceroute**程序工作原理如下: 1. **初始化**: 程序首先设置一...

    traceroute-2.1.0

    当TTL为0时,路由器会将数据包丢弃并返回一个ICMP超时消息,这就是traceroute获取路由信息的方式。 二、traceroute-2.1.0特性 1. **改进的稳定性**:2.1.0版本对原有的代码进行了优化,提高了在复杂网络环境下的...

    traceroute-2.1.0源码

    `traceroute`是一款网络诊断工具,它主要用于追踪数据包在网络中传输的路径,帮助网络管理员或开发者定位网络问题。`traceroute-2.1.0`是该工具的一个特定版本的源码,允许用户深入了解其内部工作原理并进行定制化...

    traceroute程序设计及实现.doc

    - traceroute 使用TTL递增策略,每次发送一个TTL值增加的IP包,直到到达目标,沿途路由器的IP地址通过ICMP超时消息返回。 通过以上知识点,我们可以了解到traceroute程序设计的核心在于利用TTL和ICMP协议来探测...

    路由器配置实例100例

    - **ping和traceroute**:测试网络连通性和路径。 8. **网络监控** - **性能指标**:如CPU利用率、内存使用、接口带宽等。 - **SNMP(简单网络管理协议)**:远程监控和管理路由器。 通过"路由器配置实例100例...

    traceroute工具

    `traceroute` 工具是网络诊断中不可或缺的一部分,它主要用于追踪数据包在网络中的路径,帮助网络管理员或普通用户理解数据是如何从源主机传输到目标主机的。这个工具揭示了数据包在通过多个路由器节点时的跃点(hop...

Global site tag (gtag.js) - Google Analytics