02.開啟網(wǎng)絡(luò)線程到發(fā)出一個完整的http請求 - 2023-02-13

dns查詢,tcp/ip請求構(gòu)建,五層因特網(wǎng)協(xié)議棧等

DNS查詢得到IP

如果輸入的是域名,需要進行dns解析成IP,大致流程:

  • 如果瀏覽器有緩存,直接使用瀏覽器緩存,否則使用本機緩存,再沒有的話就是用host
  • 如果本地沒有,就向dns域名服務(wù)器查詢(當然,中間可能還會經(jīng)過路由,也有緩存等),查詢到對應(yīng)的IP

注意,域名查詢時有可能是經(jīng)過了CDN調(diào)度器的(如果有cdn存儲功能的話)

而且,需要知道dns解析是很耗時的,因此如果解析域名過多,會讓首屏加載變得過慢,可以考慮dns-prefetch優(yōu)化

tcp/ip請求

http的本質(zhì)就是tcp/ip請求

需要了解3次握手規(guī)則建立連接以及斷開連接時的四次揮手

tcp將http長報文劃分為短報文,通過三次握手與服務(wù)端建立連接,進行可靠傳輸

三次握手的步驟:(抽象派)

客戶端:hello,你是server么?
服務(wù)端:hello,我是server,你是client么
客戶端:yes,我是client

建立連接成功后,接下來就正式傳輸數(shù)據(jù)

然后,待到斷開連接時,需要進行四次揮手(因為是全雙工的,所以需要四次揮手)

四次揮手的步驟:(抽象派)

主動方:我已經(jīng)關(guān)閉了向你那邊的主動通道了,只能被動接收了
被動方:收到通道關(guān)閉的信息
被動方:那我也告訴你,我這邊向你的主動通道也關(guān)閉了
主動方:最后收到數(shù)據(jù),之后雙方無法通信

get和post的區(qū)別

get和post雖然本質(zhì)都是tcp/ip,但兩者除了在http層面外,在tcp/ip層面也有區(qū)別。

get會產(chǎn)生一個tcp數(shù)據(jù)包,post兩個

具體就是:

  • get請求時,瀏覽器會把headersdata一起發(fā)送出去,服務(wù)器響應(yīng)200(返回數(shù)據(jù)),
  • post請求時,瀏覽器先發(fā)送headers,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200(返回數(shù)據(jù))。

再說一點,這里的區(qū)別是specification(規(guī)范)層面,而不是implementation(對規(guī)范的實現(xiàn))

五層因特網(wǎng)協(xié)議棧

從客戶端發(fā)出http請求到服務(wù)器接收,中間會經(jīng)過一系列的流程

簡括就是:

從應(yīng)用層的發(fā)送http請求,到傳輸層通過三次握手建立tcp/ip連接,再到網(wǎng)絡(luò)層的ip尋址,再到數(shù)據(jù)鏈路層的封裝成幀,最后到物理層的利用物理介質(zhì)傳輸。

五層因特網(wǎng)協(xié)議棧其實就是:

1.應(yīng)用層(dns,http) DNS解析成IP并發(fā)送http請求
2.傳輸層(tcp,udp) 建立tcp連接(三次握手)
3.網(wǎng)絡(luò)層(IP,ARP) IP尋址
4.數(shù)據(jù)鏈路層(PPP) 封裝成幀
5.物理層(利用物理介質(zhì)傳輸比特流) 物理傳輸(然后傳輸?shù)臅r候通過雙絞線,電磁波等各種介質(zhì))

當然,其實也有一個完整的OSI七層框架,與之相比,多了會話層、表示層。

OSI七層框架:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層

表示層:主要處理兩個通信系統(tǒng)中交換信息的表示方式,包括數(shù)據(jù)格式交換,數(shù)據(jù)加密與解密,數(shù)據(jù)壓縮與終端類型轉(zhuǎn)換等
會話層:它具體管理不同用戶和進程之間的對話,如控制登陸和注銷過程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容