计算机网络初探(ip协议)
粗讀了兩遍計算機網絡(謝希仁),對于計算計算機網絡算是有了一個初步的了解,所以打算寫一篇文章(希望是教程)進行鞏固(主要圍繞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 本博客中未標明轉載的文章歸作者何必詩債換酒錢和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。總結
以上是生活随笔為你收集整理的计算机网络初探(ip协议)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 寄云科技PaaS测试报告
- 下一篇: HDOJ 5128 The E-pang