網(wǎng)絡(luò)模型五層協(xié)議硼啤,在開發(fā)過程中涉及到的協(xié)議和概念進(jìn)行概括總結(jié)
http
http協(xié)議隨著網(wǎng)絡(luò)的發(fā)展质况,傳輸速度的加快和應(yīng)用的豐富聪富,傳輸?shù)臄?shù)據(jù)量也越來越大莺丑,版本也隨之升級更新。
1.0----> 1.1---->2.0
升級的目的:更快的傳輸數(shù)據(jù)墩蔓,更快的渲染速度梢莽。
關(guān)鍵詞:
http1.1 : 鏈接復(fù)用Keep-alive、隊(duì)頭阻塞钢拧、gzip壓縮蟹漓?
http2.0: 二進(jìn)制分幀, io多路復(fù)用,流優(yōu)先級源内,header優(yōu)化(HPack算法)葡粒,Server-push
請求方式
常用請求方式有g(shù)et份殿、post。
get請求為向服務(wù)器請求資源嗽交,通常請求到的資源是不可變的卿嘲,瀏覽器會進(jìn)行緩存操作。
而post請求如請求體中為表單數(shù)據(jù)夫壁,通常服務(wù)器會利用提交的數(shù)據(jù)的數(shù)據(jù)執(zhí)行相應(yīng)的邏輯拾枣,不可緩存。
http格式
http request中包含:請求行盒让,請求header梅肤,空行,請求內(nèi)容
http response中包含:響應(yīng)碼邑茄,header姨蝴,空行,響應(yīng)內(nèi)容肺缕。
考慮一個問題:https中抓包獲取到的請求行中有路徑嗎左医?
http加速
提到加速必須要先考慮http請求的各個階段
DNS獲取ip地址 ----> 發(fā)起網(wǎng)絡(luò)請求(攜帶請求數(shù)據(jù)) ----> 網(wǎng)絡(luò)傳輸----> 服務(wù)端進(jìn)行響應(yīng)
域名解析:dns緩存(瀏覽器緩存,本地緩存/etc/host)同木。
Dns解析存在著被劫持的問題:Dns在請求方和dns服務(wù)器之間是udp協(xié)議 53端口浮梢,Master(主要名稱服務(wù)器);Slave(備份服務(wù)器)彤路,Slave通過區(qū)域傳送從 Master 服務(wù)器獲得區(qū)域數(shù)據(jù)的副本秕硝。
那么客戶端請求的第一個dns服務(wù)器從哪里來呢?
路由器通過DHCP分配斩萌,也可以用戶自己配置dns服務(wù)器如:8:8:8:8
DHCP:動態(tài)主機(jī)配置協(xié)議缝裤。用于給網(wǎng)絡(luò)內(nèi)的主機(jī)自動分配IP地址。一般通過路由器或DHCP服務(wù)器颊郎,把將要為用戶分配的網(wǎng)關(guān)、DNS服務(wù)器及域名等參數(shù)保存至配置文件中霎苗,當(dāng)DHCP客戶端連接到DHCP服務(wù)器請求IP地址時姆吭,就會按配置文件指定的地址池分配IP地址、網(wǎng)關(guān)唁盏、DNS服務(wù)器内狸。
HttpDns優(yōu)化Dns被劫持的問題。
DNS部分優(yōu)化
域名----CNAME(如云服務(wù)器關(guān)聯(lián))
DNS相關(guān)概念:
A記錄(A記錄是把一個域名解析到一個IP地址厘擂,又稱IP指向)
CNAME 簡單理解為域名到域名的映射昆淡。 如CDN服務(wù)中,如果CND服務(wù)商提供給你ip地址刽严,如果ip變更昂灵,會直接影響到用戶,提供給用戶的實(shí)際為域名,做了一層隔離眨补,并且會根據(jù)用戶所在位置選擇并返回最優(yōu)節(jié)點(diǎn) IP管削,加快訪問速度,這也是cnd最重要的功能撑螺。
缺點(diǎn):第一次DNS解析域名的時候會多解析一次含思。
httpdns
域名服務(wù)器中有高速緩存,選用一個優(yōu)質(zhì)的dns服務(wù)器甘晤,可能會觸發(fā)緩存含潘,加快ip返回速度。
httpdns自身考慮配置ip直連列表线婚,同樣的ip地址在不同的網(wǎng)絡(luò)環(huán)境下訪問速度可能不一致调鬓,因此可以在初始化時對ip列表進(jìn)行速度測試,為當(dāng)前的ip設(shè)置生效時間酌伊。(并行 or 串行 or 階梯型)
當(dāng)httpdns失敗時要使用降級方案腾窝。
域名合并
如一個公司不同部門的資源三級域名不一致,那么可以進(jìn)行合并居砖,并做路徑映射然后通過后端統(tǒng)一接口再做拆分轉(zhuǎn)發(fā)到對應(yīng)的服務(wù)器虹脯。
參見美團(tuán)域名合并方案
傳輸數(shù)據(jù)優(yōu)化
利用http協(xié)議中現(xiàn)有的機(jī)制減少請求數(shù)據(jù)量
- 設(shè)置gzip壓縮
- http2.0 中頭部壓縮
- 具體業(yè)務(wù)場景下如大量音頻或者視頻數(shù)據(jù)考慮具體的壓縮算法。 post請求 語音識別:multipart奏候,chunked(減少了請求次數(shù))
- protobuf 替換json循集,利用變長編碼減少數(shù)據(jù)量。
如: boundary自然要避免和傳輸數(shù)據(jù)一致導(dǎo)致數(shù)據(jù)解析異常
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary11223344
Content-Length: 514
持續(xù)上傳數(shù)據(jù)設(shè)置multipart和大數(shù)據(jù)返回chunk
transfer-encoding:chunked
其他
電商app中網(wǎng)絡(luò)請求緩存蔗草,如緩存get請求數(shù)據(jù)咒彤,并且對應(yīng)數(shù)據(jù)本地持久化,再次打開頁面時加快訪問速度咒精。
tcp
關(guān)鍵詞:三次握手镶柱,擁塞控制(cwd, swd)模叙,數(shù)據(jù)丟包原因
websocket
websocket和socket區(qū)別歇拆,和使用tcp建立的長鏈接區(qū)別
websocket和http區(qū)別 和Server push機(jī)制的區(qū)別
問題
基于tcp實(shí)現(xiàn)的http協(xié)議,必然會受限于tcp協(xié)議隊(duì)頭阻塞問題范咨,因此Quick協(xié)議基于udp實(shí)現(xiàn)故觅,對此進(jìn)行優(yōu)化。
如在一次http請求訪問異常時渠啊,重試發(fā)起一次http請求输吏,并以階梯方式間隔短暫時間發(fā)起quic請求,哪個請求先返回則使用哪個請求替蛉。