traceroute原理traceroute原理和过程
本文目录一览:
- 1、traceroute实现的原理
- 2、路由跟踪命令traceroute / tracert
- 3、【traceroute】关于traceroute(路由追踪)的原理分析
- 4、traceroute
traceroute实现的原理
raceroute是我们经常用到的一个路由跟踪命令。
它的实现原理如下:
它发送一份 TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将 T T L值减 1,丢弃该数据报,并发回一份超时I C M P报文。这样就得到了该路径中的第一个路由器的地址。然后 Tr a c e r o u t e程序发送一份T T L值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到 T T L值为1的I P数据报,也不会丢弃该数据报并产生一份超时 I C M P报文,这是因为数据报已经到达其最终目的地。那么我们该如何判断是否已经到达目的主机了呢?
Traceroute程序发送一份 U D P数据报给目的主机,但它选择一个不可能的值作为 U D P端口号(大于 30 000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的 U D P模块产生一份“端口不可达”错误(见 6 . 5节)的 I C M P报文。这样, Tr a c e r o u t e程序所要做的就是区分接收到的 I C M P报文是超时还是端口不可达,以判断什么时候结束。
我们使用ping命令的R选项也可以打印出源主机到目的主机所经过的路由。但是它和traceroute有些不同,至于区别在哪里?大家可以思考一下
路由跟踪命令traceroute / tracert
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。
当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destinatiON)走的路径可能会不一样,
但基本上来说大部分时候所走的路由是相同的。
linux系统中,我们称之为traceroute,在MS Windows中为tracert。
traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。
一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
说明:
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是ms,其实就是-q的默认参数。
探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 ,表示向每个网关发送4个数据包。
有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。
出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。
当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;
您可以加-n 参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。
如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;
但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
说明:
Traceroute的工作原理:
Traceroute最简单的基本用法是:traceroute hostname
Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。
首先,traceroute送出一个TTL是1的IP datagram
(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,
当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,
所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息
(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,
便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,
发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,
这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,
该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),
所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,
而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。
Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。
每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。
【traceroute】关于traceroute(路由追踪)的原理分析
traceroute 主要利用 IP 数据包的 TTL 字段值 + ICMP 来实现,它发送的用于探测网络路径的数据包的 IP 之上的协议可以是 UDP、TCP或ICMP。
协议表示该数据报文所携带的数据所使用的协议类型,占 8 位。
该字段可以方便目的主机的 IP 层知道按照什么协议来处理数据部分。不同的协议有专门不同的协议号。
例如,TCP 的协议号为 6,UDP 的协议号为 17,ICMP 的协议号为 1。
不同模式下,探测过程中设计的数据包如下:
UDP 探测数据包(目标端口大于 30000) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 ICMP Destination Unreachable 数据包
TCP [SYN] 探测数据包(默认目标端口为 80) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 TCP [SYN ACK] 数据包
ICMP Echo (ping) Request 探测数据包 + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 ICMP Echo (ping) reply 数据包
UDP 端口扫描比较麻烦,它同TCP不一样,因为它不需要建立连接。
我们向 目标主机 的固定端口发送UDP数据包,可以得到 两种结果:
在运营商的路由器上,UDP 与 ICMP 的待遇大不相同。
为了利于 troubleshooting,ICMP ECHO Request/Reply 是不会封的,而 UDP 则不同。
UDP 常被用来做网络攻击,因为 UDP 无需连接,因而没有任何状态约束它,比较方便攻击者伪造源 IP、伪造目的端口发送任意多的 UDP 包,长度自定义。
所以运营商为安全考虑,对于 UDP 端口常常采用白名单 ACL,就是只有 ACL 允许的端口才可以通过,没有明确允许的则统统丢弃。比如允许 DNS/DHCP/SNMP 等。
当网络工程师用Ping时,Ping在偷摸做啥事儿?
ping命令是依托于 ICMP协议的, ICMP协议的存在就是为了更高效的转发 IP数据报和提高交付成功的机会。
ping命令除了依托于 ICMP,在局域网下还要借助于 ARP协议, ARP协议能根据 IP地址反查出计算机的 MAC地址。
另外 ARP是有缓存的,为了保证 ARP的准确性,计算机会更新ARP缓存。
有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。
出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有些路由器会隐藏的自己的位置,不让ICMP Timeout的消息通过,结果就是在那一跳上始终会显示星号。此外服务器也可以伪造traceroute路径的,不过一般应用服务器也没有理由这么做,所以Traceroute的结果还是能够为网络分析提供一些参考的。
Linux下traceroute程序默认发送的探测包为UDP协议,windows下tracert、mtr,以及Linux下mtr默认都发送的是icmp的数据包,并不是所有网关都会如实返回 ICMP 超时报文。处于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种 ICMP 报文,其余路由器或交换机也可能被管理员主动修改配置变为不返回 ICMP 报文。因此 Traceroute 程序不一定能拿到所有的沿途网关地址。所以,当某个 TTL 值的数据包得不到响应时,并不能停止这一追踪过程,程序仍然会把 TTL 递增而发出下一个数据包。这个过程将一直持续到数据包发送到目标主机,或者达到默认或用参数指定的追踪限制(maximum_hops 默认最大为30)才结束追踪
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。
如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
动态图解traceroute(路由追踪)的原理与实现
IP数据报格式详解
解析为何traceroute探测的时候中间有些节点探测不到?
traceroute使用与实现原理分析
traceroute(路由追踪)的原理及实现
为什么目标地址ping能通,但是tracetoute不通?
只会用ping测试网络通不通?高级网工还会这么用
当网络工程师用Ping时,Ping在偷摸做啥事儿?
traceroute原理
TCP/UDP/ICMP Traceroute的原理及区别
traceroute
traceroute 是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。traceroute 的原理是试图以最小的TTL发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网关ICMP的应答。发送数据包的大小默认为 38个字节。
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
SYNOPSIS
traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...]
[-i device] [-m max_ttl] [-p port] [-s src_addr]
[-q nqueries] [-N squeries] [-t tos]
[-l flow_label] [-w waittime] [-z sendwait]
[-UL] [-P proto] [--sport=port] [-M method] [-O mod_options]
[--mtu] [--back]
host [packet_len]
traceroute [参数选项] hostname,域名或 IP地址
-i 指定网络接口,对于多个网络接口有用。比如 -i eth1 或-i ppp1等;
-m 把在外发探测试包中所用的最大生存期设置为max-ttl次转发,默认值为30次;
-n 显示IP地址,不查主机名。当DNS不起作用时常用到这个参数;
-p port 探测包使用的基本UDP端口设置为port ,默认值是33434
-q n 在每次设置生存期时,把探测包的个数设置为值n,默认时为3;
-r 绕过正常的路由表,直接发送到网络相连的主机;
-w n 把对外发探测包的等待响应时间设置为n秒,默认值为3秒;
用法实例:
traceroute
pc:~$ traceroute
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to (220.181.111.188), 64 hops max, 52 byte packets
1 bogon (10.x.x.x) 0.968 ms 0.711 ms 0.710 ms
2 bogon (172.x.x.x) 0.571 ms 0.545 ms 0.429 ms
3 129.x.x.x.broad.bj.bj.dynamic.163data.com .cn (219.x.x.x) 4.131 ms 3.252 ms 2.789 ms
4 25.x.x.x.static.bjtelecom.net (106.x.x.x) 2.565 ms 2.067 ms 2.133 ms
5 * * *
6 36.x.x.x (36.x.x.x) 3.360 ms
219.x.x.x (219.x.x.x) 3.425 ms
36.x.x.x (36.x.x.x) 3.304 ms
7 * * *
8 220.x.x.x (220.x.x.x) 2.803 ms 4.935 ms
220.x.x.x (220.x.x.x) 3.736 ms
9 * * *
traceroute -m 10 设置跳数为10
pc:~ $ traceroute -m 10
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to (220.181.111.188), 10 hops max, 52 byte packets
1 bogon (10.x.x.x) 1.067 ms 4.024 ms 0.712 ms
2 bogon (172.x.x.x) 0.309 ms 0.337 ms 0.607 ms
3 129.x.x.x.broad.bj.bj.dynamic.163data.com .cn (219.x.x.x) 2.683 ms 3.353 ms 2.947 ms
4 25.x.x.x.static.bjtelecom.net (x.x.x.25) 2.179 ms 2.325 ms 2.043 ms
5 * * *
6 36.x.x.x (36.x.x.x) 3.590 ms 7.793 ms 6.461 ms
7 * * *
8 220.x.x.x (220.x.x.x) 3.175 ms 2.893 ms
220.x.x.x (220.x.x.x) 5.538 ms
9 * * *
10 * * *
traceroute -n 只显示ip
pc:~ $ traceroute -n
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to (220.181.111.188), 64 hops max, 52 byte packets
1 10.x.x.x 0.946 ms 0.761 ms 0.718 ms
2 172.x.x.x 0.452 ms 0.338 ms 0.389 ms
3 219.x.x.x 3.174 ms 4.038 ms 2.379 ms
4 106.x.x.x 2.910 ms 1.960 ms 1.654 ms
5 * * *
6 36.x.x.x 3.321 ms 4.275 ms 3.637 ms
traceroute -p 6888 设置探测包使用的基本UDP端口
pc:~ $ traceroute -p 6888
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to (220.181.111.188), 64 hops max, 52 byte packets
1 bogon (10.x.x.x) 0.989 ms 0.752 ms 0.722 ms
2 bogon (172.x.x.x) 0.489 ms 0.399 ms 0.327 ms
3 129.x.x.x.broad.bj.bj.dynamic.163data.com .cn (219.x.x.x) 3.094 ms 3.442 ms 3.529 ms
4 25.x.x.x.static.bjtelecom.net (106.x.x.x) 1.837 ms 2.488 ms 2.516 ms
5 * * *
6 * 36.x.x.x (36.x.x.x) 4.876 ms
traceroute -q 4 设置探测包的个数
pc:~$ traceroute -q 4
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to (220.181.111.188), 64 hops max, 52 byte packets
1 bogon (10.x.x.x) 0.970 ms 0.721 ms 4.360 ms 0.667 ms
2 bogon (172.x.x.x) 0.534 ms 0.640 ms 0.363 ms 0.449 ms
3 129.x.x.x.broad.bj.bj.dynamic.163data.com .cn (x.x.x.129) 2.831 ms 3.221 ms 2.878 ms 2.814 ms
4 25.x.x.x.static.bjtelecom.net (x.x.x.25) 1.921 ms 2.564 ms 2.472 ms 3.979 ms
5 177.x.x.x.static.bjtelecom.net (x.x.x.177) 2.465 ms * * *
6 219.x.x.x (219.x.x.x) 4.245 ms
36.x.x.x (36.x.x.x) 3.681 ms 3.053 ms
220.x.x.x (220.x.x.x) 3.444 ms
traceroute -r 绕过正常的路由表直接发送到网络相连的主机
pc:~ $ traceroute -r
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to (220.181.111.188), 64 hops max, 52 byte packets
traceroute: sendto: Network is unreachable
1 traceroute: wrote 52 chars, ret=-1
*traceroute: sendto: Network is unreachable
traceroute: wrote 52 chars, ret=-1
*traceroute: sendto: Network is unreachable
traceroute: wrote 52 chars, ret=-1
*
traceroute: sendto: Network is unreachable
2 traceroute: wrote 52 chars, ret=-1
traceroute -w 3 把对外发探测包的等待响应时间设置为n秒,默认值为3秒
pc:~ $ traceroute -w 3
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to (220.181.111.188), 64 hops max, 52 byte packets
1 bogon (10.x.x.x) 0.957 ms 0.710 ms 0.713 ms
2 bogon (172.x.x.x) 0.603 ms 0.616 ms 0.321 ms
3 129.x.x.x.broad.bj.bj.dynamic.163data.com .cn (x.x.x.129) 3.744 ms 2.371 ms 2.625 ms
4 25.x.x.x.static.bjtelecom.net (x.x.x.25) 2.022 ms * 3.474 ms
5 * * *
6 36.x.x.x (36.x.x.x) 4.408 ms 5.760 ms 3.091 ms
7 * * *
8 220.x.x.x (220.x.x.x) 3.482 ms
220.x.x.x (220.x.x.x) 3.024 ms
220.x.x.x (220.x.x.x) 3.377 ms
9 * *
traceroute -i eth0 -4 使用eth0网口以及IPV4协议
[root@ip-ops]# traceroute -i eth0 -4
traceroute to (220.181.112.244), 30 hops max, 60 byte packets
1 compute.amazonaws.com .cn (54.x.x.x) 15.993 ms compute.amazonaws.com .cn (54.x.x.x) 11.778 ms .compute.amazonaws.com .cn (54.x.x.x) 12.896 ms
2 100.x.x.x (100.x.x.x) 21.890 ms 100.x.x.x (100.x.x.x) 21.880 ms 100.x.x.x (100.x.x.x) 21.630 ms
3 100.x.x.x (100.x.x.x) 12.609 ms 100.x.x.x (100.x.x.x) 22.017 ms 100.x.x.x(100.x.x.x) 14.010 ms
4 100.x.x.x (100.x.x.x) 0.256 ms 100.x.x.x (100.x.x.x) 0.261 ms 100.x.x.x (100.x.x.x) 0.209 ms
5 54.x.x.x (54.x.x.x) 1.071 ms 54.x.x.x (54.x.x.x) 1.536 ms 1.639 ms
traceroute原理的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于traceroute原理和过程、traceroute原理的信息别忘了在本站进行查找喔。
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~