什么是OSI協議
在一切開始之前,需對OSI七層協議模型有基本了解
OSI七層協議模型、TCP/IP四層模型、五層協議體系結構的示意圖如下
層協議和對應的標准7層協議的關系如下圖:
什么是UDP 和 TCP
工作在傳輸層,建立端到端的鏈接。
UDP 和 TCP 的區別
TCP 和 UDP 都位於計算機網絡模型中的運輸層,它們負責傳輸應用層產生的數據。下面我們就來聊一聊 TCP 和 UDP 分別的特征和他們的區別
UDP 是什么
UDP 的全稱是 User Datagram Protocol,用戶數據報協議。它不需要所謂的握手操作,從而加快了通信速度,允許網絡上的其他主機在接收方同意通信之前進行數據傳輸。
數據報是與分組交換網絡關聯的傳輸單元。
UDP 的特點主要有
-
UDP 能夠支持容忍數據包丟失的帶寬密集型應用程序
-
UDP 具有低延遲的特點
-
UDP 能夠發送大量的數據包
-
UDP 能夠允許 DNS 查找,DNS 是建立在 UDP 之上的應用層協議。
TCP 是什么
TCP 的全稱是Transmission Control Protocol ,傳輸控制協議。它能夠幫助你確定計算機連接到 Internet 以及它們之間的數據傳輸。通過三次握手來建立 TCP 連接,三次握手就是用來啟動和確認 TCP 連接的過程。一旦連接建立后,就可以發送數據了,當數據傳輸完成后,會通過關閉虛擬電路來斷開連接。
TCP 的主要特點有
-
TCP 能夠確保連接的建立和數據包的發送
-
TCP 支持錯誤重傳機制
-
TCP 支持擁塞控制,能夠在網絡擁堵的情況下延遲發送
-
TCP 能夠提供錯誤校驗和,甄別有害的數據包。
TCP的三次握手和四次揮手
SYN建立連接請求
FIN結束連接請求
三次握手
第一次握手:發送SYN=1 附帶隨機數sequence=(隨機數1號)
第二次握手:發送SYN=1 ACK=1(表示確認收到) 附帶隨機數sequence=(隨機數2號) 加確認信息ack(通過第一次請求的sequence隨機數+1得到的數)
第三次握手:發送ACK=1(表示確認收到) 附帶隨機數sequence=(隨機數1,也就是最開始的那個)+1 加確認信息ack(通過第二次請求的sequence隨機數2+1得到的數
第三次握手使用了前兩次的隨機數,這樣做避免客戶端發送多個連接請求,分不清那個是哪個。
Ddos攻擊,只發送第一次握手,不發送第三次握手,這樣服務器就是會一直保留第一次握手的sequence,從而癱瘓。
四次揮手
第一次揮手:發送 FIN(請求結束) 附帶隨機數sequence=隨機數1
第二次揮手:發送ACK=1(表示確認收到)加確認信息ack(通過第一次請求的sequence隨機數1+1得到的數)
第二次和第三次不能合為一步是因為,可能還有數據在傳遞,需要等待服務端一切就緒后才能發送結束信號。
第三次揮手:發送FIN(請求結束) 加確認信息ack(通過第一次請求的sequence隨機數1+1得到的數) 附帶隨機數sequence=(隨機數2)
第四次揮手:發送發送ACK=1 加確認信息ack(通過第一次請求的sequence隨機數2+1得到的數)加 附帶sequence=(隨機數1)+1
什么是 http
超文本傳輸協議(Hyper Text Transfer Protocol,HTTP)是一個簡單的請求-響應協議,它通常運行在TCP之上。它指定了客戶端可能發送給服務器什么樣的消息以及得到什么樣的響應,是一個在計算機世界里專門在兩點之間傳輸文字、圖片、音頻、視頻等超文本數據的約定和規范。
HTTP 主要內容分為三部分,超文本(Hypertext)、傳輸(Transfer)、協議(Protocol)。
-
超文本就是不單單只是本文,它還可以傳輸圖片、音頻、視頻,甚至點擊文字或圖片能夠進行超鏈接的跳轉。
-
上面這些概念可以統稱為數據,傳輸就是數據需要經過一系列的物理介質從一個端系統傳送到另外一個端系統的過程。通常我們把傳輸數據包的一方稱為請求方,把接到二進制數據包的一方稱為應答方。
-
而協議指的就是是網絡中(包括互聯網)傳遞、管理信息的一些規范。如同人與人之間相互交流是需要遵循一定的規矩一樣,計算機之間的相互通信需要共同遵守一定的規則,這些規則就稱為協議,只不過是網絡協議。
至於http協議的具體內容和規范,可以參考這篇文章
什么是 https
HTTPS 並不是一個新的應用層協議,它其實就是 HTTP + TLS/SSL 協議組合而成,而安全性的保證正是 TLS/SSL 所做的工作。
也就是說,HTTPS 就是身披了一層 SSL 的 HTTP
面試:https是什么?http和https有什么不同?
答:HTTPS並不是新的應用層協議,而是http協議+SSL協議組合,所以HTTPS就是 HTTP + TLS/SSL 協議組合,至於它和HTTP有什么不同,在直觀區別上有以下幾點
- 傳輸信息安全性不同:http協議是超文本傳輸協議,信息是明文傳輸。如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息。https協議是具有安全性的ssl加密傳輸協議,為瀏覽器和服務器之間的通信加密,確保數據傳輸的安全。
用什么方法加密,如何加密的?
會在后面提到? - 端口不同:http協議:使用的端口是80
- 需要申請證書
上面都是表層的不同,最重要的是https在osi的會話層添加了tls協議,需要進行四次握手,建立安全的通訊環境。
面試:HTTPS 解決了什么問題
一個簡單的回答可能會是 HTTP
它不安全。由於 HTTP 天生明文傳輸的特性,在 HTTP 的傳輸過程中,任何人都有可能從中截獲、修改或者偽造請求發送,所以可以認為 HTTP 是不安全的;在 HTTP 的傳輸過程中不會驗證通信方的身份,因此 HTTP 信息交換的雙方可能會遭到偽裝,也就是沒有用戶驗證
;在 HTTP 的傳輸過程中,接收方和發送方並不會驗證報文的完整性
,綜上,為了結局上述問題,HTTPS 應用而生。
面試:HTTPS 做了什么?
-
加密(Encryption)
-
數據一致性(Data integrity)
-
身份認證(Authentication)
什么是 SSL/TLS
TLS(Transport Layer Security)
是SSL(Secure Socket Layer)
的后續版本,它們是用於在互聯網兩台計算機之間用於身份驗證
和加密
的一種協議。
我們需要清楚SSL/TLS位於什么層,這關系到它何時起作用。
TLS在可靠的傳輸層(TCP)之上運行,這意味着首先必須完成TCP的“三次握手“。
SSL/TLS加密基本原理
四次握手流程
-
客戶端發出請求(ClientHello):發送支持的TLS版本、加密套件、壓縮方式和一個隨機數
-
服務器回應(ServerHello):確認TLS版本、加密方式,還會發送公鑰、證書和一個隨機數並附帶
ServerHello Done
-
客戶端回應:去證書頒發網站驗證證書是否有效,如果有效,則信任這是合法的服務器,客戶端再次產生一個隨機數(也叫預主秘鑰),用服務器的證書中的公鑰加密,發送給服務器,客戶端發送握手結束通知,表示握手結束。
-
服務器最后回應:服務器用私鑰解密客戶端發送過來的隨機數,生成pre-master key(服務端用預主秘鑰第一隨機數和第二算技術計算出的會話秘鑰),用於接下來的
對稱加密
,服務器發送編碼改變通知,表明下面使用協商的加密和秘鑰傳送信息,服務器發送握手結束通知,表示SSL/TLS握手結束。
https工作流程圖
結合上面所講知識,現在再來看這個https請求流程圖,感覺淺顯易懂了很多。
加密知識淺探
對稱加密
也叫共享秘鑰加密,加密和解密同用一個密鑰。服務端將秘鑰發送給客戶端的過程中,容易被劫持,失去安全效果。
對稱加密算法用來對敏感數據等信息進行加密,常用的算法包括:
DES(Data Encryption Standard):數據加密標准,速度較快,適用於加密大量數據的場合。
3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高。
AES(Advanced Encryption Standard):高級加密標准,是下一代的加密算法標准,速度快,安全級別高。
非對稱加密
也叫公開秘鑰加密,非對稱加密有兩把秘鑰,一把叫做私有密鑰(private key),另一把叫做公開密鑰(public key)。顧名思義,私有密鑰不能讓其他任何人知道,而公開密鑰則可以隨意發布,任何人都可以獲得。發送密文的一方使用公開密鑰進行加密處理,對方收到被加密的信息后,再使用自己的私有密鑰進行解密。
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰算法,需要加密的文件塊的長度也是可變的;
DSA(Digital Signature Algorithm):數字簽名算法,是一種標准的 DSS(數字簽名標准);
ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學。
加密選擇
- 由於非對稱加密算法的運行速度比對稱加密算法的速度慢很多,當我們需要加密大量的數據時,建議采用對稱加密算法,提高加解密速度
- 對稱加密算法不能實現簽名,因此簽名只能非對稱算法。
二者區別及工作原理
非對稱加密是比較浪費資源的方式,所以只用於建立連接,確認身份,之后轉為對稱加密。非對稱加密可以簡單比作,兩個人,各有一把鎖和鑰匙,把敞開的鎖寄給雙方,用對方鎖鎖上要傳遞的內容,這樣即使數據被劫持也無法獲取里面的內容,因為鑰匙從來沒有泄露過。