《TCP/IP詳解 卷1:協議》第3章 IP:網際協議

3.1 引言

IP是TCP/IP協議族中最爲核心的協議。所有的TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸(見圖1-4)。許多剛開始接觸TCP/IP的人對IP提供不可靠、無連接的數據報傳送服務感到很奇怪,特別是那些具有X.25或SNA背景知識的人。

不可靠(unreliable)的意思是它不能保證IP數據報能成功地到達目的地。IP僅提供最好的傳輸服務。如果發生某種錯誤時,如某個路由器暫時用完了緩衝區,IP有一個簡單的錯誤處理算法:丟棄該數據報,然後發送ICMP消息報給信源端。任何要求的可靠性必須由上層來提供(如TCP)。

無連接(connectionless)這個術語的意思是IP並不維護任何關於後續數據報的狀態信息。每個數據報的處理是相互獨立的。這也說明,IP數據報可以不按發送順序接收。如果一信源向相同的信宿發送兩個連續的數據報(先是A,然後是B),每個數據報都是獨立地進行路由選擇,可能選擇不同的路線,因此B可能在A到達之前先到達。

在本章,我們將簡要介紹IP首部中的各個字段,討論IP路由選擇和子網的有關內容。還要介紹兩個有用的命令:ifconfignetstat。關於IP首部中一些字段的細節,將留在以後使用這些字段的時候再進行討論。RFC 791[Postel 1981a]是IP的正式規範文件。

3.2 IP首部

IP數據報的格式如圖3-1所示。普通的IP首部長爲20個字節,除非含有選項字段。

圖3-1 IP數據報格式及首部中的各字段

第3章 IP:網際協議25 

圖3-2 服務類型字段推薦值

Te lnet和Rlogin這兩個交互應用要求最小的傳輸時延,因爲人們主要用它們來傳輸少量的交互數據。另一方面,FTP文件傳輸則要求有最大的吞吐量。最高可靠性被指明給網絡管理(SNMP)和路由選擇協議。用戶網絡新聞(Usenet news, NNTP)是唯一要求最小費用的應用。

現在大多數的TCP/IP實現都不支持TO S特性,但是自4.3BSD Reno以後的新版系統都對它進行了設置。另外,新的路由協議如OSPF和IS-IS都能根據這些字段的值進行路由決策。

26TCP/IP詳解,卷1:協議 

圖3-3 數據報從主機bsdi到sun的傳送過程

數據報被送到以太網驅動程序,然後作爲一個以太網數據幀被送到sun主機上(見圖2-1)。IP數據報中的目的地址是以太網140.252.13,而在 鏈路層首部中的目的地址是48bit的sun主機的以太網接口地址。這個48bit的以太網地址是用ARP協議獲得的,我們將在下一章對此進行描述。

現在來看另一個例子:主機bsdi有一份IP數據報要傳到ftp.uu.net主機上,它的IP地址是192.48.96.9。經過的前三個路由器如圖3-4所示。首先,主機bsdi搜索路由表,但是沒有找到與主機地址或網絡地址相匹配的表目,因此只能用默認的表目,把數據報傳給下一站路由器,即主機sun。當數據報從bsdi被傳到sun主機上以後,目的IP地址是最終的信宿機地址(192.48.96.9),但是鏈路層地址卻是sun主機的以太網接口地址。這與圖3-3不同,在那裏數據報中的目的IP地址和目的鏈路層地址都指的是相同的主機(sun)。

圖3-4 從bsdiftp.uu.net(192.48.96.9)的初始路徑

30TCP/IP詳解,卷1:協議 

圖3-5 B類地址的一種子網編址

第3章 IP:網際協議31 

圖3-6 網絡noao.edu(140.252)中的大多數子網安排

32TCP/IP詳解,卷1:協議 

圖3-7 兩種不同的B類地址子網掩碼的例子

儘管IP地址一般以點分十進制方法表示,但是子網掩碼卻經常用十六進制來表示,特別是當界限不是一個字節時,因爲子網掩碼是一個比特掩碼。

給定IP地址和子網掩碼以後,主機就可以確定IP數據報的目的是:(1)本子網上的主機;(2)本網絡中其他子網中的主機;(3)其他網絡上的主機。如果知道本機的IP地址,那麼就知道它是否爲A類、B類或C類地址(從IP地址的高位可以得知),也就知道網絡號和子網號之間的分界線。而根據子網掩碼就可知道子網號與主機號之間的分界線。

舉例

