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

3.1 引言

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

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

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

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

3.2 IP首部

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

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

第3章 IP:網際協議25 tcp

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

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 

相關文章
相關標籤/搜索