中和Osi和TCP/IP的優勢,採用一種只有五層協議體系結構,自上而下分別是:瀏覽器
應用層:提供應用接口,爲用戶直接提供各類網絡服務。緩存
常見協議有:域名系統DNS,支持萬維網的http協議,支持電子郵件的SMTP協議安全
底層協議爲tcp服務器
TCP協議能夠對上層網絡提供接口,使上層網絡數據的傳輸創建在「無差異」的網絡之上。cookie
TCP是底層通信協議,定義的是數據傳輸和鏈接方式的規範
HTTP是應用層協議,定義的是傳輸數據的內容的規範網絡
http協議與tcp協議相互關係session
http是應用層,而tcp是傳輸層,http是基於tcp鏈接基礎之上的。簡而言之,tcp是單純創建鏈接,不涉及請求的數據以及簡單傳輸,而http是用來收發數據的。架構
1.客戶端發送http請求給服務端,請求包括請求頭,請求內容tcp
請求頭包含:1.請求方法get/post,請求url,http版本post
2.請求的數據
3.是否有cookies以及緩存
請求體:即請求的內容
2.服務端收到http請求,返回http響應
響應頭包含:cookies或sessions,狀態碼,內容大小等
3.客戶端收到之後,由瀏覽器完成對數據的渲染,包括執行js腳本
傳輸層:定義傳輸數據的協議端口號,以及流控和差錯校驗。四層交換機
協議有 :TCP UDP,數據包一旦離開網卡即進入網絡傳輸層
網絡層:爲數據包選擇路由,進行邏輯地址尋址,路由器
協議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
數據鏈路層:傳輸有地址的幀以及錯誤檢測功能,交換機,網卡
協議有:SLIP,CSLIP,PPP,ARP,RARP,MTU
物理層:以二進制數據形式在物理媒體上傳輸數據,中繼器
三次握手目的是雙方確認各自數據發送與接收正常,創建可靠的通信
第一次握手,服務端可以確認C發送正常,本身接受正常
第二次握手,客戶端確認本身發送,接收正常,S發送,接受正常;服務端可以確認C發送正常,本身接受正常
第三次握手,雙方各自確認本身發送,接受正常,缺一不可
四次揮手
客戶端:向服務端發送斷開鏈接信息
服務端:收到客戶端發出的斷開鏈接信息,並響應,此時處於半關閉狀態
服務端:向客戶端發送斷開鏈接信息
客戶端:對服務端斷開鏈接信息進行響應
TCP是面向鏈接的,經過校驗和,序號標識,重發控制等進行可靠的傳輸,保證數據的完整性,而UDP不須要創建鏈接,不可以保證可靠交付。可是UDP具備實時性,工做過效率高,佔用系統資源少,適應於對高速傳輸以及實時性有較高要求的廣播通訊。
此外TCP鏈接是點到點的,而UDP支持一對多,多對多。
首先進行DNS解析
輸入www.baidu.com,首先找本地hosts文件,查找是否有百度對應的ip地址,有即返回ip,而後經過80端口訪問百度的服務器,若沒有,則經過DNS服務器找對應的域名與ip的對應關係,即DNS解析過程。
而後創建TCP鏈接
發送http請求
服務器處理請求並返回http報文
瀏覽器解析渲染頁面
鏈接結束
理解概述:
首先發給DNS服務器,進行域名解析,獲得IP地址後生成針對目標Web服務器的HTTP請求報文,而後報文由TCP協議負責傳輸,爲了方便通訊,HTTP請求報文被分爲報文段,而後每一個報文段可靠的傳輸給對方,而後報文段由IP層負責一邊中轉一遍傳送,服務器收到報文段後重組報文段,而後由應用層的HTTP協議處理請求的內容,請求的結果以 一樣的方式進行回傳。
http/1.0:默認使用短鏈接
客戶端與服務器每進行一次http操做,就創建一次鏈接,任務結束就中斷鏈接
http/1.1起:默認使用長鏈接,保持鏈接特性
當打開網頁以後,客戶端與服務端創建的tcp鏈接不會中斷,當再次向服務器發送請求,會繼續使用這條鏈接,固然也不會無限保持鏈接,有一個保持時間,能夠設定在服務器軟件中。
session機制能夠保存用戶狀態,好比向購物車加入商品,系統並不知道是哪一個用戶操做的,由於http是無狀態的,服務端給特定的用戶建立特定的session就能夠標識這個用戶並跟蹤這個用戶。(如何實現跟蹤,在cookie中附加一個session ID)
Cookie被禁用怎麼辦?利用URL重寫把session ID直接附加在url後面。
cookie保存用戶信息,將數據保存在客戶端,單個cookie不大於4k,cookie數量有限制,會話cookie與持久cookie,若是使用 Cookie 的一些敏感信息不要寫入 Cookie 中,最好能將 Cookie 信息加密而後使用到的時候再去服務器端解密。
session記錄用戶狀態,數據保存在服務器端,安全性更高,與服務器內存有關,session過多會增長服務器壓力。
uri:統一資源標識符,能夠惟一標識一個資源,身份證
url:統一資源定位符,能夠提供該資源的路徑,家庭住址
默認端口號不一樣,http爲80端口,https爲443端口
http基於tcp,傳輸內容爲明文,不安全
https是創建在ssl之上的http協議,所傳輸的內容都通過加密,但比http耗費更多的服務器資源,HTTPS鏈接緩存不如HTTP高效。同時ssl證書比較燒錢。握手階段比較耗時,如非必要,沒有理由犧牲用戶體驗。
https工做原理:
使用get請求時,參數在url中顯示,而post不會
post數據傳輸量較大,可達到2M,而get因爲url長度限制,只能傳遞1024字節
get方式請求的數據會被瀏覽器存入緩存,某種狀況下會帶來安全問題,而post相對會避免這種問題