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地址,不查主机名。
traceroute原理
一、traceroute原理一1、从源地址发出一个UDP探测包到目的地址,并将TTL设置为1;2、到达路由器时,将TTL减1;3、当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;4、当源地址收到该ICMP包时,显示这一跳路由信息;5、重复1~5,并每次设置TTL加1;6、直至目标地址收到探测数据包,并返回端口不可达通知(ICMP Port Unreachable);7、当源地址收到ICMP Port Unreachable包时停止traceroute。二、traceroute原理二1、从源地址发出一个ICMP请求回显(ICMP Echo Request)数据包到目的地址,并将TTL设置为1;2、到达路由器时,将TTL减1;3、当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;4、当源地址收到该ICMP包时,显示这一跳路由信息;5、重复1~5,并每次设置TTL加1;6、直至目标地址收到探测数据包,并返回ICMP回应答复(ICMPEcho Reply);7、当源地址收到ICMP Echo Reply包时停止tracert。
Linux系统中traceroute命令使用详解
Linux系统中traceroute命令可以追踪到网络数据包的路由途径。下面由我为大家整理了linux系统中traceroute命令使用详解,希望对大家有帮助! Linux系统中traceroute命令使用详解 1.命令格式: traceroute[参数] [主机] 2.命令功能: traceroute 指令让你追踪网络数据包的路由途径,预设数据包大小是40 Bytes, 用户可另行设置。
具体参数格式:traceroute [-dFlnrvx] [-f<存活数值>] [-g<网关>][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小] 3.命令参数 -d使用socket 层级的排错功能 -f设置第一个检测数据包的存活数值TTL的大小 -F设置勿离段位 ----我也不知道啥是勿离段位,查了下没查到什么信息^^ -g设置来源路由网关,最多可设置8个 -i使用指定的网络界面送出数据包 -I使用ICMP回应取代UDP资料信息 -m设置检测数据包的最大存活数值TTL 的大小 -n直接使用IP地址而非主机名称 -p设置UDP传输协议的通信端口 -r忽略普通的routing table ,直接将数据包送到远端主机上 -s设置本地主机送出数据包的IP地址 -t设置检测数据包的TOS数值 -v详细显示指令的执行过程 -w设置等待远端主机回报的时间 -x开启或关闭数据包的正确性检验 linux系统中traceroute命令实例 实例1:traceroute 用法简单,最常用的用法 命令:traceroutewww.google.com 说明: 记录按序列号从1开始,每个记录就是一跳,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是 -q 的默认参数。
探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.google.com, 表示向每个网关发送4个数据包 有时我们 traceroute 一台主机时,会看到有一些行是以星号表示的。出现这种情况,可能是防火墙封掉了 ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。 有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因,当然如果某台DNS出现问题时,不能解析主机名、域名时,也会有延时长的现象;您可以加 -n 参数来避免DNS 解析,以 IP格式 输出数据。 如果在局域网中的不同网段之间,我们可以通过 traceroute 来排查问题所在,是主机的问题还是网关的问题。
如果我们通过远程来访问某台服务器遇到问题时,我们用到 traceroute 追踪数据包所经过的网关,提交 IDC 服务商,也有助于解决问题;但目前看来国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。 实例2:跳数设置 命令: traceroute -m 10 www.baidu.com 实例3:只显示IP 地址,不查主机名DNS 命令:traceroute -n www.baidu.com 实例4:探测包使用的基本UDP端口设置6888 命令:traceroute -p 6888 www.baidu.com 实例5:把探测包的个数设置为4个 命令:traceroute -q 4 www.baidu.com 实例6:绕过正常的路由表,直接发送到网络相连的主机 命令:traceroute -r www.baidu.com 实例7:把对外发探测包的等待响应时间设置为3秒 命令:traceroute -w 3 www.baidu.com 补充:linux系统中traceroute 的工作原理 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】消息,traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个 TTL为 2 的 datagram ,发现第二个路由器,然后一直重复执行这种操作,直到某个datagram 抵达目的地。
在traceroute 送出 UDP datagram 到目的地时,它所选择送达的 port number 是一个一般应用程序都不会用的号码,所以当此UDP datagram到达目的地后该主机会送回一个 ICMP port unreachable 的消息,而当traceroute 收到这个消息时,便知道目的地已经到达,所以 traceroute 在 server 端也就没有所谓的 daemon 程式。 traceroute 通过计算 ICMP TTL 到期消息设备的IP 地址并做域名解析。每次,traceroute 都打印出一系列数据,包括所经过的路由设备的域名及 IP 地址,三个包每次来回所花时间。
标签:
留言评论