TCP/IP協議技術應用知識彙總

OSI網絡分層參考模型

網絡協議設計者不應當設計一個單一、巨大的協議來爲所有形式的通信規定完整的細節,而應把通信問題劃分成多個小問題,然後爲每一個小問題設計一個單獨的協議。這樣做使得每個協議的設計、分析、時限和測試比較容易。協議劃分的一個主要原則是確保目標系統有效且效率高。爲了提高效率,每個協議只應該注意沒有被其他協議處理過的那部分通信問題;爲了主協議的實現更加有效,協議之間應該能夠共享特定的數據結構;同時這些協議的組合應該能處理所有可能的硬件錯誤以及其它異常情況。爲了保證這些協議工作的協同性,應當將協議設計和開發成完整的、協作的協議系列(即協議族),而不是孤立地開發每個協議。

在網絡歷史的早期,國際標準化組織(ISO)和國際電報電話諮詢委員會(CCITT)共同出版了開放系統互聯的七層參考模型。一臺計算機操作系統中的網絡過程包括從應用請求(在協議棧的頂部)到網絡介質(底部) ,OSI參考模型把功能分成七個分立的層次。圖2.1表示了OSI分層模型。

 

  ┌─────┐

  │ 應用層 │←第七層

  ├─────┤

  │ 表示層 │

  ├─────┤

  │ 會話層 │

  ├─────┤

  │ 傳輸層 │

  ├─────┤

  │ 網絡層 │

  ├─────┤

  │數據鏈路層│

  ├─────┤

  │ 物理層 │←第一層

  └─────┘

  圖2.1 OSI七層參考模型

 

OSI模型的七層分別進行以下的操作:

第一層——物理層

第一層負責最後將信息編碼成電流脈衝或其它信號用於網上傳輸。它由計算機和網絡介質之間的實際界面組成,可定義電氣信號、符號、線的狀態和時鐘要求、數據編碼和數據傳輸用的連接器。如最常用的RS-232規範、10BASE-T的曼徹斯特編碼以及RJ-45就屬於第一層。所有比物理層高的層都通過事先定義好的接口而與它通話。如以太網的附屬單元接口(AUI),一個DB-15連接器可被用來連接層一和層二。

第二層——數據鏈路層

數據鏈路層通過物理網絡鏈路提供可靠的數據傳輸。不同的數據鏈路層定義了不同的網絡和協議特徵,其中包括物理編址、網絡拓撲結構、錯誤校驗、幀序列以及流控。物理編址(相對應的是網絡編址)定義了設備在數據鏈路層的編址方式;網絡拓撲結構定義了設備的物理連接方式,如總線拓撲結構和環拓撲結構;錯誤校驗向發生傳輸錯誤的上層協議告警;數據幀序列重新整理並傳輸除序列以外的幀;流控可能延緩數據的傳輸,以使接收設備不會因爲在某一時刻接收到超過其處理能力的信息流而崩潰。數據鏈路層實際上由兩個獨立的部分組成,介質存取控制(Media Access Control,MAC)和邏輯鏈路控制層(Logical Link Control,LLC)。MAC描述在共享介質環境中如何進行站的調度、發生和接收數據。MAC確保信息跨鏈路的可靠傳輸,對數據傳輸進行同步,識別錯誤和控制數據的流向。一般地講,MAC只在共享介質環境中才是重要的,只有在共享介質環境中多個節點才能連接到同一傳輸介質上。IEEE MAC規則定義了地址,以標識數據鏈路層中的多個設備。邏輯鏈路控制子層管理單一網絡鏈路上的設備間的通信,IEEE 802.2標準定義了LLC。LLC支持無連接服務和麪向連接的服務。在數據鏈路層的信息幀中定義了許多域。這些域使得多種高層協議可以共享一個物理數據鏈路。

第三層——網絡層

網絡層負責在源和終點之間建立連接。它一般包括網絡尋徑,還可能包括流量控制、錯誤檢查等。相同MAC標準的不同網段之間的數據傳輸一般只涉及到數據鏈路層,而不同的MAC標準之間的數據傳輸都涉及到網絡層。例如IP路由器工作在網絡層,因而可以實現多種網絡間的互聯。

第四層——傳輸層

傳輸層向高層提供可靠的端到端的網絡數據流服務。傳輸層的功能一般包括流控、多路傳輸、虛電路管理及差錯校驗和恢復。流控管理設備之間的數據傳輸,確保傳輸設備不發送比接收設備處理能力大的數據;多路傳輸使得多個應用程序的數據可以傳輸到一個物理鏈路上;虛電路由傳輸層建立、維護和終止;差錯校驗包括爲檢測傳輸錯誤而建立的各種不同結構;而差錯恢復包括所採取的行動(如請求數據重發),以便解決發生的任何錯誤。傳輸控制協議(TCP)是提供可靠數據傳輸的TCP/IP協議族中的傳輸層協議。

第五層——會話層

