前情回放:《每天一博客》系列來到第二天,在上一篇,我們簡單地了解了OSI七層模型和TCP/IP協議棧分層的情況。只要能夠了解七層模型每一層的作用以及與TCP/IP協議棧的對應關系,我們就已經形成了對互聯網協議輪廓的大致印象。如果還能夠在腦海里構造出那個科幻式的比喻,或許能夠加深對計算機網絡的感性認識。
舍友跟我打賭說我肯定不能堅持一個月三十天每天都堅持寫一篇技術博客,我說少寫一篇我就給你買個泡面。為了泡面,必須要堅持下去!
上一篇提出的問題沒人回答,希望這一篇的評論里能夠看到。我的問題是:為什么要學習TCP/IP協議棧,學來有什么用?(能夠舉例說明就更好啦)
——————————————————————————————閑聊技術——————————————————————————————————
首先,我們再來回顧一次OSI七層模型和TCP/IP協議的對比圖。在看圖的時候,不妨在腦子里回想一次根據OSI模型進行通信的完整過程,並且對比記憶TCP/IP協議分層情況。
從下往上看,首先TCP/IP的第一層是網絡接口層。TCP/IP中對於OSI參考模型的數據鏈路層及以下部分(物理層)未作出定義,因為TCP/IP以這兩層的功能是透明的為前提。然而,數據鏈路的知識對於深入理解TCP/IP與網絡起着重要的作用。但是,由於時間和進度的關系,我只是瀏覽、閱讀一遍,留個大概的印象。功利性地說一句,一般面試中也極少有涉及這方面的問題。
所以,再看到第二層——網絡層。在這一層,我們可以看到TCP/IP中的“一半”,那就是IP協議。
第三章:IP即網際協議
第一節:IP相當於OSI參考模型的第三層
我們先來回顧一下,網絡層的作用是什么呢?實現終端節點之間的通信,這種終端節點之間的通信也叫“點對點”(end-to-end)通信。
可能還是有點突兀,我們還是先從網絡層與數據鏈路層的關系說起吧。數據鏈路層提供直連兩個設備之間的通信功能,例如PC機到路由交換機、兩個路由之間。對比之下,作為網絡層的IP則負責在沒有直連的兩個網絡之間進行通信傳輸。
以一段從深圳到上海的旅途為例說明兩層之間的關系好了。假定一個人想從深圳出發旅游一直到上海,那么他從網上查了相關資料,定了一份詳細的行程表——在深圳坐火車到廈門,然后從廈門坐飛機到杭州,最后搭大巴到北京。每種交通工具都必須購票,而這些票都只有在特定區間內才有效,例如火車票只能到廈門,而要去杭州就必須再去買飛機票。
剛才說到的“區間內”就如同通信網絡上的數據鏈路。而整個全程的行程表的作用就相當於網絡層。如果我們只有行程表而沒有車票,就無法達成交通工具到達目的地。反之,如果除了車票其他什么都沒有,恐怕也很難到達目的地。因為你不知道該坐什么車,也不知道該在哪里換乘。因此,只有兩者兼備,才能保證到達目的地。與此類似,計算機網絡中也需要數據鏈路層和網絡層這個分層才能實現向最終目標地址的通信。(附圖僅做裝飾所用)
第二節:IP地址的基礎知識
IP地址由“網絡標識(網絡地址)”和“主機標識(主機地址)”兩部分組成。而與此相關的,就是IP地址的分類。
IP地址的分類分為四個級別,分別為A類、B類、C類、D類。它根據IP地址中從第1位到第4位的比特咧對其網絡標識和主機標識進行區分。
■A類:A類IP地址是首位以“0”開頭的地址。從第1位到第8位是它的網絡標識。用十進制表示的話,0.0.0.0~127.0.0.0是A類的網絡地址。A類地址的后24位相當於主機標識。因此,一個網段內可容納的主機地址上限為16,777,214個。
■B類:B類IP地址是前兩位為“10”的地址。從第1位到第16位是它的網絡標識。用十進制表示的話,128.0.0.1~191.255.0.0是B類的網絡地址。B類地址的后16位相當於主機標識。因此,一個網段內可容納的主機地址上限為65,534個。
■C類:C類IP地址是前三位為“110”的地址。從第1位到第24位是它的網絡標識。用十進制表示的話,192.168.0.0~239.255.255.0是C類的網絡地址。C類地址的后8位相當於主機標識。因此,一個網段內可容納的主機地址上限為254個。
■D類:D類IP地址是前四位為“1110”的地址。從第1位到第32位是它的網絡標識。用十進制表示的話,224.0.0.0~239.255.255.255是D類的網絡地址。D類地址沒有主機標識,常被用於多播。
說到這里,必須還要說一下廣播地址和私有地址。
廣播地址——用於在同一個鏈路中相互連接的主機之間發送數據包。將IP地址中的主機地址部分全部設置為1,就成為了廣播地址。
私有地址——10 .0 .0.0~10 .255.255.255(10/8) A類
172.16 .0.0~172. 31.255.255(172.16/12) B類
192.168.0.0~192.168.255.255(192.168/16) C類
另外還有關於CIDR(無類型域間選路)和VLSM(可變長子網掩碼)的知識,這里就不細說了。
第三節:路由控制
發送數據包時所使用的地址是網絡層的地址,即IP地址。然而僅僅有IP地址還不足以實現將數據包發送到對端目標地址,在數據送送過程中還需要類似於“指明路由器或主機”的信息,以便真正發往目標地址。保存這種信息的就是路由控制表。
路由表的形成方式有兩種:手動配置和自動配置——前者也叫靜態路由控制,后者叫做動態路由控制。為了讓動態路由及時刷新路由表,在網絡上互連的路由器之間必須設置好路由協議,保證正常讀取路由控制信息。這里提到的路由協議包括OSPF、RIP等,有興趣的同學可以翻翻計算機網絡的教材復習一下。
路由表的聚合可以有效地減少路由表的條目。能夠縮小路由表的大小是它最大的優勢。路由表越大,管理它所需要的內存和CPU也就越多,並且查找路由表的時間也會越長,會導致轉發IP數據包的性能下降。如果想要構建大規模、高性能網絡,則需要盡可能削減路由表的大小。
———————————————————————————————————————————————————————————————————————
最后總是忍不住多說幾句閑話:
1.現在已經將近凌晨一點鍾,本來還想寫多一章的,但是時間比較晚不想熬夜,身體才是最大的本錢嘛。不過進度是有點慢,看來還是得多花點時間,而且在看書或寫博的時候要更加專注提高效率才行。
2.不知不覺又堅持了一天,雖然只完成了十五分之一,連百分之10都不到,不過還是很開心。與此同時也要提醒自己,不要讓這種節奏給斷了。
3.雖然偶爾會覺得這樣一邊復習一邊寫博客會不會進度太慢,擔心這樣做是不是無用功,但是我喜歡這個過程——看書的時候更加專注了,寫完博客之后也蠻有成就感,該理解的理解了,該記住的也記差不多。每個人都有合適自己的做事方法,我覺得把所思所想所做訴諸文字就是我的最佳方法了。