文章目录
前言
traceroute用来查看一个数据包沿途经过的路由ip地址,但是有时候一行会出现*, 甚至某一行后面全是 * ,这篇文章从表面上分析一下原因。
一、正常互联网那个主机出现*的原因
tracert www.baidu.com时,某些行出现了* ,但是目的地址是有回应的。
可能原因:
1.网络拥塞:返回的icmp包在规定的时间内没有到达源主机。
2.某个节点没有准备返回的icmp包。
tracert从某一行后全是*
可能原因:
1.目标网络不可达:在网络不可达后,源主机并没有收到被探测主机的回包,有tracert的机制就会不断发送数据包,直到发送规定的最大数据包,默认30个。
2. 某个节点对,返回的icmp包进行了过滤:保留icmp 超时包,端口不可达,应答包。
2.NAT模式中使用udp探测包,下节详细分析。
中间全是* 目的地址有返回
可能原因:
1.中间某个节点对超时的icmp包的type code进行了过滤,导致后面回复的超时icmp包都不能通过该节点。而没有过滤目标机器端口不可达或者echo reply 中的type code,所以能收到目标机器的icmp回复包。
2.NAT模式使用icmp探测包。
只有目的地址为*
可能原因:
1.目标机器对收的探测包进行了过滤:如果上层协议为udp,则对探测的udp包进行过滤;如果上层协议为icmp,则对icmp包进行了过滤。导致目标机器不能收到探测包。
2.目标机器对返回的icmp包进行了过滤:如果上层协议为udp,则对icmp目标不可达的type code 进行了过滤;如果上层协议为icmp,则对icmp echo reply的type code进行了过滤,导致不能收到目标机器回复的icmp包。
二、NAT模式下出现* 的原因分析
udp探测包出现* 的原因
NAT模式下,虚拟机traceroute www.baidu.com:
虚拟机网卡抓包,有NAT网关回复的超时icmp数据包,对应第一条记录:
虚拟机抓包,看见只有不断发送的udp数据包,没有任何回复的icmp包:
宿主机网卡抓包,发现虚拟机发出的包是有icmp回包的,但是回复的icmp包并没有到虚拟机当中。
可能原因:
NAT模式工作原理:虚拟机将发往外网的包先发送给NAT网关,NAT网关有一个NAT转换表,NAT转换表记录了将虚拟机的ip port到宿主机ip port之间的映射关系。从虚拟机发送一个包到NAT网关,该网关会自动生成NAT转换表中的映射关系,最后以宿主机的公网Ip与外界通信;外界发送到虚拟机的数据包到达NAT网关,就会查找NAT转换表中是否有该映射关系,如果有则对原Ip port转换后发送到虚拟机当中,如果没有则会丢弃该数据包。
在该例子中探测包为udp包,NAT转换表中记录的是udp中ip port之间的映射关系,而返回的数据包为icmp中超时数据包和端口不可达数据包,NAT转换表中并没有icmp type code之间的映射关系,所以返回的数据包都不能通过NAT网关到达虚拟机。
icmp探测包出现* 的原因
以icmp作为探测包访问百度,看见只有最后一个包有回复:
宿主机抓包发现有超时的icmp回包,但是没有到达虚拟机当中:
虚拟机和宿主机抓包都能得到请求应答的icmp数据包:
可能原因:
icmp探测包是请求应答数据包,发送请求数据包会在NAT转换表中记录一条映射关系,这条映射关系是请求应答icmp type code。而返回的是超时数据包,对应的icmp type code与NAT转换表中不一致,所以到不了虚拟机。然而,目的地址返回的就是应答数据包,这里对应的icmp type code与NAT转换表中的映射关系一致,所以最后一个应答数据包能够到达虚拟机。
总结
traceroute 详解及结果出现*的分析
虚拟机NAT之traceroute(VMWare的NAT模式下无法使用traceroute)