URL訪問網(wǎng)站的網(wǎng)絡傳輸全過程

打開瀏覽器锄开,在地址欄輸入URL,回車称诗,出現(xiàn)網(wǎng)站內容萍悴。這是我們幾乎每天都在做的事,那這個過程中到底是什么原理呢寓免?HTTP癣诱、TCP、DNS袜香、IP這些耳熟能詳?shù)拿~都在什么時候起著什么作用呢撕予?在這里整體梳理一遍。

整個過程基本分做下面幾個部分:

  • 1蜈首、域名解析成IP地址实抡;
  • 2、與目的主機進行TCP連接(三次握手)欢策;
  • 3吆寨、發(fā)送與收取數(shù)據(jù);
  • 4踩寇、與目的主機斷開TCP連接(四次揮手)啄清;

下面分別進行詳細說明。

域名解析成IP地址

首先說什么是域名解析俺孙?

我們在瀏覽器地址欄中輸入的都是類似“www.baidu.com”辣卒、“www.qq.com”等等容易記憶的英文域名掷贾,但這些字母你直接交給整個網(wǎng)絡線路去尋找目的主機找得到嗎?找不到荣茫,因為每個主機在網(wǎng)絡中的位置都是以IP標識的想帅,IP才是主機在網(wǎng)絡中的位置,域名只是為了方便用戶記憶而已啡莉,這就要求瀏覽器能夠識別域名并且將其轉化為對應的IP地址港准。

所以瀏覽器會有一個DNS緩存,其中記錄了一些域名與IP的對應關系票罐,供瀏覽器快速查找需要的IP叉趣。但是這個DNS緩存不可能存下所有的域名-IP地址泞边,何況IP地址有時候還會變化该押,因此當在DNS緩存中沒有找到的時候,就要先向DNS服務器請求域名解析阵谚,我們常聽到的DNS服務器很大的作用就是進行域名解析蚕礼。

值得一提的是,DNS域名解析時用的是UDP協(xié)議梢什。

整個域名解析的過程如下:

  • 1奠蹬、瀏覽器向本機DNS模塊發(fā)出DNS請求,DNS模塊生成相關的DNS報文嗡午;
  • 2囤躁、DNS模塊將生成的DNS報文傳遞給傳輸層的UDP協(xié)議單元;
  • 3荔睹、UDP協(xié)議單元將該數(shù)據(jù)封裝成UDP數(shù)據(jù)報狸演,傳遞給網(wǎng)絡層的IP協(xié)議單元;
  • 4僻他、IP協(xié)議單元將該數(shù)據(jù)封裝成IP數(shù)據(jù)包宵距,其目的IP地址為DNS服務器的IP地址;
  • 5吨拗、封裝好的IP數(shù)據(jù)包將傳遞給數(shù)據(jù)鏈路層的協(xié)議單元進行發(fā)送满哪;
  • 6、發(fā)送時在ARP緩存中查詢相關數(shù)據(jù)劝篷,如果沒有哨鸭,就發(fā)送ARP廣播(包含待查詢的IP地址,收到廣播的主機檢查自己的IP娇妓,符合條件的主機將含有自己MAC地址的ARP包發(fā)送給ARP廣播的主機)請求兔跌,等待ARP回應;
  • 7峡蟋、得到ARP回應后坟桅,將IP地址與路由的下一跳MAC地址對應的信息寫入ARP緩存表华望;
  • 8、寫入緩存后仅乓,以路由下一跳的地址填充目的MAC地址赖舟,以數(shù)據(jù)幀形式轉發(fā);
  • 9夸楣、轉發(fā)可能進行多次宾抓;
  • 10、DNS請求到達DNS服務器的數(shù)據(jù)鏈路層協(xié)議單元豫喧;
  • 11石洗、DNS服務器的數(shù)據(jù)鏈路層協(xié)議單元解析數(shù)據(jù)幀,將內部的IP數(shù)據(jù)包傳遞給網(wǎng)絡層IP協(xié)議單元紧显;
  • 12讲衫、DNS服務器的IP協(xié)議單元解析IP數(shù)據(jù)包,將內部的UDP數(shù)據(jù)報傳遞給傳輸層UDP協(xié)議單元孵班;
  • 13涉兽、DNS服務器的UDP協(xié)議單元解析收到的UDP數(shù)據(jù)報,將內部的DNS報文傳遞給DNS服務單元篙程;
  • 14枷畏、DNS服務單元將域名解析成對應IP地址,產生DNS回應報文虱饿;
  • 15拥诡、DNS回應報文->UDP->IP->MAC->我的主機;
  • 16氮发、我的主機收到數(shù)據(jù)幀渴肉,將數(shù)據(jù)幀->IP->UDP->瀏覽器;
  • 17折柠、將域名解析結果以域名和IP地址對應的形式寫入DNS緩存表宾娜。

