traceroute在VMWare的NAT模式下不可用。但是这是为什么?本文来解释。
1.VMWare的NAT是一个七层的NAT
我们先来做一个实验。在VMWare中telnet一个地址,我们仍以网络测试三大神器(ping,traceroute,baidu)之一的baidu为目标,在VMWare里面以及其宿主机同时抓包:
首先展示一下GuestOS Linux上的命令和抓包结果:
然后我们看一下Windows宿主机上的抓包结果:
很显然NAT转换了数据流的源地址,转成了宿主机的无线网卡的地址,然而我们注意后面这幅图上的注释,存在三处不一致,这就表明这个NAT是一个七层NAT。如果不理解这个,我就简要说明一下:
1).协议栈的IP层在每发出一个数据包时,其IPID字段在Linux实现中是针对每四层协议递增的
TCP,UDP等均会维护自身的IPID字段的空间,只要有一个TCP段发出,不管是哪个连接的,不管是不是重传的,其IPID字段均会递增地取TCP协议的ID字段空间的值。该字段是针对主机的,即IP报文被封装的那台设备。中间二层,三层路由器/交换机等均不会修改该字段,如果发现该字段在发送端和接收端对于同一个包不一致,那就有相当巨大的概率表明数据包在中间遇到了高层设备的”整改“。
2).IPTTL字段就不解释了&