V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
documentzhangx66
V2EX  ›  问与答

N2N 奇怪的问题,导致我觉得其作者对于一些网络入门知识的理解出现错误?

  •  
  •   documentzhangx66 · 2021-10-14 21:28:27 +08:00 · 1725 次点击
    这是一个创建于 917 天前的主题,其中的信息可能已经有所发展或是发生改变。
    非引战,只是讨论问题。

    1.在公网的 CentOS 7.6,yum 安装 n2n,并建立了 SuperNode 。

    2.在公司内网的 CentOS 7.6 以同样方式,安装了相同版本的 n2n 来作为 EdgeNode 。

    3.n2n 版本:
    n2n v.2.9.0.r1015.f5b730b for x86_64-unknown-linux-gnu

    4.公网的 SuperNode,没启动 N2N 的 SuperNode 程序,先在 SuperNode 的相同端口,启动了 TCP Server 程序与 UDP Server 程序;接着,公司内网的 EdgeNode 通过 TCP Client 程序与 UDP Client 程序,都能向 SuperNode 发送数据,证明网络没问题。也就是说公司内网的 EdgeNode 能主动访问公网的 SuperNode 的 TCP 与 UDP 端口。

    5.SuperNode 启动后,无任何 WARNING 或 ERROR 。

    6.问题来了,启动 EdgeNode,一开始也无任何 WARNING 或 ERROR,但进入注册阶段后,EdgeNode 每隔几秒就出现警告:
    [edge_utils.c:1541] WARNING: supernode not responding, now trying .....

    7.排查:
    SuperNode 通过 netstat -nlap | grep SuperNode 端口,看到 tcp 与 udp 都在同一个 SuperNode 端口进行监听。但 EdgeNode 启动后,SuperNode 这边没看到有新的 tcp 连接。

    先解释一下,使用命令 netstat -nlap | grep xx 端口后,如果该端口有新的 TCP 连接对 SuperNode 进行 connect 连入,会被显示出来。

    既然没有新的 TCP 连接,那么 EdgeNode 必然是通过 UDP 来向 SuperNode 发送数据。

    众所周知,UDP 是一个单向无回复的协议。

    当 EdgeNode 向 SuperNode 发送了一条 UDP Request 请求数据,并且希望得到 SuperNode 的 Respond 响应数据,那么,

    要不 EdgeNode 需要向 SuperNode 开一条新的 TCP 连接来拿 Respond 数据(方法 1 ),要不 SuperNode 需要向 EdgeNode 开一条新的 TCP 链接(方法 2 )或发送 UDP 数据(方法 3 )。

    方法 1:从 SuperNode 的 netstat -nlap | grep SuperNode 端口来看,并没有 tcp 新连接产生。所以 N2N 并没有使用这种方法。

    方法 2 与方法 3:从网络拓扑结构来看,公网的 SuperNode 也无法向内网的 EdgeNode 发送消息,这是基本常识。就算能发,说明 SuperNode 与 EdgeNode 互通或公司网关对内网的 EdgeNode 做了端口映射或 DMZ,此时也不需要 N2N 这款软件了。

    所以,EdgeNode 报这个错:WARNING: supernode not responding,难道是作者对网络结构或 tcp 、udp 的理解,出现偏差??

    但能写 N2N 的人,会犯这种低级错误?
    ysc3839
        1
    ysc3839  
       2021-10-15 05:06:47 +08:00   ❤️ 2
    绝大多数的 NAT 实现在内部主机向外发送 UDP 包后是允许外部主机发回的,如果真像你所说“公网的 SuperNode 也无法向内网的 EdgeNode 发送消息”,那可以认为 UDP 废掉了,这就和 NAT 的目的相违背了,NAT 是要在保证现有协议兼容性的情况下复用 IP 地址,不是防火墙。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5463 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:13 · PVG 11:13 · LAX 20:13 · JFK 23:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.