当我使用Windows操作系统 使用tracert命令,可以看到部分的ip地址(这里和下面不一样,因为百度DNS域名解析服务器中有多个A记录,多个IP都指baidu.com这个域名)
当我使用Linux操作系统时,可以ping通百度
向百度发送一个数据包,成功received
当我使用Linux操作系统使用traceroute命令时,发现跳数与Windows操作系统不同,且不能看到中转的ip地址后来发现是因为网络模式使用了NAT模式,修改为桥接模式即为下图,发现出现了部分网关地址,但仍然不能traceroute通。
查阅后知道是UDP数据报与ICMP数据报的问题
参考资料:能ping通traceroute不通 - 腾讯云开发者社区-腾讯云 (tencent.com)
问题原因:
Linux操作系统默认发出的是UDP数据报,windows下tracert、mtr,以及Linux下mtr默认都发送的是icmp的数据包
因为UDP 常被用来做网络攻击,因为 UDP 无需连接,因而没有任何状态约束它,比较方便攻击者伪造源 IP、伪造目的端口发送任意多的 UDP 包,长度自定义。所以运营商为安全考虑,对于 UDP 端口常常采用白名单 ACL,就是只有 ACL 允许的端口才可以通过,没有明确允许的则统统丢弃。比如允许 DNS/DHCP/SNMP 等。处于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种 ICMP 报文,其余路由器或交换机也可能被管理员主动修改配置变为不返回 ICMP 报文。因此 Traceroute 程序不一定能拿到所有的沿途网关地址。
在这里使用了参数I,发送icmp数据报,但任然不能看到中转ip,有区别的是,跳转次数与Windows使用tracert命令相近,最后一跳到达百度的数据报ip地址可见,与Windows相同。