分享兩個(gè)字節(jié)面試題,都是基于場(chǎng)景問(wèn)的網(wǎng)絡(luò)問(wèn)題。
Q1:客戶端連接一個(gè)不存在的 IP 地址,會(huì)發(fā)生什么?
Q2:客戶端連接一個(gè)存在的 IP 地址但是端口不存在,會(huì)發(fā)生什么?
PS:這里的「連接」指的是 TCP 連接。
這類的場(chǎng)景問(wèn)題,如果你沒有系統(tǒng)化的網(wǎng)絡(luò)知識(shí)體系,只靠背八股文的話,你就遭老罪嘍。
接軌 B 站潮流:省流,我直接給出結(jié)論
Q1:客戶端連接一個(gè)不存在的 IP 地址,會(huì)發(fā)生什么?
這個(gè)問(wèn)題要分兩種情況來(lái)思考,不同的情況得到的結(jié)論是不同的。
第一個(gè)情況:目標(biāo) IP 地址和客戶端的 IP 地址是同一個(gè)局域網(wǎng)(網(wǎng)絡(luò)號(hào)相同)。
第一種情況,客戶端無(wú)法發(fā)出 SYN 報(bào)文,主要卡在數(shù)據(jù)鏈路層。
因?yàn)槟繕?biāo)地址不存在 IP 地址,客戶端的內(nèi)核在發(fā) arp 請(qǐng)求的時(shí)候,廣播詢問(wèn)這個(gè)目標(biāo) IP 地址是誰(shuí)的,由于網(wǎng)絡(luò)中不存在該目標(biāo) IP 地址,所以沒有設(shè)備應(yīng)答客戶端的 arp 請(qǐng)求。
由于客戶端無(wú)法拿到目標(biāo)設(shè)備的 MAC,這樣就沒辦法組裝 MAC 頭的信息,所以 SYN 報(bào)文無(wú)法發(fā)送出去。
第二個(gè)情況:目標(biāo) IP 地址和客戶端的 IP 地址不在同一個(gè)局域網(wǎng)(網(wǎng)絡(luò)號(hào)不同)。
第二種情況,客戶端會(huì)先將 SYN 報(bào)文發(fā)給路由器,然后路由器會(huì)繼續(xù)轉(zhuǎn)發(fā)。
由于目標(biāo) IP 地址是不存在的,該 SYN 報(bào)文會(huì)在網(wǎng)絡(luò)中消亡,因此客戶端是不會(huì)收到對(duì) SYN 報(bào)文的確認(rèn)報(bào)文的,接著客戶端會(huì)觸發(fā)超時(shí)重傳,重傳 SYN 報(bào)文,直到重傳的次數(shù)達(dá)到最大次數(shù)后,客戶端的連接就會(huì)被釋放。
可能有的同學(xué)好奇,為什么這種情況客戶端的 SYN 報(bào)文可以發(fā)出來(lái)?
因?yàn)楫?dāng)目標(biāo) IP 地址和客戶端 IP 地址不在同一個(gè)局域網(wǎng)時(shí),客戶端客通過(guò)路由表的判斷,判斷到下一步是要將網(wǎng)絡(luò)報(bào)文發(fā)送給路由器。
這時(shí)候數(shù)據(jù)鏈路層的 arp 請(qǐng)求,會(huì)廣播詢問(wèn) IP 地址(路由器 IP 地址)是誰(shuí)的,路由器發(fā)現(xiàn)是自己的 IP 地址,于是就會(huì)將自己的 MAC 地址告訴客戶端。
然后客戶端的網(wǎng)絡(luò)報(bào)文中 MAC 頭的「目標(biāo) MAC 地址」填入的就是路由器的 MAC 地址,于是 SYN 報(bào)文就可以發(fā)送出去了。
由于目標(biāo) MAC 地址是路由器的,所以就會(huì)被路由器接收,然后路由器繼續(xù)通過(guò)路由表的判斷,轉(zhuǎn)發(fā)給下一個(gè)路由器,直到找到目標(biāo)設(shè)備。
Q2:客戶端連接一個(gè)存在的 IP 地址但是端口不存在,會(huì)發(fā)生什么?
客戶端連接的目標(biāo) IP 地址是存在的,那么 SYN 報(bào)文就能正確的抵達(dá)到目標(biāo)設(shè)備。
目標(biāo)設(shè)備收到 SYN 報(bào)文后,發(fā)現(xiàn)端口號(hào)并沒有被進(jìn)程監(jiān)聽,這時(shí)候目標(biāo)設(shè)備的內(nèi)核就會(huì)回 RST 報(bào)文。
客戶端收到 RST 報(bào)文后,就會(huì)釋放連接。
.......
至此,結(jié)論已說(shuō)完。
不知道你們會(huì)不會(huì)覺得信息量很大,如果你覺得信息量大,那么你該補(bǔ)補(bǔ)網(wǎng)絡(luò)知識(shí)啦。
第二題不難,難在的是第一題,如果你沒有把兩臺(tái)電腦之間是怎么通信的搞清楚,那么你是無(wú)從下手回答的,所以建立好體系化的網(wǎng)絡(luò)知識(shí),面對(duì)這類的場(chǎng)景題目,就能做到舉一反三了。
最后再提一個(gè)問(wèn)題:客戶端發(fā)送了一個(gè)目標(biāo) IP 地址存在但是端口不存在的 UDP 報(bào)文,UDP 沒有像 TCP 那樣的 RST 報(bào)文,此時(shí)會(huì)發(fā)生什么?
就醬,溜啦溜啦!
審核編輯 :李倩
-
IP
+關(guān)注
關(guān)注
5文章
1757瀏覽量
150918 -
Mac
+關(guān)注
關(guān)注
0文章
1114瀏覽量
52336 -
客戶端
+關(guān)注
關(guān)注
1文章
296瀏覽量
16920
原文標(biāo)題:字節(jié)面試:連接一個(gè)不存在的 IP 地址,會(huì)發(fā)生什么?
文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論