哎喲喲,聽說你TCP/IP協議掌握的不錯呢,進來看看有你不會的嗎?

大家好,我是方圓
北京疫情又出現了一些波瀾,大家要注意防護哇!


1. TCP簡介

  • TCP是面向連接的、可靠的,基於字節流的傳輸層通信協議
  • 將應用層的數據流分割成報文段併發送給目標節點的TCP層
  • 數據包都有序號,對方收到則發送ACK確認,未收到則進行重傳
  • 使用校驗和來檢驗數據在傳輸過程中是否有損失

2. TCP

在這裏插入圖片描述

2.1 TCP中重要的控制位(Control Flag)

  1. ACK:確認序號標誌
  2. SYN:同步序號,用於建立連接
  3. FIN:用於釋放連接
  4. URG:緊急指針標誌
  5. PSH:push標誌
  6. RST:重置連接標誌

3. 三次握手,握手爲了你我之間的聯繫

在這裏插入圖片描述

  1. 第一次握手:建立連接時,用戶端發送SYN包到服務器,等待服務器確認
  2. 第二次握手:服務器收到SYN包,必須確認客戶的SYN,同時發送SYN+ACK包給客戶端
  3. 第三次握手:客戶端收到SYN+ACK包後,向服務器發送確認包ACK,此包發送完畢,服務器接收,進入連接狀態

3.1 爲什麼需要三次握手才能建立連接?

爲了初始化Sequence Number的初始值,如圖上的seq,要進行互相通知,作爲以後數據通信的序號,保證以後傳輸的數據正確性,防止亂序

3.2 建立連接後,client出現故障怎麼辦?

  • 服務器的保活機制
    由服務器向客戶端發送保活探測報文,如果未收到響應則繼續發送,直到達到保活探測次數仍未收到迴應,則會中斷連接

4. TCP的四次揮手

在這裏插入圖片描述

  1. 第一次揮手:客戶端發送一個FIN,用來關閉客戶端到服務器的數據傳輸
  2. 第二次揮手:服務器收到FIN後,發送一個ACK給客戶端,確認需要爲收到的序號+1
  3. 第三次揮手:服務器發送一個FIN,用來關閉服務器到客戶端的數據傳輸
  4. 第四次揮手:客戶端在收到服務器發送的FIN後,發送一個ACK給服務器,確認序號爲收到的序號+1,與服務器的連接進入關閉狀態,完成四次揮手

4.1 爲什麼第四次揮手後,客戶端再等待2MSL才能關閉連接?

  1. 確保有足夠的時間讓服務器收到ACK包
  2. 避免新舊連接的混淆

4.2 爲什麼四次揮手才能斷開連接?

因爲客戶端和服務器是全雙工通信,發送方和接收方都需要發送FIN包和接受ACK包才能斷開連接,由一端先發起斷開連接的請求,所以看起來像四次揮手。

全雙工通信:又稱爲雙向同時通信,即通信的雙方可以同時發送和接收信息的信息交互方式。

5. UDP

5.1 UDP報文頭

在這裏插入圖片描述

  • 特點:
  1. 面向非連接,不維護連接狀態,支持同時向多個客戶端傳輸相同的信息
  2. 數據包報頭只有8字節,額外開銷較小,
  3. 吞吐量只受限於數據生成速率,傳輸速率以及計算機的性能
  4. 盡最大努力交付,不保證數據的可達
  5. 面向報文,不對應用程序提交的報文信息進行拆分或者合併

5.2 TCP與UDP的區別

  1. 面向連接VS面向無連接
  2. 可靠性VS不保證可靠性
  3. 數據有序性VS數據無序性
  4. 速度慢VS速度快(UDP應用於視頻、廣播等)
  5. 重量級VS輕量級

6. TCP滑動窗口

  • RTT:發送一個數據包到收到一個ACK所需的時間
  • RTO:重傳時間間隔
  • TCP利用滑動窗口實現流量控制,並保證TCP的可靠性

6.1 高速重發機制

在窗口較大,又出現報文段丟失的情況下,同一個序號的確認應答將會被重複不斷地返回(比如第1001~2000數據丟失,那麼接受端會不斷地返回下一個數據是1001的應答),而發送端主機接收到連續3次同一個應答,就會對其進行重發。

6.2 流量控制