會話層建立、管理和終止表示層與實體之間的通信會話。通信會話包括髮生在不同網絡應用層之間的服務請求和服務應答,這些請求與應答通過會話層的協議實現。它還包括創建檢查點,使通信發生中斷的時候可以返回到以前的一個狀態。

第六層——表示層

表示層提供多種功能用於應用層數據編碼和轉化,以確保以一個系統應用層發送的信息可以被另一個系統應用層識別。表示層的編碼和轉化模式包括公用數據表示格式、性能轉化表示格式、公用數據壓縮模式和公用數據加密模式。

公用數據表示格式就是標準的圖像、聲音和視頻格式。通過使用這些標準格式,不同類型的計算機系統可以相互交換數據;轉化模式通過使用不同的文本和數據表示,在系統間交換信息,例如ASCII(American Standard Code for Information Interchange,美國標準信息交換碼);標準數據壓縮模式確保原始設備上被壓縮的數據可以在目標設備上正確的解壓;加密模式確保原始設備上加密的數據可以在目標設備上正確地解密。

表示層協議一般不與特殊的協議棧關聯,如QuickTime是Applet計算機的視頻和音頻的標準,MPEG是ISO的視頻壓縮與編碼標準。常見的圖形圖像格式PCX、GIF、JPEG是不同的靜態圖像壓縮和編碼標準。

第七層——應用層

應用層是最接近終端用戶的OSI層,這就意味着OSI應用層與用戶之間是通過應用軟件直接相互作用的。注意,應用層並非由計算機上運行的實際應用軟件組成,而是由嚮應用程序提供訪問網絡資源的API(Application Program Interface,應用程序接口)組成,這類應用軟件程序超出了OSI模型的範疇。應用層的功能一般包括標識通信夥伴、定義資源的可用性和同步通信。因爲可能丟失通信夥伴,應用層必須爲傳輸數據的應用子程序定義通信夥伴的標識和可用性。定義資源可用性時,應用層爲了請求通信而必須判定是否有足夠的網絡資源。在同步通信中,所有應用程序之間的通信都需要應用層的協同操作。

OSI的應用層協議包括文件的傳輸、訪問及管理協議(FTAM) ,以及文件虛擬終端協議(VIP)和公用管理系統信息(CMIP)等。

2.2 TCP/IP分層模型

TCP/IP分層模型(TCP/IP Layening Model)被稱作因特網分層模型(Internet Layering Model)、因特網參考模型(Internet Reference Model)。圖2.2表示了TCP/IP分層模型的四層。













 

  ┌────────┐┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐

  │        ││D│F│W│F│H│G│T│I│S│U│ │

  │        ││N│I│H│T│T│O│E│R│M│S│其│

  │第四層,應用層 ││S│N│O│P│T│P│L│C│T│E│ │

  │        ││ │G│I│ │P│H│N│ │P│N│ │

  │        ││ │E│S│ │ │E│E│ │ │E│它│

  │        ││ │R│ │ │ │R│T│ │ │T│ │

  └────────┘└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

  ┌────────┐┌─────────┬───────────┐

  │第三層,傳輸層 ││   TCP   │    UDP    │

  └────────┘└─────────┴───────────┘

  ┌────────┐┌─────┬────┬──────────┐

  │        ││     │ICMP│          │

  │第二層,網間層 ││     └────┘          │

  │        ││       IP            │

  └────────┘└─────────────────────┘

  ┌────────┐┌─────────┬───────────┐

  │第一層,網絡接口││ARP/RARP │    其它     │

  └────────┘└─────────┴───────────┘

      圖2.2 TCP/IP四層參考模型

TCP/IP協議被組織成四個概念層,其中有三層對應於ISO參考模型中的相應層。ICP/IP協議族並不包含物理層和數據鏈路層,因此它不能獨立完成整個計算機網絡系統的功能,必須與許多其他的協議協同工作。

TCP/IP分層模型的四個協議層分別完成以下的功能:

第一層——網絡接口層

網絡接口層包括用於協作IP數據在已有網絡介質上傳輸的協議。實際上TCP/IP標準並不定義與ISO數據鏈路層和物理層相對應的功能。相反,它定義像地址解析協議(Address Resolution Protocol,ARP)這樣的協議,提供TCP/IP協議的數據結構和實際物理硬件之間的接口。

第二層——網間層

網間層對應於OSI七層參考模型的網絡層。本層包含IP協議、RIP協議(Routing Information Protocol,路由信息協議),負責數據的包裝、尋址和路由。同時還包含網間控制報文協議(Internet Control Message Protocol,ICMP)用來提供網絡診斷信息。

第三層——傳輸層

傳輸層對應於OSI七層參考模型的傳輸層,它提供兩種端到端的通信服務。其中TCP協議(Transmission Control Protocol)提供可靠的數據流運輸服務,UDP協議(Use Datagram Protocol)提供不可靠的用戶數據報服務。

第四層——應用層

應用層對應於OSI七層參考模型的應用層和表達層。因特網的應用層協議包括Finger、Whois、FTP(文件傳輸協議)、Gopher、HTTP(超文本傳輸協議)、Telent(遠程終端協議)、SMTP(簡單郵件傳送協議)、IRC(因特網中繼會話)、NNTP(網絡新聞傳輸協議)等,這也是本書將要討論的重點。

