大家好,我是
方圓
吶
北京疫情又出現了一些波瀾,大家要注意防護哇!
目錄
1. TCP簡介
- TCP是面向
連接的、可靠的,基於字節流的
傳輸層通信協議 - 將應用層的數據流分割成報文段併發送給目標節點的TCP層
- 數據包都有序號,對方收到則發送ACK確認,未收到則進行重傳
- 使用
校驗和
來檢驗數據在傳輸過程中是否有損失
2. TCP
2.1 TCP中重要的控制位(Control Flag)
ACK
:確認序號標誌SYN
:同步序號,用於建立連接FIN
:用於釋放連接- URG:緊急指針標誌
- PSH:push標誌
- RST:重置連接標誌
3. 三次握手,握手爲了你我之間的聯繫
第一次握手
:建立連接時,用戶端發送SYN包到服務器,等待服務器確認第二次握手
:服務器收到SYN包,必須確認客戶的SYN,同時發送SYN+ACK包給客戶端第三次握手
:客戶端收到SYN+ACK包後,向服務器發送確認包ACK,此包發送完畢,服務器接收,進入連接狀態
3.1 爲什麼需要三次握手才能建立連接?
爲了初始化Sequence Number的初始值
,如圖上的seq,要進行互相通知,作爲以後數據通信的序號,保證以後傳輸的數據正確性,防止亂序
3.2 建立連接後,client出現故障怎麼辦?
- 服務器的
保活機制
由服務器向客戶端發送保活探測報文,如果未收到響應則繼續發送,直到達到保活探測次數仍未收到迴應,則會中斷連接
4. TCP的四次揮手
第一次揮手
:客戶端發送一個FIN,用來關閉客戶端到服務器的數據傳輸第二次揮手
:服務器收到FIN後,發送一個ACK給客戶端,確認需要爲收到的序號+1第三次揮手
:服務器發送一個FIN,用來關閉服務器到客戶端的數據傳輸第四次揮手
:客戶端在收到服務器發送的FIN後,發送一個ACK給服務器,確認序號爲收到的序號+1,與服務器的連接進入關閉狀態,完成四次揮手
4.1 爲什麼第四次揮手後,客戶端再等待2MSL才能關閉連接?
- 確保有足夠的時間讓服務器收到ACK包
- 避免新舊連接的混淆
4.2 爲什麼四次揮手才能斷開連接?
因爲客戶端和服務器是全雙工通信
,發送方和接收方都需要發送FIN包和接受ACK包才能斷開連接,由一端先發起斷開連接的請求,所以看起來像四次揮手。
全雙工通信
:又稱爲雙向同時通信,即通信的雙方可以同時發送和接收信息的信息交互方式。
5. UDP
5.1 UDP報文頭
- 特點:
面向非連接
,不維護連接狀態,支持同時向多個客戶端傳輸相同的信息- 數據包報頭只有
8字節
,額外開銷較小, - 吞吐量只受限於數據生成速率,傳輸速率以及計算機的性能
- 盡最大努力交付,
不保證數據的可達
- 面向報文,不對應用程序提交的報文信息進行拆分或者合併
5.2 TCP與UDP的區別
- 面向連接VS面向無連接
- 可靠性VS不保證可靠性
- 數據有序性VS數據無序性
- 速度慢VS速度快(UDP應用於視頻、廣播等)
- 重量級VS輕量級
6. TCP滑動窗口
RTT
:發送一個數據包到收到一個ACK所需的時間RTO
:重傳時間間隔- TCP利用滑動窗口實現
流量控制
,並保證TCP的可靠性
6.1 高速重發機制
在窗口較大,又出現報文段丟失的情況下,同一個序號的確認應答將會被重複不斷地
返回(比如第1001~2000數據丟失,那麼接受端會不斷地返回下一個數據是1001的應答),而發送端主機接收到連續3次
同一個應答,就會對其進行重發。
6.2 流量控制
如果接收端將本該接收到的數據丟棄的話,就會引起重發機制,從而導致流量的浪費。接收端向發送端主機通知自己能夠接收數據的大小,於是發送端會發送不超過該數據大小的數據。該數據大小限度就是窗口的大小,是由接收端主機決定的
。TCP首部報文中包含窗口大小的數據
。
7. HTTP
7.1 特點
- 支持客戶/服務器模式
- 簡單快速
- 靈活
無連接
無狀態
,對事務處理沒有記錄
7.2 請求和響應的步驟
- 客戶端連接到web服務器
- 發送http請求
- 服務器接收請求並返回http響應
- 釋放tcp連接
- 客戶端瀏覽器解析HTML內容
7.3 在瀏覽器輸入URL地址,按下回車鍵之後發生了什麼?
- DNS解析(將對應的地址解析爲IP地址)
- TCP連接(三次握手)
- 發生HTTP請求
- 服務器處理請求並返回HTTP報文
- 瀏覽器解析渲染頁面
- 斷開連接(四次揮手)
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 加密的方式
對稱加密
:加密和解密都使用同一個密鑰非對稱加密
:加密和解密使用不同的密鑰(公鑰和私鑰,安全,但是效率低)哈希算法
:將任意長度的信息轉換爲固定長度的值,算法不可逆數字簽名
:證明某個消息和文件是某人發出的/認同的
8.3 HTTPS數據傳輸流程
- 瀏覽器將支持的加密算法發送給服務器
- 服務器選擇一套瀏覽器支持的加密算法,以證書的形式會發給瀏覽器
- 瀏覽器驗證證書的合法性,並結合證書公鑰加密信息發送給服務器
- 服務器使用私鑰解密信息,驗證哈希,加密相應消息後回發瀏覽器
- 瀏覽器解密相應消息,並對消息進行驗證,之後進行加密加護數據
8.4 HTTPS和HTTP的區別
- HTTPS需要到CA申請證書,HTTP不需要
- HTTPS密文傳輸,HTTP明文傳輸
- 連接方式不同,HTTPS默認使用443端口,HTTP使用80端口
- HTTPS=HTTP+加密+認證+完整性保護,較HTTP安全
8.5 HTTPS真的安全嗎?
- 瀏覽器默認填充http://,請求需要進行跳轉,有被劫持的風險
- 可以使用HSTS優化
寫完了這篇理論性的文章,希望對大家有幫助,也歡迎大家的批評指正!