我看到應用程序通過UDP將數據包發送到某個端口上的IP並接收響應。響應去了哪個端口? (順便說一句,怎麼可以在路由器知道響應是針對我的電腦,如果沒有轉發到我的電腦的端口?)通過UDP接收響應
問候,Neo_b
我看到應用程序通過UDP將數據包發送到某個端口上的IP並接收響應。響應去了哪個端口? (順便說一句,怎麼可以在路由器知道響應是針對我的電腦,如果沒有轉發到我的電腦的端口?)通過UDP接收響應
問候,Neo_b
什麼端口分配一個反應是由應用程序。 UDP是完全無狀態的,所以在發射一個數據包之後,應用程序可以期待響應的唯一方法就是知道另一端將要發送一個響應。根據UDP應用程序的不同,我期望爲簡單起見,響應將出現在相同的端口上 - 對於像TCP這樣的協議,情況並非如此,它有一個有意識的隨機(和高)源端口。
要回答你的第二個問題,很多路由器,甚至是廉價的家庭路由器,都要做stateful packet inspection(SPI)。這樣的事情有可能發生,但我爲被糾正,如果我關:[設置階段,客戶端,路由器,網絡,服務器]
這是如何實現的是特定於路由器,我想象,但這是我的理解它是如何工作的。
創建UDP套接字時,必須將其綁定到端口號。如果你不操作,操作系統將分配一個ephemeral port.
另一方的應用程序必須知道這個端口。當回覆發回時,您的路由器可能不知道如何路由。有兩種方法來解決這一問題
如果我將消息發送到另一臺機器上的UDP端口,無論選擇了哪個端口,它都會出現在UDP數據報中。我會認爲遠程端會將任何對該數據報的響應發送到該源端口。
我想這同樣適用於即使端口被防火牆或NAT設備改變,遠程端看到來自特定端口的數據報併發迴應答,防火牆/ NAT設備然後將該端口轉換爲原始源端口。
我認爲這是事實,因爲我只是看了一些域名服務器代碼。 DNS請求通常通過UDP傳輸,但需要發回答案。 – user2081279 2017-04-06 08:26:19
感謝您的快速解答。我已經編譯了UDP客戶端和服務器的稍微修改版本。當我嘗試在幾乎任何我嘗試過的端口上向本地主機發送消息時,他們在我的PC上工作。儘管當我向局域網中另一臺PC上運行的服務器發送查詢並在偵聽到同一端口上的響應時,我沒有收到響應(而當我使用自己的UnrealScript代碼時,我以某種方式接受迴應)。 – 2009-11-29 09:40:25