1. 程式人生 > >瀏覽器中常見網路協議介紹

瀏覽器中常見網路協議介紹

提醒:本文最後更新於 1318 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

本週五我在公司有一個關於《HTTP 協議》的培訓,只有兩個小時,估計能講到的東西不會太多。實際上,瀏覽器為了完成 WEB 應用的各項功能,需要跟各種網路協議打交道,HTTP 只是其中一種。本文會介紹瀏覽器中常見的網路協議,以及各種協議之間的關係。

我們經常會聽到「TCP/IP 協議」這個名詞,從字面上看,有人會認為它專指 TCP 和 IP 兩種協議。實際上大多數情況,TCP/IP 協議指的是整個網際協議族(Internet Protocol Suite),是利用 IP 協議進行通訊的其他協議統稱。TCP/IP 包含的協議眾多,還有一個分層模型。相比較 OSI 模型,TCP/IP 的分層更簡單,從下到上分別為:物理層、資料鏈路層、網路層、傳輸層和應用層。

IP(Internet Protocol)屬於網路層協議,負責聯網主機之間的路由選擇和定址。IPv4 中的 4 指的是 TCP/IP 協議的第 4 個版本,直到這個版本,IP 協議才單獨拆出來,所以並沒有單獨的 IPv1 - IPv3。而 IPv5 分給了一個沒什麼進展的試驗性協議,所以下一個版本的 IP 協議變成了 IPv6。

TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是整個 TCP/IP 協議中最重要的兩個傳輸層協議。TCP 是面向連線的、可靠的流協議;UDP 是不具有可靠性的資料報協議。後面可以看到,對可靠性要求比較高的上層協議一般會基於 TCP;而對高速傳輸和實時性有較高要求的上層協議一般會基於 UDP。

介紹完比較低層的 IP、TCP 和 UDP 之後,下面看幾個瀏覽器中常見的應用層協議。

HTTP 與 WebSocket

HTTP 協議是瀏覽器需要用到的最重要的網路協議,它包括很多版本,例如最常見的 HTTP/1.1,剛剛釋出的 HTTP/2,還有 Google 實現的過渡版本 SPDY 等等。本文不討論 HTTP 的細節以及各版本之間的差異,只打算列出 HTTP 與其他協議 / 應用之間的關係,見下圖:

+-------------+-------------+--------------+
|     XHR     |     SSE     |      WS      |
+-------------+-------------+------+       +
|               HTTP               |       |
+----------------------------------+-------+
|                    TLS *                 |
+------------------------------------------+
|                    TCP                   |
+------------------------------------------+
|                    IP                    |
+------------------------------------------+

從上圖可以看出 HTTP 是在 TCP 之上實現的,所以 HTTP 中並不需要關注資料傳輸的可靠性,類似於順序控制、重發這樣的機制在傳輸層已經有了。同時,HTTP 也擁有 TCP 的一些缺點,給 WEB 效能優化帶來挑戰。

XHR(XmlHTTPRequest)和 SSE(Server-Sent Events)都是瀏覽器提供的資料互動功能,它們的本質都還是 HTTP。XHR 是 Ajax 技術的核心,大家都很熟,這裡略過不討論;SSE 概念還算新,多說幾句。我們知道 HTTP 只能由客戶端發起請求,再由服務端響應。SSE 也是這樣,只不過服務端會保持住這個 HTTP 連線,多次傳送響應,不像平時傳送完響應就結束了。實際上,很早之前在 WebIM 中類似的 HTTP 長連線技術就已經很盛行了,有興趣的同學可以看下這篇八年前的文章:Comet:基於 HTTP 長連線的「伺服器推」技術

既然 XHR 和 SSE 本質都是 HTTP 連線,所以 HTTP 協議中一些常見概念,例如請求方式(GET、POST 等),請求響應頭部(Cookie、內容編碼、傳輸編碼、快取等)等等,依然存在。

而 WS(WebSocket)是直接基於 TCP 實現的,HTTP 協議中的那些概念都不復存在。需要注意的是,從前面圖表中可以看出,它還是依賴於 HTTP,這是因為 WebSocket 握手利用了 HTTP 的 Upgrade 機制。一旦握手完成,後續資料傳輸就直接在 TCP 上完成。瀏覽器中新協議藉助 HTTP 作為引導,是一個較為普遍的做法。