2.3 IP地址

前面的章節我們已經指出,由於不同網絡的硬件存在不同類型的地址,TCP/IP需要有它自己的地址編碼系統。IP協議規定每臺主機(嚴格地說是每個因特網接口)都通過一個32位全局唯一的因特網地址來標識。通常IP地址是採用以點隔開的四個十進制數的形式來表示。每個數代表地址中的一個二位十六進制數(即八位二進制數)。例如IP地址205.187.251.2就表示相應的四個二位十六進制值 CD BB FB 02。

2.3.1 地址基本編碼格式

在IPv4(IP協議,版本4)標準中,每個32位IP地址包含兩個部分:網絡標識符和網絡內的主機編號。沒有兩個網絡能夠分配同一個網絡標識符,同一網絡上的兩臺計算機也不可能分配同一個主機編號。IANA負責分配網絡標識符,以確保網絡標識符的唯一性、因特網服務提供商(Internet Service Provider,ISP)或網絡管理員負責維護同一網絡上主機編號的唯一性等。網絡標識符和主機編號的邊界由IP地址的類別來確定,不同類別的IP地址能夠滿足不同規模網絡的組網需要。爲了滿足不同的網絡與主機比例的期望值,IP協議將地址編碼分成三種基本類別:A類、B類、C類。D類地址是爲多點廣播而定義的,剩餘的E類地址保留爲實驗使用,如圖2.3所示。

  0          1          2          3

  0 123456789001234567890012345678901

  ┌─┬─────┬─────────────────────────┐

  │0│網絡標識符│        主機編號             │A類

  ├─┴┬────┴────────┬────────────────┤

  │10│網絡標識符        │     主機編號       │B類

  ├──┴┬────────────┴───────┬────────┤

  │110│       網絡標識符        │  主機編號  │C類

  ├───┴┬───────────────────┴────────┤

  │1110│         多點廣播地址             │D類

  ├────┴┬───────────────────────────┤

  │11110│        實驗保留地址             │E類

  └─────┴───────────────────────────┘

      圖2.3 IP地址的五種類別

 

A類網絡地址第一位爲“0”。前8位(0~7)代表網絡標識符,後24位(8~31)代表本網絡上的主機編號。因此這類網絡存在128(27)個A類網絡標識符,每個網絡有16777216(224)臺主機。例如10.0.0.1代表A類網10.0.0.0和1號主機。B類網絡地址的前兩位是“10”。前16位(0~15)代表網絡標識符,每個網絡有65536(216)臺主機。例如128.1.0.1代表B類網128.1.0.0和1號主機。C類網絡地址的前三位是“110”。前24位(0~23)代表網絡標識符,後8位(24~31)代表網絡上的主機編號。C類網絡存在2097152(221)個網絡標識符,每個網絡有256(28)臺主機。例如192.0.1.1代表C類網192.0.1.0和1號主機。可見地址的類別可以從第一個主機號辨別。可見IP地址的類別可以由第一個十進制數的範圍辨別,如圖2.4所示。

  ┌─┬────────┬───────┬────────┐

  │類│第一個10進制數│  網絡數目 │   主機數目 │

  ├─┼────────┼───────┼────────┤

  │A│ 0~127  │  127  │16777214│

  ├─┼────────┼───────┼────────┤

  │B│128~191 │ 16834 │  65534 │

  ├─┼────────┼───────┼────────┤

  │C│192~223 │2097151│   254  │

  └─┴────────┴───────┴────────┘

    圖2.4 IP地址的類別可以由點分十進制數地址的

         第一個十進制數的範圍辨別

 

2.3.2 子網掩碼

在因特網早期,每個組織機構的網絡都很簡單,通常一個組織機構也只有一個局域網,只需要網絡標識符和主機編號這兩級結構就足夠了。隨着因特網的進一步膨脹,B類地址消耗得很快,這種兩級結構很難滿足日益增長的網絡的要求。到了1984年,在地址格式中又增加了第三級子網結構,子網對網絡內部的地址空間進行再劃分,這樣就緩解了B類地址的需求,如圖2.5所示。

  ┌─────┬────┬──┐

  │網絡標識符│ 子網 │主機│

  └─────┴────┴──┘

        │←─主機編號→│

 

    圖2.5 三級IP地址格式

 

子網或子網絡是A、B或C類網絡的一個子集。網絡掩碼用來把網絡信息和主機信息分開。每個A、B或C類地址實際上都是一個自然掩碼。A類地址的自然掩碼255.0.0.0;B類地址的自然掩碼是255.255.0.0;C類地址的自然掩碼是255.255.255.0。如果沒有子網的引入,網絡標識符的使用會很限。使用了掩碼,網絡就可以分化成子網,並把地址的網格部分延伸到主機部分。子網劃分技術增加了子網的數量,減少了主機的數量。如圖2.6所示,掩碼255.255.0.0把A類IP地址8.0.0.1劃分成一個網絡部分、一個子網部分和一個主機部分。