其中提到了一個ARP的概念,類似于DNS將域名翻譯成IP扇售,ARP則是將IP翻譯成MAC地址前塔,我們知道了IP后晃虫,需要通過主機的MAC地址來更具體的找到主機浓镜。同樣的也有一個ARP緩存,其中存儲了一些IP與MAC地址的對應關系滑废,如果緩存中找不到困乒,就會進行廣播來查找MAC地址寂屏,收到廣播的主機會檢查自己的IP是否是待查找的IP,是的話就返回自己的MAC地址。

如果做開發(fā)迁霎,往往還會接觸到端口這個概念吱抚,那端口是什么呢?這里是指TCP/IP協(xié)議中的端口考廉,端口號的范圍從0到65535秘豹,比如用于瀏覽網(wǎng)頁服務的80端口,用于FTP服務的21端口等等昌粤,都有一些固定的端口號既绕,被占用后就不能被別的服務拿來傳輸數(shù)據(jù)了。

與目的主機進行TCP連接(三次握手)

得到域名對應的IP地址后涮坐,也就表示可以將數(shù)據(jù)送達目的主機了凄贩,這時候才開始我們常說的三次握手建立連接。

HTTP的請求時使用TCP進行傳輸?shù)母ざ铮梢员WC可靠傳輸疲扎,并且有序,而TCP是有連接的傳輸廓译,也就是在傳輸數(shù)據(jù)之前评肆,會建立我的主機與目的主機之間的連接债查,然后才能傳輸數(shù)據(jù)非区,傳輸完成后,還有斷開連接盹廷。這也就是TCP的三次握手和四次揮手征绸,大致過程如下圖所示:

image.png

具體的三次握手建立連接的過程如下表述,其中數(shù)據(jù)包的傳輸過程類似上文請求DNS服務器時的過程俄占,就簡單的表示一下:

  • 1管怠、向目的主機發(fā)送TCP連接請求報文;
  • 2缸榄、該TCP報文中SYN標志位設為1渤弛,表示連接請求;
  • 3甚带、該TCP報文通過IP(DNS)->MAC(ARP)->網(wǎng)關->目的主機她肯;
  • 4、目的主機收到數(shù)據(jù)幀鹰贵,通過IP->TCP晴氨,TCP協(xié)議單元回應請求應答報文;
  • 5碉输、該報文中SYN和ACK標志設為1籽前,表示連接請求應答;
  • 6、該TCP報文通過IP(DNS)->MAC(ARP)->網(wǎng)關->我的主機枝哄;
  • 7肄梨、我的主機收到數(shù)據(jù)幀,通過IP->TCP挠锥,TCP協(xié)議單元回應請求確認報文峭范;
  • 8、該TCP報文通過IP(DNS)->MAC(ARP)->網(wǎng)關->目的主機瘪贱;
  • 9纱控、目的主機收到數(shù)據(jù)幀,通過IP->TCP菜秦,連接建立完成甜害。

