《圖解TCP/IP》讀書筆記五:IP協議相關技術

衣舞晨風發表於2018-02-10

這裡寫圖片描述

5.3 ARP

5.3.1 ARP概要

      ARP屬於資料鏈路層協議。

      ARP(Address Resolution Protocol)是一種解決地址問題的協議。以目標IP地址為線索,用來定位下一個應該接收資料分包的網路裝置對應的MAC地址。如果目標主機不在同一個連路上時,可以通過ARP查詢下一跳路由器的MAC地址。不過ARP只適用於IPv4,不能用於IPv6。IPv6中可以可以用ICMPv6替代ARP傳送鄰居探索訊息。

5.3.2 ARP的工作機制

      ARP如何知道MAC地址的呢?簡單說,ARP是藉助ARP請求與ARP響應兩種型別的包確定MAC地址的。

      假定主機A向同一鏈路上的主機B傳送IP包,它們互不知道對方的MAC地址。
這裡寫圖片描述

      主機A為了獲得主機B的MAC地址,起初要通過廣播傳送一個ARP請求包。這個包中包含了想要了解其MAC地址的主機IP地址。就是說,ARP請求包中已經包含了主機B的IP地址。由於廣播的包可以被同一個鏈路上的所有主機或路由器接收,因此ARP的請求包也會被著同一個鏈路上所有主句和路由器進行解析。如果ARP請求包中的目標IP地址與自己的IP地址一致,那麼這個節點就將自己的MAC地址塞入ARP響應包返回給主機A。

      總之,從一個IP地址傳送ARP請求包以瞭解其MAC地址(ARP請求包還有一個作用,那就是將自己的MAC地址告訴給對方),目標地址將自己的MAC地址填入其中的ARP響應包返回到IP地址。由此,可以通過ARP從IP地址獲得MAC地址,實現鏈路內的IP通訊。

      根據ARP可以動態地進行地址解析,因此,在TCP/IP的網路構造和網路通訊中無需事先知道MAC地址是什麼,只要有IP地址即可。

      如果每傳送一個IP資料包都要進行一次ARP請求以此確定MAC地址,那將會造成不必要的網路流量。通常做法是把獲取到的MAC地址快取一段時間。即把第一次通過ARP獲取到的MAC地址作為IP對MAC的對映關係記憶到一個ARP快取表中(記錄IP地址與MAC地址對應關係的資料庫叫做ARP表。通過arp-e命令獲取該表資訊),下一次再向這個IP地址傳送資料包時不需再重新傳送ARP請求,而是直接使用這個快取表當中MAC地址進行資料包的傳送。每次執行一次ARP,而是直接使用這個快取表當中的MAC地址進行資料包的傳送。每執行一次ARP,其對應的快取內容會被清除。不過在清除之前都可以不需要執行ARP就可以獲取想要的MAC地址。這樣,在一定程度上也防止了ARP包在網路上被大量廣播的可能性。

      一般來說,傳送過一次IP資料包的主機,繼續傳送多次IP資料包的可能性會比較高。因此,這種快取能夠有效地減少ARP包的傳送。反之,接收ARP請求的那個主機又可以從這個ARP請求包獲取傳送端主機的IP地址及其MAC地址。這時他也可以將這些MAC地址的資訊快取起來,從而根據MAC地址傳送ARP響應包給傳送端主機。類似的,接收到IP資料包的主機又往往會繼續返回IP資料包給傳送端主機,以作為相應。因此,在接收主機端快取MAC地址也是一種提高效率的方法。

      不過,MAC地址的快取是有一定期限的。超過了這個期限,快取的內容將被清除。這使得MAC地址與IP地址對應關係即使發生了變化,也依然能將資料包正確地傳送給目標地址。
這裡寫圖片描述

5.3.3 IP地址和MAC地址缺一不可?

      出現的疑問是:只要知道了IP地址,即使不做ARP,只要在資料鏈路上做一個廣播不就能發給主機B了麼?那麼,為什麼既需要IP地址又需要MAC地址呢?

      如下的案例,主機A想要傳送IP資料包給主機B時必須得經過路由器C。即使知道了主機B的MAC地址,由於路由器C會隔斷兩個網路,還是無法實現直接從主機A傳送資料包給主機B。此時主機A必須得先將資料包傳送給路由器C的MAC地址C1。

這裡寫圖片描述

5.3.4 RARP

      RARP(Reverse Address Resolution Protocol)是將ARP反過來,從MAC地址定位IP地址的一種協議。例如將印表機伺服器等小型嵌入式裝置接入到網路時就會用到。