如果接收端將本該接收到的數據丟棄的話,就會引起重發機制,從而導致流量的浪費。接收端向發送端主機通知自己能夠接收數據的大小,於是發送端會發送不超過該數據大小的數據。該數據大小限度就是窗口的大小,是由接收端主機決定的TCP首部報文中包含窗口大小的數據

7. HTTP

7.1 特點

  1. 支持客戶/服務器模式
  2. 簡單快速
  3. 靈活
  4. 無連接
  5. 無狀態,對事務處理沒有記錄

7.2 請求和響應的步驟

  1. 客戶端連接到web服務器
  2. 發送http請求
  3. 服務器接收請求並返回http響應
  4. 釋放tcp連接
  5. 客戶端瀏覽器解析HTML內容

7.3 在瀏覽器輸入URL地址,按下回車鍵之後發生了什麼?

  1. DNS解析(將對應的地址解析爲IP地址)
  2. TCP連接(三次握手)
  3. 發生HTTP請求
  4. 服務器處理請求並返回HTTP報文
  5. 瀏覽器解析渲染頁面
  6. 斷開連接(四次揮手)

7.4 HTTP狀態碼

  • 1XX:指示信息
  • 2XX:成功
  • 3XX:重定向
  • 4XX:客戶端錯誤
  • 5XX:服務器端錯誤

7.4.1 常見的狀態碼

  • 200 OK
  • 400 Bad Request:客戶端請求語法錯誤
  • 401 Unauthorized:請求未經授權
  • 403 Forbidden:服務器收到請求,但是拒絕訪問
  • 404 Not Found
  • 500 Internal Server Error:服務器發生不可預期的錯誤
  • 503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

7.5 Get和Post的區別

  • Http報文層面:Get請求放在URL地址上;Post放在報文體內
  • 數據庫層面:Get是查詢操作;Post會改變數據庫的數據
  • Get可以被緩存,被存儲;Post不能

7.6 Cookie和Session

7.6.1 Cookie

  • 是由服務器發給客戶端的特殊信息,以文本的形式存放在客戶端
  • 客戶端再次請求的時候,會把Cookie回發
  • 服務器接收到後,會解析Cookie生成相應的內容

7.6.2 Session

  • 服務器端的機制,在服務器上保存信息
  • 解析客戶端請求並依據Session Id返回信息

7.6.3 兩者的區別

  • Cookie數據存放在客戶端的瀏覽器上,Session數據存放在服務器上
  • Session相對於Cookie更安全

(若考慮減輕服務器負擔,應當使用Cookie)

8. HTTPS

在這裏插入圖片描述

8.1 SSL(Security Sockets Layer,安全套接層)

  • 爲網絡通信提供安全及數據完整性的一種安全協議
  • 是操作系統對外的API,SSL3.0後更名爲TLS
  • 身份驗證和數據加密,保證網絡通信的安全和數據的完整性

8.2 加密的方式

  1. 對稱加密:加密和解密都使用同一個密鑰
  2. 非對稱加密:加密和解密使用不同的密鑰(公鑰和私鑰,安全,但是效率低)
  3. 哈希算法:將任意長度的信息轉換爲固定長度的值,算法不可逆
  4. 數字簽名:證明某個消息和文件是某人發出的/認同的

8.3 HTTPS數據傳輸流程

  • 瀏覽器將支持的加密算法發送給服務器
  • 服務器選擇一套瀏覽器支持的加密算法,以證書的形式會發給瀏覽器
  • 瀏覽器驗證證書的合法性,並結合證書公鑰加密信息發送給服務器
  • 服務器使用私鑰解密信息,驗證哈希,加密相應消息後回發瀏覽器
  • 瀏覽器解密相應消息,並對消息進行驗證,之後進行加密加護數據

8.4 HTTPS和HTTP的區別

  1. HTTPS需要到CA申請證書,HTTP不需要
  2. HTTPS密文傳輸,HTTP明文傳輸
  3. 連接方式不同,HTTPS默認使用443端口,HTTP使用80端口
  4. HTTPS=HTTP+加密+認證+完整性保護,較HTTP安全

8.5 HTTPS真的安全嗎?

  • 瀏覽器默認填充http://,請求需要進行跳轉,有被劫持的風險
  • 可以使用HSTS優化

寫完了這篇理論性的文章,希望對大家有幫助,也歡迎大家的批評指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章