
使用 UDP 的線上多人遊戲如何取得透過網路在網路之間傳遞的資料包?據我了解,客戶端必須在其路由器上啟用連接埠轉送才能使封包到達其電腦。這是大型網路遊戲(魔獸世界、暗黑破壞神等)要求玩家做的事情嗎?
例如,我最近建立了一個處理 udp 流量的伺服器。它只是回顯寄件者發送的任何內容。我將其部署到互聯網上的伺服器。我只能在啟用連接埠轉送後才能將回顯傳回給發送者,但是如果同一本機網路上有兩個傳送者,則這將不起作用。
答案1
簡短回答:NAT 連線跟踪
要記住的一件事是 IPv4 網路上的絕大多數路由器都是 NAT 路由器。
大多數 NAT 實作都會進行智慧追蹤,當您從內部用戶端發送 UDP 到某個地方時,您將擁有目標連接埠和來源連接埠。如果流量傳入的連接埠相反,則該流量將被路由回您的用戶端,並在大多數防火牆中被允許。
具有追蹤功能的 NAT/防火牆會偵測到這些相關資料包並將其轉送回來。
server
基於連接埠5000
UDP註解的範例
- 客戶端發送資料包
server:5000
,來源client:5001
- 第一個 NAT 路由器將看到一個包含來源 IP、連接埠
client:5001
和目標的封包server:5000
。 - 路由器將其發送出去,並且將有
NATip:NATport
- 伺服器收到此訊息並建立一個回應,
NATip:NATport
其來源為server:5000
- NAT 接收此資料並具有來源
server:5000
目標NATip:NATport
,該來源目標與發出的資料包相符(但來源和目標相反) - NAT 將其發送到
client:5001
仍然帶有來源的server:5000
來源 ip+連接埠和目標 ip+連接埠建立可追蹤的組合。 (還有更多細節,但這是基礎)
多讀一些書但我應該挖掘更多關於此的文檔,而不僅僅是參考我所看到的經驗中的軼事證據。