這裡寫圖片描述
      平常我們可以通過個人電腦設定IP地址,也可以通過DHCP自動分配獲得IP地址。然而,對於使用嵌入式裝置時,會遇到沒有任何輸入介面或無法通過DHCP動態獲取IP地址的情況。

      在類似情況下,就可以使用RARP。為此,需要架設一臺RARP伺服器,從而在這個伺服器上註冊裝置的MAC地址及其IP地址。然後再將這個裝置接入到網路。

5.4 ICMP

5.4.1 輔助IP的ICMP

      ICMP的主要功能包括,確認IP包是否成功送達目標地址,通知在傳送過程當中IP包被廢棄的具體原因,改善網路設定等。

      在IP通訊中如果某個IP包因為某種原因未能到達目標地址,那麼這個具體原因將由ICMP負責通知。

      如下圖,主機A向主機B傳送了資料包,由於某種原因,途中的路由器2未能發現主機B的存在,這時,路由器2就會向主機A傳送一個ICMP包,說明發往主機B的包未能成功。
這裡寫圖片描述

      ICMP的這種通知訊息會使用IP進行傳送(在ICMP中,包以明文的形式像TCP/UDP一樣通過IP進行傳輸。然而,ICMP所承擔的功能並非傳輸層的補充,而應該把它考慮為IP的一部分)。因此,從路由器2返回的ICMP包會按照往常的路由控制先經過路由器1再轉發給主機A。收到該ICMP包的主機A則分解ICMP的首部和資料域以後得知具體發生問題的原因。

      ICMP的訊息大致可以分為兩類:一類是通知出錯原因的錯誤訊息,另一類是用於診斷的查詢訊息。

5.4.2 主要的ICMP訊息

ICMP 重定向訊息

      如果路由器發現傳送端主機使用次優的路徑傳送資料時,那麼它會返回一個 ICMP 重定向訊息給這個主機,這個訊息包含了最合適的路由資訊和源資料。主要發生在路由器持有更好的路由資訊的情況下,路由器會通過這個 ICMP 重定向訊息給傳送端主機一個更合適的傳送路由。
這裡寫圖片描述

      不過,多數情況下由於這種重定向訊息成為引發問題的原因,所以往往不進行這種設定。

ICMP 超時訊息

      IP 資料包中有一個欄位 TTL(Time to live,生存週期),它的值隨著每經過一個路由器就會減 1,直到減到 0 時該 IP 資料包被丟棄。此時,IP 路由器將傳送一個 ICMP 超時訊息給傳送端主機,並通知該包已被丟棄。

      設定IP包生存週期的主要目的,是為了在路由控制遇到問題發生迴圈狀況時,避免IP包無休止地在網路上被轉發。

5.5 DHCP

5.5.1 DHCP實現即插即用

      逐一為每一臺主機設定IP地址會非常繁瑣。為了實現自動設定IP地址,同一管理IP地址分配,就產生了DHCP(Dynamic Host Configuration Protocol)協議。有了DHCP,計算機只要連線到網路,就可以進行TCP/IP通訊。DHCP不僅在IPv4中,在IPv6中也可以使用。

5.5.3 DHCP中繼代理

      家庭網路大多數都只有一個乙太網(無線LAN)的網段,逾期連線的主機臺數也不會太多。因此,只要有一臺DHCP伺服器就足以應對IP地址分配的需求,而大多數情況下都由寬頻路由器充當這個DHCP的角色。

5.6 NAT

5.6.1 NAT定義

      NAT(Network Address Translator)是用於在本地網路中使用私有地址,在連線網際網路時轉而使用全域性IP地址的技術。除轉換IP地址外,還出現了可以轉換TCP、UDP埠號的NAPT(Network Address Ports Translator)技術,由此可以實現用一個全域性IP地址與多個主機通訊。

      NAT(NAPT)實際上是為了正在面臨地址枯竭的IPv4而開發的技術。IPv6中為了提高網路安全也在使用NAT,在IPv4和IPv6之間的相互通訊當中常常使用NAT-PT。

5.6.2 NAT的工作機制

這裡寫圖片描述
      在NAT(NAPT)路由器的內部,有一張自動生成的用來轉換地址的表。當10.0.0.10向163.221.120.9傳送第一個包時生成這張表,並按照表中的對映關係進行處理。

      當私有網路內的多臺機器同時都要與外部進行通訊,僅僅轉換IP地址,人們擔心全域性IP地址是否不夠用。這是採用包含埠號一起轉換的方式(NAPT)可以解決這個問題。
這裡寫圖片描述

      在使用TCP或UDP的通訊當中,只有目標地址、源地址、目標埠、源埠以及協議型別(TCP還是UDP)五項內容都一致時才被認為是同一個通訊連線。此時所使用的正是NAPT。

      這種轉換表在NAT路由器上自動生成。例如,在TCP情況下,建立TCP連線首次握手時的SYN包一經發出,就會生成這個表。而後又隨著收到關閉連線時發出FIN包的確認應答從表中被刪除。

