2012-11-14 9 views
4

我在問的是,如果兩臺計算機收聽相同的端口,並且一個信息包通過WAN Ip進入路由器,港口。數據包會放到兩臺電腦上嗎?都不是?非此即彼?當兩臺計算機收聽同一端口並且路由器通過該端口收到一個數據包時會發生什麼

IE

計算機1 - (內部IP) - > 192.168.1.3 - (監聽端口) - > 4444

計算機2 - (內部IP) - > 192.168.1.2 - (聽端口) - > 4444

計算機3 - (連接併發送) - > 24.157.358.45:4444

包 - >計算機1和計算機2

在VB6中的代碼是:

LAN.LocalPort = 4444 
LAN.Protocol = sckTCPProtocol 
LAN.Listen 

我正在使用微軟的WinSock控制6.0一個Winsock對象在VB6專業

如果有什麼需要澄清我會非常樂意多。

回答

4

根據我對路由器的瞭解,除非設置了端口轉發,否則路由器將丟棄在該端口上發送的所有數據包。

如果設置了端口轉發,則只能將其中一臺計算機設置爲接收數據包。

+0

不知道該怎麼辦,我想我將不得不使用一些服務器軟件來連接它。謝謝您的幫助。 – user1822456

2

除非已經建立通信,否則路由器不會向任一機器發送入站數據包。

如果192.168.1.3從其端口4444呼出某個其他機器(例如4.5.6.7),路由器將在其外部地址(例如24.157.358.45 [sic]:5555)上分配一個任意端口並通過包到4.5.6.7。 4.5.6.7會將回複數據包發送到24.157.358.45:5555 - 因爲這是它知道的唯一地址 - 並且路由器會將這些數據包轉發給192.168.1.3:4444。

這是事情的正常過程,但這個方案有很多額外的細節,可以通過欺騙與路由器後面的機器建立通信。

使用私有IP地址在具有公共地址的路由器後面使用機器的系統稱爲network address translation (NAT);這是一個相當深刻的話題。

+0

好的。我想我一定會服務器的想法。 – user1822456

+0

許多路由器都有一個「DMZ」主機,可以配置爲接收所有其他「未知」流量。但你只能有一個。 –

1

如果數據包是入站請求,與路由器後面運行的服務器建立新的TCP連接,則路由器必須配置明確的端口轉發規則,或者靜態地在路由器配置中或通過uPNP動態配置或SNMP,告訴路由器將24.157.358.45:4444上的入站數據包路由到192.168.1.2:4444或192.168.1.3:4444,否則該數據包將被丟棄。所以不,你的兩臺監聽服務器都不會看到相同的數據包。

一旦建立TCP連接,路由器就知道哪些特定的LAN機器與哪些連接相關聯,並相應地路由屬於這些連接的傳入分組。

0

以前的答案是正確的,您需要啓用端口轉發。如果未啓用,端口4444將在路由器上關閉。

這聽起來像你有多個服務器,並希望轉發到目前打開的任何服務器。這是不可能的(*),路由器不關心PC1或PC2是否正在偵聽端口4444,它只會將所有內容都轉發到端口轉發中配置的地址。

(*):好吧,這是可能的,但它需要一些額外的工作。

解決方案1:欺騙路由器使其認爲只有一臺服務器。爲PC1和PC2提供具有相同IP地址的虛擬網絡接口並轉發到該地址。確保只有其中一個接口已啓用,在您的網絡中有重複的IP地址可能會有意外的行爲。

解決方案2:讓路由器關心哪臺服務器在運行。您需要編寫一個程序在路由器(或另一臺服務器上)上運行,以檢測哪臺服務器處於打開狀態並相應地轉發數據包。如果你正在使用Linux,那麼iptables程序可以值得一看。

相關問題