IP報文的目的IP地址是私有IP地址,網路層如何處理的?

通關wireshark抓包看到Http請求發送之間,有三次TCP包的傳輸,也就是三次握手的過程,問題是在一次TCP的封包列表中,網路層數據包中的原地址IP和目的地址IP,我發現出現了我的私有IP地址,在網路上傳輸這個包,通過私有IP地址找不到我的端的,是抓包軟體的誤判?事實上在公網上傳播的應該是公網IP


因為你使用了電腦開wireshark抓本地報文的方式,所以進出介面的報文肯定是你的私有IP。並不是說這個私有IP會在公網上廣播路由,而是你的路由器在做NAT的時候對網路層報文進行了修改。

如果你用鏡像的方式在路由器之前同樣抓取報文,你會發現IP地址都是公網的。


假定區域網與外部通信的公網IP= 1.1.1.1,此IP用於所有私有IP的翻譯成1.1.1.1:

在區域網上看到的通信地址/埠:

192.168.1.112:48665 &<----&> 61.135.186.152:80

區域網出口NAT設備做了以下操作:

NAT 翻譯表
192.168.1.112:48665 ----- 1.1.1.1:48665

公網IP發送出去
1.1.1.1:48665 &<-----&> 61.135.186.152:80

目的伺服器以為它和1.1.1.1 在通信,等回程包到達1.1.1.1 時,NAT設備再將1.1.1.1 翻譯為 192.168.1.112,然後發給你的電腦,完成最終的通信。


NAT
一圖勝千言..

network address translation (NAT)網路地址轉化是在IPv4地址日益缺乏的情況下產生的,它不僅可以重用IP地址還可以向外界隱藏內部網路設備~
一個私有地址為10.0.0.1的主機A通過埠3345向IP地址為
128.119.40.186埠為80的主機B發送一個數據報。數據報到達介面為10.0.0.4的路由器,路由器利用(NAT IP地址,新埠號)替換每個外出IP數據報的(源IP地址,源埠號),並將每對(NAT IP地址, 新埠號) 與(源IP地址, 源埠號)的替換信息存儲到NAT轉換表中。於是路由器將改寫後的數據報發給主機B,當路由器收到響應數據報時根據轉發表將報文轉發給主機A。

然而這樣也產生了新的問題,例如在P2P應用中外部主機是無法和一個在NAT之後的主機建立TCP連接的。解決方法之一是手動配置NAT轉發表,顯然這種方法實在是太low了~
於是我們有了
UPnP(Universal Plug and Play)協議,它能夠自動學習到路由器的公共IP地址,並在
在NAT轉換表中,增刪埠映射,這麼一來外部主機也可以直接向內部主機發送TCP SYN分組了。

但如果主機雙方都在NAT後,那麼就只有靠中繼伺服器了,典型的有Skype。主機A向中繼伺服器S發送信息,被NAT A分配一個埠100;主機B也跟S連接被NAT B分配到埠200。這時雙方都和伺服器通信,A直接向B發送數據報的話,B會收到嗎?事實是數據一般會被NAT B給丟棄,畢竟對B來說這個數據可能是不安全的,那麼怎麼辦呢?就由S通知B在轉發表中增加關於A的項,這時A就可以正常向B發送數據了。記得以前看過一個形象的類比,A想去B家做客,但被B的管家NAT攔住了,畢竟B不認識A,這時就由中間人S向B做擔保,告訴他「we are family!」,再由B通知管家NAT,這樣A就可以進來了。其實很多網路協議抽象來看跟現實生活還是很像的~

摘自COMPUTER NETWORKING A Top-Down Approach


出路由器以後你再抓包看看


寫@郭無心 邀

簡單的說,一般網路設備並不識別你的IP是共有IP還是私有IP,都是一樣處理。

有一個設備會關注,就是NAT伺服器,他會修改你的報文,出方向,原IP 埠號,入方向,修改目的IP 埠號。

人在地鐵上,埋個坑,抽空還好好詳細補充NAT


NAT


以寫信來類比nat轉換的過程吧。假設你是北京大學的學生,你的通訊地址是北京大學x樓x號(私有ip)。國家規定,對外發信的許可權必須要在相關部門審批備案且名額有限,因此老百姓一般是拿不到許可權的(公有ip稀缺)。為了讓大家都能寫信,北大學生的對外信件統一以北大的地址發出,且為了區別你和你室友,北大郵局給你們各分配了一個編號。也就是說,別人看到的你的來信地址是北京大學001號。當然,你在寫信的時候不用考慮代號的分配問題,甚至你也不知道你的代號是多少,他有可能是固定的(靜態nat),也有可能不斷在變(動態nat)。你寫信的時候只需要填上你的真實地址就可以了,北大郵局為你分配代號並維護所有學生的代號-真實地址對應表(nat表)。收到南京大學002的回信後,北大郵局一看,收件人是北大001,在nat表中一查就知道你真實的收件地址就是x樓x棟,於是把收件地址改成你的真實地址,然後郵遞員就能找到你啦。在這個過程中,你自己填寫的都是你的私有地址,發出時北大郵局會改成北大001;但是你填寫的收件人地址南大002往往也是一個公有地址,因此你不知道對方的真實地址。這就是nat的基本原理。
總結一下,nat解決了兩個問題:
1.公有ip稀缺問題,讓大家都能寫信;
2.隱藏了已方的地址信息,提高了安全性。對方無法根據你的通信地址跨省你。
另外,nat一般由路由器,防火牆等三層設備完成,因此你在這些設備上抓包就能看到nat表以及包頭的變化。


我來回答下運營商是如何處理私網ip的。
1.NAT
2.出口策略
通常在isp的出口路由器上會做策略限制,在通告給peer 的策略里把私網ip段deny 掉。避免將私網地址廣播到公網。
3.入口策略
isp都會在peer入口做路由過濾,私網ip肯定不會被通告的。路由不是你想進,想進就能進。

?_?最近辭職的事很不開心,胡亂寫的。心情好了再補充下。歡迎大神補充


放在路由處抓。


網路設備本身不區分網路層的私有地址和公有地址,必須要通過具體配置之後才會區分


關鍵詞是 NAT
在CCNA裡面的知識點大概是在 IP addresssing Services 這一章


NAT


網路層


城域網中一般部署的有CGN設備,做NAT把私網地址轉換成公網。


推薦閱讀:

nginx不是使用epoll么? epoll貌似是同步的吧! 那nginx的非同步非阻塞到底非同步在哪裡?
DNS劫持和HTTP劫持有什麼區別?

TAG:路由器 | 計算機網路 | IP地址 | TCPIP | TCP |