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

weixin_33935777發表於2018-11-14

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路由選擇和子網的有關內容。還要介紹兩個有用的命令:ifconfig和netstat。關於IP首部中一些欄位的細節,將留在以後使用這些欄位的時候再進行討論。RFC 791[Postel 1981a]是IP的正式規範檔案。

3.2 IP首部

IP資料包的格式如圖3-1所示。普通的IP首部長為20個位元組,除非含有選項欄位。

13696553-02b13383c3459ee7.png

圖3-1 IP資料包格式及首部中的各欄位

第3章 IP:網際協議25

13696553-f8a1e58079fc83e9.png

圖3-2 服務型別欄位推薦值

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

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

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

13696553-0dbac0f4a8966afa.png

圖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)。

13696553-04af084432ac6202.png

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

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

13696553-baebf850ede1969e.png

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

第3章 IP:網際協議31

13696553-e37ef86fbe13faa1.png

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

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

13696553-630d95d6242e2e6f.png

圖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為主機號)。

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

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

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

13696553-1afe57ba3e0018be.png

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

第3章 IP:網際協議33

13696553-79ac3e8b2b03863b.png

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

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

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

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

3.7 一個子網的例子

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

13696553-c2297704bdd818ad.png

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

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

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

13696553-e12beffa359b3ba1.png

圖3-11 變長子網

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

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

13696553-a949f333a277d3eb.png

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

第1欄標為是“主機”,但是sun和bsdi也具有路由器的功能,因為它們是多介面的,可以把分組資料從一個介面轉發到另一個介面。

這個表中的最後一行是圖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

13696553-7260eb3c4ca180f1.png

環回介面(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,並指定介面名字引數:

13696553-280571ffff0c858c.png

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

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

13696553-11876efc83137661.png

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

13696553-f0597358c0e6f3db.png

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

13696553-29e3ccf8a2bb7d1d.png

這個命令列印出每個介面的MTU、輸入分組數、輸入錯誤、輸出分組數、輸出錯誤、衝突以及當前的輸出佇列長度。

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

3.10 IP的未來

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

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

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

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

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

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

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

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

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,但是很少有主機也提供支援。

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路由表的規模,因為許多網路經常可以通過單個表目就可以訪問了。介面和網路的有關資訊通過ifconfig和netstat命令可以獲得,包括介面的IP地址、子網掩碼、廣播地址以及MTU等。

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

習題

環回地址必須是127.0.0.1嗎?

在圖3-6中指出有兩個網路介面的路由器。

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

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

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

你認為為什麼3.9小節中列印出來的環回介面的MTU要設定為1536?

TCP/IP協議族是基於一種資料包的網路技術,即IP層,其他的協議族則基於面向連線的網路技術。閱讀文獻[Clark 1988],找出資料包網路層提供的三個優點。

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

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

第1章 概述

第2章 鏈路層

第3章 IP:網際協議

第4章 ARP:地址解析協議

第5章 RARP:逆地址解析協議

第6章 ICMP:Internet控制報文協議

第7章 Ping程式

第8章 Traceroute程式

第9章 IP選路

第10章 動態選路協議

第11章 UDP:使用者資料包協議

第12章 廣播和多播

第13章 IGMP:Internet組管理協議

第14章 DNS:域名系統

第15章 TFTP:簡單檔案傳送協議

第16章 BOOTP:載入程式協議

第17章 TCP:傳輸控制協議

第18章 TCP連線的建立與終止

第19章 TCP的互動資料流

第20章 TCP的成塊資料流

第21章 TCP的超時與重傳

第22章 TCP的堅持定時器

第23章 TCP的保活定時器

第24章 TCP的未來和效能

第25章 SNMP:簡單網路管理協議

第26章 Telnet和Rlogin:遠端登入

第27章 FTP:檔案傳送協議

第28章 SMTP:簡單郵件傳送協議

第29章 網路檔案系統

第30章 其他的TCP/IP應用程式

附錄A tcpdump程式

附錄B 計算機時鐘

附錄C sock程式

附錄D 部分習題的解答

附錄E 配置選項

附錄F 可以免費獲得的原始碼

參考文獻

縮略語

《TCP/IP詳解》學習筆記(一):基本概念

《TCP/IP詳解》學習筆記(二):資料鏈路層

《TCP/IP詳解》學習筆記(三):IP協議、ARP協議

《TCP/IP詳解》學習筆記(四):ICMP 協議、ping 和 Traceroute

《TCP/IP詳解》學習筆記(五):IP選路、動態選路

《TCP/IP詳解》學習筆記(六):UDP 協議

《TCP/IP詳解》學習筆記(七):廣播和多播、IGMP協議

《TCP/IP詳解》學習筆記(八):DNS 域名系統

《TCP/IP詳解》學習筆記(九):TCP 協議概述

《TCP/IP詳解》學習筆記(十):TCP 連線的建立與中止

《TCP/IP詳解》學習筆記(十一):TCP 互動資料流、成塊資料流

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

相關文章