我想建立一个对等连接(在C#中),而不需要来自任何客户端的网络配置(端口转发等等)。
我看到很多人说,NAT but是一种中间服务器的解决方案,它对我的需求很好,但留下了一个问题:为什么TCP需要端口转发,而UDP不需要端口转发?
当RUDP (可靠的udp)存在时,端口转发是否过时,因为它拥有TCP的优点,但不需要转发端口?
我很少看到任何人谈论UDP相对于TCP的这一优势。(这可能是一种劣势,但对我的需求来说是一种优势)。
我很想得到一个解释因为我在网上什么都找不到
发布于 2022-09-05 09:54:06
TCP建立了两个主机之间的连接,另一方面UDP是火和遗忘。
NAT将重写传出数据包的IP地址(可能还有端口),并保留所有TCP连接的表,以便特定端口上的传入数据包可以转换为正确的IP/数据包。TCP连接使这更容易,因为NAT知道连接何时建立和断开。
因此,只有传入连接才需要显式端口转发。
在使用UDP时,NAT的工作方式大致相同,但是由于NAT确实有连接的概念,NAT可能会使用超时机制,因此主机需要不时发送数据包以重置超时并保持连接打开。由于缺乏连接,UDP孔穿孔工作,即一旦NAT映射被创建,主机就可以接收来自任何主机的UDP数据包,而不仅仅是它发送原始数据包给的主机。
然而,对于某些类型的NAT,UDP穿孔可能会失败,因此声称端口转发过时可能是一个夸张的说法。这将取决于具体的目的。
https://stackoverflow.com/questions/73606959
复制相似问题