[面試∙網路] TCP/IP(三):IP協議相關技術

bestswifter發表於2017-12-12

在前兩篇文章中,我分別介紹了資料鏈路層網路層的IP協議。雖然這個系列教程的重點是搞定 TCP/IP,不過不用著急,本文簡要介紹完與 IP 協議相關的技術,下一篇文章就會正式、詳細的介紹 傳輸層與 TCP 協議。這篇文章會介紹 DNSARPNAT 協議,這些內容雖然與 TCP 沒有直接關聯,但理解它們的原理有助於鞏固基礎知識,更好的理解網路的工作原理。

DNS 解析

IP地址用於識別通訊雙方的地址,但它是一串長數字,不方便記憶,人們希望主機有自己自己的名字,這個名字是唯一的,而且容易記住。於是,誕生了“域名”的概念。域名是一種為了識別主機名稱和機構名的具有分層的名稱,比如在域名 neu.edu.cn中,neu是主機名,educn 是不同層次下的機構名。

域名和 IP 地址都可以唯一對應一臺主機,DNS 協議的作用就是將自身具有意義的域名轉換成不容易記住的 IP 地址。

域名是分層的,每層都有自己的 DNS 伺服器用於處理 DNS 解析的請求。這樣的好處在於每層的伺服器不用關注過多的資訊,它只要知道自己這一層下的域名伺服器資訊即可。以解析域名: www.ietf.org為例:

DNS解析過程

根伺服器其實並不知道 www.ietf.org 的 IP 地址,但是它知道 itef.org 域名伺服器的地址,所以它把這條查詢請求轉發給 itef.org 域名伺服器。DNS請求被逐層下發,直到找到對應的 IP 地址為止。

ARP 協議

ARP 協議(Address Resolution Protocol)用於通過目標 IP 地址,定位下一個接收資料包的網路裝置的 MAC 地址。如果目標主機處在同一個資料鏈路上,那麼可以直接得到目標主機的 MAC 地址,否則會得到下一條路由器的 MAC 地址。

ARP 協議的工作原理可以分為兩部分:ARP 請求和 ARP 響應。 首先,源主機會通過廣播傳送一個 ARP 請求包:“我要與 IP 地址為 xxx 的主機通話,誰知道它的 MAC地址?”。

資料鏈路上的所有主機都會收到這條訊息並檢查自己的 IP 地址,如果與 ARP 請求包中的 IP 地址一致,主機就會傳送 ARP 響應包:“我就是 IP 地址為 xxx 的主機,我的 MAC 地址是:xxxx”。

下圖表示了 ARP 協議的工作機制:

ARP機制

在實際的使用過程中,每次往目標主機傳送資料都要使用 ARP 是很低效的,通常的做法是把獲取到的 MAC 地址快取一段時間。一般來說,一旦源主機向目標地址傳送一個資料包,接下來繼續傳送多次的概率非常大,因此這種快取非常容易命中。

當下一次傳送 ARP 請求或超過一定時間後,快取都會失效,這保證了即使 MAC 地址與 IP 地址的對應關係發生了變化,資料包依然能夠被正確的發往目標地址。

再次強調一下,MAC 和 IP 地址雖然看上去功能類似(都是用於唯一區分主機),但是兩者缺一不可。如果只有 IP 地址,雖然可以跳過 ARP,直接在資料鏈路上發一個廣播,但是這僅適用於通訊雙方處於同一個資料鏈路下的情況。如果雙方處於不同的資料鏈路,資料包無法穿透中間的路由器。

如果全世界只用 MAC 地址,那麼請參考交換機的自學過程,可以想象這個過程會帶來龐大的,不必要的流量。

正因為 MAC 和 IP 地址缺一不可,所以才產生了 ARP 這樣的協議將兩者關聯起來。

NAT 和 NAPT 技術

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

NAT工作原理

路由器只有一個對外的全域性 IP 地址,如果有多個內網主機都向外部通訊怎麼辦呢?這時就要使用 NAPT 技術,它和 NAT 從原理上類似,但它可以轉換 TCP 和 UDP 埠號。

使用 NAPT 技術時,不同的內網 IP 被轉換成同一個公共 IP 地址,也就是路由器對外顯示的全域性 IP 地址,但是被附加不同的埠號以示區分:

NAPT工作原理

不管是 NAT 還是 NAPT,都需要路由器路由器內部維護一張自動生成的地址轉換表。以 TCP 為例,建立 TCP 連線首次握手的 SYN 包發出時會生成這個表,關閉連線時會發出 FIN 包,收到這個包的應答時轉換表被刪除。

如果暫時不瞭解 TCP 協議和三次握手也沒有關係,下一篇文章將會有詳細的講解。

相關文章