圖2.6 基本子網劃分的例子

要注意的是,子網掩碼的格式是有限制的。子網掩碼必須是相鄰接的,它們的長度也必須要大於1,也就是說一個掩碼應該有從左開始的連續的“1”,其餘部分爲“0”。下面的掩碼可以用來把C類網絡理論上可用的256個地址劃分成多個子網。

  255(1111 1100)——64個子網,4臺主機/子網

  248(1111 1000)——32個子網,8臺主機/子網

  240(1111 0000)——16個子網,16臺主機/子網

  224(1110 0000)——8個子網,32臺主機/子網

  192(1100 0000)——4個子網,64臺主機/子網

  128(1000 0000)——2個子網,128臺主機/子網

2.3.3 特殊用途的IP地址

一臺計算機可以分配一個主機地址,同是一個網絡也可以分配一個網絡地址。另外,在很多情況下主機並不知道自己的IP地址或者對方的IP地址,比如在主機啓動時就是這樣的。因此IP協議定義了一套特殊地址格式,稱作保留地址,保留地址從不分配給某臺主機,如圖2.8所示。

  ┌──────────────┐

  │      全0      │本地網上的本主機

  └──────────────┘

  ┌───────┬──────┐

  │網絡標識符全0│ 主機編號 │本地網上的主機

  └───────┴──────┘

  ┌───────┬──────┐

  │ 網絡標識符 │主機編號全0│網絡的伯克利廣播

  └───────┴──────┘

  ┌──────────────┐

  │      全1      │本地網的有限廣播

  └──────────────┘

  ┌───────┬──────┐

  │ 網絡標識符 │主機編號全1│網絡的直線廣播

  └───────┴──────┘

  ┌───────┬──────┐

  │  127  │  任意  │本地環路

  └───────┴──────┘

  圖2.8 特殊用途的IP地址格式

 

IP保留主機編號爲0的地址,用它來表示一個網絡,例如地址205.187.251.0表示C類網絡,該網絡的網絡標識符是205.187.251。

當網絡標識符不知道時,主機地址就可以用全0的網絡標識符來代替。例如:特殊地址0.0.0.0表示本網絡的主機,它被應用在啓動協議中;特殊地址0.X.Y.Z表示本網絡的主機X.Y.Z。這些特殊的IP地址只能當作源地址使用。

爲了很方便地發送一個包的副本給同一物理網絡上的所有主機,IP爲每個網絡定義了一個直接廣播地址(directed broadcast address)。IP保留了主機編號中所有位爲全1的地址,用它來表示一個網絡的直接廣播地址。例如:A.255.255.255、B.B.255.255、C.C.C.255就分別是A、B、C網絡的廣播地址。當一個包被髮送到上述的一個直接廣播地址時,這個包的單個副本通過因特網路由器到達特定網絡,然後被傳送到這個網絡上的所有主機。在這裏有個歷史遺留問題,伯克利軟件分發(Berkeley Software Distribution,BSD)的TCP/IP協議實現使用主機編號中所有位爲全0而不是全1來表示直接廣播地址,這種地址格式被非正式地稱爲伯克利廣播(Berkeley Broadcast)地址。以上這些特殊的IP地址只能當作目的地址使用。

在測試網絡應用程序時,還可以使用IP定義的一個特殊的本地環路地址(loopback address),發往該地址的任何分組都不會傳出主機。它實際上是一個本地環路網絡標符,IP保留A類網絡127用作本地環路。任何具有127.X.Y.Z形式的地址都被當作本地環路地址,127.0.0.1是最普遍的本地環路地址,也可以用localhost來表示。

另外,IANA還爲某些特殊分組保留了一系列多點廣播地址。例如:224.0.0.1用來表示本地子網上的所有系統;224.0.0.2用來表示本地子網的所有路由器。

2.4 網絡數據的傳輸次序

在PC機中,低位存儲地址包含數據的低位字節,這種存儲順序被稱作爲Little Endial。而在因特網傳輸中,TCP/IP協議規定採用低位存儲地址包含數據高位字節的Big Endial存儲順序,並把這種存儲次序稱作網絡標準字節順序,如圖2.9所示。實際網絡傳輸時,數據按每32位二進制數爲一組進行傳輸。圖中把每個32位二進制數按照書寫方式分成4個八位二進制數,並且標明瞭實際的字節傳輸順序。在傳輸每個八位二進制時,按照從左到右、從最高的符號位到最低位依次進行傳輸。

爲了使通信的雙方都能理解數據分組所攜帶的源地址、目的地址以及分組的長度等二進制信息,主機和路由器在發送一個分組之前,必須把二進制信息項從本地表示轉換成網絡標準字節順序,並且當分組到達目的網絡時又把它們從網絡字節順序換成特定的主機順序。至於分組中用戶數據區的數據,則可以選擇任何數據格式,他們不會被轉換成網絡標準字順序,而是由具體通信的雙方負責解釋。

