斜体为读者提问:
我在电脑上查询的出口IP是58.60.*.*,然后用tracert命令查询ping百度的路径,结果发现路径里面没有同一网段的(即以58.60.开头的),这是为什么?
正文
题主这个问题,有两种可能:
(1)运营商给客户分配的是公网IP = 58.60.x.x
(2)运营商给用户分配的是非公网IP,当用户的流量进入Internet,使用公网IP = 58.60.x.x做NAT
这两种情况都有可能traceroute时,网络路径上没有任何一跳的IP和58.60.x.x在一个网段内。接下来分析一下这两种情况:
情况一:通常用户使用PPPoE拨号上网,分配的IP 如58.60.x.x/32,使用32位掩码长度,这样有什么好处呢?不浪费IP资源!
问同学们一个问题,PPPoE接口是广播接口还是点对点接口类型?
对,是点对点接口,点对点接口需要通信的双方在一个网段吧?不需要!
为何是点对点接口?
看看封装格式吧:
Ethernet/PPPoE/PPP/IP/IP Payload
由于从局域网发出的所有IP报文,目的MAC都是PPPoE Server的,源MAC都是家庭路由器的,这不是典型的点对点接口特征吗?
Okay,运营商用来终结客户端PPPoE的接口需要IP地址吧?
当然需要,可以是任意IP,只要该接口配置IP就可以工作,为了节省IP,通常可以借用别的接口的IP,比如 “IP unnumbered”
客户端拨号成功会生成两条路由:
0.0.0.0/0 PPPoE
58.60.x.x/32 PPPoE
当访问Internet时使用0.0.0.0/0路由,由于是点对点接口,压根不关心下一跳的IP是多少,对吗?
所以出现题主描述的现象一点也不奇怪。
情况二:当用户的流量前往Internet时,需要做NAT,那公网IP从哪里来?从路由器的接口上借用吗?可以,但是扩展性不够高,毕竟就一个IP。
那如何扩展性高呢?
使用一个公网IP资源池,这个池子可以一个IP、也可以任意多个,完全看需求。
Okay,那这些池子里的公网IP需要事先配置在接口上吗?不需要!
既然58.60.x.x压根没有配置在任何接口上,那当你traceroute 时,那这台NAT设备直连的路由器接口IP,完全有可能不是58.60.x.x。
那当你traceroute 到NAT设备时,由于58.60.x.x没有配置在任何接口,所以自然不会使用58.60地址来发送traceroute 出错消息!