計網
網路OSI模型和TCP/IP模型
OSI 網路模型主要有 7 層,分別是應用層、表示層、會話層、傳輸層、網路層、資料鏈路層以及物理層
TCP模型 應用層,傳輸層,網路層和網路介面層
- tcp 在傳輸層
- ip 在網路層
HTTP、HTTPS、CDN、DNS、FTP 都是應用層協議
用同一個 TCP 連線來傳送和接收多個 HTTP 請求/應答,避免了連線建立和釋放的開銷,這個方法稱為 HTTP 長連線
建立 TCP -> 請求資源 -> 響應資源 -> 釋放連線,那麼此方式就是 HTTP 短連線
HTTPS握手過程
在將 TLS 證書部署服務端時,證書檔案其實就是服務端的公鑰,會在 TLS 握手階段傳遞給客戶端,而服務端的私鑰則一直留在服務端,一定要確保私鑰不能被竊取。
在 RSA 金鑰協商演算法中,客戶端會生成隨機金鑰,並使用服務端的公鑰加密後再傳給服務端。根據非對稱加密演算法,公鑰加密的訊息僅能透過私鑰解密,這樣服務端解密後,雙方就得到了相同的金鑰,再用它加密應用訊息。
TLS 第一次握手,客戶端生產的隨機數(Client Random),後面用於生成「會話秘鑰」條件之一
TLS 第二次握手,伺服器生產的隨機數(Server Random),客戶端獲取伺服器的數字證書
TLS 第三次握手,客戶端一個隨機數,生成本次通訊的會話秘鑰
TLS 第四次握手,加密通訊演算法改變通知,表示隨後的資訊都將用「會話秘鑰」加密通訊,握手階段已經結束
HTTP進行TCP連線之後,在什麼情況下會中斷
無響應或close
DNS 基於UDP協議實現,DNS使用UDP協議進行域名解析和資料傳輸
cookie和session有什麼區別
Cookie的資料儲存在客戶端,Session的資料儲存在伺服器端,伺服器為每個使用者分配一個唯一的Session ID,cookie不安全,可以設定時間,session在瀏覽器關閉時結束,預設情況下禁用 Cookie 後,Session 是無法正常使用的
JWT 令牌都有哪些欄位
頭部和載荷均為JSON格式,使用Base64編碼進行序列化,而簽名部分是對頭部、載荷和金鑰進行簽名後的結果
為什麼有HTTP協議了?還要用RPC
RPC 其實比 HTTP 出現的要早,RPC效能還行
HTTP長連線與WebSocket有什麼區別
全雙工和半雙工,應用場景
Nginx支援的負載均衡演算法包括
輪詢,IP雜湊,URL雜湊,最短響應時間,加權輪詢
tcp的頭部
序列號,確認應答號,控制位(ACK,SYN,FIN...)
TCP三次握手過程
客戶端初始化序列號,SYN=1
服務端初始化序列號,SYN=1,ACK=1,確認應答號
客戶端ACK=1,確認應答號,連線建立
tcp為什麼需要三次握手建立連線
為了防止舊的重複連線初始化造成混亂
在兩次握手的情況下,服務端沒有中間狀態給客戶端來阻止歷史連線
同步雙方初始序列號
ACK 報文是不會有重傳的,當 ACK 丟失了,就由對方重傳對應的報文
大量SYN包傳送給服務端服務端會發生什麼事情
有可能會導致TCP 半連線佇列打滿,這樣當 TCP 半連線佇列滿了,後續再在收到 SYN 報文就會丟棄,導致客戶端無法和服務端建立連線
增大 TCP 半連線佇列,減少 SYN+ACK 重傳次數
TCP 四次揮手過程
客戶端主動呼叫關閉連線的函式,於是就會傳送 FIN 報文
服務端收到了 FIN 報文,然後馬上回復一個 ACK 確認報文,繼續 read 接收緩衝區已接收的資料
服務端就會發一個 FIN 包
客戶端接收到服務端的 FIN 包,併傳送 ACK 確認包給服務端
服務端收到 ACK 確認包後,就進入了最後的 CLOSE 狀態,客戶端經過 2MSL 時間之後,也進入 CLOSE 狀態
第三次揮手一直沒發
孤兒連線,在 60 秒後還沒有收到 FIN 報文,連線就會直接關閉
為什麼四次揮手之後要等2MSL
網路中可能存在來自傳送方的資料包
服務端出現大量的timewait
短連結太多,長連線超時
TCP和UDP區別是什麼
TCP 是面向連線,TCP 是一對一,擁塞控制、流量控制,TCP 是流式傳輸,沒有邊界,但保證順序和可靠
TCP為什麼可靠傳輸
序列號,確認應答,超時重傳,流量控制,擁塞控制
ddos攻擊?怎麼防範
DDoS 攻擊是透過連線網際網路的計算機網路進行的,殭屍網路
增強網路基礎設施,流量清洗和負載均衡
DNS劫持的原理是攻擊者在使用者查詢DNS伺服器時篡改響應,將使用者請求的域名對映到攻擊者控制的虛假IP地址上,使使用者誤以為訪問的是正常網站
ARQ
停止等待ARQ:超時重傳,丟失確認,遲到確認(丟棄重複)
連續ARQ:流水線傳輸,累積確認(按序最後一個),滑動視窗,回退N幀,選擇重傳