2.5 網間協議(IP)

因特網的核心層是網間層和傳輸層。IP協議是建立TCP/IP網絡的最基本協議,它定義了在整個TCP/IP網絡上傳輸數據所用的基本單元。網間層協議爲上層協調提供了無連接的、不可靠的數據報傳送服務,其他協議作爲IP數據報的數據被承載。它只是盡力地、最快地傳遞數據,同時提供差錯校驗和路由選擇,但產不對數據的到達與否、數據到達的連續性和順序性作任何保證,也不提供任何糾錯功能。RFC791中定義了IPv4(網間協議,版本4),讀者可參考RFC 791文件。

       2.5.1 IP數據報格式

TCP/IP協議使用的IP數據報(IP datagram)和物理網絡上傳輸數據單元用的硬件幀有相同的格式,它包含一個數據報報頭和一個數據區,如圖2.10所示。

  ┌──────┬──────┐

  │ IP報頭 │IP數據區 │IP數據報

  └──────┴──────┘

  ┌───┬─────────┐

  │幀頭部│ 幀數據     │硬件幀

  └───┴─────────┘

   圖2.10 IP數據報的一般格式

 

IP數據報頭包含有源、目的信息,在穿越因特網時作尋徑用,並且指明承載負載的協議類型,如TCP、ICMP、UDP、等。數據報所攜帶的數據量不固定,發送方根據特定的用途選擇合適的數據量。在IPv4版本中,一個數據報的數據量可以小到一個字節,而如果包括報頭大小的話,數據報則可以大到64K個字節。圖2.11給出了IP數據報更詳細的格式。

圖2.11 IP數據報格式

爲了方便編程,這裏同時給出了IP數據報的C語言結構。注意,它並沒有包括可選項和填充域。

  /* The IP header for VC++ */

  typedef struct tagIPHEADER

  {

  unsigned char h_len:4:/* length of tht header */

  unsigned char version:4;/* version of IP */

  unsigned char tos;/* type of service */

  unsigned short total_len;/* total length of the packet */

 

  unsigned short ident;/* unique identifier */

  unsigned short frag_and_flags;/*flags & frag offset */

  unsigned char ttl;/* TTL(Time To Live)

  unsigned char proto;/* protocol(TCP,UDP etc) */

  unsigned short checksum;/* IP head checksum */

 

  unsigned int sourceIP;//*source IP Address */

  unsigned int destIP;/*destination IP Address */

  }IPHEADER;

 

下面我們將分別討論IP數據報報頭中各域的詳細含義。

2.5.2 版本協議號

IP數據報中的第一個域是4比特長的版本域(version)。版本號規定了數據報的格式,同的IP協議版本其數據報格式有所不同。因此IP協議軟件在處理數據報之前,首先必須檢查版本號,對不能正確識別的數據報版本應該予以拒絕。當前的IP協議版本號爲4,常常稱作IPv4;下一個將要發展的IP協議,它的版本號是6,也就是我們常說的IPv6。

2.5.3 數據報長度和填充域

緊接着版本域的是4比特長的報頭長度域(h_len)。它指出了按32比特長標定的報頭長度,報頭的長度實際上是h_len<<2。如果報頭長度不是32比特的整數倍,則由填充域添0補齊。

另外,報頭中還有一個16比特長的數據報總長域(total_len)。它以字節爲單位標定整個IP數據報的長度,並沒有要按32比特長爲單位對齊的要求。由於總長域佔有16比特,所以數據報最長可達到216-1字節。

2.5.4 服務類型和優先權

8比特長的服務類型城(tos)規定本數據報的處理方式,並分成五個子域,其子域結構如圖2.12所示。

     0 1 2 3 4 5 6 7

    ┌───┬───────┐

    │   │  傳輸類型 │

    │優先級├─┬─┬─┬─┤

    │   │D│T│R│C│

    └───┴─┴─┴─┴─┘

    圖2.12 組成服務類型域的五個子域

 

3比特的優先級(PRECEDENCE)子域指明本數據報的優先級,允許發送方表示本數據報的重要程度。優先級的取值從0到7,0表示普通優先級,即表示網絡控制優先級。優先級是由用戶指定的,大多數主機和路由器軟件對此都不予理睬,但這種思想卻是十分重要的,因爲它畢竟提供了一種手段,允許控制信息享受比一般數據更高的優先級。比如說,如果主機和路由器都服從優先級的話,則可以給擁塞控制信息賦予更高的優先級,從而實現不受擁

塞影響的擁塞控制算法。

D、T、R、C位表示本數據報所期望的傳輸類型。當這些比特位取值爲1時,D代表低時延(Delay)T代表高吞吐量(Throughput)R代表高可靠性(Reliability),C代表低開銷。當然,上述三位只是用戶的請求,因特網並不能保證提供所要求的傳輸,只是把它們作爲路由選擇時的參考。另外要注意的是,每種物理網絡技術的時延、吞吐量、可靠性性能之間往往是此強彼弱的,用戶應只指定它們中的一個,同時指定多個沒有任何意義。