TLS(Transport Layer Security,傳輸層安全),作用是保證資料在傳輸過程中的完整性和保密性,屬於可選項。啟用了 TLS 之後,HTTP 協議的 URL 字首需要由 http:// 改成 https://;WebSocket 協議的 URL 字首需要由 ws:// 改成 wss://

DNS

DNS(Domain Name System),就是大家熟知的域名解析服務,提供了從域名到 IP 的轉換。瀏覽器中大部分網路互動都會使用域名,而傳輸層協議需要的是 IP,所以 DNS 是基礎。

+-------------------------------+
|              DNS              |
+-------------------------------+
|      TCP      |      UDP      |
+---------------+---------------+
|               IP              |
+-------------------------------+

DNS 服務預設使用 UDP 協議獲得查詢結果,通常僅當結果超過 512 位元組或者進行 DNS 伺服器同步時才會使用 TCP 協議。這是因為 DNS 的使用非常頻繁,又是基礎,響應速度是優先需要考慮的。使用 UDP 可以滿足速度上的要求,但同時也引入了類似於「DNS 快取投毒」這類問題。

WebRTC

WebRTC(Web Real-Time Communication)出現之前,DNS 幾乎是瀏覽器唯一使用的基於 UDP 的協議。WebRTC 提供的三大功能中,MediaStream 與網路無關,RTCPeerConnection 和 RTCDataChannel 都是基於 UDP,如圖:

+-----------------------+-------------------------+
|   RTCPeerConnection   |      RTCDataChannel     |
+-----------------------+-------------------------+
|          SRTP         |           SCTP          |
+             +---------+-------------------------+
|             |                DTLS               |
+-------------+-----------------------------------+
|                ICE, STUN, TURN                  |
+-------------------------------------------------+
|                       UDP                       |
+-------------------------------------------------+
|                       IP                        |
+-------------------------------------------------+

這個圖比較複雜,我們從下往上介紹:

ICE(Interactive Connectivity Establishment)框架,作用是在端與端之間建立一條有效的通道,優先直連,其次用 STUN 協商,再不行只能用 TURN 轉發:

  • STUN(Session Traversal Utilities for NAT)協議,解決了三個問題:1)獲得外網 IP 和埠;2)在 NAT 中建立路由條目,繫結外網埠,使得到達外網 IP 和埠的入站分組能找到應用程式,不被丟棄;3)定義了一個簡單的 keep-alive 機制,保證 NAT 路由條目不會因為超時而被刪除。STUN 伺服器必須架設在公網上,可以自己搭建,也可以使用第三方提供的公開服務,例如 Google 的「stun:stun.l.google.com:19302」。
  • TURN(Traversal Using Relays around NAT)協議,依賴外網中繼裝置在兩端之間傳遞資料。簡單說就是通過兩端都可以訪問的 TURN 服務轉發訊息,間接把兩端連起來。

DTLS(Datagram Transport Layer Security,資料報傳輸層安全),本質上就是 TLS,只是為了相容 UDP 的資料報傳輸而做了一些微小的修改,可以簡單把它理解為 UDP 版的 TLS。

再往上就兵分兩路,一路的目標是 RTCPeerConnection,負責音訊和視訊資料通訊,對傳輸速度和實時性有很高的要求,這裡又有兩個新的協議出現:

  • SRTP(Secure Real-time Transport Protocol,安全實時傳輸協議)。WebRTC 中的音訊和視訊等實時資料都是通過這個協議傳輸。它是 RTP 協議的安全版。
  • SRTCP(Secure Real-Time Control Transport Protocol,安全實時控制傳輸協議)。它會跟蹤 SRTP 的執行情況,以便調整每個流的傳送速率、編碼品質和其他引數。它是 RTCP 協議的安全版。

另一路的目標是 RTCDataChannel,用來在端到端之間傳輸任意應用資料,SRTP 是專門為傳輸媒體資料為設計的,不適合傳輸應用資料,所以這裡又需要一個新的協議:

  • SCTP(Stream Control Transmission Protocol,流控制傳輸協議)。本身 SCTP 是一個傳輸層協議,直接執行在 IP 協議之上,與 TCP 和 UDP 類似。但在 WebRTC 這裡,SCTP 卻運行於 DTLS 之上。SCTP 很好的一點是提供了交付屬性選項,使用者可以指定訊息是有序還是亂序,是可靠還是部分可靠,部分可靠時還可以指定使用超時重傳還是計數重傳策略。

