在前兩篇文章中,我分別介紹了數據鏈路層和網絡層的IP協議。雖然這個系列教程的重點是搞定 TCP/IP,不過不用着急,本文簡要介紹完與 IP 協議相關的技術,下一篇文章就會正式、詳細的介紹 傳輸層與 TCP 協議。這篇文章會介紹 DNS
、ARP
、NAT
協議,這些內容雖然與 TCP 沒有直接關聯,但理解它們的原理有助於鞏固基礎知識,更好的理解網絡的工做原理。緩存
IP地址用於識別通訊雙方的地址,但它是一串長數字,不方便記憶,人們但願主機有本身本身的名字,這個名字是惟一的,並且容易記住。因而,誕生了「域名」的概念。域名是一種爲了識別主機名稱和機構名的具備分層的名稱,好比在域名 neu.edu.cn
中,neu
是主機名,edu
和 cn
是不一樣層次下的機構名。服務器
域名和 IP 地址均可以惟一對應一臺主機,DNS 協議的做用就是將自身具備意義的域名轉換成不容易記住的 IP 地址。網絡
域名是分層的,每層都有本身的 DNS 服務器用於處理 DNS 解析的請求。這樣的好處在於每層的服務器不用關注過多的信息,它只要知道本身這一層下的域名服務器信息便可。以解析域名: www.ietf.org
爲例:翻譯
根服務器其實並不知道 www.ietf.org
的 IP 地址,可是它知道 itef.org
域名服務器的地址,因此它把這條查詢請求轉發給 itef.org
域名服務器。DNS請求被逐層下發,直到找到對應的 IP 地址爲止。code
ARP 協議(Address Resolution Protocol)用於經過目標 IP 地址,定位下一個接收數據包的網絡設備的 MAC 地址。若是目標主機處在同一個數據鏈路上,那麼能夠直接獲得目標主機的 MAC 地址,不然會獲得下一條路由器的 MAC 地址。cdn
ARP 協議的工做原理能夠分爲兩部分:ARP 請求和 ARP 響應。 首先,源主機會經過廣播發送一個 ARP 請求包:「我要與 IP 地址爲 xxx
的主機通話,誰知道它的 MAC地址?」。blog
數據鏈路上的全部主機都會收到這條消息並檢查本身的 IP 地址,若是與 ARP 請求包中的 IP 地址一致,主機就會發送 ARP 響應包:「我就是 IP 地址爲 xxx
的主機,個人 MAC 地址是:xxxx
」。教程
下圖表示了 ARP 協議的工做機制:路由
在實際的使用過程當中,每次往目標主機發送數據都要使用 ARP 是很低效的,一般的作法是把獲取到的 MAC 地址緩存一段時間。通常來講,一旦源主機向目標地址發送一個數據包,接下來繼續發送屢次的機率很是大,所以這種緩存很是容易命中。get
當下一次發送 ARP 請求或超過必定時間後,緩存都會失效,這保證了即便 MAC 地址與 IP 地址的對應關係發生了變化,數據包依然可以被正確的發往目標地址。
再次強調一下,MAC 和 IP 地址雖然看上去功能相似(都是用於惟一區分主機),可是二者缺一不可。若是隻有 IP 地址,雖然能夠跳過 ARP,直接在數據鏈路上發一個廣播,可是這僅適用於通訊雙方處於同一個數據鏈路下的狀況。若是雙方處於不一樣的數據鏈路,數據報沒法穿透中間的路由器。
若是全世界只用 MAC 地址,那麼請參考交換機的自學過程,能夠想象這個過程會帶來龐大的,沒必要要的流量。
正由於 MAC 和 IP 地址缺一不可,因此才產生了 ARP 這樣的協議將二者關聯起來。
NAT (Network Address Translator) 是一種用於將局域網中的私有地址轉換成全局 IP 地址的技術。
在鏈接上無線路由器的時候,若是檢查一下設備的 IP 地址,也許你會發現是相似於 192.168.1.1
這樣的局域網 IP 地址。那不一樣網段中,IP 地址都是 192.168.1.1
的主機改如何通訊呢?
下圖描繪了 NAT 的工做原理:
局域網中 IP 地址爲 10.0.0.10
的主機向全局 IP 地址 163.221.120.9
發送數據。NAT 路由器將數據包的源地址修改爲本身的全局 IP 地址:202.244.174.37
。同理,接收數據時,路由器把目標地址 202.244.174.37
翻譯成內網地址:10.0.0.10
路由器只有一個對外的全局 IP 地址,若是有多個內網主機都向外部通信怎麼辦呢?這時就要使用 NAPT 技術,它和 NAT 從原理上相似,但它能夠轉換 TCP 和 UDP 端口號。
使用 NAPT 技術時,不一樣的內網 IP 被轉換成同一個公共 IP 地址,也就是路由器對外顯示的全局 IP 地址,可是被附加不一樣的端口號以示區分:
不論是 NAT 仍是 NAPT,都須要路由器路由器內部維護一張自動生成的地址轉換表。以 TCP 爲例,創建 TCP 鏈接首次握手的 SYN 包發出時會生成這個表,關閉鏈接時會發出 FIN 包,收到這個包的應答時轉換表被刪除。
若是暫時不瞭解 TCP 協議和三次握手也沒有關係,下一篇文章將會有詳細的講解。