前段時間買了極客時間的《趣談網路協議》,這個真的比較有意思,比較容易理解,但是內容需要記憶的東西比較多,作者使用了大量的模擬的方法,舉例子,進行講述網路協議世界,我已經看過兩遍了,但是,對於非科班出身的來說,沒有一點點的基礎,還需要再多看幾遍,在這裡做一下筆記,把好的地方記下來。
一、網路為什麼要分層?
網路為什麼要分層,因為但凡複雜的程式都是需要分層的,理解計算機網路中的概念,乙個很好的切入點就是:想象網路包就是一段buffer,或者一塊記憶體,是有格式的,同時,想象自己是處理網路包的一段程式,而且這段程式,可以跑在電腦上,可以跑在伺服器上,可以跑在交換機上,可以跑在路由器上,你想象自己有很多的網口,從某個口拿進乙個網路包來,用自己的程式處理一下,在從另乙個網口傳送出去,複雜的程式都要分層,這是程式設計的要求。
二、程式是如何工作的?
在專欄中有一張圖很形象的講述了程式工作的大概過程:
文字解析:
(1)當乙個網路包從網口經過的時候,你看到了,首先先看看要不要請進來,處理一把。有的網口配置了混雜模式,凡是經過的,全部拿上來。
(2)拿進來之後,就要交給一段程式來處理,於是你呼叫process_layer2(buffer),當然,這是乙個假的函式,但是,其實真實存在著這麼乙個函式,它的作用就是從buffer中摘掉二層的頭,看一看,根據頭裡面的內容做什麼操作。
(3)假設你發現這個包的mac位址跟你的相符,那就是發給你的,於是需要呼叫process_layer3(buffer),這個時候buffer中就沒有二層的頭了,因為已經在上乙個函式在處理過程中拿掉了,或者將開始的偏移量移動了一下,在這個函式裡面,摘掉三層的頭,看看是發給自己的,還是希望**出去的,如何判斷呢?如果ip位址不是自己的,那就應該**出去,如果ip位址是自己的,那就是發給自己的,根據ip頭裡面的標示,拿掉三層的頭,進行下一層處理,到底是呼叫process_tcp(buffer)?還是呼叫process_udp(buffer)?
(4)假設這個位址是tcp的,則會呼叫process_tcp(buffer),這時候buffer裡面沒有三層的頭,就需要檢視四層的頭,看這是乙個發起,還是乙個應答,又或者是乙個正常的資料報,然後分別由不同的邏輯進行處理,如果是發起或者是應答,接下來可能要傳送乙個回覆包;如果是乙個正常的資料報,就需要交給上層了,交給應用去處理了,在四層的頭裡面,有埠號,不同的應用監聽不同的埠號,如果發現瀏覽器在監聽這個埠,那就發給瀏覽器處理就好了,至於瀏覽器怎麼處理,就與你無關了。
(5)瀏覽器解析html,顯示出頁面來,電腦的主人,看到頁面,點選滑鼠,點選滑鼠的動作被瀏覽器捕獲,發起另乙個http 請求了,於是使用埠號,將請求傳送給你(你現在是處理buffer資料報的程式)
(6)你應該呼叫send_tcp(buffer),不用說,buffer裡面就是http請求的內容,這個請求裡面加乙個tcp的頭,記錄下源埠號,瀏覽器會給你目的埠號,一般是80埠。
(7)然後呼叫send_layer3(buffer),buffer裡面已經有了http的頭和內容,以及tcp的頭,在這個函式裡面加乙個ip的頭,記錄下源ip位址以及目標ip位址
(8)然後呼叫send_layer2(buffer),buffer裡面已經有了http的頭和內容,tcp的頭,以及ip的頭。這個函式裡面要加乙個mac的頭,記錄下源mac位址,得到的是本機器的mac位址和目標mac位址,這個是必須要新增的mac位址。
這樣,只要buffer裡面的內容完整,就可以從網口發出去了,你作為乙個程式的任務就告一段落了。
三、層與層之間有什麼關係?
劃重點:只要是在網路上跑的包,都是完整的,可以有下層沒上層,絕對不可能沒有下層有上層。
所以,對於tcp協議來說,三次握手也好,重試也好,只要想發出去的包,就要有ip層和mac層,不要是發不出去的,
如果乙個http的包跑在網路上,它一定是完整的,無論經過哪些裝置,它都是完整的,所謂的二層裝置、三層裝置,都是這些裝置上跑的程式不同而已。乙個http協議的包經過乙個二層裝置,二層裝置收進去的是整個網路包。這裡面http、tcp、ip、mac都有,什麼叫二層裝置啊,就是只把mac頭摘下來,看看到底是丟棄、**、還是自己留著。什麼是三層裝置啊,就是把mac頭摘下來,再把ip頭摘下來,看看到底是丟棄、**、還是自己留著。
面試 計算機網路 計算機網路概述
隨著技術的發展,電信網路和有線電視網路都逐漸融入了現代計算機網路的技術,這就產生了 網路融合 的概念。連通性 共享 網際網路的拓撲結構雖然非常複雜,並且在地理上覆蓋了全球,但從其工作方式上看,可以劃分為以下的兩大塊 2 核心部分 由大量網路和連線這些網路的路由器組成。這部分為邊緣部分提供服務 提供連...
計算機網路概述 計算機網路基礎
邊緣部分 核心部分 報文交換 報文一般比分組長,報文交換的時延較長。對於廣域網區域網新的理解 不單單從網路覆蓋範圍區分區域網和廣域網,而是在應用技術方面進行區分,應用了區域網技術就是區域網,應用了廣域網技術就是廣域網。區域網一般是自己購買裝置,自己維護,寬頻固定。廣域網 花錢買服務,花錢買頻寬,效能...
計算機網路 01計算機網路概述
網際網路 internet 的核心部分為能夠讓計算機實現通訊的網路。它的邊緣部分為接入網路的計算機。1.1.1 邊緣之間的通訊方式1.1.2 網際網路的核心 資料交換方式 一 電路交換方式 cricuit switching 建立連線 申請占用通訊證資源 通話 一直占用通訊資源 釋放連線 釋放通訊資...