PHPer面試指南-協議篇

Git 地址: https://github.com/todayqq/PH...

每次面試多多少少都會被問到 HTTP、HTTPS、TCP、Socket、 OAuth 等等之類協議,協議相關的問題也能夠說是面試必備,因此我把這些知識單獨收集成了一篇文章。html

  • 網絡協議有哪些?
  • 應用層:HTTP、FTP、SSH、SMTP
  • 表示層
  • 會話層
  • 傳輸層:TCP、UDP
  • 網絡層:IP
  • 數據鏈路層
  • 物理層
  • 簡述 HTTP 協議的工做流程
  1. 地址解析;

在瀏覽器中輸入 URL,瀏覽器會從中分解出協議名、主機名、端口、對象路徑等部分git

  1. 封裝 HTTP 請求數據包
  2. 瀏覽器獲取主機 IP 地址,創建 TCP 連接(TCP 的三次握手)
  3. TCP 連接創建後發送 HTTP 請求

請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是 MIME 信息包括請求修飾符、客戶機信息和可內容。github

  1. 服務器接到請求後,給予相應的響應信息

其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是 MIME 信息包括服務器信息、實體信息和可能的內容面試

  1. 服務器斷開 TCP 鏈接
  • 什麼是 HTTPS?實現過程是什麼?

HTTPS(超文本傳輸安全協議)是一種經過計算機網絡進行安全通訊的傳輸協議,提供對網站服務器的身份認證,保護數據傳輸的完整性、安全性。算法

實現過程:瀏覽器

  1. 客戶端發起一個 https 的請求
  2. 服務端接收客戶端請求,返回數字證書相關信息
  3. 客戶端收到服務端響應安全

    1. 驗證證書的合法性
    2. 若是證書受信任,生成隨機數的密碼
    3. 使用約定好的 HASH 算法計算握手消息,並使用生成的隨機數對消息進行加密,而後發送給服務端
  4. 網站接收瀏覽器發來的密文後服務器

    1. 使用私鑰來解密握手消息取出隨機數密碼,再用隨機數密碼解密,握手消息與 HASH 值,並與傳過來的HASH值作對比確認是否一致
    2. 使用密碼加密一段握手消息,發送給瀏覽器
  5. 瀏覽器解密並計算握手消息的 HASH,若是與服務端發來的 HASH 一致,此時握手過程結束,以後全部的通訊數據,將由以前瀏覽器生成的隨機密碼,並利用對稱加密算法進行加密。

HTTPS實現流程圖

  • 數字證書都包含那些信息?
  • 證書的版本信息;
  • 證書的序列號,每一個證書都有一個惟一的證書序列號;
  • 證書所使用的簽名算法;
  • 證書的發行機構名稱;
  • 證書的有效期;
  • 證書全部人的名稱、公開密鑰;
  • 證書發行者對證書的簽名
  • TCP 三次握手的流程
  1. 客戶端發送一個 SYN 標誌位置 1 的包,指明客戶端要鏈接服務器端的接口,發送完畢後,客戶端進入 SYN_SEND 狀態
  2. 服務器發回確認包 (ACK) 應答。即 SYN 標誌位和 ACK 標誌位均爲1。服務器端選擇本身 ISN 序列號,放到 Seq 域裏,同時將確認序號(Acknowledgement Number)設置爲客戶的 ISN 加1,即X+1。 發送完畢後,服務器端進入 SYN_RCVD 狀態。
  3. 客戶端再次發送確認包(ACK),SYN 標誌位爲0,ACK 標誌位爲1,而且把服務器發來 ACK 的序號字段+1,放在肯定字段中發送給對方,而且在數據段放寫ISN的+1

發送完畢後,客戶端進入 ESTABLISHED 狀態,當服務器端接收到這個包時,也進入 ESTABLISHED 狀態,TCP 握手結束。網絡

  • 什麼是 Socket?工做流程是怎樣的?

Socket 又稱網絡套接字,是一種操做系統提供的進程間通訊機制。socket

工做流程:

  1. 服務端先用 socket 函數來創建一個套接字,並調用 listen 函數,使服務端的這個端口和 IP 處於監聽狀態,等待客戶端的鏈接
  2. 客戶端用 socket 函數創建一個套接字,設定遠程 IP 和端口,並調用 connect 函數
  3. 服務端用 accept 函數來接受遠程計算機的鏈接,創建起與客戶端之間的通訊
  4. 完成通訊之後,最後使用 close 函數關閉 socket 鏈接。
  • HTTP1.1 與 WebSocket 的區別?
  • HTTP 是一個單連接,只能作單向通信,而 WebSocket 是一個持久連接,可用做雙向通信。
  • WebSocket 是基於 HTTP 來創建鏈接的,但在創建鏈接以後,真正的數據傳輸階段是不須要 HTTP 協議參與的
  • WebSocket 的請求的頭部和 HTTP 請求頭部不一樣
  • WebSocket 傳輸的數據是二進制流,是以幀爲單位,HTTP 是明文字符串傳輸
  • 什麼是 OAuth2.0 協議?運行流程是怎樣的?

OAuth(Open Authorization) 協議爲用戶資源的受權提供了一個安全的、開放而又簡易的標準,第三方無需使用用戶的用戶名與密碼,就能夠申請得到該用戶資源的受權。

運行流程:

  1. 用戶打開客戶端之後,客戶端要求用戶給予受權。
  2. 用戶贊成給予客戶端受權
  3. 客戶端使用上一步得到的受權,向認證服務器申請令牌。
  4. 認證服務器對客戶端進行認證之後,確認無誤,贊成發放令牌。
  5. 客戶端使用令牌,向資源服務器申請獲取資源。
  6. 資源服務器確認令牌無誤,贊成向客戶端開放資源

OAuth 2.0 定義了四種受權方式,受權碼模式、簡化模式、密碼模式、客戶端模式,具體的受權流程,請看阮一峯老師的文章理解OAuth 2.0

擴展閱讀

相關文章
相關標籤/搜索