5.6.3 NAT-PT(NAPT-PT)

      現在很多網際網路服務都基於IPv4。如果這些服務不能做到IPv6中也能正常使用的話,搭建IPv6網路環境的有時也就無從談起。

      為此,就產生了NAT-PT(NAPT-PT)規範,PT是Protocol Translatio的縮寫。NAT-PT是將IPv6的首部轉換為IPv4的首部的一種技術。有了這種技術,那些只有IPv6地址的主機也就能夠與IPv4地址的其他主機進行通訊了。
這裡寫圖片描述

5.6.4 NAT的潛在問題

由於NAT(NAPT)都依賴於自己的轉化表,因此會有幾點限制:

  • 無法從NAT的外部向內部伺服器建立連線。
  • 轉化表的生成以轉換操作都會產生一定的開銷。
  • 通訊過程中一旦NAT遇到異常需重新啟動時,所有的TCP連線都將被重置。
  • 即使備置兩臺NAT做容災備份,TCP連線還是會被斷開。

5.6.5 解決NAT的潛在問題與NAT穿越

解決NAT上述潛在的問題有兩種方法:

  • 第一種方法就是改用IPv6。在IPv6環境下可用的IP地址範圍有了極大的擴充套件,以至於公司或家庭當中所有裝置都可以配置一個全域性IP地址。因為如果地址枯竭問題解決了,就沒必要使用NAT了。
  • 另一種方法是,即使是在一個沒有NAT的環境裡,根據所製作的應用,使用者可以完全忽略NAT的存在而進行通訊。在NAT內側(私有IP地址的一邊)主機上執行的應用為了生成NAT轉換表,需要先傳送一個虛擬的網路包給NAT的外側。而NAT並不知道這個虛擬包究竟是什麼,還是會照樣讀取包首部中的內容並自動生成一個轉換表。這時,如果轉換表構造合理,那麼還能實現NAT外側的主機與內側的主機建立連線進行通訊。有了這個辦法,就可以讓那些處在不同NAT內側的主機之間也能夠進行相互通訊。此外,應用還可以與NAT路由器進行通訊生成NAT表,並通過一定方法將NAT路由器上附屬的全域性IP地址傳給應用。
    如此一來,NAT外側與內側可以進行通訊,這種現象叫做“NAT穿越”。於是NAT那個“無法從NAT的外部向內部伺服器建立連線”的問題也就迎刃而解了。而且這種方法與已有的IPv4環境相容性非常好,即使不遷移到IPv6也能通訊自如。出於這些優勢,市面上已經出現了大量與NAT緊密集合的應用(由此,IPv4的壽命又被延長,向IPv6的遷移也就放慢腳步了)。

5.7 IP隧道

這裡寫圖片描述

      網路A、B使用IPv6,如果處於中間位置的網路C支援使用IPv4的話,網路A與網路B之間將無法直接進行通訊。為了讓它們之間正常通訊,這時必須得采用IP隧道的功能。

      IP隧道中可以將那些從網路A發過來的IPv6的包統和為一個資料,再為之追加一個IPv4的首部以後在轉發給網路C。

      一般情況下,緊接著IP首部的是TCP/UDP的首部。然而,現在的應用當中“IP首部的後面還是IP首部”或者“IP首部的後面是IPv6的首部”等情況與日俱增。這種在網路層的首部後面繼續追加網路層首部的通訊方法就叫做“IP隧道”。
這裡寫圖片描述

NAT-PT和隧道的差別
NAT-PT和隧道都是IPv4向IPv6過渡的技術,但是它們之間的實現和適用範圍都是有很大的不同的。
首先報文轉換和轉發的方式不同,這個是NAT-PT和隧道最根本的差別。NAT-PT是對報文的網路層內容進行轉換修改,剝離原先的報文頭,替換為轉換之後的報文頭(IPv4àIPv6或者IPv6àIPv4);而隧道是對初始報文作另一層報文封裝,根據隧道的不同型別加上相應的報文頭。
正是由於轉換的方式不同,導致他們檢查報文的方式也不同。NAT-PT會檢查並且可以更改報文中的埠號;而隧道從來不會檢查報文的傳輸層內容。
轉換方式的不同同樣致使了他們的使用範圍不一樣,NAT-PT一般適用於IPv4與IPv6不同網路中主機互相訪問的環境中;而隧道一般用於實現一種網路協議跨越另一種網路協議之間的通訊。所以,形成NAT-PT的環境只需要有一臺可以進行NAT-PT轉換的裝置即可;而構造一種隧道的環境就必須要兩臺裝置形成一個隧道。

《圖解TCP/IP:第5版》下載地址:
http://download.csdn.net/download/xunzaosiyecao/10245906

個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章