QUIC

Google 正在試驗一種新的傳輸層協議:QUIC(Quick UDP Internet Connections),它的本質是基於 UDP 實現 HTTP,相當於之前的 TCP + TLS。從目前的資料來看,QUIC 可以大幅減少建立連線的時間,這是通過簡化握手步驟從而減少 RTT(Round-Trip Time)來實現的,類似於 TFO(TCP Fast Open)。有興趣的同學可以點這個連線圍觀,據說 Google 自家服務來自 Chrome 的請求中,已經有 50% 使用了 QUIC 協議。

最後表達下對 Google 的佩服。Google 為了優化 WEB 效能,在瀏覽器(Chrome)、排版引擎(Blink)、JS 引擎(V8)、圖片格式(WebP)、傳輸層協議(TCP 的 TFO,QUIC)、應用層協議(SPDY)以及 HTML5(從 Google Gears 開始)等等方面都做了大量努力,實在是技術型公司典範,歎為觀止!

--EOF--

提醒:本文最後更新於 1318 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

相關推薦

瀏覽器常見網路協議介紹

提醒:本文最後更新於 1318 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 本週五我在公司有一個關於《HTTP 協議》的培訓,只有兩個小時,估計能講到的東西不會太多。實際上,瀏覽器為了完成 WEB 應用的各項功能,需要跟各種網路協議打交道,HTTP 只是其中一種。本文會介紹瀏覽器中常見的

瀏覽器常見網絡協議介紹

響應 網絡 ebs 優化 system 目標 其他 有序 ipv 本周五我在公司有一個關於《HTTP 協議》的培訓,只有兩個小時,估計能講到的東西不會太多。實際上,瀏覽器為了完成 WEB 應用的各項功能,需要跟各種網絡協議打交道,HTTP 只是其中一種。本文會介紹瀏覽器中常

常見路由協議介紹

