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