【操作系統】網絡1(協議)

協議(網絡中的關鍵)

字面上理解,就是一個約定


網絡中的協議

 

協議分層

分層帶來的好處

  1. 分層能夠避免某個協議過於龐大。(類似於寫代碼,如果代碼太複雜,就要拆分成多個文件)【互聯網上需要考慮問題有很多】
  2. 分層後,協議之間“解耦合”,上層協議不需要理解下層協議的細節實現,相當於“封裝”
  3. 分層之後,任意層次的協議,都可以靈活替換

實際網絡通信中的協議要更加複雜,要分很多層,例如:OSI七層模型

 

TCP/IP五層(或四層)模型

應用層

應用程序直接打交道的協議(實際開發中涉及最多的部分,甚至需要自己設計應用層協議)

傳輸層

負責端到端之間的傳輸。(只關注起點和終點)

【例如在淘寶買東西,賣家發貨只關注收件人的地址】

網絡層

負責點到點之間的傳輸。(需要規劃路徑)

【例如物流公司,需要規劃到底怎麼運輸】

數據鏈路層

負責相鄰點之間具體如何傳輸

【例如已經規劃好路線了,從 A  到 C,那麼從 A 到 C 乘飛機還是火車就是數據鏈路層需要考慮的問題】

物理層

網絡通信的基礎設施(網站、基站、光纖)

【相當於鐵路、公路、航道、港頭碼頭……】

從程序員的角度,有的時候會忽略物理層,所以有的時候會稱爲“四層模型”。

 

上層協議調用下層協議,下層協議給上層協議提供服務

傳輸層和網絡層都是純軟件協議,由操作系統內核實現;數據鏈路層和物理層與系統沒有直接關係,而是取決於具體的硬件設備(以及硬件配套的驅動程序)

對於Java程序員來說,重點要理解應用層 + 傳輸層

 

常見筆試題

  • 對於一臺主機, 它的操作系統內核實現了從傳輸層到物理層的內容;
  • 對於一臺路由器, 它實現了從網絡層到物理層;
  • 對於一臺交換機, 它實現了從數據鏈路層到物理層;
  • 對於集線器, 它只實現了物理層;

【這是筆試中的說法,但是不是真實情況,真實的情況是,現在的交換機和路由器沒有本質區別,而且都實現到應用層(交換機、路由器和電腦都沒有什麼本質區別了)】

 

兩個核心操作

封裝

分用

例如:

我要發一條QQ消息給小明“在嗎”

封裝過程

我的主機

1、應用層(QQ)需要根據用戶輸入的數據,把這個數據構造成一個應用層數據報。這個構造數據包的過程,就可以想象成是一個字符串拼接(序列化)。

 

2、應用層協議把數據要交給傳輸層協議,來進一步封裝。封裝的意思就是給剛纔的數據基礎上再加上一個傳輸層協議報頭。(報頭:也是字符串連接,可以看成發快遞的標籤)

 

3、傳輸層需要把數據進一步的交給網絡層,網絡協議再加上一個網絡層的協議報頭。【傳輸層數據包:幀()】

 

4、網絡層還需要進一步把數據交給數據鏈路層,數據鏈路層的協議幀頭+幀尾【網絡層數據包:包】

【例】我想從 A 到 C 需要經過 B

我的整個數據報中:

網絡層:源ip始終是A,目的ip始終是 C

數據鏈路層:源mac 和目的mac 隨着我的行程而改變,最開始的源mac 是 A ,目的mac 是 B,當我到了 B 以後,源mac 就變成了 B,目的mac 就變成了 C

 

5、數據鏈路層得到的數據幀,還要交給物理層,物理層就會把這個數據轉換成光電信號,通過硬件設備(網線、光纖、電磁波……)傳輸出去了

 

中間是怎麼傳輸的暫時不描述,直接看分用的過程,也就是小明收到我的消息後主機怎麼處理

分用過程

1、物理層接收到對方法來的光電信號,解析成二進制的 bit 流,進一步得到了數據鏈路層數據幀,把數據幀交給鏈路層來處理

2、數據鏈路層解析數據幀,剝離幀頭、幀尾,取出中間的IP,把數據交給網絡層

 

3、網絡層拿到剛纔的網絡層數據包,再來解析,去掉網絡協議報頭,把數據交給傳輸層

 

4、傳輸層協議拿到傳輸層數據包,再來解析,去掉傳輸層報頭,把應用層數據報交給應用層

 

5、應用層解析應用層數據報,分析出數據內容是啥,發送者是誰,顯示到界面上,此時小明就能看見我的消息了

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章