1、面試題用瀏覽器請(qǐng)求一個(gè)鏈接的時(shí)候,經(jīng)歷了哪些過(guò)程(DNS解析過(guò)程)?2、面試官心里分析 這個(gè)問(wèn)題,其實(shí)就是跟之前的那個(gè)一樣,他就是考察考察你的基本功,看你對(duì)基本的網(wǎng)絡(luò)通信知識(shí)有沒(méi)有了解。 而且話(huà)說(shuō)回來(lái),考察一個(gè)人的基本功,就這個(gè)問(wèn)題應(yīng)該是相當(dāng)經(jīng)典和直接的一個(gè)問(wèn)題,你理解清楚了,那么網(wǎng)絡(luò)通信這塊的一些基本概念,你基本都了解了。 3、面試題剖析 如果你閱讀過(guò)昨天發(fā)布文章,就應(yīng)該知道網(wǎng)絡(luò)七層模型大概都是怎么回事了,然后四層模型其實(shí)就是會(huì)話(huà)層、表示層和應(yīng)用層,合并為了一個(gè)應(yīng)用層,同時(shí)沒(méi)把物理層算在內(nèi) 并且我們也大概知道每一層的協(xié)議和作用,網(wǎng)絡(luò)通信的時(shí)候都是怎么回事了,現(xiàn)在我們來(lái)看看假設(shè)通過(guò)瀏覽器發(fā)送一個(gè)請(qǐng)求,你訪問(wèn)到那個(gè)網(wǎng)站對(duì)應(yīng)的機(jī)器,然后人家再給你一個(gè)響應(yīng)的全過(guò)程。 現(xiàn)在我們先假設(shè),我們給電腦設(shè)置了幾個(gè)東西:ip地址:192.168.31.37子網(wǎng)掩碼:255.255.255.0網(wǎng)關(guān)地址:192.168.31.1DNS地址:8.8.8.8這時(shí),我們打開(kāi)一個(gè)瀏覽器,請(qǐng)求www.baidu.com地址,這個(gè)時(shí)候找DNS服務(wù)器,DNS服務(wù)器解析域名之后,返回一個(gè)ip地址,比如172.194.26.108。 接著會(huì)判斷兩個(gè)ip地址是不是一個(gè)子網(wǎng)的,用子網(wǎng)掩碼255.255.255.0,對(duì)兩個(gè)ip地址做與運(yùn)算,拿到192.168.31.0和172.194.26.0,明顯不是一個(gè)子網(wǎng)的。 如圖: ![]() 那就得發(fā)送一個(gè)數(shù)據(jù)包給網(wǎng)關(guān),其實(shí)你就認(rèn)為是我們的路由器吧,就是192.168.31.1,而且我們是可以拿到網(wǎng)關(guān)ip地址的mac地址的,現(xiàn)在我們從應(yīng)用層出發(fā),通過(guò)瀏覽器訪問(wèn)一個(gè)網(wǎng)站,是走應(yīng)用層的http協(xié)議的,并且要把瀏覽器發(fā)出的請(qǐng)求打包成數(shù)據(jù)包,要把哪些東西給放到數(shù)據(jù)包中去呢? http協(xié)議分為幾個(gè)部分: 請(qǐng)求方法+URL地址+http版本 比如 GEThttp://172.194.26.108/testHTTP/1.1,類(lèi)似這種請(qǐng)求頭,類(lèi)似下面這種: Host:upload.jiangsu.ioProxy-Connection:keep-aliveUser-Agent:Mozilla/5.0 等等。。。 請(qǐng)求體,比如常見(jiàn)的可以放一個(gè)json這就構(gòu)成了一個(gè)http請(qǐng)求報(bào)文瀏覽器請(qǐng)求一個(gè)地址,先按照應(yīng)用層的http協(xié)議,封裝一個(gè)應(yīng)用層數(shù)據(jù)包,數(shù)據(jù)包里就放了http請(qǐng)求報(bào)文,這個(gè)時(shí)候會(huì)將這個(gè)http請(qǐng)求報(bào)文打包成一個(gè)數(shù)據(jù)包,僅僅只是數(shù)據(jù)包的數(shù)據(jù)部分,此時(shí)是數(shù)據(jù)包是沒(méi)有頭的。上面根據(jù)http協(xié)議搞一個(gè)http請(qǐng)求報(bào)文,然后搞一個(gè)數(shù)據(jù)包出來(lái),就是網(wǎng)絡(luò)模型中到的應(yīng)用層干的事兒了。接著就是跑傳輸層來(lái)了,這個(gè)層是tcp協(xié)議,這個(gè)tcp協(xié)議會(huì)讓你設(shè)置端口,發(fā)送方的端口隨機(jī)選一個(gè),接收方的端口一般是默認(rèn)的80端口。 這個(gè)時(shí)候,會(huì)把應(yīng)用層數(shù)據(jù)包給封裝到tcp數(shù)據(jù)包中去,而且會(huì)加一個(gè)tcp頭,這個(gè)tcp數(shù)據(jù)包是對(duì)應(yīng)一個(gè)tcp頭的,這個(gè)tcp頭里就放了端口號(hào)信息。如圖: 接著跑到網(wǎng)絡(luò)層來(lái)了,走ip協(xié)議,這個(gè)時(shí)候會(huì)把tcp頭和tcp數(shù)據(jù)包,放到ip數(shù)據(jù)包里去,然后再搞一個(gè)ip頭,ip頭里本機(jī)和目標(biāo)機(jī)器的ip地址。這里本機(jī)ip地址是192.168.31.37, 目標(biāo)機(jī)器是172.194.26.108。 因?yàn)?,通過(guò)ip協(xié)議,可以判斷說(shuō),兩個(gè)ip地址不是在一個(gè)子網(wǎng)內(nèi)的,所以此時(shí)只能將數(shù)據(jù)包先通過(guò)以太網(wǎng)協(xié)議廣播到網(wǎng)關(guān)上去,通過(guò)網(wǎng)關(guān)再給他發(fā)送出去,如圖: ![]() 接著是數(shù)據(jù)鏈路層,這塊走以太網(wǎng)協(xié)議,這里是把ip頭和ip數(shù)據(jù)包封到以太網(wǎng)數(shù)據(jù)包里去,然后再加一個(gè)以太網(wǎng)數(shù)據(jù)包的頭,頭里放了本機(jī)網(wǎng)卡mac地址,和網(wǎng)關(guān)的mac地址。但是以太網(wǎng)數(shù)據(jù)包的限制是1500個(gè)字節(jié),但是假設(shè)這個(gè)時(shí)候ip數(shù)據(jù)包都5000個(gè)字節(jié)了,那么需要將ip數(shù)據(jù)包切割一下。這個(gè)時(shí)候一個(gè)以太網(wǎng)數(shù)據(jù)包要切割為4個(gè)數(shù)據(jù)包,每個(gè)數(shù)據(jù)包包含了以太網(wǎng)頭、ip頭和切割后的ip數(shù)據(jù)包,4個(gè)數(shù)據(jù)包的大小分別是1500,1500,1500,560。ip頭里包含了每個(gè)數(shù)據(jù)包的序號(hào)。如圖: 這4個(gè)以太網(wǎng)數(shù)據(jù)包都會(huì)通過(guò)交換機(jī)發(fā)到你的網(wǎng)關(guān)上,然后你的路由器是可以聯(lián)通別的子網(wǎng)的,這個(gè)是時(shí)候你的路由器就會(huì)轉(zhuǎn)發(fā)到別的子網(wǎng)的可能也是某個(gè)路由器里去,然后以此類(lèi)推吧,N多個(gè)路由器或者你叫網(wǎng)關(guān)也行,N多個(gè)網(wǎng)關(guān)轉(zhuǎn)發(fā)之后,就會(huì)跑到百度的某臺(tái)服務(wù)器,接收到4個(gè)以太網(wǎng)數(shù)據(jù)包。百度服務(wù)器接收到4個(gè)以太網(wǎng)數(shù)據(jù)包以后,根據(jù)ip頭的序號(hào),把4個(gè)以太網(wǎng)數(shù)據(jù)包里的ip數(shù)據(jù)包給拼起來(lái),就還原成一個(gè)完整的ip數(shù)據(jù)包了。接著就從ip數(shù)據(jù)包里面拿出來(lái)tcp數(shù)據(jù)包,再?gòu)膖cp數(shù)據(jù)包里取出來(lái)http數(shù)據(jù)包,讀取出來(lái)http數(shù)據(jù)包里的各種協(xié)議內(nèi)容,接著就是做一些處理,然后再把響應(yīng)結(jié)果封裝成htp響應(yīng)報(bào)文,封裝在http數(shù)據(jù)包里,再一樣的過(guò)程,封裝tcp數(shù)據(jù)包,封裝ip數(shù)據(jù)包,封裝以太網(wǎng)數(shù)據(jù)包,接著通過(guò)網(wǎng)關(guān)給發(fā)回去。如下圖: ![]() |
|
來(lái)自: 昵稱(chēng)63557093 > 《待分類(lèi)》