某些应用程序甚至在防火墙或NAT之后,数据包如何出去?

| 例如Skype / Team Viewer / Logmein等应用程序,该应用程序在NAT之后(在防火墙之后)发送音频/视频。但是,当我制作一个小的微型应用程序将文本发送到另一个NAT位置时,它却无法执行同样的操作。
Example: 

Sender: 
-> Public ip: 91.1.2.3 My lan ip is: 192.168.1.2 with port 14446 udp
-------> Data format: RTP packets
Receiver:
<------- Data received: 0 packets
-> Public ip: 92.1.2.3 Friend lan ip is: 10.0.0.2 with port 14446 udp

* same in both way
别人怎么做?进行对等2对等应用程序开发以克服NAT问题的方式是什么?我们总是有公共IP,而且大多数情况下都存在NAT问题。 但是,Skype在这种情况下又如何工作?我们是否有UDP的音频/视频端口范围,或者UDP总是从任何端口打开?但是我也没有尝试过UDP的范围端口以上。有什么秘诀?这让我感到好奇! 注意: 我的目标是处理音频数据包,我认为其中过多的过滤或防火墙会导致延迟和延迟,并且其他问题也相对涉及。因此,我想为我的应用程序非常清楚地知道某些端口(哪个端口范围?)可以用于此类目的,而这些端口实际上并不会阻止开发压力。     
已邀请:
NAT有多种类型,它们允许的流量各不相同。 请参阅有关NAT的维基百科文章 对于大多数NAT,STUN将允许您打开端口并找出打开的端口(可能与您发送的端口不同)。在SIP和RTSP中,通常将STUN确定的外部IP和端口提供给另一端。 完全对称的NAT意味着STUN不允许您使用第三方服务器通过STUN来支持端口,因此您将必须使用UPnP(如果启用)或在路由器中映射端口(或设置触发器) ),否则您将不得不玩邪恶的游戏,以使双方都认为他们发起了联系。 (不容易,不能保证。) 有关遍历NAT的详细机制,请参阅IETF的ICE&TURN规范(RFC),但是请注意,在某些情况下,必须使用外部代理转发数据包。     
一种常见的解决方案是,客户端程序向外连接到服务器,从而建立连接。大多数防火墙都允许外向连接-假设您是受信任的并且始终可以连接到外部。然后,当服务器希望向您发送消息时,它会响应打开的连接。     
我相信您使用的端口通常用于确定是否应该允许它。某些端口始终允许通过。我不确定确切的端口,但是对于所有NAT和防火墙而言,端口都将有所不同。     

要回复问题请先登录注册