三次握手的過程就是一去一回一去,互相確認一下球昨,就建立連接啦尔店。這個過程中任何一個報文出錯或者超時,都要進行重傳主慰。

發(fā)送與收取數(shù)據(jù)

如上所說嚣州,只有建立連接后才能開始傳輸數(shù)據(jù),數(shù)據(jù)其實有多種傳輸方式共螺,比如分段啊分組啊分時啊等等该肴。而一個數(shù)據(jù)包的傳輸過程如下所示,以HTTP的GET方法請求為例:

  • 1藐不、瀏覽器向域名發(fā)出GET方法報文匀哄;
  • 2、該GET方法報文通過TCP->IP(DNS)->MAC(ARP)->網(wǎng)關->目的主機雏蛮;
  • 3涎嚼、目的主機收到數(shù)據(jù)幀,通過IP->TCP->HTTP挑秉,HTTP協(xié)議單元會回應HTTP協(xié)議格式封裝好的HTML形式數(shù)據(jù)法梯;
  • 4、該HTML數(shù)據(jù)通過TCP->IP(DNS)->MAC(ARP)->網(wǎng)關->我的主機犀概;
  • 5立哑、我的主機收到數(shù)據(jù)幀,通過IP->TCP->HTTP->瀏覽器阱冶,瀏覽器以網(wǎng)頁形式顯示HTML內容刁憋。

其他的HTTP方法在傳輸數(shù)據(jù)時方法都類似,只是所攜帶的內容不同木蹬。

與目的主機斷開TCP連接(四次揮手)

數(shù)據(jù)傳輸完成后需要斷開連接至耻,與建立時不同若皱,斷開連接需要多一次,有四次揮手尘颓,至于為什么走触,看完過程我們再講。

這里再把圖拿過來幫助理解:

image.png

過程如下:

  • 1疤苹、瀏覽器向目的主機發(fā)出TCP連接結束請求報文互广,此時進入FIN WAIT狀態(tài);
  • 2卧土、該報文FIN標志位設為1惫皱,表示結束請求;
  • 3尤莺、TCP結束請求報文通過IP(DNS)->MAC(ARP)->網(wǎng)關->目的主機旅敷;
  • 4、目的主機收到數(shù)據(jù)幀颤霎,通過IP->TCP媳谁,TCP協(xié)議單元回應結束應答報文;
  • 5友酱、當前只是進行回應晴音,因為目的主機可能還有數(shù)據(jù)要傳,并不急著斷開連接缔杉;
  • 6锤躁、該報文中ACK標志位設為1,表示收到結束請求壮吩;
  • 7进苍、目的數(shù)據(jù)發(fā)送完所有數(shù)據(jù)后加缘,向我的主機發(fā)出TCP連接結束請求報文鸭叙;
  • 8、該報文FIN標志位設為1拣宏,表示結束請求沈贝;
  • 9、TCP結束請求報文通過IP(DNS)->MAC(ARP)->網(wǎng)關->我的主機勋乾;
  • 10宋下、我的主機收到數(shù)據(jù)幀,通過IP->TCP辑莫,TCP協(xié)議單元回應結束應答報文学歧,此時進入TIME WAIT狀態(tài),因為不相信網(wǎng)絡是可靠的各吨,如果目的主機沒收到還可以重發(fā)枝笨;
  • 11、該報文中的FIN標志位均設為1,表示結束應答横浑;
  • 12剔桨、該TCP回應報文通過IP(DNS)->MAC(ARP)->網(wǎng)關->目的主機;
  • 13徙融、目的主機關閉連接洒缀;
  • 14、TIME WAIT等待結束后欺冀,沒有收到回復树绩,說明目的正常關閉了,我的主機也關閉連接隐轩。

這里的過程是以我的主機主動發(fā)起結束請求開始的葱峡,實際上也可以由目的主機主動發(fā)起,那么過程就會跟上面相反龙助,但細節(jié)差不多砰奕。

