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