1. 程式人生 > >為什麼用IP查詢網查詢的自己的外網IP和用tracert命令查詢的自己的出口IP不一致?

為什麼用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 出錯訊息!

 

原文連結:https://mp.weixin.qq.com/s?__biz=MzIxNTM3NDE2Nw==&mid=2247483847&idx=1&sn=6a905897c8255c6a0666b9fda413f47b&chksm=979801ffa0ef88e951ebdf439df2bea8775d8c8119dd021002c638eb9475254a9e898c30aa1a#rd