Git 地址: https://github.com/todayqq/PH...
每次面試多多少少都會被問到 HTTP、HTTPS、TCP、Socket、 OAuth 等等之類協議,協議相關的問題也能夠說是面試必備,因此我把這些知識單獨收集成了一篇文章。html
- 應用層:HTTP、FTP、SSH、SMTP
- 表示層
- 會話層
- 傳輸層:TCP、UDP
- 網絡層:IP
- 數據鏈路層
- 物理層
- 地址解析;
在瀏覽器中輸入 URL,瀏覽器會從中分解出協議名、主機名、端口、對象路徑等部分git
- 封裝 HTTP 請求數據包
- 瀏覽器獲取主機 IP 地址,創建 TCP 連接(TCP 的三次握手)
- TCP 連接創建後發送 HTTP 請求
請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是 MIME 信息包括請求修飾符、客戶機信息和可內容。github
- 服務器接到請求後,給予相應的響應信息
其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是 MIME 信息包括服務器信息、實體信息和可能的內容面試
- 服務器斷開 TCP 鏈接
HTTPS(超文本傳輸安全協議)是一種經過計算機網絡進行安全通訊的傳輸協議,提供對網站服務器的身份認證,保護數據傳輸的完整性、安全性。算法
實現過程:瀏覽器
- 客戶端發起一個 https 的請求
- 服務端接收客戶端請求,返回數字證書相關信息
客戶端收到服務端響應安全
- 驗證證書的合法性
- 若是證書受信任,生成隨機數的密碼
- 使用約定好的 HASH 算法計算握手消息,並使用生成的隨機數對消息進行加密,而後發送給服務端
網站接收瀏覽器發來的密文後服務器
- 使用私鑰來解密握手消息取出隨機數密碼,再用隨機數密碼解密,握手消息與 HASH 值,並與傳過來的HASH值作對比確認是否一致
- 使用密碼加密一段握手消息,發送給瀏覽器
- 瀏覽器解密並計算握手消息的 HASH,若是與服務端發來的 HASH 一致,此時握手過程結束,以後全部的通訊數據,將由以前瀏覽器生成的隨機密碼,並利用對稱加密算法進行加密。
- 證書的版本信息;
- 證書的序列號,每一個證書都有一個惟一的證書序列號;
- 證書所使用的簽名算法;
- 證書的發行機構名稱;
- 證書的有效期;
- 證書全部人的名稱、公開密鑰;
- 證書發行者對證書的簽名
發送完畢後,客戶端進入 ESTABLISHED 狀態,當服務器端接收到這個包時,也進入 ESTABLISHED 狀態,TCP 握手結束。網絡
Socket 又稱網絡套接字,是一種操做系統提供的進程間通訊機制。socket
工做流程:
- 服務端先用 socket 函數來創建一個套接字,並調用 listen 函數,使服務端的這個端口和 IP 處於監聽狀態,等待客戶端的鏈接
- 客戶端用 socket 函數創建一個套接字,設定遠程 IP 和端口,並調用 connect 函數
- 服務端用 accept 函數來接受遠程計算機的鏈接,創建起與客戶端之間的通訊
- 完成通訊之後,最後使用 close 函數關閉 socket 鏈接。
- HTTP 是一個單連接,只能作單向通信,而 WebSocket 是一個持久連接,可用做雙向通信。
- WebSocket 是基於 HTTP 來創建鏈接的,但在創建鏈接以後,真正的數據傳輸階段是不須要 HTTP 協議參與的
- WebSocket 的請求的頭部和 HTTP 請求頭部不一樣
- WebSocket 傳輸的數據是二進制流,是以幀爲單位,HTTP 是明文字符串傳輸
OAuth(Open Authorization) 協議爲用戶資源的受權提供了一個安全的、開放而又簡易的標準,第三方無需使用用戶的用戶名與密碼,就能夠申請得到該用戶資源的受權。
運行流程:
OAuth 2.0 定義了四種受權方式,受權碼模式、簡化模式、密碼模式、客戶端模式,具體的受權流程,請看阮一峯老師的文章理解OAuth 2.0。