FIN_WAIT狀態(tài)是主動發(fā)起請求時等待確認信息,而TIME_WAIT狀態(tài)是收到結束請求后發(fā)送確認信息后等待看是否需要重發(fā)提鸟。

現(xiàn)在來說說為什么斷開連接時需要四次揮手呢军援?因為建立連接時目的主機可以直接發(fā)送SYN(同步)+ACK(應答)報文。而當斷開時称勋,目的主機收到FIN后可能還有數(shù)據(jù)要發(fā)胸哥,并不一定直接斷開,所以先發(fā)送一次應答赡鲜,告知我的主機收到了請求空厌,等確認所有數(shù)據(jù)都發(fā)完了,再發(fā)送FIN银酬,同時等待我的主機應答嘲更,這里的FIN和ACK就不能一起發(fā)送,所以需要四次揩瞪。

以上就是URL訪問網(wǎng)站時的網(wǎng)絡傳輸全過程赋朦,歸納起來就是:

首先要通過域名找到IP,如果緩存里沒有就要請求DNS服務器李破;得到IP后開始于目的主機進行三次握手來建立TCP連接宠哄;連接建立后進行HTTP訪問,傳輸并獲取網(wǎng)頁內容嗤攻;傳輸完后與目的主機四次揮手來斷開TCP連接毛嫉。


查看作者首頁

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市妇菱,隨后出現(xiàn)的幾起案子承粤,更是在濱河造成了極大的恐慌惊畏,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件密任,死亡現(xiàn)場離奇詭異颜启,居然都是意外死亡,警方通過查閱死者的電腦和手機浪讳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門缰盏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人淹遵,你說我怎么就攤上這事口猜。” “怎么了透揣?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵济炎,是天一觀的道長。 經(jīng)常有香客問我辐真,道長须尚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任侍咱,我火速辦了婚禮耐床,結果婚禮上,老公的妹妹穿的比我還像新娘楔脯。我一直安慰自己撩轰,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布昧廷。 她就那樣靜靜地躺著堪嫂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪木柬。 梳的紋絲不亂的頭發(fā)上皆串,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音弄诲,去河邊找鬼愚战。 笑死,一個胖子當著我的面吹牛齐遵,可吹牛的內容都是我干的。 我是一名探鬼主播塔插,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼梗摇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了想许?” 一聲冷哼從身側響起伶授,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤断序,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后糜烹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體违诗,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年疮蹦,在試婚紗的時候發(fā)現(xiàn)自己被綠了诸迟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡愕乎,死狀恐怖阵苇,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情感论,我是刑警寧澤绅项,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站比肄,受9級特大地震影響快耿,放射性物質發(fā)生泄漏。R本人自食惡果不足惜芳绩,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一润努、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧示括,春花似錦铺浇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吼拥,卻和暖如春倚聚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凿可。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工惑折, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枯跑。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓惨驶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親敛助。 傳聞我的和親對象是個殘疾皇子粗卜,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容

  • 個人認為,Goodboy1881先生的TCP /IP 協(xié)議詳解學習博客系列博客是一部非常精彩的學習筆記纳击,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評論 0 8
  • 1. 基礎知識 1.1 3種常見的計算機體系結構劃分 OSI分層(7層):物理層续扔、數(shù)據(jù)鏈路層攻臀、網(wǎng)絡層、傳輸層纱昧、會話...
    Mr希靈閱讀 19,873評論 6 120
  • 1.這篇文章不是本人原創(chuàng)的刨啸,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,063評論 6 174
  • 在華中科技大學校園網(wǎng)下,在IE輸入www.taobao.com之后的過程詳解 1.本地過程 若DNS緩存中沒有相關...
    DecadeHeart閱讀 6,213評論 0 4
  • 1. OSI识脆,TCP/IP设联,五層協(xié)議的體系結構,以及各層協(xié)議 OSI分層 (7層):物理層存璃、數(shù)據(jù)鏈路層仑荐、...
    iCaptain閱讀 2,467評論 0 4