網絡協議的平常

協議是啥,緣起 "你好,世界"

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>網絡協議</title>
    <style> * { margin: 0; padding: 0; } body, html { height: 100%; } body { align-items: center; background: #642b73; background: -webkit-gradient(linear,left top,left bottom,from(#c6426e),to(#642b73)); background: -webkit-linear-gradient(top,#c6426e,#642b73); background: linear-gradient(180deg,#c6426e,#642b73); display: flex; font-family: Open Sans,sans; justify-content: center; overflow: hidden; -webkit-perspective: 1800px; perspective: 1800px; text-align: center; margin: 0 20px; flex-flow: column; font-size: 16px; } h1, h2 { color: #fff; } h1 { font-size: 30px; line-height: 40px; } h2 { font-size: 24px; line-height: 36px; } .margin-bottom { margin-bottom: 12px; } </style>
</head>

<body>
    <h1 class="margin-bottom">你好,世界</h1>
    <script> window.onload = render('h2', '你好,網絡協議'); function render(tag, tagContent) { const body = document.body; const tagWrap = document.createElement(tag); const tagNode = document.createTextNode(tagContent); tagWrap.append(tagNode); body.append(tagWrap) } </script>
</body>

</html>
複製代碼

這是一個很簡單的靜態頁面(加點 css、js ),這是一個前端向計算機表達的方式,這也是一種協議,是人類和計算機溝通的方式。因此說協議是人類和計算機溝通的一些交流規則javascript

協議

有個事情你的認同下接近人類語言計算機不能直接讀,計算機能直接讀的人類頭髮要光頭。因此,因此須要中間找個代理來翻譯下,這就是編譯器(compile)。編譯原理涉及到語義、語法、語序css

啓服務html

// notes/0.0.1 
sudo npm install http-server -g
http-server -p 8000
複製代碼

請求格式規則(控制檯)前端

  • 語義,這段內容要表達什麼,有什麼意義,例子 html、css 和 js 代碼都是有意義的,返回狀態 200 說明網頁成功返回;
  • 語法,這段內容符合必定的格式規則,請求和響應格式規則;
  • 語序,這段內容按順序執行,發送 HTTP 請求,而後響應最後渲染;

經常使用的協議都有哪些

應用層(DHCP、HTTP、HTTPS、RTMP、P2P、DNS、GTP、RPC)

拿某寶購物並下單這件小事(手機比劃幾下就搞定了)來講java

知道目標地址(拿到 ip)後,瀏覽器開始打包請求(請求頭、請求行、請求體)。普通請求使用 HTTP 協議,對於購物須要用到加密傳輸就使用 HTTPS 協議。對於購物來講,都須要在寫清楚買什麼、買多少。其中 DNS、HTTP、HTTPS 所在的層是應用層web

傳輸層(UDP、TCP)

應用層封裝後,瀏覽器將應用層的包交給下一層(傳輸層),經過 socket 編程實現。npm

傳輸層有 2 種協議編程

  • UDP,無鏈接的協議;
  • TCP,鏈接的協議,支付每每是 TCP 協議,由於 TCP 能保證這個包必定到達目的地(不能到達就從新發送,直至到達);

TCP 協議有 2 個端口,瀏覽器監聽的端口和電商應用服務器監聽的端口(如圖)。操做系統一般是經過端口來判斷接收到的包接下來給哪一個進程。應用層到傳輸層再到網絡層都是瀏覽器提供支持。瀏覽器

網絡層(操做系統)(ICMP、IP、OSPF、BGP、IPSec、GRE)

傳輸層封裝後,瀏覽器又會將包交給操做系統的網絡層。網絡層有 IP 協議,這個協議裏有源 IP 地址服務器

  • IP 地址(瀏覽器的 IP 地址,你的電腦);
  • 目標 IP 地址(電商服務器);

操做系統拿到目標 IP 地址後會通過網關(電商服務器和你的電腦不在一塊)。這裏網關默認 IP 地址是 192.168.1.1,這是操做系統啓動時 DHCP 協議(應用層)配置的,同時也配置 IP 地址(你的電腦)。

鏈路層或MAC 層(ARP、VLAN、STP)

一般 IP 地址(本國)和目標 IP 地址(國外)不在一個網段(確定不是一個國家嘛),這個時候要想經過 IP 地址去訪問另外一網段計算機(國外),就須要網關(護照)。而網關地址老是與計算機的IP地址是同一網段的。

那如何經過經過層層網關訪問目標 IP 地址呢?

  • 操做系統將 IP 地址發給網關就是吼一聲(ARP 協議):網關(192.168.1.1)你在哪?
  • 網關回答,I am here and 個人本地地址是 xxx,而本地地址就是傳說中的 MAC 地址。
  • 接着就把包丟給網關。網關扮演的是路由器角色,到某個 IP 怎麼走,這個叫路由表。此時網關知道 IP 地址、目標 IP 地址和本身的 MAC 地址,能夠理解我從哪兒來要到哪兒去和如今在哪兒(人知道過往、身在何處並有了方向去哪兒都不怕)。
  • 網關要到達目標服務器所在網關中間要可能會通過多個網關,網關與相鄰網關也是常常溝通的,這種溝通叫路由協議(OSPF、BGP)(假如能夠作火車到英國,那中間要通過不少國家,而相鄰國家間是有互訪記錄的)。因而從個人網關(用已有信息)經過多個其餘網段網關來到目標服務器所在網關,而後也是大吼一聲(忍了很久了,走了這麼多路)目標 IP 地址(電商服務器)你在哪?
  • 目標服務器淡淡地回覆一個 MAC 地址(給你甩包通道,簽證)。包(這個沉重包袱)經過這個 MAC 地址找到目標服務器器。

截止目前,每層都在給包加負:HTTP 頭 + TCP 頭 + IP 頭 + MAC 頭。

接下來就要給包減負了(網關哥們,辛苦了,來,喝杯水,休息下,剩下的事交給我)

  • 目標服務器檢查 MAC 地址(剛剛給的)對上了,獲取 MAC 頭信息,發送給操做系統的網絡層;
  • 發現 IP 對上 了,就獲取 IP 頭信息
  • IP 頭信息裏會寫上一層封裝過的 TCP 協議(即獲取 TCP 頭信息),當網絡包到傳輸層,獲取 TCP 頭中電商服務器(一個Tomcat)的進程正在監聽的端口,而後將包發個電商網站;
  • 電商的進程獲得 HTTP 請求內容(買什麼和買多少)。而後由接待員 Tomcat (監聽電商服務器端口的傢伙) 負責調度處理這個請求。好比告訴訂單系統進程買什麼和買多少;告訴庫存系統進程庫存相應減去多少;告訴支付系統進程應該收多少錢;告訴配送系統進程什麼時間配送到哪裏等等;中間網絡互連問題由 RPC 框架統一處理;
  • 當接待員 Tomcat 收到各個系統進程都處理完畢後,而後回覆一個 HTTPS 包告知下單成功。這個 HTTPS 包開始一段旅程(就是以前客戶端發送下單那條路),要通過層層歷練達到咱們的電腦的瀏覽器,顯示下單成功;

物理層(網絡跳線)

爲設備之間數據通訊提供通訊媒體和互連設備,給數據傳輸提供可靠的環境。

You can

上一篇:網絡協議爲何要學好

相關文章
相關標籤/搜索