2.5.5 標識符、標誌和分片偏移量

網絡數據最終都是通過物理網絡幀傳輸,IP數據報也不例外。在理想的情況下,整個數據報被封裝在一個物理幀中傳輸時網絡效率最高。但是,不同的物理網絡技術上所採用的最大幀長是相異的,這個幀尺寸稱作最大傳輸單元(Maximum Transfer Unit,MTU)。例如:10Mb/s以太網每幀最多可承載1500個字節,而在100Mb/s的FDDI環上承載就可以大到4470個字節。

當數據報分組從一個MTU較大的網絡經路由器中繼到一個MTU較小的網絡上時,由於分組過長,路由器就會要麼拒絕中繼,要麼將數據報分片後再傳送。分片通常在路由器中完成,而數據報重組由主機的IP協議軟件完成。IP報頭中的標識符(ident)、標誌和分片偏移量(frag_and_flags)三個域用作分片和重組控制。標識符標識數據報發送時的先後順序,每產生一個新數據報標識符增一,目的機用它來重編分片數據報。同一IP數據報分片後,標識符域不變。分片偏移量指在完整的數據報內該分片的偏移量,偏移量按8個字節爲單位計算。標誌域由3個比特位組成,第一位保留爲0,如圖2.l3所示。

 

     0  1 2

    ┌─┬──┬──┐

    │0│DF│MF│

    └─┴──┴──┘

    圖2.13 標誌中的各位

 

DF位表示分組禁止被分片。如果DF位置1,路由器就會不加考慮地廢棄超長分組,同時還會發送一個ICMP錯誤信息給這個分組的源站點。MF位表示分組片未完。如果MF位清0,此分片是IP數據報分組的最後一片。

2.5.6 存活時間

存活時間(ttl)設置了該數據報在因特網中允許存在的最大生存時間,該時間以秒爲單位。每當產生一新的數據報時,就爲它設置一個最大的生存時間。當數據報通過的主機和路由器對該數據報進行處理時,又減去消耗的時間。一旦時間小於等於0,便將該數據報從因特網中刪除,並向信源機發回出錯信息。

路由器通常不知道物理網絡上的傳送時間,存活時間也只是一個數量級的概念,並不要求精確。因爲精確的記時首先需要因特網中所有節點的時鐘精確同步,這是很難做到的。有一些辦法可以簡化處理數據報且不需要同步時鐘:第一,路由上的每個路由器處理報頭時,從存活時間中減去一;第二,如果數據報在路由器中因等待服務被延遲,則從存活時間中減去等待的時間。

爲IP數據報設置存活時間的思想,保證了即使路由表不可靠而選擇了一個循環路由,數據報都不會在因特網中無休止地流動。RFC建議存活時間的缺省設置值爲64,而Windows 98和 Windows NT 4.0的用戶使用的存活時間缺省值爲128。

2.5.7 協議序列號

協議域表示IP數據報中數據的協議類型,如TCP、UDP、ICMP等。表2-1列出了IANA已分配的常見協議序列號。

  表2-1

  ━━━━━━┯━━━━━━━┯━━━━━━━━━━━━━━━━━━

   十進制編號│  關鍵字  │  協議名稱

  ──────┼───────┼──────────────────

       0│       │保留

  ──────┼───────┼──────────────────

       1│ICMP   │因特網控制報文協議

  ──────┼───────┼──────────────────

       2│IGMP   │因特網組管理協議

  ──────┼───────┼──────────────────

       3│GGP    │網關-網關協議

  ──────┼───────┼──────────────────

       4│IP     │IP裏的IP

  ──────┼───────┼──────────────────

       5│ST     │數據流

  ──────┼───────┼──────────────────

       6│TCP    │傳輸控制協議

  ──────┼───────┼──────────────────

       8│EGP    │外部網關協議

  ──────┼───────┼──────────────────

      17│UDP    │用戶數據報協議

  ──────┼───────┼──────────────────

      29│ISO-TP4│ISO傳輸協議類4

  ──────┼───────┼──────────────────

   41~60│       │未分配

  ──────┼───────┼──────────────────

      70│VISA   │VISA協議

  ──────┼───────┼──────────────────

      80│ISO-IP │ISO網間協議(CLNP)

  ──────┼───────┼──────────────────

      88│IGRP   │內部網關協議

  ──────┼───────┼──────────────────

      89│OSPF   │開放式最短路徑優先協議

  ──────┼───────┼──────────────────

  99~254│       │未分配

  ──────┼───────┼──────────────────

     255│       │保留

  ━━━━━━┷━━━━━━━┷━━━━━━━━━━━━━━━━━━

2.5.8 報頭校驗和

報頭中的任何一個域發生傳輸錯誤都會產生很多無法預料的結果。比如:如果發送地址錯誤,就可能無法刪除一個已經過期的分組以及重編不屬於同一報文的分片。報頭校驗和(Checksum)就可以保護IP數據報不產生這類錯誤,確保報頭的完整性。

