【问题标题】:Message from the cloud to a machine behind NAT / Firewall从云端到 NAT / 防火墙后面的机器的消息
【发布时间】:2011-08-12 08:58:51
【问题描述】:

我希望云机器向公司 NAT/防火墙后面的机器发送消息。

我的想法是在公司机器上安装一个客户端,它向云端机器发送一个长的 HTTP 请求,当云端有消息时它会返回响应。

我以为我发明了轮子,直到我读到“http 隧道”(这是我在做什么?)。 我还读到一些防火墙会阻止非 html 流量,即使它位于 http 上。 那么我有什么机会让它发挥作用呢?

我还了解到,Skype 使用了更复杂的机制。 是因为我的想法行不通还是因为他们的想法更快?

我现在可以在速度上妥协 - 哪种方法可行且易于实施?

【问题讨论】:

    标签: http cloud firewall skype nat


    【解决方案1】:

    我知道你想用 TCP/HTTP 来做, 但我这样做的方式是使用 UDP NAT“打孔”,从而建立了一个UDP通道, 然后使用通过它发送的UDP数据包 通道作为信号机制...

    这些可能(或可能不)有用或相关:

    http://en.wikipedia.org/wiki/STUN
    http://en.wikipedia.org/wiki/Hole_punching
    http://en.wikipedia.org/wiki/UDP_hole_punching
    http://en.wikipedia.org/wiki/TCP_hole_punching
    

    另外——如果你真的必须使用 HTTP,你可以 只需每 X 秒发出一个新的 HTTP 请求...

    HTTP 轮询,如果您愿意的话...

    【讨论】:

    • 优势是什么——性能?被发现的机会少吗?
    • 我该怎么做 - 我需要一些库还是应该自己实现它?
    • 如果您采用 UDP 方法——您基本上需要能够在两端发送和接收 UDP 数据包。我不能为此建议任何库——尽管我知道存在很多。 (我主要是一个 Delphi 程序员——所以我可能会使用 Indy 库或使用 Winsock 的“roll-my-own”——顺便说一下,这会引导我推荐一本书——有一本 Winsock 书,其中有示例Quinn 和 Shute 的 C/C++(我记得)...这就是您想要的书。如果这是针对 Unix 的,那么 W. Richard Stevens 的“Unix Network Programming”不会出错...
    • 这种方法的优势是什么?实现起来似乎更复杂,所以我正在寻找动力......
    • UDP 的优势在于速度,并且是比 TCP/IP 更“低级”的网络协议... UDP 是“无连接”的,即协议不保证您将获得 X 字节在 Y 秒内,但要解决这个问题,我只需让服务器以您选择的时间间隔发送一个带有状态标志的 UDP 数据包,如果您的客户端在此时间间隔内没有收到一个 - 然后客户端可以继续(通过HTTP 或其他)到服务器并检查新的东西。对于轻量级信令协议,UDP 非常棒。
    【解决方案2】:

    如果他们在端口 80 上阻止非 html,您可以尝试端口 443。除非有 SSL“中间人”代理(不太可能),否则您会没事的。

    IIRC skype 使用端口跳跃,因此基本上您需要一种算法来找到可以连接的未过滤(通过智能猜测的蛮力)端口。

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2012-02-23
      • 1970-01-01
      • 2012-02-06
      • 2021-02-28
      相关资源
      最近更新 更多