TCP/IP 系列文章
網絡基礎知識(-)
TCP/IP基礎知識(二)
物理層(三)
數據鏈路層(四)
IP 協議(五)
IP 協議相關技術(六)
TCP與UDP(七)
前言
這將是一系列文章,這是筆者在讀完 《圖解TCP/IP》這本書后,寫的一些總結。因為筆者認為好記性不如爛筆頭,既然看完一本書,就有必要整理下。筆者本身是非科班出身,在計算機基礎這方便稍稍有些差,所以最近一段時間在集中學習一些計算機基礎相關的技術。當然這一系列文章也會對非專業開發崗位(如移動端)的工程師有所幫助,肯定比直接網上搜索來的全面。
這一系列文章不會很難,主要是想通過通熟易懂的語言,讓廣大讀者更快的從原理上理解TCP/IP。而不是為了謀求一份工作,臨時抱佛腳,在面試之前看一些簡單的面試題。如果能從原理上理解網絡基礎,相信對開發者的未來成長也多多少少有所幫助。因為無論你從事任何 IT 相關行業,無論你掌握多少種計算機語言,但是有個永恒的道理,計算機基礎基本上都是很穩定的。如果從原理上理解了計算機基礎中的一些相關技術,無論學習何種計算機語言,都有利于加深你對這門計算機語言的理解程度。
協議和協議分層
協議
簡單的說,協議就是計算機和計算機之間通過網絡通信事先達成的一種約定。這種約定使不同廠商的設備、不同的 CPU 以及不同的操作系統之間,只要遵守相同的協議就能實現通信。反之協議不同,就不能實現相互通信。
再舉個通俗易懂的例子,比如我們使用借助ProtolBuffer 把數據傳送到另一臺主機,規定數據的前兩個自己包含的是 Code 狀態碼,之后是需要傳輸的數據,這就是一個簡單的協議。因為這個簡單協議的存在,接收方就能正確的解析出 code 狀態碼 和真實的數據,而不會出現 code 狀態碼當成需要的數據處理,需要的數據當成 code狀態碼來處理。
整個互聯網世界能夠運行,完全得益于各個軟件、硬件廠商嚴格遵守現有的協議。以 IP 協議為例,你可以隨便修改它,然后自己弄出一個 IP**** 協議,只不過沒有人認可、遵守這個協議,所以它毫無用武之地。
協議的分層及其意義
OSI 參考模型中網絡被分為七層。協議的分層就如同計算機軟件中模塊化開發。將網絡劃分為模塊化,通過模塊化實現網絡通信,這樣做的好處是即使系統中默寫模塊發生變化,也不會影響到其他模塊。如下圖是協議的分層。
OSI參考模型
OSI 模型中,網絡被分為七層,由底層向高層依次是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層
。如下圖:
七層的各自功能一覽表如下:
-
應用層
為用用程序提供服務并規定通信細節。如文件傳輸、電子郵件、遠程登錄協議。 -
表示層
將應用處理的信息轉為適合網絡傳輸的格式,或將來自下一層的數據轉換為上層能夠處理的格式。如文字、聲音、圖像等數據格式。 -
會話層(結束此次貨物運輸交易)
負責建立、斷開連接通信,以及數據分割等數據傳輸相關的管理。 -
傳輸層(運輸到達交接)
主要起到傳輸作用。只在通信雙方節點上進行處理,無需在路由器上處理。可靠傳輸,即確保數據可靠地傳送到目標地址。 -
網絡層(導航)
將數據傳輸到目標地址的過程中,目標地址可以是由多個路由器連接而成的某個地址。因此這一層主要負責地址管理和路由選擇。 -
數據鏈路層(交通工具)
主要負責互聯設備之間傳送和識別數據幀。 -
物理層(道路)
負責0、1 比特流與電壓的高低、光的閃滅之間的互換。
為了更好的理解 OSI 七層模型,完全可以通過交通運輸來比喻最下面的 5 層模型。物理層可以看做是道路;數據鏈路層可以視為交通工具,由于貨物一批貨物比較多,可能需要多個交通工具去運輸;網絡層可以看做是導航儀,規劃路徑;傳輸層就是可靠的傳輸,運輸到達貨物交接;會話層就相當于貨物到了,關于此次交易已經結束。另外兩層表示層和應用層暫時沒有想到比較好的比喻。
數據傳輸方式
網絡數據的傳輸方式可以按照不同的分類方式分為多種,每種分類方式下又有不同的傳輸方式。這里主要講解如下兩種分類方式。
面向有連接型和面向無連接型
- 面向有連接型
在發送數據之前,需要在收發主機之間連接一條通信線路。如果對方不在線創建線路不成功,就無法發送數據,避免了無意義數據的發送;如果對方在線,創建通信線路成功,可以正常通信。 - 面向無連接型
面向無連接型不要求建立和斷開連接。發送端可以自由發送數據,接收端永遠不知道自己會在何時何地接收到數據,因此接收端需要時常確認自己是否收到了數據。
面向無連接型通信中,即使接收端不存在或無法接受數據,發送端也能將數據發送出去。
電路交換和分組交換
目前網絡通信的方式大致分為兩種:電路交換和分組交換。器拿著的歷史相對救援,主要用于過去的電話網。分組交換正事TCP/IP 目前采用的技術。
- 電路交換
電路交換通信中,一條線路會被兩臺設備獨占。如果再加入第三臺通信設備就會出現問題。 - 分組交換
鑒于電路交換的缺點就出現了分組交換。分組交換將要發送的數據分成多個數據包,每個數據包的首部寫入了發送端和接收端,然后按照一定的順序排列之后發送出去。所以即使是一條線路也可以為多個用戶提供服務。
分組交換中,有分組交換機(路由器)連接通信線路。過程:發送端將數據發給路由器,路由器接收到將數據后緩存到自己的緩存到自身相應的緩存隊列中,然后路由器再從緩存隊列中取數據按照順序發送出去。因此分組交換也叫做儲蓄交換。
地址
MAC 地址是錄入到網卡 ROM 中的一串數字,長度為 48 比特,它在世界范圍內唯一(不考慮虛擬機自定義 MAC 地址)。由于 MAC 地址的唯一性,它可以被用來區分不同的節點,一旦指定了 MAC 地址,就不可能出現不知道往哪個設備傳輸數據的情況。
網絡構成
計算機網絡中主機數量極其大,而且有的主機很遠,如果要每個主機互相直接連接的話,不現實。所以通過交換網絡互連主機,不同的主機分別跟交換網絡相連。
計算機網絡是有核心網(骨干網)和邊緣網絡組成。其中連接核心網(骨干網)和邊緣網絡的部分稱為“接入層”或“匯聚層”。骨干網相當于高速公路,專注于如何提高業務傳輸性能和網絡的生存性;邊緣網絡更專注于實際業務,常用設備多為 2 層交換機或 3 層交換機。