網絡通訊

網關:緩存

你們都知道,從一個 房間走到另外一個房間,必然要通過一扇門。一樣,從一個網絡向另外一個網絡發送信
網關 網關
息,也必須通過一道「 關口」,這道關口就是網關。 顧名思義,網關( Gateway[1]   就是一個網絡鏈接到另外一個網絡的「關口」。也就是網絡 關卡
網關(Gateway)又稱網間鏈接器、協議轉換器。默認網關在 網絡層上以實現網絡互連,是最複雜的網絡互連設備,僅用於兩個高層協議不一樣的網絡互連。網關的結構也和 路由器相似,不一樣的是互連層。網關既能夠用於 廣域網互連,也能夠用於 局域網互連 [1]   。
【說明:因爲歷史的緣由,許多有關TCP/IP的文獻曾經把網絡層使用的路由器稱爲網關,在今天不少局域網採用都是路由來接入網絡,所以一般指的網關就是路由器的IP!】 [2]  
OSI中,網關有兩種:一種是面向鏈接的網關,一種是無鏈接的網關。當兩個 子網之間有必定距離時,每每將一個網關分紅兩半,中間用一條鏈路鏈接起來,咱們稱之爲半網關。
按照不一樣的分類標準,網關也有不少種。 TCP/IP協議裏的網關是最經常使用的,在這裏咱們所講的「網關」均指TCP/IP協議下的網關。
那麼網關究竟是什麼呢?網關實質上是一個網絡通向其餘網絡的 IP地址。好比有網絡A和網絡B,網絡A的 IP地址範圍爲「192.168.1.1~192. 168.1.254」, 子網掩碼爲255.255.255.0;網絡B的IP地址範圍爲「192.168.2.1~192.168.2.254」,子網掩碼爲255.255.255.0。 在沒有路由器的狀況下,兩個網絡之間是不能進行TCP/IP通訊的,即便是兩個網絡鏈接在同一臺交換機(或集線器)上,TCP/IP協議也會根據子網掩碼(255.255.255.0)斷定兩個網絡中的主機處在不一樣的網絡裏。而要實現這兩個網絡之間的通訊,則必須經過網關。若是網絡A中的主機發現數據包的目的主機不在本地網絡中,就把數據包轉發給它本身的網關,再由網關轉發給網絡B的網關,網絡B的網關再轉發給網絡B的某個主機(如附圖所示)。網絡A向網絡B轉發數據包的過程。
因此說,只有設置好網關的IP地址,TCP/IP協議才能實現不一樣網絡之間的相互通訊。那麼這個IP地址是哪臺機器的IP地址呢?網關的IP地址是具備路由功能的設備的IP地址,具備路由功能的設備有路由器、啓用了路由協議的服務器(實質上至關於一臺路由器)、代理服務器(也至關於一臺路由器)。
 
 
網絡通訊流程:
對於主機B的IP地址這時主機A也應該知道,要否則它就不清楚本身將要和誰通訊,當有了本身的IP地址,MAC地址以及主機B的IP地址後,主機A在數據包中能夠正確地寫上源IP地址,目標IP地址,接下來的工做就是寫入本身的MAC地址(即源MAC),最後還必須正確寫入目標主機B的MAC地址,可這時主機A才發現本身根本沒有目標主機B的MAC地址,那該怎麼辦呢?這時主機A就經過比較上面已經封裝好的源IP和目標IP,經過子網掩碼計算一下,發現源IP和目標IP剛好在同一個IP網絡內,那麼它想要獲得目標主機B的MAC地址就有辦法了,首先主機A就向本網段發過一個ARP請求,這個ARP請求包中包括主機A的源IP地址,源MAC地址,目標主機B的IP地址,而目標MAC地址爲廣播MAC地址(所有爲F),由於咱們要找的就是目標MAC,因此這裏用廣播MAC地址,又由於是以太網,因此整個局域網的全部主機都能收到這個請求MAC地址的數據包,固然主機B也能收到,所以在主機B收到此ARP請求後,當即構建一個包括本身的MAC地址的ARP迴應包,迴應給主機A,當主機A收到這個ARP迴應後,終於完成了找尋目標MAC的重大任務,從而把目標主機B的MAC地址正確封裝進上面還未封裝結束的正準備發給主機B的數據包,在這時,源IP和源MAC以及目標IP和目標MAC都已正確存在於數據包中,那麼這裏主機A向網絡內發出這些數據包,由於目標地址在本網段,因此本網段全部主機都能收到這個數據包(這是以太網的特性),最後只有真正的目標主機B可以打開這些數據包,在此,同網段兩臺主機之間的通訊就此圓滿結束!在這裏應該注意另一個問題,由於主機A要尋找的目標主機B在同一網絡,因此主機A可以經過ARP獲得目標主機B的MAC地址,從而完成通訊,當主機A在封裝數據包時檢測到目標主機並不在本網段,在這時,數據包不能把目標主機的MAC地址順利封裝進去,那麼就用到另外一種方法,那就是網關,主機A在準備發向主機B的數據中,封裝好本身的IP地址和MAC地址,同時也封裝好目標主機B的IP地址,數據包封裝到這裏,主機A就利用上面獲得同網段目標主機B的方法去請求獲得網關的MAC地址,一樣也是用ARP去廣播,由於網關必須和本機在同一網段,理所固然,網關可以收到這個ARP請求並能正確迴應給主機A,這時主機A在數據包中封裝好本身的IP地址和MAC地址,同時也 封裝好目標主機B的IP地址和網關的MAC地址,把數據包從網卡發出去,由於目標MAC是網關的,因此網關收到這個數據包後,發現目標MAC是本身,而目標IP倒是別人,因此它不能夠再往上打開這個數據包,它要作的工做就是把這些數據包發給下一跳路由器(若是網關自身就是一臺路由器的話),若是網關是一臺普通PC,那麼它就發給路由器,讓路由器把這些數據包正確傳輸到遠程目標網絡,到達遠程網絡後,它們的網關再將數據包發給數據包中的目標IP,即源主機A苦苦尋找的目標主機B,從而真正結束不一樣網絡之間的通訊,迴應的數據包也是用一樣的方法到達目的地,在這裏,還須要注意的是,當網關把數據包發給下一跳路由器時,這個數據包必須由網關把目標MAC改爲下一跳路由器的MAC地址(經過ARP獲得),不然下一跳路由器收到目標MAC不是本身的數據包,會丟棄不予理睬,下一跳路由器再發給下一跳路由器一樣要把目標MAC地址改成下一跳路由器的MAC地址再發出去!
 
非同一網段的主機不能直接通訊的緣由:
來看你的問題,環境以下,咱們來用一個ping命令的過程來解釋:
一個交換機,連兩個電腦A和B,A和B不在一個網段,他們的IP分別是192.168.1.2,255.255.255.0,B是 192.168.2.1,255.255.255.0,網關也能夠設也能夠不設,但其實你設了也是個假的網關,由於在你的環境裏面只有一個交換機,並無路由器,對嗎?

A ping B:
1.Ping命令會構建一個固定格式的ICMP請求數據包,而後由ICMP協議將這個數據包連同IP地址「192.168.2.1」一塊兒交給IP層協議.
2.IP協議會查看目的IP地址是否和源IP在同一網段,若是在同一網段就直接查找ARP緩存,查找目的MAC,若是目的IP地址是否和源IP不在同一網段,那麼就將數據包發送到網關.
3.按照前面的描述,在A電腦上有兩種狀況,1是沒設網關 2是設了一個假的網關,那麼若是沒設的話,數據包到這一步就丟棄了,目的IP和源IP不在一個網段並且A沒有網關,那麼就沒法發送.若是A設網關了的話,接着往走.
4.假設A電腦設定的網關是192.168.1.1,那麼IP協議知道了目的IP,可是不知道目的MAC,因此會查找A電腦的ARP緩存,看裏面有沒有目的MAC,很遺憾,確定沒有,由於環境裏並無這個網關設備存在.因此A會發一個ARP廣播到192.168.1.X整個網段,來查找IP是192.168.1.1 的MAC,固然,物理上就不存在192.168.1.1這個設備,天然就沒有設備來響應這個ARP廣播,因此最終IP協議沒法知道目的MAC,就沒法將數據包往下一個層數據鏈路層傳遞.

回到最開始,仍是那句話:IOS一共七層, 發送數據的過程是從上到下,也就是從應用層一直到物理層,接收數據是從下至上.
 
網關和主機必須在同一網段內嗎?不用
1 二者在同一網段,就會直接把包發向目標IP,這時要作:

        1.1 查本地arp緩存,看看是否有IP和Mac的對應表.

              1.1.1 有,直接向網絡上發包,包中包括原mac及目標mac。

               1.1.2 沒有,則向網絡發arp廣播,用來查找與目標IP對應的mac地址(ARP發送的是廣播數據,電纜上的每一個以太網接口都要接收廣播的數據幀)

                         1.1.2.1 若是查到了,則向網絡發包。

                         1.1.2.2 沒查到,則不通信。

2 二者不在同一網段,則把目標地址轉爲網關地址(也就是平時說的向網關發包),而後查找本地arp緩存,繼續1.1 。

由此能夠看出,源主機和網關的通信過程當中,並不會檢查二者是否是同一網段,而是直接去查arp緩存或者發送ARP廣播。因此是可能通信的。
 
爲何同時須要IP地址和MAC地址

主要緣由有如下幾點:安全

(1)IP地址的分配是根據網絡的拓樸結構,而不是根據誰製造了網絡設置。若將高效的路由選擇方案創建在設備製造商的基礎上而不是網絡所處的拓撲位置基礎上,這種方案是不可行的。服務器

(2)當存在一個附加層的地址尋址時,設備更易於移動和維修。例如,若是一個以太網卡壞了,能夠被更換,而無須取得一個新的IP地址。若是一個IP主機從一個網絡移到另外一個網絡,能夠給它一個新的IP地址,而無須換一個新的網卡。網絡

(3)方便數據傳輸。不管是局域網,仍是廣域網中的計算機之間的通訊,最終都表現爲將數據包從某種形式的鏈路上的初始節點出發,從一個節點傳遞到另外一個節點,最終傳送到目的節點。數據包在這些節點之間的移動都是由ARP協議負責將IP地址映射到MAC地址上來完成的。網站

 

目的mac地址是如何獲得的?url

TCP/IP裏面是用的ARP協議。好比新建了一個內網,若是一臺機器A找機器B,封裝FRAME時(OSI的第二層用的數據格式),要封裝對方的MAC,開始時A不知道B的MAC,只知道IP,它就發一個ARP包,源IP是本身的,目的IP是B的,源MAC是本身的,目的MAC是廣播的。而後這個請求包在內網內被廣播,當其餘機器接到這個包時,用目的IP和本身的IP比較,不是的話就丟棄。B接到時,發現IP與本身的同樣,就答應這個包的請求,把本身的MAC送給A。若是B是其餘子網的機器,那麼路由器會判斷出B是其餘子網,而後路由器把本身的MAC返回給A,A之後再給B發包時,目的MAC封裝的是路由器的。spa

路由轉發過程:.net

當主機A發向主機B的數據流在網絡層封裝成IP數據包,IP數據包的首部包含了源地址和目標地址。主機A會用本機配置的24位IP網絡掩碼255.255.255.0與目標地址進行與運算,得出目標網絡地址與本機的網絡地址是否是在同一個網段中。若是不是將IP數據包轉發到網關。代理

在發往網關前主機A還會經過ARP的請求得到默認網關的MAC地址。在主機A數據鏈路層IP數據包封裝成以太網數據幀,而後才發住到網關……也就是路由器上的一個端口。htm

當網關路由器接收到以太網數據幀時,發現數據幀中的目標MAC地址是本身的某一個端口的物理地址,這時路由器會把以太網數據幀的封裝去掉。路由器認爲這個IP數據包是要經過本身進行轉發,接着它就在匹配路由表。匹配到路由項後,它就將包發往下一條地址。

路由器轉發數據包就是這樣,因此它始終是不會改IP地址的。只會改MAC.

當有數據包傳到路由器時,路由器首先將其的目的地址與路由表進行對比,若是是本地網絡,將不會進行轉發到外網絡,而是直接轉發給本地網內的目的主機;可是若是目的地址經路由表對比,發現不是在本網中,有nat就將改變源地址的IP(原源地址的Ip地址改成了路由器的IP地址),路由器將數據包轉發到相應的端口,進行通訊。

 
 
NAT:
NAT不只能解決了lP地址不足的問題,並且還可以有效地避免來自網絡外部的攻擊,隱藏並保護網絡內部的計算機。
1.寬帶分享:這是 NAT 主機的最大功能。
2.安全防禦:NAT 以內的 PC 聯機到 Internet 上面時,他所顯示的 IP 是 NAT 主機的公共 IP,因此 Client 端的 PC 固然就具備必定程度的安全了,外界在進行 portscan(端口掃描) 的時候,就偵測不到源Client 端的 PC 。
 
端口映射:
端口映射分爲動態和靜態。動態端口映射:內網中的一臺電腦要訪問網站,會向NAT網關發送數據包,包頭中包括對方網站IP、端口和本機IP、端口,NAT網關會把本機IP、端口替換成本身的公網IP、一個未使用的端口,而且會記下這個映射關係,爲之後轉發數據包使用。而後再把數據發給網站,網站收到數據後作出反應,發送數據到NAT網關的那個未使用的端口,而後NAT網關將數據轉發給內網中的那臺電腦,實現內網和公網的通信.當鏈接關閉時,NAT網關會釋放分配給這條鏈接的端口,以便之後的鏈接能夠繼續使用。
動態端口映射其實也就是NAT網關的工做方式。
靜態端口映射::就是在NAT網關上開放一個固定的端口,而後設定此端口收到的數據要轉發給內網哪一個IP和端口,無論有沒有鏈接,這個映射關係都會一直存在。就可讓公網主動訪問內網的一臺電腦。
 
 原理
2.1 地址轉換
NAT的基本工做原理是,當私有網主機和公共網主機通訊的IP包通過NAT網關時,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉換。
以下圖所示,NAT網關有2個網絡端口,其中公共網絡端口的IP地址是統一分配的公共 IP,爲202.20.65.5;私有網絡端口的IP地址是保留地址,爲192.168.1.1。私有網中的主機192.168.1.2向公共網中的主機202.20.65.4發送了1個IP包(Dst=202.20.65.4,Src=192.168.1.2)。

 

當IP包通過NAT網關時,NAT Gateway會將IP包的源IP轉換爲NAT Gateway的公共IP並轉發到公共網,此時IP包(Dst=202.20.65.4,Src=202.20.65.5)中已經不含任何私有網IP的信息。因爲IP包的源IP已經被轉換成NAT Gateway的公共IP,Web Server發出的響應IP包(Dst= 202.20.65.5,Src=202.20.65.4)將被髮送到NAT Gateway。
這時,NAT Gateway會將IP包的目的IP轉換成私有網中主機的IP,而後將IP包(Des=192.168.1.2,Src=202.20.65.4)轉發到私有網。對於通訊雙方而言,這種地址的轉換過程是徹底透明的。轉換示意圖以下。

 

若是內網主機發出的請求包未通過NAT,那麼當Web Server收到請求包,回覆的響應包中的目的地址就是私網IP地址,在Internet上沒法正確送達,致使鏈接失敗。
2.2 鏈接跟蹤
在上述過程當中,NAT Gateway在收到響應包後,就須要判斷將數據包轉發給誰。此時若是子網內僅有少許客戶機,能夠用靜態NAT手工指定;但若是內網有多臺客戶機,而且各自訪問不一樣網站,這時候就須要鏈接跟蹤(connection track)。以下圖所示:

 

在NAT Gateway收到客戶機發來的請求包後,作源地址轉換,而且將該鏈接記錄保存下來,當NAT Gateway收到服務器來的響應包後,查找Track Table,肯定轉發目標,作目的地址轉換,轉發給客戶機。
2.3 端口轉換
以上述客戶機訪問服務器爲例,當僅有一臺客戶機訪問服務器時,NAT Gateway只須更改數據包的源IP或目的IP便可正常通信。可是若是Client A和Client B同時訪問Web Server,那麼當NAT Gateway收到響應包的時候,就沒法判斷將數據包轉發給哪臺客戶機,以下圖所示。

此時,NAT Gateway會在Connection Track中加入端口信息加以區分。若是兩客戶機訪問同一服務器的源端口不一樣,那麼在Track Table里加入端口信息便可區分,若是源端口正好相同,那麼在時行SNAT和DNAT的同時對源端口也要作相應的轉換,以下圖所示。

 

 

 
動態域名解析:
動態域名解析服務,是將用戶的動態IP地址映射到一個固定的域名解析服務上,用戶每次鏈接網絡的時候,客戶端程序就會經過信息傳遞把該主機的動態IP地址傳送給位於服務商主機上的服務器程序,服務程序負責提供DNS服務並實現動態域名解析。就是說DDNS捕獲用戶每次變化的IP地址,而後將其與域名相對應,這樣域名就能夠始終解析到非固定IP的服務器上,互聯網用戶經過本地的域名服務器得到網站域名的IP地址,從而能夠訪問網站的服務。
相關文章
相關標籤/搜索