假設我們的主機地址是140.252.1.1(一個B類地址),而子網掩碼爲255.255.255.0(其中8bit爲子網號,8bit爲主機號)。

  1. 如果目的IP地址是140.252.4.5,那麼我們就知道B類網絡號是相同的(140.252),但是子網號是不同的(1和4)。用子網掩碼在兩個IP地址之間的比較如圖3-8所示。

  2. 如果目的IP地址是140.252.1.22,那麼B類網絡號還是一樣的(140.252),而且子網號也是一樣的(1),但是主機號是不同的。

  3. 如果目的IP地址是192.43.235.6(一個C類地址),那麼網絡號是不同的,因而進一步的比較就不用再進行了。

圖3-8 使用子網掩碼的兩個B類地址之間的比較

第3章 IP:網際協議33 

圖3-9 特殊情況的IP地址

我們把這個表分成三個部分。表的頭兩項是特殊的源地址,中間項是特殊的環回地址,最後四項是廣播地址。

表中的頭兩項,網絡號爲0,如主機使用BOOTP協議確定本機IP地址時只能作爲初始化過程中的源地址出現。

在12.2節中,我們將進一步分析四類廣播地址。

3.7 一個子網的例子

這個例子是本文中採用的子網,以及如何使用兩個不同的子網掩碼。具體安排如圖3-10所示。

圖3-10 作者所在子網中的主機和網絡安排

如果把該圖與扉頁前圖相比,就會發現在圖3-10中省略了從路由器sun到上面的以太網之間的連接細節,實際上它們之間的連接是撥號SLIP。這個細節不影響本節中討論的子網劃分問題。我們在4.6節討論ARP代理時將再回頭討論這個細節。

34TCP/IP詳解,卷1:協議 

圖3-11 變長子網

140.252.13子網中的所有接口的子網掩碼是255.255.255.224,或0xffffff e0。這表明最右邊的5bit留給主機號,左邊的27 bit留給網絡號和子網號。

圖3-10中所有接口的IP地址和子網掩碼的分配情況如圖3-12所示。

圖3-12 作者子網的IP地址

第1欄標爲是“主機”,但是sunbsdi也具有路由器的功能,因爲它們是多接口的,可以把分組數據從一個接口轉發到另一個接口。

這個表中的最後一行是圖3-10中的廣播地址140.252.13.63:它是根據以太網子網號(140.252.13.32)和圖3-11中的低5位置1(16+8+4+2+1=31)得來的(我們在第12章中將看到,這個地址被稱作以子網爲目的的廣播地址(subnet-directed broadcast address))。

第3章 IP:網際協議35 

環回接口(2.7節)被認爲是一個網絡接口。它是一個A類地址,沒有進行子網劃分。

需要注意的是以太網沒有采用尾部封裝(2.3節),而且可以進行廣播,而SLIP鏈路是一個點對點的鏈接。

SLIP接口的標誌LINK0是一個允許壓縮slip的數據(CSLIP,參見2.5節)的配置選項。其他的選項有LINK1(如果從另一端收到一份壓縮報文,就允許採用CSLIP)和LINK2(所有外出的ICMP報文都被丟棄)。我們在4.6節中將討論SLIP鏈接的目的地址。

 

安裝指南中的註釋對最後這個選項進行了解釋:“一般它不應設置,但是由於一些不當的ping操作,可能會導致吞吐量降到0。”

 

bsdi是另一臺路由器。由於-a參數是SunOS操作系統具有的功能,因此我們必須多次執行ifconfig,並指定接口名字參數:

這裏,我們看到以太網接口(we0)的一個新選項:SIMPLEX。這個4.4BSD標誌表明接口不能收到本機傳送的數據。在BSD/386中所有的以太網都這樣設置。一旦這樣設置後,如果接口發送一幀數據到廣播地址,那麼就會爲本機拷貝一份數據送到環回地址(在6.3小節我們將舉例說明這一點)。

在主機slip中,SLIP接口的設置基本上與上面的bsdi一致,只是兩端的IP地址進行了互換:

最後一個接口是主機svr4上的以太網接口。它與前面的以太網接口類似,只是SVR4版的ifconfig沒有打印RUNNING標誌:

36TCP/IP詳解,卷1:協議 

這個命令打印出每個接口的MTU、輸入分組數、輸入錯誤、輸出分組數、輸出錯誤、衝突以及當前的輸出隊列長度。

在第9章將用netstat命令檢查路由表,那時再回頭討論該命令。另外,在第13章將用它的一個改進版本來查看活動的廣播組。

3.10 IP的未來

IP主要存在三個方面的問題。這是Internet在過去幾年快速增長所造成的結果(參見習題1.2)。

  1. 超過半數的B類地址已被分配。根據估計,它們大約在1995年耗盡。

  2. 32 bit的IP地址從長期的Internet增長角度來看,一般是不夠用的。

  3. 當前的路由結構沒有層次結構,屬於平面型(flat)結構,每個網絡都需要一個路由表目。隨着網絡數目的增長,一個具有多個網絡的網站就必須分配多個C類地址,而不是一個B類地址,因此路由表的規模會不斷增長。