edits blank 技術 以及 wikipedia 否則 get AR 環境 常見的路由協議有RIP、IGRP(Cisco私有協議)、EIGRP(Cisco私有協議)、OSPF、IS-IS、BGP等。 RIP、IGRP、EIGRP、OSPF、IS-IS是內部網關協議(

Html和CSS在瀏覽器常見的相容性問題處理

1,居中問題   格里的內容,IE預設為居中,而FF預設為左對齊,可以嘗試增加程式碼: margin: 0 auto; 2,高度問題 兩上下排列或巢狀的格,上面的格設定高度(高度),如果DIV裡的實際內容大於所設高度,在FF中會出現兩個格重疊的現象;

vector常見介面的介紹與使用

迭代器相關iterator begin();正向迭代器:返回一個迭代器,指向vector物件的第一個元素iterator end();正向迭代器:返回一個迭代器,指向vector物件最後一個元素的後邊reverse_iterator rbegin();反向迭代器:返回一個迭代

常見開源協議介紹

一、常用開源協議彙總圖 首先從一張圖開始,介紹幾種主流的開源協議,以及決定選用哪種框架的思路。 使用哪種開源協議,決定了你釋出的開源專案被別人使用了之後,別人的專案是否受到你的專案的開源協議的約束、受到哪種約束。 同理,採用別人的開源專案時,也要留意開源協

JAVA網路協議,UDP,TCP案例分析及筆記總結

今日內容介紹 1、網路三要素及傳輸協議 2、實現UDP協議的傳送端和接收端 3、實現TCP協議的客戶端和伺服器 4、TCP上傳檔案案例 今日內容總結 5.1知識點總結 IP地址:用來唯一表示我們自己的電腦的,是一個網路標示 埠號: 用來區別當

常見網路協議簡介

IPv4 網際協議版本4(Internet Protocol version 4)。自20世紀80年代早期以來一直是網際協議簇的主力協議。它使用32位地址。IPv4給TCP、UDP、SCTP、ICMP和IGMP提供分組遞送服務。 IPv6 網際協議版本6(Interne

常見網路協議埠號整理

    常見的網路協議\埠號  一個網路協議至少包括三要素:    語法 用來規定資訊格式;資料及控制資訊的格式、編碼及訊號電平等。    語義 用來說明通訊雙方應當怎麼做;用於協調與差錯處理的控制資訊。  時序(定時 )詳細說明事件的先後順序;速度匹配和

【PHP常見面試題 PHP基礎-網路協議】HTTP/1.1,狀態碼 200 301 304 403 404 500 的含義。

文章目錄 一、考點 1、HTTP協議狀態碼 ① 狀態碼的作用: ② 五類響應:1XX、2XX、3XX、4XX、5XX ③ 常見狀態碼:

SylixOS 網路協議棧lwip介紹3-----udp資料接收

資料包接收包括兩個部分。首先網絡卡獲取一個數據包並使用中斷通知系統,系統解析這個資料包放入緩衝佇列中。再由應用層呼叫介面recv()或recvfrom()獲取這個資料包。 1、中斷接收 (1)    系統在初始化時會註冊網絡卡中斷,處理函式為dm9000IntI

SylixOS 網路協議棧lwip介紹2-----UDP資料傳送流程

UDP資料包的傳送是通過sendto()發起的(其他介面類似),整體實現流 程如下: (1)    通過檔案描述符fd獲取檔案結構,並提取lwipfd。再通過lwipfd從socket表中獲取socket結構。Socket結構中包含了此udp連結中的connec

SylixOS 網路協議棧lwip介紹1-----pbuf結構

    SylixOS網路協議棧使用目前非常流行的嵌入式TCP/IP協議棧lwip。lwip是瑞典電腦科學院(SICS)的AdamDunkels 開發的一個小型開源的TCP/IP協議棧。lwip特點是對RAM與ROM的佔用非常少,只需十幾KB的RAM和40

計算機網路幾種常見協議

一 .典型協議:  傳輸層:         常見的協議有  TCP/UDP 協議                  應用層:&nb

瀏覽器進行深度學習:TensorFlow.js (八)生成對抗網路 (GAN

Generative Adversarial Network 是深度學習中非常有趣的一種方法。GAN最早源自Ian Goodfellow的這篇論文。LeCun對GAN給出了極高的評價: “There are many interesting recent development in deep learni

網路協議-1】常見協議名詞簡介

一些名詞解釋: 1.Socket(套接字): Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個呼叫介面(API),Socket只是為了更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,提供給我們一些最基本的函式介面。 流式套接字(SOCK_

SMB小傳 —— SMB網路檔案系統協議介紹

SMB網路檔案系統協議, 全名伺服器訊息塊(Server Message Block),曾用名CIFS(通用網際網路檔案系統 Common Internet File System), 公元1983年誕生於IBM[1],幼年得到英特爾和微軟的照料,最終在微軟的培養下成長為當今世上網路檔案系統協議兩極之一的存在

用雙十一的故事串起碎片的網路協議

本文來自網易雲社群 作者:劉超 上一節我們講到,手機App經過了一個複雜的過程,終於拿到了電商網站的SLB的IP地址,是不是該下單了? 別忙,俗話說的好,買東西要貨比三家。大部分客戶在購物之前要看很多商品圖片,比來比去,最後好不容易才下決心,點了下單按鈕。下單按鈕一按,就要開始建立連線。建立連線這個過程也

網路請求常見的加密機制和加密演算法理解

請求安全性: 伺服器端在接收到請求的時候,要主動鑑別該請求是否有效,是否可接受。   token:已登陸使用者的識別碼     解決的問題:使用者呼叫介面時,不用每次都帶上使用者名稱和密碼,避免了頻繁在網路中傳輸密碼被截獲的風險。     使用場景:使用者登入系統時傳入使用者名稱和密碼,伺服器校驗成功之後,根

趣談網路協議---雲網路的隔離GRE、VXLAN:雖然住一個小區,也要保護隱私

VLAN 只有 12 位,共 4096 個,對於雲平臺的隔離問題,不夠用。 所以,要擴充套件 VLAN 協議,在原來的包的格式的基礎上擴展出一個頭,裡面包含用於區分租戶的 ID,外層的包的和格式儘量和傳統一樣,很像隧道協議。 底層的物理網路裝置組成的網路為 Un