一、HTTP (HyperText Transfer Protocol 超文本傳輸協議)
HyperText 超文本
Transfer 傳輸
Protocol 協議
按范圍大小來說:協議>傳輸>超文本

HyperText 超文本:文字、圖片、視頻、音頻等能被計算機解析的二進制數據包,被傳統定義擴大的語義,稱為超文本;
Transfer 由傳輸載體(光纜,電話線,電纜等)把超文本解析問二進制數據包由一個計算機終端傳輸到另一個計算機重點的過程叫做傳輸;

Protocol 協議,就是網絡傳輸過程中需要遵守的規范。
二、TCP/IP
TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網際協議)是指能夠在多個不同網絡間實現信息傳輸的協議簇。
TCP/IP協議不僅僅指的是TCP 和IP兩個協議,而是指一個由FTP、SMTP、TCP、UDP、IP等協議構成的協議簇,同時是Internet最基本的協議、Internet國際互聯網絡的基礎,由網絡層的IP協議和傳輸層的TCP協議組成。
TCP/IP 定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標准。
2.1、TCP/IP分層管理圖

也有按4層或者7層的分類說法。
問:為何要分層?
答:在設計的角度來講變得靈活了,當某一層需要修改時,只需要拿掉對相應的層,實現可拔插,無需變動所有層。對於使用者來講,屏蔽了底層復雜的傳輸過程。
2.2、應用層
TCP/IP模型將OSI參考模型中的會話層和表示層的功能合並到應用層實現。這一層主要的代表有DNS域名解析/http協議
2.3、傳輸層
在TCP/IP模型中,傳輸層的功能是使源端主機和目標端主機上的對等實體可以進行會話。在傳輸層定義了兩種服務質量不同的協議。即:傳輸控制協議TCP和用戶數據報協議UDP
2.4、 網絡層
網絡層是整個TCP/IP協議棧的核心。它的功能是把分組發往目標網絡或主機。同時,為了盡快地發送分組,可能需要沿不同的路徑同時進行分組傳遞。因此,分組到達的順序和發送的順序可能不同,這就需要上層必須對分組進行排序。網絡層定義了分組格式和
協議,即IP協議(Internet Protocol )
2.5、物理層
該層負責 比特流在節點之間的傳輸,即負責物理傳輸,這一層的協議既與鏈路有關,也與傳輸的介質有關。通俗來說就是把計算機連接起來的物理手段
2.6、數據鏈路層
控制網絡層與物理層之間的通信,主要功能是保證物理線路上進行可靠的數據傳遞。為了保證傳輸,從網絡層接收到的數據被分割成特定的可被物理層傳輸的幀。幀是用來移動數據結構的結構包,他不僅包含原始數據,還包含發送方和接收方的物理地址以及糾錯
和控制信息。其中的地址確定了幀將發送到何處,而糾錯和控制信息則確保幀無差錯到達。如果在傳達數據時,接收點檢測到所傳數據中有差錯,就要通知發送方重發這一幀
2.7、UDP和TCP的區別
UDP(User Datagram Protocol)用戶數據報協議
特點:
- 無連接,盡最大努力的交付;
- 面向報文;無擁塞控制;
- 支持一對一、一對多、多對一、多對多的交互通信;
- 首部開銷小(只有四個字段:源端口、目的端口、長度、檢驗和;
- UDP是面向報文的傳輸方式是應用層交給UDP多長的報文,UDP發送多長的報文,即一次發送一個報文。因此,應用程序必須選擇合適大小的報文。

TCP(Transmission Control Protocol)傳輸控制協議
特點:
- 面向連接;每一個TCP連接只能是點對點的(一對一);
- 提供可靠交付服務;
- 提供全雙工通信;
- 面向字節流;
- 應用程序和TCP的交互是一次一個數據塊(大小不等),但TCP把應用程序看成是一連串的無結構的字節流;
- TCP有一個緩沖,當應該程序傳送的數據塊太長,TCP就可以把它划分短一些再傳送。


2.8、TCP三次握手和四次揮手

流程:
- 第一次握手:Client將標志位SYN置為1,隨機產生一個值seq=y,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認 ;
- 第二次握手:Server收到數據包后由標志位SYN=1知道Client請求建立連接,Server將標志位SYN和ACK都置為1,ack=y+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態;
- 第三次握手:Client收到確認后,檢查ack是否為J+1,ACK是否為1,如果正確則將標志位ACK置為1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨后Client與Server之間可以開始傳輸數據了;
- 第四次揮手:Client收到服務端發送的 FIN 報文段后,向服務端發送 ACK 報文段,然后客戶端進入 TIME_WAIT狀態。服務端收到客戶端的 ACK 報文段以后,就關閉連接。此時,客戶端等待2MSL(指一個片段在網絡中最大的存活時間)后依然沒有收到回復,則說明服務端已經正常關閉,這樣客戶端就可以關閉連接了。
問題一:為什么要四次揮手?
答:客戶端發送了 FIN 連接釋放報文之后,服務器收到了這個報文,就進入了 CLOSE-WAIT 狀態。這個狀態是為了讓服務器端發送還未傳送完畢的數據,傳送完畢之后,服務器會發送 FIN 連接釋放報文。
問題二:http長鏈接(持久連接)?
答:如果有大量的連接,每次在連接,關閉都要經歷三次握手,四次揮手,這顯然會造成性能低下。因此。Http 有一種叫做 長連接(keepalive connections) 的機制。它可以在傳輸數據后仍保持連接,當客戶端需要再次獲取數據時,直接使用剛剛空閑下來的連接
而無需再次握手。
三、HTTP和HTTPS的區別和優缺點
3.1、HTTP
超文本傳輸協議,是一個基於請求與響應,無狀態的,應用層的協議,常基於TCP/IP協議傳輸數據,互聯網上應用最為廣泛的一種網絡協議,所有的WWW文件都必須遵守這個標准。設計HTTP的初衷是為了提供一種發布和接收HTML頁面的方法。
3.2 、HTTP的特點
- 無狀態 。協議對客戶端沒有狀態存儲,對事物處理沒有“記憶”能力,比如訪問一個網站需要反復進行登錄操作。
- 無連接。HTTP/1.1之前,由於無狀態特點,每次請求需要通過TCP三次握手四次揮手,和服務器重新建立連接。比如某個客戶機在短時間多次請求同一個資源,服務器並不能區別是否已經響應過用戶的請求,所以每次需要重新響應請求,需要耗費不必要的時間和 流量。
- 基於請求和響應。 基本的特性,由客戶端發起請求,服務端響應。
- 簡單快速、靈活。
- 通信使用明文、請求和響應不會對通信方進行確認、無法保護數據的完整性。
3.3、HTTP報文組成
- 請求行:包括請求方法、URL、協議/版本;
- 請求頭(Request Header);
- 請求正文;
- 狀態行;
- 響應頭;
- 響應正文。

3.4、缺點
- 通信使用明文(不加密),內容可能會被竊聽;
- 不驗證通信方的身份,因此有可能遭遇偽裝;
- 無法證明報文的完整性,所以有可能已遭篡改。
3.5、HTTPS
是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。HTTPS協議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
HTTPS 並非是應用層的一種新協議。只是 HTTP 通信接口部分用SSL(Secure Socket Layer)和 TLS(Transport Layer Security)協議代替而已。通常,HTTP 直接和 TCP 通信。當使用 SSL時,則演變成先和 SSL通信,再由 SSL和 TCP 通信了。簡言之,所謂 HTTPS,其實就是身披SSL協議這層外殼的 HTTP。
3.6、HTTPS通訊方式
- 客戶使用https的URL訪問Web服務器,要求與Web服務器建立SSL連接;
- Web服務器收到客戶端請求后,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端;
- 客戶端的瀏覽器與Web服務器開始協商SSL連接的安全等級,也就是信息加密的等級;
- 客戶端的瀏覽器根據雙方同意的安全等級,建立會話密鑰,然后利用網站的公鑰將會話密鑰加密,並傳送給網站;
- Web服務器利用自己的私鑰解密出會話密鑰;
- Web服務器利用會話密鑰加密與客戶端之間的通信。

3.7、為什么https安全?
- SSL不僅提供加密處理,加密方式為混合加密;
- SSL而且還使用了一種被稱為證書的手段,可用於確定方。證書由值得信任的第三方機構頒發,用以證明服務器和客戶端是實際存在的。另外,偽造證書從技術角度來說是異常困難的一件事。所以只要能夠確認通信方(服務器或客戶端)持有的證書。
3.8、加密方式
1、對稱加密
加密和解密同用一個密鑰的方式稱為共享密鑰加密(Common keycrypto system),也被叫做對稱密鑰加密。
缺點:對成加密的方式效率比較低,加密速度慢。另外對稱加密存在安全隱患的問題,堆成加密的密鑰必須要傳到對方對方才能解密,要是對方在密鑰傳輸的過程獲取到密鑰,那不是密鑰失去了加密的意義,所以完全使用對稱加密也是不安全的。
2、非對稱加密
公開密鑰加密使用一對非對稱的密鑰。一把叫做私有密鑰(private key),另一把叫做公開密鑰(public key)。顧名思義,私有密鑰不能讓其他任何人知道,而公開密鑰則可以隨意發布,任何人都可以獲得。公鑰加密,私鑰解密使用公開密鑰加密方式,發送密
文的一方使用對方的公開密鑰進行加密處理,對方收到被加密的信息后,再使用自己的私有密鑰進行解密。
缺點:那么非對稱個加密就一定安全嗎?非對稱加密也不安全,為什么呢?因為存在中間偽造公鑰和私鑰,假如在公鑰傳給對方的時候,有人獲取到公鑰,雖然她不能用你的公鑰做什么,但是它截獲公鑰后,把自己偽造的公鑰發送給對方,這樣對方獲取的就不
是真正的公鑰,當對方用公鑰進行加密文件,再將文件發送給對方,這樣即使截獲人沒有獲取到真正的私鑰,但是加密時的公鑰是截獲人的,他獲取到加密文件,只需要用自己的私鑰進行解密就成功獲取到文件了。
3、混合加密
對稱加密和非對稱加密的方式相結合。

如何證明公開沒要本身的真實性。因為在公開秘鑰傳輸的過程中,可能真正的公開秘鑰已經被攻擊者替換掉了。
為了解決上述問題,於是除了CA認證證書。服務器將CA證書發送給客戶端,以進行公開密鑰加密方式通信。接到證書的客戶端可使用數字證書認證機構的公開密鑰,對那張證書上的數字簽名進行驗證,一旦驗證通過,客戶端便可明確兩件事:
- 認證服務器的公開密鑰的是真實有效的數字證書認證機構;
- 服務器的公開密鑰是值得信賴的。
那么公開密鑰如何交接給客戶端是一件非常重要的事,因此多數瀏覽器開發商發布版本時,會事先在內部植入常用認證機關的公開密鑰,這樣就確保公鑰是使用認證機構的公鑰避免了公鑰偽造的過程,進而確保了安全。
