UDP/TCP 发送和接收,无需端口转发

Posted

技术标签:

【中文标题】UDP/TCP 发送和接收,无需端口转发【英文标题】:UDP/TCP Send & Receive without port forwarding 【发布时间】:2018-05-08 19:32:15 【问题描述】:

场景:

A想通过端口12345B发送数据。

B 需要端口转发才能接收传入的连接。

B有什么方法可以在不进行端口转发的情况下接收数据?

打孔确实需要一个服务器在中间。那么有没有其他方法可以让中间不需要服务器呢?

UPNP 不是一个好选择,因为我读到它需要路由器启用它。

【问题讨论】:

“B 需要端口转发”是您方案的一部分,因此根据定义,您的问题的答案是否定的。 您对向 B 发送数据而不是转发的具体想法是什么? 我的问题是。如果 B 不能或不知道如何转发端口,有没有其他方法可以发送数据? 你到底想做什么? 让B发起连接。 【参考方案1】:

它不可能(据我所知)在不共享同一网络的 2 个客户端之间传递 packets 而不引用端口号。并且不管是TCP还是UDP。 您从计算机发送的每个数据都会被转换并打包为一个数据包 - 始终如此!您使用哪种编程语言都没有关系,因为根据OSI model,它发生在the Network and Transport layers 中 网络数据包必须包含:

源 IP 源端口 目标 IP 目的港

为了更好地理解,我可以考虑一个小类比:

想象一下,你想去国外拜访一位朋友 国家。 您知道要飞往哪个国家/地区(外部 IP 地址) 并且您知道您在这个国家/地区的朋友地址(内部 IP 地址)。 但是当您到达时,您不知道要乘坐哪列火车才能到达您朋友的家(端口号)。 因此,如果不知道确切的火车(端口号),您就无法拜访您的朋友。 如果你去机场问信息站(路由器),这个车次确实存在(路线图/端口转发配置) 他们会指示您需要乘坐的火车在哪里,您将可以拜访您的朋友。

这就是您必须在路由器中配置端口转发的原因 - 以便更新路由映射

【讨论】:

以上是关于UDP/TCP 发送和接收,无需端口转发的主要内容,如果未能解决你的问题,请参考以下文章

从任何地方访问服务器,无需公共 IP 和/或端口转发

二三层转发

简单的多人游戏网络,无需专用服务器或需要玩家手动转发端口(无 UPnP)

HYbrid端口

snmptrapd 无法将接收到的陷阱转发到同一主机上的不同端口

从非本地网络访问服务器数据,无需端口转发