談一談計算機網絡---漫談網絡協議

人類簡史這本書說過“十萬年前,地球上至少有六種不同的人,但今日,世界舞臺爲什麼只剩下了我們自己?“ 十萬年前,六種人中智人是最弱的一種,如今只剩下我們自己,靠的就是很好地溝通、交流、協作能力,即認知革命,這是人類發展的一大進步。
計算機的世界也是如此,試想一下如果計算機不能通過網絡連接起來,我們能構造大型分佈式軟件麼?能輕鬆的獲得各種各樣的信息麼?那肯定是不可能的。
就像語言一樣要能讓大家都可以理解對方表達的意思,那麼溝通的時候就要有協議。
協議的三要素:
1 語法,就是這一段內容要符合一定的規則和格式。例如,括號要成對,結束要使用分號等。
2 語義,就是這一段內容要代表某種意義。例如數字減去數字是有意義的,數字減去文本一般來說就沒有意義。
3 順序,就是先幹啥,後幹啥。例如,可以先加上某個數值,然後再減去某個數值。
同樣,如果需要一大堆的計算機共同工作,那麼作爲計算機集羣裏面的計算機都必須要有共同的溝通基礎—網絡協議。
當你瀏覽網頁的時候,比如你在搜索引擎裏面輸入了關鍵字,瀏覽器就給你顯示了相關的網頁(當然,鑑於某些原因,也可能是虛假廣告。。。)。這裏面到底發生了什麼呢?
這是因爲瀏覽器收到了HTTP協議返回的文本
比如:
在這裏插入圖片描述
這是在google輸入了關鍵字返回來的文本。
首先是語法,瀏覽器接收到的文本,必須要用上面返回的頭部格式瀏覽器才能識別。
第二是語義,status code必須要是200纔是成功的,返回404則是找不到網頁,500是內部錯誤等等。
第三是順序,符合順序,你一點瀏覽器,就是發送出一個 HTTP 請求,然後纔有上面那一串 HTTP 返回的東西。
常用的網絡協議
當你往瀏覽器裏面敲入了網址以後發生了什麼呢?首先是瀏覽器要知道去那裏請求,這個就需要DNS。DNS負責解析網址爲具體的IP地址。IP地址就像是互聯網世界的門牌號。有了IP地址才能知道具體請求到哪裏。有了IP地址,瀏覽器就需要向這個IP地址請求資源。此時就用到了HTTP協議。如果需要更加安全的協議就會用到HTTPS協議。
DNS,HTTP,HTTPS這些是工作在網絡層。
網絡層的內容需要發送出去就需要底層socket編程的支持。SOCKET編程是叫做傳輸層,主要分爲兩種協議,TCP和UDP。這兩種協議及裏面都需要包含端口,一個是客戶端的端口,一個是遠程服務器的端口。因爲操作系統才能找到對應的進程去處理內容。
網絡層把內容打包好了以後,就會交給網絡層。網絡層裏面包含了源IP地址和目的IP地址。
操作系統既然知道了目標 IP 地址,就開始想如何根據這個門牌號找到目標機器。如果是在本地的,操作系統根據IP地址就找到了對應的機器。而如果是遠方的,那麼就需要去"國外"。去國外那麼就必須要經過海關,這裏充當海關角色的就是–網關。操作系統跟網關的通信就是靠吼,這個協議就算ARP協議。通過ARP協議,拿到了網關的MAC地址。操作系統拿到MAC地址,就把包傳遞到下一層MAC層,然後通過網卡把包發出去,由於包裏面包含了網關的MAC地址,所以能找到網關。
到達網關,網關實現了路由協議,包括 OSPF 和 BGP。通過路由協議保存了去哪裏的知識,這個知識是通過路由表保存起來。然後把包通過指定的出口,找到指定的路由器,然後一步一步的找到目標。網關之間的通信也是要通過MAC地址。這是因爲目標IP地址是不能發生改變的,改變了網關是不知道目標機器的,所以只能通過修改目標MAC地址,然後通過ARP協議,使得通過IP地址找到MAC地址,實現通信。
目標服務器發現 MAC 地址對上了,取下 MAC 頭來,發送給操作系統的網絡層。發現 IP 也對上了,就取下 IP 頭。IP 頭裏會寫上一層封裝的是 TCP 協議,然後將其交給傳輸層,即 TCP 層。
TCP層是可靠連接的,但是網絡包一路上不知道遇到多少距離,也不知道會不會被丟棄,所以TCP超過一定時間沒有受到回覆的包,就會嘗試重發。當超過重試次數以後,就會認爲網絡發生問題,或者服務器出問題了。
TCP層收到網絡包以後,會通過端口號找到操作系統的進程,比如nginx,網關的進程。當網關受到網絡包以後,通過解析包裏面的內容,識別出這個包是要進行的行爲,就會把包轉發給對應的後臺服務器,服務器處理完了以後,返回處理的結果和進行數據的記錄,計算等行爲。包含結果的包也要通過上面發包的行爲,最後發給請求的客戶端,比如你的瀏覽器。最後你就能收到迴應,拿到自己想要的結果。

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