第105篇
極客時(shí)間《許式偉的架構(gòu)課》課程筆記闭翩。
網(wǎng)絡(luò)應(yīng)用程序的全視圖
網(wǎng)絡(luò)世界劃分的子系統(tǒng)
- 物理層
- 網(wǎng)絡(luò)設(shè)備的原生能力击困,定義硬件層次的基礎(chǔ)網(wǎng)絡(luò)協(xié)議
- 數(shù)據(jù)鏈路層
- 負(fù)責(zé)解決局部網(wǎng)絡(luò)世界的數(shù)據(jù)傳輸能力
- WiFi媳板、3G/4G/5G等數(shù)據(jù)傳輸技術(shù)都有自己獨(dú)特的鏈路層協(xié)議
- IP網(wǎng)絡(luò)層
- 負(fù)責(zé)互聯(lián)網(wǎng)世界的一體化,彼此包容與協(xié)作,類(lèi)似于單機(jī)體系中的操作系統(tǒng)
- 互聯(lián)網(wǎng)世界體系中,IP網(wǎng)絡(luò)是互聯(lián)網(wǎng)“操作系統(tǒng)”的核心
- TCP/UDP傳輸層
- 與IP網(wǎng)絡(luò)一起構(gòu)成互聯(lián)網(wǎng)“操作系統(tǒng)”的內(nèi)核
- 負(fù)責(zé)解決如何讓互聯(lián)網(wǎng)通訊可信賴(lài)的問(wèn)題还棱,從而大幅降低互聯(lián)網(wǎng)應(yīng)用程序開(kāi)發(fā)的負(fù)擔(dān)
主流應(yīng)用層協(xié)議
- HTTP協(xié)議
- 因?yàn)槿f(wàn)維網(wǎng)誕生,起初是為了傳輸靜態(tài)網(wǎng)頁(yè)
- 因?yàn)樵O(shè)計(jì)的開(kāi)放性惭等,演進(jìn)成了通用傳輸協(xié)議
- 除了呈現(xiàn)網(wǎng)頁(yè)珍手,還被用來(lái)作為業(yè)務(wù)開(kāi)放協(xié)議RESTful API的承載
- SMTP/POP3協(xié)議
- 局限于電子郵件應(yīng)用領(lǐng)域,但使用仍然極為廣泛
- 電子郵件是最通用的連接協(xié)議辞做,它連接人和人琳要、企業(yè)和企業(yè)
應(yīng)用層協(xié)議與網(wǎng)關(guān)
- Nginx、Apache 都可以用作應(yīng)用層網(wǎng)關(guān)
- 應(yīng)用層協(xié)議通常采用的是 HTTP/HTTPS 協(xié)議
- HTTP協(xié)議:GET請(qǐng)求(Request)獲取資源秤茅、Response回復(fù)請(qǐng)求焙蹭、POST請(qǐng)求修改資源、DELETE請(qǐng)求刪除資源
- HTTP的協(xié)議頭設(shè)計(jì)的優(yōu)點(diǎn)
- 協(xié)議頭設(shè)計(jì)極其開(kāi)放嫂伞,用戶(hù)可以加自己的字段,一般以X-開(kāi)頭
- 規(guī)范了業(yè)務(wù)表達(dá)范式拯钻,以 “資源路徑” 表達(dá)資源帖努,以 PUT-POST-GET-DELETE 表達(dá) CURD 操作
- 規(guī)范了應(yīng)用層的路由方式,強(qiáng)制使用Host字段粪般,用來(lái)表征目標(biāo)主機(jī)拼余,通常是域名
TCP/IP層編程接口
- 從基于 IP 協(xié)議的網(wǎng)絡(luò)視角來(lái)看,數(shù)據(jù)是并不是源源不斷的流(stream)亩歹,而是一個(gè)個(gè)大小有明確限制的 IP 數(shù)據(jù)包
- IP 協(xié)議是無(wú)連接的匙监,它可以在不連接對(duì)方的情況下向其發(fā)送數(shù)據(jù)
- UDP和TCP協(xié)議都引入了端口的概念凡橱,以便解決由哪個(gè)軟件處理收到的數(shù)據(jù)的問(wèn)題
- 一個(gè) IP 地址 + 端口,通常記為 ip:port亭姥,代表了軟件層面上來(lái)說(shuō)唯一定位的通訊地址稼钩。每個(gè)軟件只處理自己所使用的 ip:port 的數(shù)據(jù)
- TCP 協(xié)議包含了 IP 數(shù)據(jù)包的序號(hào)、重傳次數(shù)等信息达罗,它可以解決丟包重傳坝撑,糾正亂序,確保了數(shù)據(jù)傳輸?shù)目煽啃?/li>
- UDP 協(xié)議在 IP 協(xié)議基礎(chǔ)上除了引入端口(port)外并沒(méi)有額外做什么粮揉,額外開(kāi)銷(xiāo)非常小巡李,非常適合音視頻的傳輸需求
HTTP層編程接口
- 對(duì)于 HTTP 客戶(hù)端,使用上要比 TCP/UDP 簡(jiǎn)單得多扶认,常見(jiàn)情況下直接調(diào)用 Get侨拦、Post 這些函數(shù)就滿(mǎn)足業(yè)務(wù)需求
- 在需要在 HTTP 協(xié)議頭寫(xiě)一些額外字段時(shí),需要先 NewRequest 生成一個(gè)請(qǐng)求辐宾,并添加一些字段(Field)狱从,然后再調(diào)用 Client.Do 去發(fā)起請(qǐng)求。整體上比調(diào)用 Read/Write 這樣的基礎(chǔ) IO 函數(shù)要簡(jiǎn)便得多
- 基于 HTTP 協(xié)議的編程接口螃概,和基于 TCP/IP 協(xié)議裸寫(xiě)業(yè)務(wù)對(duì)比矫夯,前者只需要填寫(xiě)業(yè)務(wù)邏輯就好,復(fù)雜度很低