七層模型
想了解http,就須要瞭解TCP,IP協議。由於http是基於TCP,IP層上面的。以下圖所示:安全

之前老是記不住這七層模型,但其實理解以後天然就記住了。
整張圖應該從下邊向上看,假設別人想發一條信息給個人電腦。首先是經過網絡把信息傳導到的電腦,但不能說個人電腦對於全部的信息都接受,我會判斷信息,以後在處理信息,這些就是七層模型作的事情。一步一步分開來看 ,並用打電話這一建立的例子來對應:服務器
- 物理層 包括物理連網媒介,實際上就是佈線、光纖、網卡和其它用來把兩臺網絡通訊設備鏈接在一塊兒的東西。它規定了激活、維持、關閉通訊端點之間的機械特性、電氣特性、功能特性以及過程特性。(這就至關於電信公司的信號發射塔,接收信號而已)
- 數據鏈路層 數據鏈路層主要做用是控制網絡層與物理層之間的通訊。它保證了數據在不可靠的物理線路上進行可靠的傳遞。它把從網絡層接收到的數據分割成特定的可被物理層傳輸的幀,保證了傳輸的可靠性。(至關於發射塔讓接受的信號更穩定,方便下一層的解讀)
- 網絡層 不少人常常混淆2層和3層的相關問題,簡單來講,若是你在談論一個與IP地址、路由協議或地址解析協議(ARP)相關的問題,那麼這就是第三層的問題。 網絡層負責對子網間的數據包進行路由選擇,它經過綜合考慮發送優先權、網絡擁塞程度、服務質量以及可選路由的花費來決定從一個網絡中兩個節點的最佳路徑。另外,它還能夠實現擁塞控制、網際互連等功能 (至關於咱們打一個長途電話,當前鏈接的發射站不能直接傳遞給另外一用戶,須要先傳遞給附近的發射站)
到這裏爲止,其實信息尚未傳遞到咱們的電腦,能夠理解爲信息在路由網絡間傳遞。
- 傳輸層 是OSI模型中最重要的一層,它是兩臺計算機通過網絡進行數據通訊時,第一個端到端的層次,起到緩衝做用。當網絡層的服務質量不能知足要求時,它將提升服務,以知足高層的要求;而當網絡層服務質量較好時,它只需進行不多的工做。另外,它還要處理端到端的差錯控制和流量控制等問題,最終爲會話提供可靠的,無誤的數據傳輸。(至關於咱們找到了最後的信號站,能夠直接發送信號給通話者,可是這層會作一些數據的整合等工做)
- 會話層 會話層負責在網絡中的兩節點之間創建和維持通訊,並保持會話得到同步,它還決定通訊是否被中斷以及通訊中斷時決定從何處從新發送。
- 表示層 表示層的做用是管理數據的解密與加密,如常見的系統口令處理,當你的帳戶數據在發送前被加密,在網絡的另外一端,表示層將對接收到的數據解密。另外,表示層還需對圖片和文件格式信息進行解碼和編碼。 (至關於發射塔給手機發送一些壓縮的信息,咱們手機接收到後解碼)
- 應用層 簡單來講,應用層就是爲操做系統或網絡應用程序提供訪問網絡服務的接口,包括文件傳輸、文件管理以及電子郵件等的信息處理。 應用層協議的表明包括:Telnet、FTP、HTTP、SNMP等。 (這就是真正的收到信息,至關於咱們聽到了對方的聲音,此次對話完成了)
總結起來就是:
打電話信息發出(www) --->發射塔收到不穩定信息流(物理層) ---> 發射塔整理信息流(鏈路層)---> 發射塔轉給離接收人更近的發射塔(網絡層IP) ---> 發射塔向接收人發送信息(傳輸層TCP) ---> 通話創建(會話層) ---> 解碼信息(表示層) ---> 發出聲音給接收人(應用層HTTP)網絡
各協議在HTTP中的用途
對於HTTP網絡應用,咱們在網絡層用的是IP,在傳輸層用的是TCP。
IP: internet protocal。顧名思義,網絡協議。他能確保計算機之間在網絡上互相通訊,可是他不檢查消息是否以發送次序到達而沒有損壞,所以,咱們須要上一層來檢驗消息。因而有了TCP層
TCP: 保證信息正確次序,內容不變。同時引入端口分發給不一樣的服務。同時分割數據爲更小的ip包,到達時重組。
HTTP: 當信息解讀好,咱們傳給HTTP層,即爲應用層。超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。全部的WWW文件都必須遵照這個標準。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。編碼
以上是對支撐HTTP的網絡七層的歸納,咱們須要理解爲何要在http層下面有那麼多層,每一層的目的是什麼。加密
明白了這些以後,問題來了,這七層是怎麼知道本身應該怎麼解讀數據,而不是說TCP層解讀HTTP層。這裏面就是網絡數據的封裝和傳遞了:spa

從這個圖中,咱們能夠看到每一層的數據都會被一個這層的頭信息包裹。
以後咱們在接收到信息時再一層一層讀取信息操作系統
HTTPS原理
講完http,咱們會發現,咱們傳遞的信息在網絡上通過那麼多物理層的傳輸,保不許會被別人截獲,而咱們卻一點也不知道。因而咱們想到要加密咱們傳輸的數據。由於只有http層信息是咱們要的,因此在這一層下面加入一層來加密信息。這一層就是SSL層,同時咱們若是想傳給ssl層,咱們用端口443.
ssl層簡稱安全套階層,主要就是加密解密。
一開始咱們會說,咱們就讓服務器給咱們一個公鑰,每次用他來解密不就好了。可是這種辦法不能夠,由於別人一樣能夠截獲你的公鑰,畢竟公鑰也是在網絡上傳遞的。
因而咱們就要想一種辦法,讓咱們的公鑰也被加密,而且這個加密方式是在服務器或者咱們電腦上進行的,這樣才安全
如圖:設計

重點在這裏:blog
- 服務器端產生的是對稱祕鑰,因此只是把公鑰發送出去,私鑰一直在本身這裏 (對稱祕鑰就是一個公鑰,一個私鑰,用公鑰加密,用私鑰直接能解碼,可是比較慢,不能一直用這個通訊)
- 客戶端首先向一個權威的服務器檢查證書的合法性,若是證書合法,客戶端產生一段隨機數,這個隨機數就做爲通訊的密鑰,咱們稱之爲對稱密鑰,用公鑰加密這段隨機數,而後發送到服務器
- 服務器用密鑰解密獲取對稱密鑰,而後,雙方就已對稱密鑰進行加密解密通訊了
這裏主要就HTTP相關知識進行總結,但願幫助你們!接口
感受好的話別忘了投票啊!