簡單的網絡協議概述

網絡協議

這一篇文章主要是概述網絡協議以及網絡協議的分層。 首先,我們來思考一個問題,如何讓兩臺計算機甚至多臺計算機之間進行通信呢?回答這個問題之前,我們先來想想生活中兩個人是如何交流的呢? 這個我們都知道,是通過語言,相同的語言(例如:漢語)。只有操着相同語言的兩個人才能進行交流,這裏的語言就是一種協議。同樣的讓計算機交流起來也需要通過協議來處理。

什麼是協議呢?

下面我們通過下面這句話來總結協議的幾個要素:
我吃完了飯。 這是一句很普通的漢語句子,這個句子符合漢語的語法(主(我)謂(吃完了)賓(飯))、
然後也是一段有意義的話,表明了我當前做完了某件事情。最後是這段話也是順序的,我們不能說 飯吃完了我。這樣是沒意義的。
通過上面這個例子,我們可以總結出協議三個要素:
1. 語法:語法就是一段內容要符合一定規則和格式,例如括號要成對,結束要有分號,漢語句子要有主謂賓
2. 語義: 就是這一段內容代表了某種意義,例如:數字減去數字是有意義的,數字減去文本是沒有意義的。
3. 順序:就是先幹啥,後幹啥,比如先起牀,後穿衣服。
計算機之間進行通信就需要網絡協議。例如:我們輸入 http://www.baidu.com 。我們就可以得到如下響應信息:

 HTTP/1.1 200 OK
 Accept-Ranges: bytes
 Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
 Connection: keep-alive
 Content-Length: 2381
 Content-Type: text/html
 Date: Sun, 15 Mar 2020 08:26:41 GMT
 Etag: "588604c8-94d"
 Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
 Pragma: no-cache
 Server: bfe/1.0.8.18
 Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<html> <head><meta http-equiv=content-type content=text/html;charset=utf-8>
<title>百度一下,你就知道</title>

這段響應的報文就符合協議的三要素。
第一:符合語法,只有按照上面那個格式來,瀏覽器纔會認,例如:首先是響應狀態,然後是首部,最後是請求體。
第二:符合語義,就是按照約定的意思來。例如:狀態200,表述的意思是網頁成功返回,如果不成功的話,就是我們常見的404,400等錯誤
第三:符合順序,你點擊瀏覽器,就會發送出一個HTTP請求,然後,纔會有上面一串HTTP的響應內容。

認識網絡協議

古代戰報傳送

我們先來看看古代戰報傳送的例子:將軍發命令,下屬來寫。寫完之後找人包裝蓋章,然後,把公文交給信號兵,沒信號兵每過一個關卡都要蓋公函,到達京城之後,再一層一層的往上傳。先看是發給哪個部門的,去掉一層包裝,再把內容發給上一級,最終送到皇上手上,皇上大人無需知道經過了哪些驛站關卡。只需要知道哪個將軍發的,發的什麼。用中文寫的還是用英文寫的就OK了。
從架構分層的角度上我們來分析下這個過程。
這裏的將軍和皇上相當於應用層,由將軍發送命令,發出信件,將軍是源地址,由皇上來接受信件,皇上是目標地址
這裏的信號兵就是傳輸層,由他來傳送信件。
這裏的關卡相當於物理層,由他來指導信號兵的行進方向,因爲,京城很遠,直接讓信號兵一個人跑,他可能完全不知道去的路,所以,這裏關卡的作用就是主要是蓋章告訴給信號兵指明去京城的路。
同樣的,爲了明確職責,網絡協議也進行了分層。下面我們就來看看網絡的分層吧。

網絡分層

現在我們來看看如下場景: 假設計算機B上有接口getJson2.do
當傳入的請求參數是{"name":"張三","id":12}時,響應的數據是{"name":"張三","id":12,"age":34,"sex":"男"},現在計算機A要請求計算機B的這個接口。

  1. 如下,寫好請求地址 http://192.168.216.96:8080/ssm-req/json/getJson2.do 和請求參數 {'name':'sange','age':12} 。設置好請求頭application/json;charset=UTF-8。請求發出後,首先到達HTTP協議所在的應用層,HTTP頭主要是封裝請求方法,請求地址,請求頭的格式等信息。封裝後的結果如下圖所示。應用層加上HTTP頭之後,就將包交給其下一層去處理。
    在這裏插入圖片描述
  2. 應用層的下一層是傳輸層(TCP層),傳輸層的有兩種協議,一種是無連接的協議UDP,一種是面向連接的協議TCP,很顯然,請求接口獲取數據使用的面向連接的TCP協議。TCP協議裏面會有兩個端口,一個是計算機A(請求服務器)監聽的端口,一個是計算機B(響應服務器)監聽的端口。操作系統可以通過端口來判斷,它得到的包應該給哪個進程,這就相當於告訴信號兵這封信要給誰。經過TCP層封裝後的結果如下所示,傳輸層加上TCP頭之後,然後把包給他的下一層處理。
    在這裏插入圖片描述
  3. 傳輸層的下一層就是網絡層(IP層)。網絡層的協議是IP協議,在IP協議裏面會有源IP地址,即計算機A(請求服務器)的IP地址和目標IP地址,即計算機B(目標服務器)的IP地址,網絡層會加上IP頭,然後把包給他的下一層。
    在這裏插入圖片描述
  4. 網絡層的下一層就是數據鏈路層(MAC層),MAC層有ARP和RARP(Reverse Address Resolve Protocol)即逆地址解析協議,該協議實現了IP地址和物理地址(MAC地址)之間的轉換,經過MAC層包裝加上MAC頭之後,就最終就是我們需要的包。請求到達計算機B之後
    在這裏插入圖片描述
  5. 計算機B(目標服務器)發現MAC地址對上了,取下MAC頭來,發送給操作系統的網絡層。發現IP也對上了,就取下IP頭,IP頭裏會寫上一層封裝的TCP協議,然後將其交給傳輸層,即TCP層。
    在這一層,對於收到的每個包,都會有一個回覆的包說明收到了,這個回覆的包絕非這次請求接口的結果,而僅僅是TCP層的一個說明,即收到之後的回覆。當然這個回覆,會沿着剛纔來的方向走回去。

網絡協議的分層

在這裏插入圖片描述

總結

本文簡單的概述了網絡協議的分層,以及請求包在網絡上的傳輸過程。

參考

劉超老師的趣談網絡協議
TCP/IP協議四層模型

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