無類別的域間路由選擇CIDR(Classless Interdomain Routing)提出了一個可以解決第三個問題的建議,對當前版本的IP(IP版本4)進行擴充,以適應21世紀Internet的發展。對此我們將在10.8節進一步詳細介紹。

對新版的IP,即下一代IP,經常稱作IPng,主要有四個方面的建議。1993年5月發行的IEEE Network (vol.7, no.3)對前三個建議進行了綜述,同時有一篇關於CIDR的論文。RFC1454[Dixon 1993]對前三個建議進行了比較。

  1. SIP,簡單Internet協議。它針對當前的IP提出了一個最小幅度的修改建議,採用64位地址和一個不同的首部格式(首部的前4比特仍然包含協議的版本號,其值不再是4)。

  2. PIP。這個建議也採用了更大的、可變長度的和有層次結構的地址,而且首部格式也不相同。

  3. TUBA,代表“TCP and UDP with Bigger Address”,它基於OSI的CLNP(Connectionless Network Protocol,無連接網絡協議),一個與IP類似的OSI協議。它提供大得多的地址空間:可變長度,可達20個字節。由於CLNP是一個現有的協議,而SIP和PIP只是建議,因此關於CLNP的文檔已經出現。RFC 1347[Callon 1992]提供了TUBA的有關細節。文獻[Perlman 1992]的第7章對IPv4和CLNP進行了比較。許多路由器已經支持CLNP,但是很少有主機也提供支持。

  4. TP/IX,由RFC 1475[Ullmann 1993]對它進行了描述。雖然SIP採用了64 bit的址址,但是它還改變了TCP和UDP的格式:兩個協議均爲32 bit的端口號,64 bit的序列號,64 bit的確認號,以及TCP的32 bit窗口。

第3章 IP:網際協議37

前三個建議基本上採用了相同版本的TCP和UDP作爲傳輸層協議。

由於四個建議只能有一個被選爲IPv4的替換者,而且在你讀到此書時可能已經做出選擇,因此我們對它們不進行過多評論。雖然CIDR即將實現以解決目前的短期問題,但是IPv4後繼者的實現則需要經過許多年。

3.11 小結

本章開始描述了IP首部的格式,並簡要討論了首部中的各個字段。我們還介紹了IP路由選擇,並指出主機的路由選擇可以非常簡單:如果目的主機在直接相連的網絡上,那麼就把數據報直接傳給目的主機,否則傳給默認路由器。

在進行路由選擇決策時,主機和路由器都使用路由表。在表中有三種類型的路由:特定主機型、特定網絡型和默認路由型。路由表中的表目具有一定的優先級。在選擇路由時,主機路由優先於網絡路由,最後在沒有其他可選路由存在時才選擇默認路由。

IP路由選擇是通過逐跳來實現的。數據報在各站的傳輸過程中目的IP地址始終不變,但是封裝和目的鏈路層地址在每一站都可以改變。大多數的主機和許多路由器對於非本地網絡的數據報都使用默認的下一站路由器。

A類和B類地址一般都要進行子網劃分。用於子網號的比特數通過子網掩碼來指定。我們爲此舉了一個實例來詳細說明,即作者所在的子網,並介紹了變長子網的概念。子網的劃分縮小了Internet路由表的規模,因爲許多網絡經常可以通過單個表目就可以訪問了。接口和網絡的有關信息通過ifconfignetstat命令可以獲得,包括接口的IP地址、子網掩碼、廣播地址以及MTU等。

在本章的最後,我們對Internet協議族潛在的改進建議——下一代IP進行了討論。

習題

  1. 環回地址必須是127.0.0.1嗎?

  2. 在圖3-6中指出有兩個網絡接口的路由器。

  3. 子網號爲16 bit的A類地址與子網號爲8bit的B類地址的子網掩碼有什麼不同?

  4. 閱讀RFC 1219[Tsuchiya 1991],學習分配子網號和主機號的有關推薦技術。

  5. 子網掩碼255.255.0.255是否對A類地址有效?

  6. 你認爲爲什麼3.9小節中打印出來的環回接口的MTU要設置爲1536?

  7. TCP/IP協議族是基於一種數據報的網絡技術,即IP層,其他的協議族則基於面向連接的網絡技術。閱讀文獻[Clark 1988],找出數據報網絡層提供的三個優點。

本文同步發表: https://www.geek-share.com/detail/2752945343.html

《TCP/IP詳解 卷1:協議》在線整理版目錄導航

百度網盤下載地址: https://pan.baidu.com/s/1G0vHiGbE_JV-M73HRCSjFA 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章