本書是面向本、專科及高職“計算機網絡”課程的教科書。全書共分為9章。第1章是緒論,介紹了數據通信的一些基礎知識、Internet的歷史、網絡參考模型等內容。第2章到第4章介紹了各類常見的物理網絡,以及通過它們上網的方式。第5章介紹了IP協議。第6章介紹了一些新型的交換技術。第7章介紹了廣域網和城域網。第8章介紹了TCP協議。第9章綜合介紹了一個組網實例。
本書深入淺出、簡明易懂、內容豐富全面、實用性強,可作為高等學校計算機、電子、通信等專業的教材,也可供想系統學習計算機網絡知識的人員參考。
《計算機網絡技術》是作者多年教學教學成果以及科研、組網實踐的結晶,書中介紹的很多組網技術與方法對全面認識理解當代計算機網絡組建技術原理方法以及實際組網有很大的幫助。希望《計算機網絡技術》可以成為大專院校計算機專業師生以及計算機組網愛好者案頭工具書。
本書是編者多年從事計算機網絡教學和工程實踐的心血結晶。相比傳統教科書,本書有以下特點:
① 建立了新的網絡參考模型。網絡參考模型對于計算機網絡理論教學有著基礎性的指導作用,如果網絡參考模型是錯的,那么整個計算機網絡的理論基礎就“崩塌”了。有些人采用的參考模型基于ISO的OSI參考模型,只是簡化掉了表示層和會話層,變為五層。OSI參考模型和簡化版的五層參考模型的問題是將虛擬網絡和物理網絡混為一談,從概念上來說有問題。有問題的參考模型會給學生造成極大的混亂。本書建立了一個新的六層參考模型,嚴格地將虛擬網絡和物理網絡區分開了。這個模型能讓學生理清思路,把握計算機網絡的本質。
② 基于六層參考模型的理念,按照先物理網絡再虛擬網絡的順序編排章節內容。這種編排方式更容易讓學生了解物理網絡和虛擬網絡之間的關系,而且更加突出了TCP/IP協議的地位。作為計算機網絡的一部分,討論物理網絡是非常有必要的。但過多地討論物理網絡是不實際的,因為物理網絡方面的內容涉及多門基礎課程。有限的篇幅,更多地應該用在討論TCP/IP協議。將物理網絡作為一個整體而不是分為幾層來討論,除了可以壓縮篇幅,也更容易讓學生從整體上把握物理網絡。
③ 理論為先,理論要講全講透。編者堅持“寫給別人的東西,自己首先要搞懂”的原則,在講述協議之前,務必將相關的基礎理論知識講全講透,使讀者明白。理論上的東西搞清楚了,再了解細節就不是什么難事了。
④ 理論講解力求簡明易懂,生動活潑。計算機網絡課程本身很少涉及非常抽象的理論,完全可以通過和現實世界的類比,生動形象地講解開來。
⑤ 細節方面的討論點到為止。理論講解之后就是實現細節的討論,過多地討論細節是徒勞無益的。畢業后從事實際工作時,相關的協議就擺在手邊,沒必要讓學生死記硬背過多的細節。
⑥ 大量引入工程理論,這是本書一大亮點。雖說理論指導實踐,但純理論的東西未必能直接指導實踐。比如知道了路由器的工作原理并不代表就會配置路由器。在純理論和實踐之間是工程理論,能直接指導實踐的是工程理論。路由器配置課程是計算機網絡課程的后續專業課程,編者在教學實踐當中發現學生在計算機網絡課程學到的理論知識對配置路由器沒有多大指導作用,這是因為傳統計算機網絡課程不會講解這方面的工程理論知識。針對這個問題,本書增加了大量工程方面的理論知識,以加強理論的指導作用。Internet基本上不涉及很抽象的理論。純理論講解并不需要多大篇幅,與其為了理論而理論,不如節省篇幅用于講解工程理論。
⑦ 理論緊密結合實際,以工程為導向,采用“純理論+工程理論+工程實例”的模式,這是本書的特色。理論結合實際不但可以幫助學生學以致用,反過來也加深了學生對理論的理解,能起到事半功倍的效果。
⑧ 與時俱進,推陳出新。大部分早被淘汰的技術本書不再論述,比如有線城域網傳輸技術,只保留了萬兆以太網。但本書沒有一刀切,比如ATM雖已被淘汰,但它的一些思想并未被淘汰,所以仍然有所論述。特別是對于網絡安全,本書也有所論述。當然考慮篇幅的問題,僅起拋磚引玉的作用,目的是引導學生關注網絡安全問題。
編者還精心設計了一系列實驗教案,作為本書配套電子資源掛在化學工業出版社官網上供師生下載。
本書內容較多,教師可以依據課時限制裁剪講課內容。比如對通信類專業的學生,大都預先學習了數據通信方面的一些基礎知識,就不必重復講解這些知識了。有些小節的內容比較難懂,特意用星號標明。如果學生接受困難,只做原理性的論述即可。
本書參考了大量文獻以及眾多RFC、IEEE、ITU等標準或協議,在此對相關作者表示誠摯的謝意。
由于編者時間和水平有限,書中難免會有疏漏,歡迎讀者指正。有問題或建議請發郵件到jsjnetwork@qq.com。
劉文林
2016年8月31日
南昌航空大學網絡中心
第5章 IP協議
前面的幾個章節介紹了各種物理網絡,以及通過這些物理網絡上網的方式,目的是讓大家熟悉各類物理網絡,現在到了介紹IP協議(RFC 791)的時候了。IP協議是實現不同物理網絡互聯互通的關鍵。所謂互聯互通就是允許跨越不同的物理網絡傳輸數據。任何物理網絡基本的功能都是傳輸數據,但是各種物理網絡傳輸數據的方式相差很大,某種物理網絡的傳輸的數據無法直接進入另一種物理網絡內傳輸。在Internet上,通信方之間可能跨越多種不同的物理網絡,不解決互聯互通的問題,Internet也就無從談起。
5.1 實現互聯互通的關鍵因素
5.1.1 統一數據包的格式
物理網絡把數據封裝在幀內,通過幀來傳輸數據。由于各種物理網絡幀的格式不一樣,所以一種物理網絡的幀無法在另一種物理網絡內傳輸。那么,是否可以統一幀的格式呢?理論上可以,但是這么做意味著要統一物理網絡,并不是一個好主意。IP協議不是在物理網絡的層面上統一數據包的格式,而是在虛擬網絡的層面上統一數據包的格式。
IP協議對物理網絡的要求很簡單:物理網絡可以用某種方式將IP分組封裝在幀內,借助物理網絡本身傳輸幀的機制傳輸IP分組。這個要求任何物理網絡都可以滿足。可以將IP分組作為幀的數據部分封裝在幀內傳輸,這么做等于將物理網絡當作運載IP分組的運輸工具。IP協議不是統一運輸工具(類比物理網絡),而是統一貨物(類比數據)打包的標準。類似的例子在現實生活中可以看到,集裝箱就是個例子:貨物用標準集裝箱打包,可以很方便地用集裝箱貨船或者集裝箱貨車運輸。這樣做的好處是IP網絡對各種物理網絡廣泛的兼容性,IP協議不會改變物理網絡固有的運行方式。實際上,就物理網絡的工作方式而言,物理網絡在傳輸幀的時候,并不關心幀的數據部分是什么內容,它的任務只是傳輸數據。無論是傳輸其固有的數據(比如語音數據是電話網的固有數據)還是IP協議的數據都是數據。這就和遞信一樣,無論用戶是寄情書還是寄絕交信,郵遞員都不關心也不應該關心,他的工作只是投遞信件。
5.1.2 統一地址
物理網絡使用的地址稱為物理地址。各種物理地址的編址方式是不一樣的,地址長度也是不一樣的。物理地址只是在物理網絡內部有意義,出了物理網絡就沒有意義了,無法用來在整個Internet的范圍內標識主機。所以,有必要在整個Internet的范圍內規定一套統一的編址方式。同樣,IP協議沒有在物理網絡層面上統一地址,而是在虛擬網絡層面上統一地址。IP協議使用統一的IP地址。IP分組的分組頭攜帶了數據發送者的IP地址(源IP地址)和數據接收者的IP地址(目的IP地址)。
Internet上的主機同時需要一個IP地址和一個物理地址:IP地址作為轉發IP分組的依據;物理地址作為轉發幀的依據。除了格式整齊統一,IP地址和物理地址另一個不同點是它是一種全Internet性的地址,可以在全Internet的范圍內用標識一臺主機,無論它屬于哪個物理網絡。如果某個物理網絡的主機要使用IP協議向其它物理網絡的主機發送數據,可以將數據封裝于IP分組內,并將IP分組的目的地址設置為對方的IP地址。
IP地址和物理地址的關系類似學生的學號和身份證號的關系。學號只在本校有意義,不同學校的編號方式可能不一樣,但也有可能因為采用相同的編號方式導致不同學校學生的學號一樣。學生的學號未必是全國的,但學生的身份證號是全國的。
5.1.3 IP交換
IP分組在物理網絡內部傳輸沒有什么特別之處,等同于傳輸幀。當IP分組要離開某個物理網絡進入另外一個物理網絡時,麻煩出現了:某種物理網絡的幀不能直接進入另外一種物理網絡。毫無疑問,數據要從一個物理網絡進入另一個物理網絡,必須將它的幀從源物理網絡的格式轉換為目的物理網絡的格式。這個過程是由路由器完成的。
路由器可以用來連接不同類型的物理網絡。和物理網絡的交換機一樣,路由器也是按照“存儲-轉發”的模式工作,負責中轉不同物理網絡之間的數據。路由器通過它的端口連接物理網絡,端口的類型要和物理網絡匹配。比如,連接以太網使用以太網的端口。端口是它所連接的物理網絡的一部分,就像物理網絡中的一臺主機的端口,需要配置相應的IP地址和物理地址。它可以從它連接的物理網絡接收幀,也可以按照它所連接的物理網絡的幀格式向物理網絡內的主機發送幀。
圖表 5 1 IP交換
請看圖表 5 1,路由器的端口1、2、3分別連接物理網絡A、B、C,假設A網絡內的主機H1有數據要發送到B網絡內的主機H2。數據首先以A網絡幀的格式發給端口1;收到幀后,路由器將幀頭幀尾去掉,分離出IP分組,這個過程稱為拆包;路由器依據IP分組的目的IP地址查找路由表,決定將IP分組轉發到端口2,這個過程稱為路由;端口2重新封裝IP分組,加上幀頭和幀尾,但是這次是按照B網絡的幀格式,這個過程稱為打包;端口2后把封裝好的幀發送給B網絡。A網絡可以通過自身的數據交換機制將幀從H1轉發到端口1;同樣,B網絡可以通過自身的數據交換機制將幀從端口2轉發到H2。這兩個過程都屬于物理網絡內部的數據轉發,和IP交換過程無關。假設A是以太網,網絡內部數據轉發是由交換機/HUB完成的;假設B是電話網,網絡內部數據轉發是由程控電話交換機完成的。
整個IP交換分為三個步驟:拆包、路由和打包。可以把IP交換和運貨的過程做個類比:用卡車運送貨物(類比IP分組)到某個島嶼,到了港口,卡車不能再前進了,于是碼頭工人把貨物從卡車上搬下來(類比拆包);港口調度員調度一艘船運送貨物(類比路由);于是碼頭工人將貨物搬上這艘船(類比打包),后經水路運到目的地。
對于IP交換,它關心的是如何轉發IP分組,至于IP分組封裝成什么形式的幀,并不很重要。采用不同的封裝方式就像采用不同的運輸工具,分組由一個物理網絡交換到另一個物理網絡就像換了個運輸工具一樣。
5.1.4 IP網絡
在統一IP分組格式和IP地址后,通過IP交換的機制可以跨越不同物理網絡傳輸標準的IP分組。IP協議實際上在物理網絡之上定義了一個邏輯上的網絡——IP網絡,這個網絡上傳輸的是IP分組。當然,這個邏輯上的網絡終要依靠底層的物理網絡完成實際的數據傳輸。雖然物理網絡千變萬化,但是IP網絡是統一的,Internet可以定義為一個全球性的IP網絡。
圖表 5 2 IP網絡封裝實例
如果把數據封裝在IP分組內,就可以在整個Internet的范圍內傳輸數據了。圖表 5 2是個數據封裝的實例:數據封裝在TCP分組內→TCP分組封裝在IP分組內→IP分組封裝于以太網幀內。到了物理層,不再封裝,物理層負責把幀轉換為信號,通過傳輸媒體發送出去。
數據發送過程是個不斷封裝的過程,接收數據則是個不斷拆封的過程:幀拆封為IP分組→IP分組拆封為TCP分組→數據從TCP分組中分離出來。
5.1.5 IP地址
IP地址是32位長的二進制整數,范圍從0~232-1,總共有232(大約等于43億)個IP地址。計算機行業喜歡用16進制表示二進制整數,可以將IP地址表示為16進制整數。不過這種方法很不直觀,也難以記憶。習慣上,采用點分十進制的方式表示IP地址。也就是把二進制的IP地址分為4個字節(一字節有8位長,對應的十進制整數的范圍是0~255),字節之間用點號分隔,并用十進制表示出來。比如二進制的IP地址11000000101010000000000000000001分為4個字節,用點號分隔為11000000.10101000.00000000.00000001。個字節11000000等于十進制的192,第二個字節10101000等于十進制的168,第三個字節00000000等于十進制的0,第四個字節等于十進制的1。于是,這個IP地址可以表示為:192.168.0.1。
IP地址分為兩部分:高位部分是網絡號(又稱為網絡地址),低位部分是主機號。網絡號用于標識網絡,由ICANN(Internet Corporation for Assigned Names and Numbers)或者它的分支機構統一分配的。任何一個網絡要想加入Internet,必須申請一個網絡號。主機號用于標識網絡內的主機。主機號的分配由網絡管理員自行決定,網絡管理員可以按照自己喜歡的方式分配,只要保證網絡內任何兩臺主機的主機號不重復即可。網絡號+主機號構成一個完整的IP地址,可以地標識一臺主機。這類似學生的學號,前面的數字標識班級號,后面的數字標識學生在班級里面的序號,兩者合起來構成完整的學號。
路由器根據IP分組的目的IP地址查找路由表,決定分組轉發路徑的過程稱為IP路由。路由器路由的時候只關心目的IP地址的網絡號,這是因為路由是以網絡為單位的,它是網絡之間的尋址過程。
如何分配網絡號是個至關重要的問題。好的網絡號分配方案可以使路由的過程變得簡單高效;反之,差的網絡號分配方案會使路由的過程變得復雜低效。那么該如何分配網絡號?這并不是什么高深的學術問題,普通人也可以提出一個很好的建議:按照層次分配網絡號。郵政編碼是一個典型的例子:兩位代表省/自治區/直轄市,中間兩位代表縣/市,后兩位代表區。可以仿照郵政編碼這樣劃分網絡號:IP地址的若干位代表國家號,次高的若干位代表省/州號,接著若干位代表市/縣號,……,以此類推,構建一個完整的層次。
這樣分層劃分網絡號的好處有兩點:
(1) 符合網絡的天然層次結構,便于分層管理網絡號。現實的網絡也是基本按照行政區劃分層的,有分層管理的需要。ICANN可以以國家為單位把網絡號分配給國家,然后國家為各省/州分配網絡號,省/州為市/縣分配網絡號,……,以此類推,非常方便。
(2) 大大簡化路由。請看圖表 5 3,假設嚴格按照行政區劃分配網絡號,可以按照網絡層次設置核心路由器,實現分層路由:國際級核心路由器負責國家之間的路由,核心路由器負責國內各省之間的路由,省級核心路由器負責省內各市/縣之間的路由,……,以此類推。分層路由的好處是簡單高效:每個路由器之需要負責下一層路由器之間的路由,比如中國的核心路由器只需要負責各省之間的路由,出范圍的路由,可以轉交上一層路由器處理。假設中國北京的用戶要訪問美國弗羅里達的用戶,路由的路徑是:北京→中國→ICANN→美國→弗羅里達。圖表 5 3嚴格的分層模式,構建了一棵以ICANN國際級核心路由器為根的一棵樹。
圖表 5 3 分層路由
指向上級路由器的路徑通常稱為默認路徑或者默認路由,默認路徑用于路由不屬于本路由器管轄范圍內地址的路由。以中國的核心路由器為例,它的路由表只需記錄到各個省級行政單位(包括港澳臺總共34個)的路徑,加上指向上級路由器的默認路徑,總共僅需要35條路由表項。
5.1.6 分類編址方案
圖表 5 4 分類編址方案
現在,看看實際的網絡號分配方案是什么樣的。早的方案把IP地址分為A、B、C、D、E五類(圖表 5 4),這種方案稱為分類編址方案。E類地址是保留地址,保留給將來使用。D類地址是組播地址,用于IP層的組播。IP組播地址的意義和以太網組播地址的意義一樣,只是一個用于物理網絡的組播(僅限物理網絡內部),另一個一個用于IP網絡的組播(可能跨越多個物理網絡)。A、B、C類地址是用戶通常使用的IP地址,它們是單播IP地址,用于標識主機。IP單播地址和以太網單播地址的意義一樣,只是一個用于物理網絡的單播,另一個用于IP網絡的單播。
這幾類地址通過的幾位特征位來區分:
(1) A類地址的位是0,網絡號8位長,總共有27=128個A類地址,范圍是1.0.0.0~127.255.255.255。A類地址的數量少,但是可容納的主機數量達到224=16777216。
(2) B類地址的兩位是10,網絡號16位長,總共有214=16384個B類地址,范圍是128.0.0.0~191.255.255.255,每個B類地址可以容納的主機數量是216=65536。
(3) C類地址的三位是110,網絡號24位長,總共有221=2097152個C類地址,范圍是192.0.0.0~223.255.255.255,每個C類地址可以容納的主機數量是28=256。
A類地址的前一個字節是網絡號,B類地址的前兩個字節是網絡號,C類地址的前三個字節是網絡號。
由于網絡號和主機號是合并在一個IP地址內的,路由器在路由時必須有一種機制將網絡號從IP地址中分離出來,作為路由的依據。分類編址的方案的好處是:路由器很容易的根據IP地址位的特征從IP地址分離出網絡號。很明顯,分類編址方案是無層次的網絡號分配方案。
5.1.7 一些特殊的IP地址
(1) 全局廣播地址
32位全為1的IP地址255.255.255.255,用于向Internet上的所用主機發送廣播。目的IP地址為全局廣播地址的IP分組稱為全局廣播IP分組。按照定義,路由器收到全局廣播分組后必須將它轉發到Internet上的所有網絡。而在網絡內部,以以太網為例,全局廣播分組封裝為廣播幀,以便廣播到整個以太網,終Internet上的所有主機都可以收到這個全局廣播分組。路由器可以采用交換機處理廣播幀的“擴散”方法,向相鄰的所有路由器轉發IP全局廣播分組,除了給它發送全局廣播分組的那個路由器,相鄰的路由器再轉發給和它們相鄰的路由器,……,以此類推,直至傳遍整個Internet。擴散廣播分組可能引發類似以太網廣播風暴的后果,從而成為某些搗亂分子的破壞手段。可以想象,如果有人不斷向Internet發送全局廣播分組,全球的路由器將疲于奔命,甚至崩潰。出于安全的考慮,這個地址實際上已經被廢除了,IP協議的下一個版本IPv6,正式廢除了這個地址。路由器收到全局廣播分組,會把它丟棄掉。
(2) 網絡地址
主機位全是0的IP地址。這個地址用來標識網絡號,不能分配給主機用。這就和用100000代表北京所有地區的郵編一樣。后面可以看到,它在路由匹配算法中有特殊用處。A類網絡地址的形式為A.0.0.0;B類網絡地址的形式為B.B.0.0;C類網絡地址的形式為C.C.C.0。
(3) 子網廣播地址
主機位全是1的IP地址,用于網絡號所限定子網內的廣播。子網廣播地址同樣不能分配給主機使用。A類子網廣播地址的形式為A.255.255. 255;B類子網廣播地址的形式為B.B. 255. 255;C類子網廣播地址的形式為C.C.C. 255。和全局廣播不同,子網內廣播只限于子網(subnet)內部,有時又稱為定向廣播。可以將IP分組的目的地址設置為定向廣播地址,向子網內所有主機發送廣播。在以太網內,定向廣播IP分組封裝為廣播幀,以便子網內所有主機可以收到。路由器不會轉發定向廣播IP分組,它會將定向廣播IP分組丟棄。這種行為是合乎邏輯的,因為既然是子網內廣播,路由器就不該將這個分組廣播到其它子網中。從廣播的角度說,子網其實是一個IP廣播域。