粗讀了兩遍計算機網絡(謝希仁),對于計算計算機網絡算是有了一個初步的了解,是以打算寫一篇文章(希望是教程)進行鞏固(主要圍繞IP協定)。
區域網路
網際網路的産生和廣泛使用極大地改變了我們的生活,但對于不了解當中技術細節的人來說,網際網路的工作是透明的,即我們不知道在每次點選一個連結,發送一個檔案,或者進行聯機遊戲時計算機的軟硬體背後,無數線纜,電磁波,甚至衛星是怎樣将我們的資料運送到另一台計算機上,而我們能感受到的隻有毫秒間的資料收發和一個世界範圍内的網絡互聯。
首先,從比較原始的地方開始講起,當我們有許多的計算機并且想要通過一種方法實作所有計算機之間的互聯進而實作資料交換,最為簡單的方法是什麼?我們可以這樣,為每一台計算機配置設定一個唯一辨別符(mac位址)來定位他,然後将所有打算接入網絡的計算機用導線連接配接起來,這樣就非常簡單且原始的實作的實體層次上的互聯。那麼他們之間該如何進行通信呢(暫不考慮對接受到的資料的解讀)?
參考下圖:圖一

假如H1試圖與H2進行通信,首先H1細心的将自己想要表達的東西打包好,注明收到消息的計算機的辨別符,然後将這份資料包裹發送到線路中,由于這份包裹隻有目的計算機的位址,他不知道目的計算機的具體位置,是以隻好采用最笨的方法,一個一個的問:“你的位址是***嗎”,例如當H3收到了這份包裹,但是卻發現他不是發給自己的,就不予理睬,而包裹隻能問下一個,直到他遇到了H2,H2發現這份包裹注明的目的位址是自己的位址,于是收下并打開他。這樣便完成了一次H1到H2的通信。這種收發資料的方式被稱為輪詢,即每次發送一個資料包裹都需要詢問每個計算機,直到找到目的主機。(事實上這是一個隻通過集線器連接配接的區域網路)
這種方法建構的網絡似乎也不賴,計算機之間可以正常通信,那麼可以考慮繼續将更多的計算機加入進來了。但是在這之前,我們會發現這種網絡有個小毛病,就是每次網絡上隻能有一份包裹在傳輸,如果有第二個包裹也發送到網絡中,二者就會發生碰撞,進而造成混亂。怎麼解決這種情況呢?方法就是謙讓。謙讓展現在每當有一台計算機試圖發送一個資料包裹時,先檢測目前網絡狀态,如果網絡中沒有任何人在通信,即網絡所有線路都是空閑的,那麼自己便将資料包裹發送出去,而一旦發現有人在通信,即網絡線路上有資料包裹正在跑來跑去,那麼自己就先等着,等一會在檢測一次網絡線路是否空閑。然而在這裡還有另一個問題,就是存在兩台計算機同時發送資料包裹或是因為網絡固有的時延而沒有檢測到網絡線路上有包裹而導緻他們都發送了包裹到網絡上,那麼碰撞必然發生,而解決方法則是一旦發生碰撞,那麼兩份包裹都丢棄,然後兩台計算機各自沉默一個随機的時間之後再次檢測網絡線路選擇是否發送。二者通過各自等待一個随機的時間,很好的避免了二者的再次碰撞。(CSMA/CD協定)
解決了碰撞的問題。那麼可以繼續我們的主題,将更多的計算機加入進來!随着更多的計算機的加入,網絡規模也越來越大,在較大規模下的網絡中。我們目前的網絡有個很緻命的問題,那就是剛剛讨論過的謙讓。在很小型的網絡中由于這種謙讓所帶來的延遲是可以忽略不計的,但是一但網絡規模大起來,比如幾百台甚至上千台計算機構成的網絡,每當有一台計算機在通信時,其他所有的計算機都要等待他通信結束後才能發送自己的包裹,這種延遲是不能被接受的。這時便不得不引入一種新的裝置來将這種這個碰撞範圍進行限制,這種裝置就是網橋(一種專用計算機)。
如圖:圖二
網橋将一個原本為一個整體的網絡劃分為一個一個的子網絡并将他們連接配接起來,這樣做最大的優點便是将碰撞範圍很好的控制在一個個小型的子網絡中。
同時呢,在網橋中儲存并維護一張由辨別符組成的查找表,對應于不同的線路接口,
如圖:圖三
每當有一台計算機試圖與某一台計算機進行資料交換(通信)時,便将資料報包裹注明目的計算機的辨別符,在本子網進行廣播,如果目的主機不在本子網,則通過專用線路遞交給網橋,而後網橋通過查找轉發表找到與該辨別符比對的計算機,将這份資料通過連接配接到這台計算機的線路發送給他。(隻通過網橋連接配接的區域網路)
上述的模型在小型的網絡中也許會工作的很好,但是現實是我們有幾十億台地理分布在世界各地的計算機,顯然之前的模型完全不能使用,因為這種政策本質上仍是簡單的線性查找,查找過程和對資料包裹的運送将耗費極大的時間和資源。這時候,一些優秀的算法思想便可以被應用起來了。行之有效的方法是分治,而這種算法的實作就是IP協定。
IP協定下的分組轉發
我們先撇開技術方面的内容,來想這樣一個問題——如何在中國找到某個美女并要到她的聯系方式。因為每個人在世界上都是獨一無二的,比較笨的方法就是,從目前所在地開始逢人便問,你是那個美女嗎(她的個人資訊就是獨一無二的辨別符),問遍整個中國,直到找到這個人,成功得到了她的電話。
這種方法是按照美女的全球唯一辨別符(長相,年齡,血型,基因型等資訊的組合體)來确定她,很浪漫的方式,但卻非常低效且不現實。
那麼接下來就是另一種方法,根據她的位址資訊來定位她。比如她的位址是遼甯省-沈陽市-長灘縣-張家村-2-22号-戶主之女-美女,那麼首先我們應該最先得知的是要到遼甯省去,是以第一次選擇我們就排除了中國80%的地方,下一條資訊是沈陽市,我們又排除了遼甯省的70%的地方,之後在定位到長灘縣,張家村,到了這裡搜尋範圍已經很小了,我們得知美女住2-22号,按照住戶序号的配置設定規律(按塊配置設定,有序)我們仍可以很快定位到2-22這家住戶,但是我們發現,戶主有12個女兒,我們已經沒有任何資訊可以幫助我們将戶主女兒們劃分開了,是以隻能一個一個的詢問,通過比對長相,年齡,血型,基因型等資訊的組合體(即唯一辨別符)來定位到美女,所幸搜尋範圍隻有12個,很快我們就找到了美女。
過程如圖:圖四
下面回到技術方面,我們的計算機同美女一樣,在網際網路中它也必須隻有一個唯一辨別符,而這個辨別符是生産我們計算機網卡時網卡制造商寫在其中的,叫做mac位址,是一個48為二進制數,具有全球唯一性。mac位址才是最終我們能将美女從12個相似的美女中将她選出來的關鍵。之前說過單純使用mac位址的索引來實作通信是一件非常不明智的事,而且不同的主機(計算機,路由器等都可稱為主機)在系統,軟硬體上的差異性将會使得這種方法更為不可靠。那麼,IP協定是如何實作IP資料報(相似之前的資料包裹,即将要發送的資料按照Ip協定的規則打包後的資料包)在全球範圍内的高效分組轉發并屏蔽了諸多的差異性呢?其實從找美女的第二個例子我們應該能夠看出IP協定轉發的思想了。
首先簡單介紹下IP位址的長相:204.79.197.200;它是一個32位二進制數,通常通過每8位進行一次劃分,為了表示友善通常将每8位二進制數表示為十進制。我們可以認為第一段204即對應于地理位置“市”,相應的,79對應于“縣”,197對應于“村”,200對應于戶主的某個女兒。其中前三者被稱為網絡位址,代表主機所屬的區域,最後一個8位是已經無法再劃分的主機号,每個擁有主機号的主機都是一個不同的個體(戶主的12個女兒)。
這種劃分方式稱為劃分子網(分類别編址),即将一個本來很大的相似的群體劃分為不同層次,在這裡将網絡位址劃分為A類,B類,C類。在我們給出的這個IP位址中,A類位址:204.0.0.0,B類位址:204.79.0.0,C類位址:204.79.197.0;能看出A類位址所能包含的主機數量最大,B類次之,C類最小。前者可以包含若幹個後者。那麼當我要找到主機号為200的主機時就很簡單了,首先找到網絡位址為204.0.0.0的網絡,第一步我們排除了大部分的網絡,而後找到網絡位址為204.79.0.0的網絡(其實可以認為204.79.0.0是204.0.0.0網絡下的一台主機),然後是網絡204.79.197.0,這時發現網絡已經沒有再進行劃分了,是以在該網絡進行廣播,周遊所有的主機号,找到主機号為200的目的主機。
如圖:圖五
更進一步考慮,我們有必要每次都去檢視一個人所在地範圍最大的位址嗎?通信的發起者同接受者一樣,也是位于某個村子的某個門牌号裡的某人,也許他要發送資訊的目的對象就是本村的人(同一區域網路内),這時還要去檢視他是哪個省,哪個市嗎?顯然沒必要。在這裡我們一定要了解一點,那就是計算機始終是存在于整個網絡的邊緣或者說網絡的終端,中心區域為連接配接在一起的網際網路。這就像我們每個人的住所一樣,都是存在于國-省-市-縣-村-号的模型的門牌号中這個最底層中,上面各層都是人為抽象出來的。是以當某個區域網路内的主機試圖向網際網路中的某台主機(IP:200.78.132.44)通信時,首先判斷目的主機是否和自己在一個區域網路中,如果是,那麼直接将IP資料報根據主機号(44)發送給目的主機(12個女兒找美女的過程),路由器(轉發IP資料報的專用計算機)都不必經過,這很大程度上的節省了網際網路的線路資源,同時也提高了通信的速度。
這裡不得不簡要介紹一下路由器。路由器是一台用于轉發IP資料封包的專用計算機,他有若幹個端口,每個端口有一個網絡位址,代表不同的網絡并連接配接到他們。同時路由器也有自己的IP位址和mac位址,辨別他作為一個主機本身在網絡中的位置。當IP資料報在網際網路上傳輸時,每台路由器都根據其IP位址作為獨立的主機被定位。路由器會維護一張路由表,包含了他連接配接的子網絡。比如有一份IP封包IP位址為172.43.50.15,此時這份封包到達路由器H1,H1查找自己的路由表,發現自己所連接配接的各個子網的網絡位址沒有比對封包網絡位址的端口,但是他發現H2所連接配接的子網有比對的端口,于是他将IP資料報轉發給H2,此時H2查找轉發表,發現自己連接配接的子網有個位址為172.43.50.0的比對項,于是便将這個封包從這個端口發送出去到達該子網絡,由于這是一個簡單的區域網路,是以路由器将IP資料報的IP位址轉換為目的主機的mac位址,情況轉化為在區域網路中根據mac位址查找主機(12女兒選美女)。
回到正題,如果目的主機不在本區域網路,那麼便将資料報轉交給本區域網路的連接配接到網際網路的路由器(路由器可以被認為是一台主機,此時他連接配接到發出資料報的網絡的端口的IP位址是204.79.197.0)。這台路由器首先判斷IP資料報的目的網絡位址是否在本網絡中(可以認為路由器之間又組成了一個區域網路,這塊網絡的網絡位址為200.79.0.0。197是目前路由器一個端口的主機号,不過這個主機号代表的是一個網絡而不是一個主機)。如果資料報的網絡位址(200.78.132.0)就是由這一層路由器組成的網絡,那麼我們先将每台路由器都看做單獨的主機,并假想這是一個由路由器組成的區域網路,那麼當一個路由器向另一個主機發送資料報時,首先IP位址被轉換成mac位址并在目前區域網路内廣播(12女兒找美女),當找到目的路由器後,路由器查找轉發表,如果有比對的網絡位址,則将資料報發送至該網絡,重複上述過程,直到資料報被運輸到區域網路進行廣播,找到主機資料傳輸結束。如果某層網絡沒有比對項,則通過連接配接更大的網絡的路由逐層向上傳遞至更高的網絡(範圍更大),直至有比對的網絡位址,而後在向下傳遞。
作者:
何必詩債換酒錢出處:
http://www.cnblogs.com/backwords/p/7944780.html本部落格中未标明轉載的文章歸作者何必詩債換酒錢和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。