字節面試:連接一個不存在的IP 地址,會發生什麼?

2023.02.20

字節面試:連接一個不存在的IP 地址,會發生什麼?

客戶端發送了一個目標IP 地址存在但是端口不存在的UDP 報文,UDP 沒有像TCP 那樣的RST 報文,此時會發生什麼?

大家好,我是小林。

分享兩個字節面試題,都是基於場景問的網絡問題。

  • 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 报文,此时会发生什么?

就酱,溜啦溜啦!