IP報頭校驗和的計算是先將校驗和域置0,把報頭看成一個16位的整數予列,對每個整數分別計算其二進制反碼,相加後再對結果計算一次二進制反碼而求得的,它常被簡稱爲反碼和的反碼。

2.5.9 源地址和目的地址

源IP地址(sourceIP)和目的IP地址(destIP)域包含了數據報的原始發送方和最終接收方的32位的IP地址。數據包可能經過許多中間路由器,但是這兩個地址域始終不變。

2.5.10 IP選項

目的IP地址後面的IP選項域是任選域,它的主要目的是用來裝載特定的功能以便於網絡測試和調試。在IP數據報中,選項是連續出現的,中間沒有任何分隔符。每個選項包含一個選項碼字節,後面可能跟有一個長度字節和該選項的一組字節數據。如圖2.14所示,選項代碼字節分成三個域。

         0 1 2 3 4 5 6 7

       ┌─┬───┬───────┐

       │C│選項類│ 選項號   │

       └─┴───┴───────┘

      圖2.14 選項代碼字節中的三個域

 

路由器在對IP數據報分片時,如果拷貝標誌位(C)置1,說明該選項應被拷貝到所有片中去;如果置0,則僅把該選項拷貝到第一個分片中。

選項類和選項號指明選項的一般類型,並且給定了該類中的一個特殊選擇。現在已經定義的有兩個選項組:0是控制選項,2是調試和測量選項。在同一選項類裏面,用選項號來標識選項。表2-2列出了RFC 791中已經定義的8種選項,並給出了它們的選項類和選項號,可以看出大多數選項都是用於控制目的。

  表2.2

  ━━━┯━━━┯━━┯━━━━━━━━━━━━━━━━━━━━━━

  選項類│選項號│長度│描述

  ───┼───┼──┼──────────────────────

   0 │ 0 │- │選項列表結束。該選項只佔一個字節沒有長度字節

  ───┼───┼──┼──────────────────────

   0 │ 1 │- │無操作。該選項只佔一個字節,沒有長度字節。

  ───┼───┼──┼──────────────────────

   0 │ 2 │11│安全和處理限制(用於軍事目的)

  ───┼───┼──┼──────────────────────

   0 │ 3 │可變│自由源路由。用來在一個指定路徑爲數據報選路

  ───┼───┼──┼──────────────────────

   0 │ 7 │可變│記錄路由。用來跟蹤IP數據報所採用的路由

  ───┼───┼──┼──────────────────────

   0 │ 8 │ 4│數據流標識符。已過時。

  ───┼───┼──┼──────────────────────

   0 │ 9 │可變│嚴格源路由。用來在指定路徑上爲數據報選路。

  ───┼───┼──┼──────────────────────

   2 │ 4 │可變│因特網時戳。用來記錄路由上的時間戳

  ━━━┷━━━┷━━┷━━━━━━━━━━━━━━━━━━━━━━  

.6 校驗和差錯檢驗

現在的通信系統實際上很少在傳輸錯誤。例如微小通信信道的誤碼率通常能達到每傳輸10兆字節少於1個字節的錯誤(10-7),光纖信道的誤碼率通常是低於10-9。但不管怎麼說,傳輸差錯總是存在,必須採取相應的措施檢測差錯確保數據的正確。爲了檢測差錯,網絡系統通常隨數據發送一小部分附加信息。發送方從數據中計算附加信息,並且接收方進行同樣的計算來覈對結果。

