網(wǎng)絡(luò)協(xié)議有哪些?
- 應(yīng)用層:HTTP、FTP、SSH、SMTP
- 表示層
- 會(huì)話層
- 傳輸層:TCP、UDP
- 網(wǎng)絡(luò)層:IP
- 數(shù)據(jù)鏈路層
- 物理層
HTTP的工作流程如下 :
HTTP是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,是一個(gè)客戶端和服務(wù)器端請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)(TCP),用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議,它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少。
-
地址解析
HTTP協(xié)議是通過標(biāo)準(zhǔn)URL來請(qǐng)求指定的服務(wù)器中指定服務(wù)的 . 一個(gè)標(biāo)的 URL 如下 :
http://www.baidu.com:80/index.html?name=tom&age=18
(1)http: 協(xié)議類型
(2)www.baidu.com: 主機(jī)名,通過主機(jī)名,可以準(zhǔn)確定位到要訪問的那臺(tái)服務(wù)器
(3) 80 :端口號(hào) . HTTP請(qǐng)求的URL的時(shí)候,80端口一般是省略的
(4) index.html:請(qǐng)求的文件名
(5) ?name=tom&age=18:請(qǐng)求參數(shù)
在瀏覽器中輸入 URL,瀏覽器會(huì)從中分解出協(xié)議名、主機(jī)名、端口、對(duì)象路徑等部分
封裝 HTTP 請(qǐng)求數(shù)據(jù)包
瀏覽器獲取主機(jī) IP 地址,建立 TCP 鏈接(TCP 的三次握手)
TCP 鏈接建立后發(fā)送 HTTP 請(qǐng)求
請(qǐng)求方式的格式為:統(tǒng)一資源標(biāo)識(shí)符(URL)、協(xié)議版本號(hào),后邊是 MIME 信息包括請(qǐng)求修飾符、客戶機(jī)信息和可內(nèi)容。
服務(wù)器接到請(qǐng)求后,給予相應(yīng)的響應(yīng)信息
其格式為一個(gè)狀態(tài)行,包括信息的協(xié)議版本號(hào)、一個(gè)成功或錯(cuò)誤的代碼,后邊是 MIME 信息包括服務(wù)器信息、實(shí)體信息和可能的內(nèi)容
服務(wù)器斷開 TCP 連接
HTTPS實(shí)現(xiàn)過程是什么?
HTTPS(超文本傳輸安全協(xié)議)是一種通過計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議,提供對(duì)網(wǎng)站服務(wù)器的身份認(rèn)證,保護(hù)數(shù)據(jù)傳輸?shù)耐暾?、安全性?/p>
HTTPS:是以安全為目標(biāo)的HTTP通道,簡(jiǎn)單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL,因此加密的詳細(xì)內(nèi)容就需要SSL。
HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個(gè)信息安全通道,來保證數(shù)據(jù)傳輸?shù)陌踩?;另一種就是確認(rèn)網(wǎng)站的真實(shí)性。
實(shí)現(xiàn)過程:
客戶端發(fā)起一個(gè) https 的請(qǐng)求
服務(wù)端接收客戶端請(qǐng)求,返回?cái)?shù)字證書相關(guān)信息
客戶端收到服務(wù)端響應(yīng)
驗(yàn)證證書的合法性
如果證書受信任,生成隨機(jī)數(shù)的密碼
使用約定好的 HASH 算法計(jì)算握手消息,并使用生成的隨機(jī)數(shù)對(duì)消息進(jìn)行加密,然后發(fā)送給服務(wù)端
網(wǎng)站接收瀏覽器發(fā)來的密文后
使用私鑰來解密握手消息取出隨機(jī)數(shù)密碼,再用隨機(jī)數(shù)密碼解密,握手消息與 HASH 值,并與傳過來的HASH值做對(duì)比確認(rèn)是否一致
使用密碼加密一段握手消息,發(fā)送給瀏覽器
瀏覽器解密并計(jì)算握手消息的 HASH,如果與服務(wù)端發(fā)來的 HASH 一致,此時(shí)握手過程結(jié)束,之后所有的通信數(shù)據(jù),將由之前瀏覽器生成的隨機(jī)密碼,并利用對(duì)稱加密算法進(jìn)行加密。
數(shù)字證書都包含那些信息?
證書的版本信息;
證書的序列號(hào),每個(gè)證書都有一個(gè)唯一的證書序列號(hào);
證書所使用的簽名算法;
證書的發(fā)行機(jī)構(gòu)名稱;
證書的有效期;
證書所有人的名稱、公開密鑰;
證書發(fā)行者對(duì)證書的簽名
TCP 三次握手的流程
客戶端發(fā)送一個(gè) SYN 標(biāo)志位置 1 的包,指明客戶端要連接服務(wù)器端的接口,發(fā)送完畢后,客戶端進(jìn)入 SYN_SEND 狀態(tài)
服務(wù)器發(fā)回確認(rèn)包 (ACK) 應(yīng)答。即 SYN 標(biāo)志位和 ACK 標(biāo)志位均為1。服務(wù)器端選擇自己 ISN 序列號(hào),放到 Seq 域里,同時(shí)將確認(rèn)序號(hào)(Acknowledgement Number)設(shè)置為客戶的 ISN 加1,即X+1。 發(fā)送完畢后,服務(wù)器端進(jìn)入 SYN_RCVD 狀態(tài)。
客戶端再次發(fā)送確認(rèn)包(ACK),SYN 標(biāo)志位為0,ACK 標(biāo)志位為1,并且把服務(wù)器發(fā)來 ACK 的序號(hào)字段+1,放在確定字段中發(fā)送給對(duì)方,并且在數(shù)據(jù)段放寫ISN的+1
發(fā)送完畢后,客戶端進(jìn)入 ESTABLISHED 狀態(tài),當(dāng)服務(wù)器端接收到這個(gè)包時(shí),也進(jìn)入 ESTABLISHED 狀態(tài),TCP 握手結(jié)束。
Socket工作流程是怎樣的?
Socket 又稱網(wǎng)絡(luò)套接字,是一種操作系統(tǒng)提供的進(jìn)程間通信機(jī)制。
工作流程:
服務(wù)端先用 socket 函數(shù)來建立一個(gè)套接字,并調(diào)用 listen 函數(shù),使服務(wù)端的這個(gè)端口和 IP 處于監(jiān)聽狀態(tài),等待客戶端的連接
客戶端用 socket 函數(shù)建立一個(gè)套接字,設(shè)定遠(yuǎn)程 IP 和端口,并調(diào)用 connect 函數(shù)
服務(wù)端用 accept 函數(shù)來接受遠(yuǎn)程計(jì)算機(jī)的連接,建立起與客戶端之間的通信
完成通信以后,最后使用 close 函數(shù)關(guān)閉 socket 連接。
HTTP1.1 與 WebSocket 的區(qū)別?
HTTP 是一個(gè)單鏈接,只能做單向通訊,而 WebSocket 是一個(gè)持久鏈接,可用作雙向通訊。
WebSocket 是基于 HTTP 來建立連接的,但在建立連接之后,真正的數(shù)據(jù)傳輸階段是不需要 HTTP 協(xié)議參與的
WebSocket 的請(qǐng)求的頭部和 HTTP 請(qǐng)求頭部不同
WebSocket 傳輸?shù)臄?shù)據(jù)是二進(jìn)制流,是以幀為單位,HTTP 是明文字符串傳輸
OAuth2.0 協(xié)議運(yùn)行流程是怎樣的?
OAuth(Open Authorization) 協(xié)議為用戶資源的授權(quán)提供了一個(gè)安全的、開放而又簡(jiǎn)易的標(biāo)準(zhǔn),第三方無需使用用戶的用戶名與密碼,就可以申請(qǐng)獲得該用戶資源的授權(quán)。
運(yùn)行流程:
用戶打開客戶端以后,客戶端要求用戶給予授權(quán)。
用戶同意給予客戶端授權(quán)
客戶端使用上一步獲得的授權(quán),向認(rèn)證服務(wù)器申請(qǐng)令牌。
認(rèn)證服務(wù)器對(duì)客戶端進(jìn)行認(rèn)證以后,確認(rèn)無誤,同意發(fā)放令牌。
客戶端使用令牌,向資源服務(wù)器申請(qǐng)獲取資源。
資源服務(wù)器確認(rèn)令牌無誤,同意向客戶端開放資源
OAuth 2.0 定義了四種授權(quán)方式,授權(quán)碼模式、簡(jiǎn)化模式、密碼模式、客戶端模式。