我是個layman,對網路技術當中的IP理解不好,麻煩大家科普一下,謝謝?
大家好,最近在學習計算機網路技術基礎,因為要做一個非常小的物聯網系統。特此來提問一下:
首先說說我的理解:在IPv4協議裡面使用的NAT技術。在靜態NAT下,外網的IP要跟內網的IP在數量上保持一致,也就是說如果我們申請了兩個外網IP,那麼我們的內網只能有兩台電腦可以上網,再多的話就不行了。而動態NAT的話就是,相當於分時復用,可以允許多台內網電腦搭在路由上,但是也同時上網的內網電腦台數不能超過所持有的外網IP數量。請問這樣理解正確嗎?
————————————————————————————
接下來是我的疑問了(1)在PAT裡面,可以一個外網IP帶著若干台內網電腦,那如果同時有多台內網電腦要跟一個遠程的伺服器交換數據,那該怎麼辦呢?畢竟只有一個外網的IP,也就是說同一時刻也只允許一台電腦與伺服器交換數據啊,那個啥映射什麼的我理解的不太清楚,感覺也像是分時復用,就是說多個埠,對一個外網埠,先處理A埠再處理B埠再處理C埠……我不知道這樣理解對不對,要真是這樣的話,如果一個外網IP,而區域網內有好多台電腦都在上網,那豈不是這個數據流交換的速率就變低了?也就是內台電腦上網的速度就變慢了啊。(2)有個NAT技術,那理論上就可以在原來的IPv4基礎上,衍生出幾乎是數不盡的IP地址啦,一個外網IP可以通過NAT搭著兩台內網電腦,而內一台內網電腦又可以以NAT再搭別的電腦。。。。。
(3)看書上說子掩碼是用來區分網路號的,那個網路號是不是就是指A網B網C網那個網路號呢?兩個不同處在不同網段的IP設備之間不能互相訪問,那按照這個邏輯,我們任意兩台電腦都可以通過QQ進行通信,那如果甲上QQ的電腦在A網段,而乙上QQ的電腦在B網段,那它們之間是怎麼又能夠訪問到的???
我讀控制的,實在沒接觸過網路這方面的(雖然經常上網),就麻煩大家了,先謝了
基於TCP會話的動態NAT
什麼是TCP會話?
從哪裡來,TCP的術語就是 Source IP + Source Port
到哪裡去,TCP的術語就是Destination IP + Destination Port
那麼在TCP的眼中,下列五個元素的組合可以唯一識別一個TCP會話。
Source IP + Source Port + Destination IP + Destination Port + TCP
什麼是唯一識別?就是不會弄混了,在計算機資料庫里有一個名詞,叫鍵(Key),就是唯一識別碼,比如每個人都有自己的身份證,這個號碼就是一個鍵值,可以唯一識別一位公民,舉個例子:
有一個叫白富美的人,身份證號碼:
3101051990xxxx1234
用這個身份證ID可以唯一識別白富美這個人,那身份證ID就是鍵值。
而白富美這個人名卻不是是鍵值,因為全國叫白富美的人很多。
談完鍵值再來談正題,NAT路由器本地也有一個鍵值,那就是TCP Port,TCP Port 範圍在0 - 65535。只要讓TCP Port 與上述TCP會話一一對應起來,是不是就可以完成NAT了?
Source IP + Source Port + Destination IP + Destination Port + TCP &<----&> NAT IP + NAT TCP Port
由於NAT通常使用一個IP來做地址翻譯,所以上面的表可以簡化成:Source IP + Source Port + Destination IP + Destination Port + TCP &<----&> NAT TCP Port
所以NAT本地的TCP埠號可以唯一識別區域網的TCP連接會話。
NAT生成一張表記錄以上的映射關係,用戶瀏覽互聯網的TCP流量的 Source IP + Source Port 被替換成NAT IP + NAT TCP Port,等返程流量到達NAT時,再依據上面的映射表替換回去即可。
由於這種映射關係是由區域網內部用戶訪問互聯網而觸發的,NAT的映射關係是動態生成的,超時時間一般為5分鐘,5分鐘沒有流量刷新,映射關係將被清除,埠資源釋放給別人使用。
靜態NAT
但動態映射有一個問題,互聯網用戶不能主動發起TCP連接,為了在區域網內部跑一個Web伺服器,可以採用靜態映射,手動配置,比如:
1.1.1.1: TCP 80 &<----&> 10.10.10.10: TCP 80
那互聯網用戶就可以訪問1.1.1.1了,訪問請求到達NAT設備,會映射成 10.10.10.10,然後發給IP= 10.10.10.10的伺服器。
路由器包交換的方式
在沒有配置QoS優先順序隊列的情況下,採用的是先進先出FIFO的調度機制,誰先到,誰先得到服務,一般稱這種包交換方式為統計復用,而不說時分復用(TDM)。
你的理解是錯的,PAT不是時分復用,PAT是同時進行的。由於地址轉換這種東西不像無線電通信那樣有帶寬的物理限制,因此必須採用某種復用技術,nat可以並行進行,互不干擾。
pat就是用用一個公網IP+不同埠號,唯一確定一台內網主機。每當一台內網主機提交了一個訪問internet的請求,nat設備就從配置的地址池裡拿出一個public IP,再用某種演算法挑選一個可用的埠,把IP包里的源地址和源埠替換掉,然後交給路由邏輯。路由邏輯再根據目標地址定址、選定出介面,然後由轉發平面發送數據包。
完成以上動作後,nat設備上就有了一張session table,這個session table記錄了:
內網IP+內網埠+目標IP+目標埠+傳輸層協議
和與之對應的公網IP+公網源埠號+目標地址+目標埠+協議號
那麼遠程伺服器發回的應答數據包只需要查這個session table,就可以完成反向的地址轉化,然後把包送給對應的內網主機。
mark一下,睡覺前來答
一、先來看第一個問題
在IPv4協議裡面使用的NAT技術。在靜態NAT下,外網的IP要跟內網的IP在數量上保持一致,也就是說如果我們申請了兩個外網IP,那麼我們的內網只能有兩台電腦可以上網。
(這個問題前面我回答的有點問題,去搜了下NAT靜態的知識,發現跟我前面說的不一樣,來修改餘下,sorry)
靜態NAT的意思是NAT有一個公有網路ip地址池,當私有網路中的主機想要跟公有網路的主機進行通信時,NAT就從ip地址池中取出一個地址給這個主機,並維護一張地址映射表。
NAT地址池中有幾個地址就允許私有網路中有幾台主機同時連接到公有網路
二、第二個問題:
而動態NAT的話就是,相當於分時復用,可以允許多台內網電腦搭在路由上,但是也同時上網的內網電腦台數不能超過所持有的外網IP數量。請問這樣理解正確嗎?
這個理解也沒有問題,但是有細節我添加一下。
你這裡所指的內網,是一個私有網路,而私有網路的ip地址是不能與外網的ip地址相互通信的,路由器檢測到代表私有網路的ip,會直接丟棄這個分組。
那麼,如果私有網路的主機想要跟公網(網際網路)上的主機怎麼辦呢?,我們知道只有公網ip的主機才能在公網內進行分組傳輸,明白了這一點,那麼在私有網路中設置一個代理主機,這個主機具有公網的ip,只要私有網路的主機想要跟公網的主機進行通信,就將分組先轉交給這個代理主機,由這個代理主機再進行轉發,在同一時間,這個代理只能處理一個分組(不管這個分組是私有網路中的那個主機發來的,這個是由代理主機的cpu決定的)。
=====》但是這裡面會有一個問題,就是公網的ip收到了代理髮過來的分組,並回復代理一個分組,代理收到後,怎麼確定這個分組,應該交給私有網路中的哪個主機呢。
這個問題 @馬玉堂已經回答過,我這裡就不重複了。
ps:睡前來補充一下這個問題,對代理的路由來說,怎麼能確定這個分組應該交給私有網路中的那個分組呢。
私有網路的主機A準備和公共網路的主機B通信,首先會把分組發給代理路由,代理路由在收到A的數據報之後,會先把A發過來的ip數據包的源ip(A在私有網路中的IP地址)和目的ip(B在公網中的ip地址)先複製到自己維護的一張表中,然後修改這個分組的源ip(把A的ip替換成代理路由在公網中的ip),然後把轉發分組。
B在收到分組,只會認為這個分組是ip數據報當中的源ip主機發過來,所以它在回復的時候,會把目的ip設置為代理路由的ip,並且轉發出去。
代理路由收到B發過來的ip數據包,會先根據源ip(B在公網中的ip地址)在自己維護的表中查找真正的目的ip(A在私有網路中的ip),找到之後就修改ip分組中的目的ip(把代理路由的連接公網的ip替換成A在私有網路中的ip),並直接交付給A。
這樣就解決了上面這個問題。
但是雖然解決了上面這個問題,但是又引出了另外一個問題,如果私有網路中的兩台主機同時與公共網路中的某台主機通信,那麼代理路由在接受到分組後,應該轉發給私有網路兩台主機的哪一個呢?
(這個問題到這裡我也不清楚了,我要去翻翻資料,請接下去看)
三、再來看第三個問題
有個NAT技術,那理論上就可以在原來的IPv4基礎上,衍生出幾乎是數不盡的IP地址啦,一個外網IP可以通過NAT搭著兩台內網電腦,而內一台內網電腦又可以以NAT再搭別的電腦。
(這個問題我回答的不好,希望有大神來解答)
只要你可以讓兩個私有網路的主機可以相互通信,那麼確實可以作到你說的那樣,但是你有沒有想過效率的問題。
四、第四個問題
看書上說子掩碼是用來區分網路號的?
(這一塊的內容非常龐大,我個人在整理這一章筆記的時候,是先從網路層的作用開始, 接著定義出「虛擬互聯網路」,然後在虛擬互聯網路的基礎上,講ip地址的有類,有類的缺點,再來到處ip地址的子網劃分與子網掩碼,再然後就是無類地址劃分)
我直接回答這個問題吧,不再從頭開始推導。
這個子網掩碼確實是用來區分網路號的,區分網路號的一個原因是因為路由器是按照網路號來進行轉發的。
那個網路號是不是就是指A網B網C網那個網路號呢?
這個網路號曾經是你所認為A B C類的網路號,但是有類地址劃分,對ip地址的資源利用率不高,而且不夠靈活,所以又提出了一種無類的地址劃分,所以現在這個網路號並沒有類的概念,一個ip地址中的網路號是有子網掩碼來劃分的,只要將網路號與子網掩碼做「」運算,就能得出這個ip地址所屬的網路號。
兩個不同處在不同網段的IP設備之間不能互相訪問?
假設兩台ip設備所處的網段是共有網段,這兩設備是能互相訪問的。
這裡你要了解下路由的的轉發分組的過程。
(1)、路由器在轉發分組的時候,從ip數據包中提取出目的網路的網路號,如果這個網路號所標識的網路與這個路由相連,那麼就直接交付(這裡涉及到將數據鏈路層的內容),否則執行第二步。
(2)、在路由表中查到這個ip地址是否有指定特定路由,如果有,就轉發到特定路由,否則執行第三步。
(3)、在路由表中是否查到下一跳的路由,如果有,就轉發到下一跳的路由,否則執行第四步
(4)、查看是否有默認路由,如果有,就將該分組轉發給默認路由,否則執行第五步
(5)、走到第五步說明沒有當前路由在路由表中沒有找到下一跳的路由,那麼就表示終點不可達,就會發送一個icmp數據報報錯。
強答,可能有錯誤,僅供參考。
(1)PAT不存在時分復用性,PAT使用的是NAT盒的公網地址的TCP或UDP埠號來提供並發性。下面舉個栗子:
上例中,題主想要問的最終問題可能是同源目的IP下該如何區分這兩個是不同的通信。
在未NAT前的內網中。它們是這個樣子的:
(192.168.0.5,21023,TCP,202.196.48.20,80)
(192.168.0.5,386, TCP,201.196.48.20,80)
在轉換以後,伺服器看它們是這樣的:
(G,14003,TCP,202.196.48.20,80)
(G,14010,TCP,202.196.48.20,80)
G是NAT的公網地址。
面對不同的埠,伺服器自然會將這兩條信息當作兩條不同的通訊了。因此即使是內網中相同的一台主機向同一台伺服器發送不同的信息對伺服器來說也是萌大奶的,畢竟有個埠號這個大標識在。因為並非題主所想的那種時分復用,所以速度問題,主要還得看硬體給不給力。
(2)你說的沒錯,其實這個很常見。比如360隨身Wi-Fi的原理就是你所說的NAT復用下的NAT復用,理論上只要子網母網不在一個網段上,NAT復用網路可以子子孫孫無窮盡也。
(3)這個知識是VLAN的知識,同時你也問了關於超網融合和子網劃分的知識。我想首先回答你不同的QQ客戶端在不同網段上的通信問題,因為比較簡單。你說的不同網段不能通信這個規則僅僅適用於二層通信(數據鏈路層通信),一旦上升到三層通信(IP層通信)這條規則就並不適用。現實是我們基本都使用三層通信,二層通信在學校公司研究所等團體環境下比較多。不過因為家庭網路的興起,二層通信用到的場景要比三層通信少得多。QQ的通信場景也是三層通信(當然QQ有二層的應用場景)。
關於子網掩碼的問題。ABC類私網和子網掩碼沒有直接關係。子網掩碼只是用來標識網路位和主機位,與ABC類私有網路並沒有直接關係。我再舉個栗子:
IP-172.16.130.2 子網掩碼-255.255.255.0。
這個該如何判定ABC類私網呢?說實話,我也不知道=。=,我個人一直將這個當作B類私網地址的一個子網段。因此,子網掩碼只是用來標識網路位和主機位,與ABC類私網無關。
剛好在準備網路工程師,過來強答一發
小胖老師的回答已經很清楚了,這裡只是在稍微解釋一下。
NAT就是構造一張轉換表,表的一邊記錄內網傳送過來數據包的內網IP+源主機埠號,另一邊記錄路由器要發給伺服器的數據包的公網IP+修改後的埠號,這樣就把發出包與傳送給路由的包對應起來了。
另外TCP的識別是通過IP+埠號,所以在伺服器端,無論同一個IP發來多少個TCP鏈接,只要源埠號不一樣,伺服器都會新增一個進程來處理,不會混淆。
如果甲上QQ的電腦在A網段,而乙上QQ的電腦在B網段,那它們之間是怎麼又能夠訪問到的???
我回答一下這個題:主機A與主機B之間有路由器,於是主機A與主機B三層可達。其他的問題別人都回答了。但是你的下面這個問題:
====================引用========================================
(2)有個NAT技術,那理論上就可以在原來的IPv4基礎上,衍生出幾乎是數不盡的IP地址啦,一個外網IP可以通過NAT搭著兩台內網電腦,而內一台內網電腦又可以以NAT再搭別的電腦。。。。。
====================引用結束======================================
有的答案沒有涉及,有的回答是錯誤的。
即使不考慮帶寬和效率因素,一個外網ip也不能搭載無數台內網ip。
因為在NAT中,內網埠號要被映射為外網埠號。而外網埠號最多只有65536個,也就是說,一個外網ip最多只能帶65536個tcp,65536個udp。
1)需要了解osi七層模型的每一層作用是什麼,路由是什麼,會話是什麼。關於pat,你需要在inside和outside抓一個包,畢竟這是最直觀的感受。
2)確實有需要私有地址轉私有地址的情況,但是pc的cpu明顯不是以完成這種工作設計的,此外,管理負擔成指數增長。
3)qq不熟,據說一個內網裡的qq通信可以不走公網。但是,道理請參照1。
p.s.不要從最底層開始學,那樣只會感到學海無涯,回頭是岸。
用埠號區分,哈哈哈哈哈……
推薦閱讀:
※如何在一條丟包率 30% 的鏈路上建立低延遲連接?
※何時IPV6 才能普及?
※如何形象生動的解釋ip地址、子網掩碼、網關等概念?
※Python 爬蟲學到什麼樣就可以找工作了?
※有關ospf協議的一個問題?
TAG:互聯網 | 計算機網路 | IP地址 | TCPIP | NAT網路地址轉換協議 |