有一些比較常用的方法能有效地檢測差錯,比如奇偶校驗(parity chedk)、累加和、循環冗餘校驗,TCP/IP協議中則採用“反碼和的反碼”的校驗和方法。奇偶校驗機制要求對每個發送的字符附加一個奇偶校驗位(parity bit),使得這個字符中1的個數爲偶數或奇數,這被分別稱作偶校驗或奇檢驗。累加和是對所有的數據按字節、字或雙字對齊求字節、字或雙字和,並且不記進位。循環冗餘校驗和反碼和的校驗相對來說要複雜些,下面分別給出了對應的代碼。

  /* 用於計算CRC-16的查找表 */

  static short crctab[]=

  {

  0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241,

  0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,0xC481,0x0440,

  0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,0xCFC1,0xCE81,0x0E40,

  0x0A00,0xCAC1,0xCB81,0x0B40,0xC901,0x09C0,0x0880,0xC841,

  0xD801,0x18C0,0x1980,0xD941,0x1B00,0xDBC1,0xDA81,0x1A40,

  0x1E00,0xDEC1,0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41,

  0x1400,0xD4C1,0xD581,0x1540,0xD701,0x17C0,0x1680,0xD641,

  0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,0x1040,

  0xF001,0x30C0,0x3180,0xF141,0x3300,0xF3C1,0xF281,0x3240,

  0x3600,0xF6C1,0xF781,0x3740,0xF501,0x35C0,0x3480,0xF441,

  0x3C00,0xFCC1,0xFD81,0x3D40,0xFF01,0x3FC0,0x3E80,0xFE41,

  0xFA01,0x3AC0,0x3B80,0xFB41,0x3900,0xF9C1,0xF881,0x3840,

  0x2800,0xE8C1,0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41,

  0xEE01,0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40,

  0xE401,0x24C0,0x2580,0xE541,0x2700,0xE7C1,0xE681,0x2640,

  0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,0x2080,0xE041,

  0xA001,0x60C0,0x6180,0xA141,0x6300,0xA3C1,0xA281,0x6240,

  0x6600,0xA6C1,0xA781,0x6740,0xA501,0x65C0,0x6480,DxA441,

  0x6C00,0xACC1,0xAD81,0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41,

  0xAA01,0x6AC0,0x6B80,0xAB41,0x6900,0xA9C1,0xA881,0x6840,

  0x7800,0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41,

  0xBE01,0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,0x7C40,

  0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,0xB681,0x7640,

  0x7200,0xB2C1,0xB381,0x7340,0xB101,0x7lC0,0x7080,0xB041,

  0x5000,0x90C1,0x9181,0x5140,0x9301,0x53C0,0x5280,0x9241,

  0x9601,0x56C0,0x5780,0x9741,0x5500,0x95C1,0x9481,0x5440,

  0x9C01,0x5CC0,0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40,

  0x5A00,0x9AC1,0x9B81,0x5B40,0x9901,0x59C0,0x5880,0x9841,

  0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,0x4A40,

  0x4E00,0x8EC1,0x8F81,0x4F40,0x8D01,0x4DC0,0x4C80,0x8C41,

  0x4400,0x84C1,0x8581,0x4540,0x8701,0x47C0,0x4680,0x8641,

  0x8201,0x42C0,0x4380,0x8341,0x4100,0x8lC1,0x8081,0x4040

  };

  /*計算長度爲len的buf緩衝區中字節的CRC-16校驗和

  *

  *返回的CRC-16校驗和是字長型的無符號數

  *crc是用於累計的CRC-16校驗和

  *buf是字節型的指針

  *len是按字節buf的長度

  */

  int

  crcbuf(crc,len,buf)

  register int crc;/* running CRC value*/

  register u_int len;

  register u_char *buf;

  {

   register u_int i;

   for(i=0;i    crc = ((crc>>8)&0xff)^crctab[(crc^*buf++)&0xff];

   return(crc);

  }

  /*計算反碼和的反碼

  *返回字符長型的無符號數

  *buffer是字長型的指針

  *size是按字節計算的buffer的長度

  */

  unsigned short checksum(unsigned short *buffer,int size)

  {

   unsigned long cksum = 0;

   while(1   {

    cksum += *buffer++;

    size -= sizeof(USHORT);

   }

   if(0    cksum += *(UCHAR*)buffer;

   cksum = (cksum>>16) + (cksum&0xffff);

   cksum += (cksum>>16);

   return(unsigned shout)(~cksum);

  }

2.7 網間控制報文ICMP)

IP協議的目的比較明確,它只是盡力地、最快地傳遞數據到目的站點,因此很難診斷錯誤情況,必須通過另外的協議返回相應的信息。針對網間層的錯誤診斷、擁塞控制、路徑控制和查詢服務四大功能,ICMP提供相應的報文。例如:當一個分組無法到達目的站點或TTL超時後,路由器就會廢除這個分組,同時向源站點返回一個目的站點不可達的ICMP報文;另外,當網絡擁塞(congestion)時,路由器就會廢除過載的分組,同時向源站點返回一個源站點抑制的報文。RFC 792中定義了ICMP協議。

  如圖2.15所示,ICMP報文是封裝在IP數據報的數據區中發送的,因此並不能保證它的可靠性。爲了避免重複報告所引起的“雪崩”現象,ICMP報文不再引發ICMP報文。

         ┌──────┬───────┐

         │ICMP頭標│ICMP數據區│ICMP報文

         └──────┴───────┘

    ┌────┬──────────────┐

    │IP頭標│    IP數據區     │IP數據報

    └────┴──────────────┘

            圖2.15 ICMP報文的封裝

 

2.7.1 ICMP報文格式

ICMP報文分成頭標和數據區兩部分,其中頭標包含類型、代碼和校驗和三個域。ICMP報文格式如圖2.16所示。

 

  0     1     2     3

  01234567890123456789012345678901

  ┌───┬───┬───────┐

  │ 類型│代碼 │校驗和    │

  ├───┴───┴───────┤

  │     數據        │

  ├───────────────┤

  │    ···       │

  └───────────────┘

     圖2.16 ICMP報文格式

計算校驗和的算法與IP報頭校驗和的算法相同,也是16位二進制反碼和的反碼。但要注意的是,它是整個ICMP數據報的校驗和而不僅僅是頭標的校驗和;類型域是一個單字節整數,它指出報文的類型;代碼域也是一個單字節整數,它提供關於報文類型更進一步的信息。表2-3定義了15個ICMP報文類型。

 

 0││12│

 3││12│

 4││12│

 5││12│

 8││12│

 9││12│

10││12│

11││12│

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