客戶端是服務的請求放,服務器是服務的提供方。面試
不用區分誰是客戶端,誰是服務器,雙方都可以向對方請求與提供服務。數據庫
每一個分組由首部和尾部組成,包含源地址和目的地址等控制信息,在同一個傳輸線路上同時傳輸多個分組互不影響,所以在同一條傳輸線路上容許同時傳輸多個分組,即分組交換不會佔用傳輸線路。瀏覽器
電路交換用於電話通信系統,兩個用戶之間創建通訊前須要有一條專用的物理鏈路,並且在通訊過程當中始終佔用該鏈路。因爲通訊過程當中不可能一直在使用傳輸線路,所以電路交換對線路利用率很低,一般不到 10%.緩存
分組在路由器的輸入和輸出隊列中排隊等待所需時間,取決於當前網絡的通訊量;安全
主機或路由器接收到分組時進行處理所需時間,通常這些處理包括分析首部、從分組中提取數據、進行差錯校驗或查找適當路由等;服務器
主機或路由器傳輸數據幀所需時間:cookie
$$delay = length(bit)/v(bit/s)$$網絡
其中 length
表示數據幀的長度,v
表示傳輸速率;session
電磁波在信道中傳輸所需時間,電磁波傳播速度無限接近於光速:架構
$$delay = length(m)/v(m/s)$$
其中 length
表示信道的長度,v
表示電磁波在信道中的傳播速度;
體系結構 | 協議 |
---|---|
物理層 | RJ4五、CLOCK、IEEE802.3(中繼器、集線器) |
數據鏈路 | PPP、FR、HDLC、VLAN、MAC(網橋、交換機) |
網絡層 | IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器) |
傳輸層 | TCP(HTTP/S、FTP、POP三、SMTP、TENET、SSH)、UDP(BOOTP、NTP、DHCP)、SPX |
會話層 | NFS、SQL、NETBIOS、RPC |
表示層 | JPEG、MPEG、ASII |
應用層 | FTP、DNS、Telenet、SMTP、HTTP、WWW、NFS |
爲把在一個網絡結構下開發的系統與在另外一個網絡結構下開發的系統互聯起來,以實現更高一級的應用,使異種機之間的通訊成爲可能,便於網絡結構標準化,國際標準化組織(ISO)於1984年造成了開放系統互連參考模型OSI/RM(Open Systems Interconnection Reference Model,簡稱OSI)的正式文件。
咱們平常網絡中使用的體系結構,總共能夠分爲 5 層,分別是:
不嚴格遵循 OSI 分層概念,只有四層,至關於將五層協議中的數據鏈路層和物理層合併爲網絡結構層。
物理層上傳送的數據單位是比特,其做用是實現相鄰計算機節點間比特流的透明傳送,儘量屏蔽調具體傳輸介質和屋裏設備的差別。根據信息在傳輸線上的傳輸方向,能夠分爲以下三種通訊方式:
兩臺主機之間的數據傳輸,老是在一段一段的鏈路上進行傳送的,此時就須要使用專門的鏈路層協議。在兩個相鄰節點間傳輸數據時,數據鏈路層將網絡層交下來的 IP 數據包組裝成幀,在兩個相鄰節點間的鏈路上傳送幀,每幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。
互聯網的核心,向上提供數據報服務,經過 IP 協議將異構的物理網絡鏈接起來。其任務是選擇合適的網間路由和交換節點,從而確保計算機通訊的數據及時傳送,配套使用的有以下三個協議:
傳輸層提供了進程間的邏輯通訊,負責向兩臺主機進程之間的通訊提供通用的 數據傳輸服務,向高層用戶屏蔽網絡層的核心細節,這一層中主要涉及 UDP 和 TCP 兩個協議。
應用層的任務是經過應用進程之間的交互來完成特定網絡應用,應用層協議定義的是應用進程間的通訊和交互的規則。
對於不一樣的網絡應用須要不一樣的應用層協議,常見的有 DNS、HTTP、SMTP 協議等;
URI = URL + URN
URL:統一資源 定位 符,標示一個具體的資源位置
URN:統一資源名稱
主要由如下三部分構成:
Request Header
主要由如下三部分構成:
方法 | 說明 |
---|---|
GET |
請求指定頁面信息,並返回實體主體 |
POST |
傳輸實體主體,向指定資源提交數據進行處理請求,數據被包含在請求體中,可能會致使新資源的創建和/或已有資源的修改 |
PUT |
從客戶端向服務器傳送的數據取代指定文檔的內容,上傳文件 ,不帶驗證機制,存在安全性問題 |
DELETE |
請求服務器刪除指定頁面,通常是刪除文件 |
HEAD |
獲取報文首部,相似於 GET ,但不返回報文實體主體部分,主要用於確認 URL 的有效性以及資源更新時間等 |
PATCH |
對資源進行部分修改 |
OPTIONS |
查詢支持的方法,查詢指定的 URL 能支持的方法,返回 Allow: GET,POST,HEAD,OPTIONS 等內容 |
CONNECT |
要求在於代理服務器通訊時創建隧道,使用 SSL 和 TLS 協議將通訊內容加密後經網絡隧道傳輸 |
TRACE |
追蹤路徑,服務器將通訊路徑返回給客戶端 |
服務器返回的響應報文中的第一行是狀態行,包含狀態碼以及緣由短語,用於告知客戶端請求的結果,主要分爲以下類型,常見的狀態碼以下:
狀態碼 | 狀態 | 說明 |
---|---|---|
100 | Continue |
到目前爲止很正常,客戶端能繼續發送請求或忽略該響應 |
200 | OK |
表示請求成功 |
204 | No Content |
請求已經成功處理,但返回的響應報文不含實體的主體部分,通常只須要從客戶端向服務器發送信息,而無需返回數據時使用 |
206 | Partial Content |
表示客戶端進行範圍請求,響應報文包含由 Content-Range 指定範圍的實體內容 |
301 | Moved Permanently |
永久性重定向 |
302 | Found |
臨時性重定向 |
303 | See Other |
和 302 功能相同,但 303 明確要求客戶端應該採用 GET 方法獲取資源 |
304 | Not Modified |
若請求報文首部包含一些條件,如 If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since ,若不知足條件,則服務器返回 304 |
307 | Temporary Redirect |
臨時重定向,相似於 302,但 307 要求瀏覽器不會把重定向請求的 POST 方法改爲 GET 方法 |
400 | Bad Request |
請求報文中存在語法錯誤 |
401 | Unauthorized |
該狀態碼錶示發送的請求須要有認證信息 |
403 | Forbidden |
請求被拒絕 |
404 | Not Found |
請求的頁面不存在 |
500 | Internal Server Error |
服務器正在執行請求時發生錯誤 |
503 | Service Unavailable |
服務器暫時處於超負載或正進行停機維護,如今沒法處理請求 |
有 4 中類型的首部字段:
GET
用於獲取資源,通常是查詢,而 POST
用於傳輸實體主體,通常是提交;
GET
和 POST
的請求都能使用額外參數,但 GET
的參數以查詢字符串出如今 URL 中,不會對服務器中的內容產生做用,但 POST
的參數存儲在實體主體中。可是 POST
的安全性也不能說很高,咱們仍然能夠用抓包工具來進行查看。另外一方面,URL 只支持 ASCII,所以 GET 的參數中如有中文等字符時須要先進行編碼,可是 POST 的參數支持標準字符集;
GET 方法是安全的,由於它不會改變服務器的狀態。可是 POST 非安全,由於 POST 的目的是傳送實體主體內容,內容多是用戶上傳的表單數據,一旦上傳成功,服務器就可能把該數據存入數據庫,此時狀態也就發生了改變。
安全的方法:GET、HEAD、OPTIONS
;
不安全的方法:POST、PUT、DELETE
;
冪等的 HTTP 方法,一樣的請求被執行一次和被連續執行屢次的效果是同樣的,服務器的狀態也同樣,即冪等的方法不具備反作用,所以全部安全的方法也都是冪等的。
通常來講,GET、HEAD、PUT、DELETE
等方法都是冪等的,但 POST
不是。
若要對響應進行緩存,則應該知足一下條件:
GET、HEAD
,可是 PUT、DELETE
不可緩存,POST
在大多數狀況下是不可緩存的;Cache-Control
首部字段未指定則不進行緩存;HTTP(Hyper Text Transfer Protocol),超文本傳輸協議,它是從 Web 服務器傳輸超文本標記語言(HTML)到本地瀏覽器的傳送協議。
HTTP 最初的目的是爲了提供一種發佈和接收 HTML 頁面的方法;
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),以安全爲目標的 HTTP 通道,通俗來說就是 HTTP 的安全版,加入了 SSL/TLS 層,經過 SSL 證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通訊進行加密。HTTPS 的安全基礎是 SSL,其主要做用有以下兩種:
GET、POST、HEAD
;Content - Type
來標記;HTTP 是 基於 TCP/IP 通訊協議來傳遞數據的協議,傳輸的數據類型有 HTML 文件、圖片文件、查詢結果等。此外,HTTP 協議通常用於 B/S
架構,瀏覽器做爲 HTTP 客戶端經過 URL 向 HTTP 服務器即 Web 服務器發送全部請求;
如上圖,使用 HTTPS 傳輸數據的流程以下:
HTTP 協議傳輸的數據都是未經加密的,即明文的,所以使用 HTTP 協議傳輸隱私信息不安全。爲了保證隱私數據可以加密傳輸,因而使用 SSL 協議用於對 HTTP 協議傳輸的數據進行加密,即 HTTPS;
HTTPS 協議是 HTTP + SSL 協議構建的可進行加密傳輸、身份認證的網絡協議,比 HTTP 更加安全,二者的區別主要有:
80
端口,而 HTTPS 默認使用 443
端口;區別 | HTTP | HTTPS |
---|---|---|
協議 | 基於 TCP,明文傳輸,客戶端與服務器端均沒法驗證對方身份 | HTTP + SSL,運行於 TCP 之上,添加了加密和認證機制的 HTTP |
端口 | 80 | 443 |
資源消耗 | 較少 | 因爲加解密操做,將消耗更多的 CPU 和內存資源 |
開銷 | 無需證書 | 須要證書,通常是向認證機構購買 |
加密機制 | 無 | 共享祕鑰加密和公開祕鑰加密並用的混合加密機制 |
安全性 | 弱 | 強 |
TCP(傳輸控制協議,Transmission Control Protocol)是面向鏈接的,提供可靠交付,有流量控制,擁塞控制,提供 全雙工通訊,面向字節流 (將應用層傳下來的報文當作字節流,將字節流組織爲大小不等的數據塊),每條 TCP 鏈接只能是 點對點(一對一),總結起來有以下特色:
UDP(用戶數據表協議,User Datagram Protocol)是面向無鏈接的,盡最大可能交付,無擁塞控制,面向報文(對應用層中傳下來的報文不合並也不拆分,只添加 UDP 首部),支持 一對1、一對多、多對一和對多點的交互通訊,總結起來有以下特色:
TCP | UDP | |
---|---|---|
是否鏈接 | 面向鏈接 | 無鏈接 |
是否可靠 | 可靠傳輸,使用流量控制和擁塞控制 | 不可靠傳輸,不使用流量控制和擁塞控制 |
鏈接對象個數 | 只能一對一 | 支持一對1、一對多、多對一和多對多 |
傳輸方式 | 面向字節流 | 面向報文 |
首部開銷 | 首部最小 20 字節,最大 60 字節 | 首部開銷小,僅 8 字節 |
場景 | 傳輸可靠,好比文件傳輸等 | 實時應用,好比視頻會議、直播等 |
SYN-SENT
狀態;SYN-RECEIVED
狀態;ESTABLISHED
狀態,服務端收到該應答後也進入 ESTABLISHED
狀態,此時鏈接就創建成功了。CLOST_WAIT
狀態,此時代表 A 到 B 的鏈接已經釋放,再也不接收 A 發的數據。可是 TCP 是雙向通訊的,因此 B 此時仍能夠向 A 發送數據;LAST-ACK
狀態;TIME-WAIT
狀態並持續一段時間(通常是 2MSL),若在該時間段內沒有來自 B 的重發請求,就進入 CLOSED
狀態。當 B 收到確認應答後,也進入 CLOSE
狀態。cookie
是由 Web 服務器保存在用戶瀏覽器上的小文件(key-value
格式),包含用戶相關信息。客戶端向服務器發起請求,若服務器須要記錄該用戶狀態,則使用 response
向客戶端瀏覽器頒發一個 cookie
。客戶端瀏覽器將 cookie
保存起來,當瀏覽器再請求該網站時,瀏覽器將請求的網址連同該 cookie
一塊兒提交給服務器,服務器檢查該 cookie
,以此來確認用戶身份。
session
依賴於 cookie
實現,session
是服務端對象。session
瀏覽器和服務器會話過程當中,服務器分配的一塊存儲空間。服務器默認爲瀏覽器在 cookie
中設置 sessionid
,瀏覽器在向服務器請求過程當中傳輸 cookie
包含 sessionid
,服務器將根據 sessionid
獲取出會話中存儲的信息,而後確認會話的身份信息。
cookie
所保存的數據不能超過 4k,許多瀏覽器都會限制一個站點最多能保存的 cookie
數(通常是 20),可是 session
沒有該限制;session
必定時間保存在服務器上,當訪問增多時,佔用服務器性能,考慮到服務器性能方面,應當使用 cookie
;cookie
數據放在客戶端,安全性較差,session
數據放在服務器上,安全性相對較高;由於考慮到鏈接時丟包的問題,若是是 2 次,那麼第二次握手時若是服務器響應給客戶端的確認報文段丟失,但此時服務器端已經準備好接收數據,而客戶端一直沒收到服務端的確認報文,客戶端就不清楚服務端是否已經準備好了。這樣一來,客戶端既不會向服務端發送數據,也會忽略服務端所發送過來的數據。
一樣是出於考慮丟包問題,若第四次揮手的報文丟失,服務器未確認 Ack 報文就會重發第三次揮手的報文,若報文一來一去的最常時間就是 2 MSL,因此須要等這麼長時間來確認服務端確實已經收到。