為什麼用IP查詢網查詢的自己的外網IP和用tracert命令查詢的自己的出口IP不一致?
斜體為讀者提問:
我在電腦上查詢的出口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 出錯訊息!