V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
miniliuke
V2EX  ›  Node.js

向大家请教几个 tcp 穿透的问题

  •  
  •   miniliuke · 2017-08-09 08:59:17 +08:00 via Android · 5090 次点击
    这是一个创建于 2423 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.现在的 bt 协议的 p2p 是 tcp 还是 udp 协议啊? 2.tcp 穿透好像要端口复用,但是 tcp 不是一个端口要么监听要么发送请求么,一但关闭连接,立刻映射的端口就不一样了啊......到底怎么实现啊,怎么才能复用而不改变映射的地址啊,node 怎么实现

    16 条回复    2017-08-10 05:13:08 +08:00
    miniliuke
        1
    miniliuke  
    OP
       2017-08-09 09:14:53 +08:00 via Android
    难道真的没有好的解决方法?哪怕是全克隆
    miniliuke
        2
    miniliuke  
    OP
       2017-08-09 09:33:17 +08:00 via Android
    bt 下载点对点传输文件用的是 tcp 还是 udp 啊
    rongyiran
        3
    rongyiran  
       2017-08-09 09:40:35 +08:00
    可以看看 Http 权威指南,
    你这么一问,让我第一想到的是 web 隧道。
    gejigeji
        4
    gejigeji  
       2017-08-09 09:49:46 +08:00
    感觉 lz 一些概念没搞明白
    joshu
        5
    joshu  
       2017-08-09 09:50:26 +08:00 via Android
    tcp 和 udp 都有
    主动发送请求时端口是随机的,被动接受请求时用的是监听端口
    bboot9001
        6
    bboot9001  
       2017-08-09 09:55:02 +08:00
    可以搜搜内网穿透的原理看看
    littlewing
        7
    littlewing  
       2017-08-09 10:00:02 +08:00
    upnp
    miniliuke
        8
    miniliuke  
    OP
       2017-08-09 10:11:03 +08:00 via Android
    @littlewing
    @joshu
    @bboot9001 UDP 的穿透我可以实现,因为我可以把监听和发送绑定在同一个端口,这样 NAT 映射的也是同一个端口。。。但是 TCP 无法实现,我看网上都说 tcp 的端口复用,不是很明白,因为印象中一般 TCP 绑定了端口,就没法再从同一个端口发送了,还是我错了
    b1eberg0n
        9
    b1eberg0n  
       2017-08-09 11:17:15 +08:00
    BT 走 TCP
    hjc4869
        10
    hjc4869  
       2017-08-09 11:19:45 +08:00   ❤️ 1
    @miniliuke TCP 也可以 reuse address/port。
    disk
        11
    disk  
       2017-08-09 11:51:53 +08:00 via Android
    @miniliuke p2p 有 tracker 服务器的,客户端需要把一个监听端口映射出去。你干吗要自己造轮子呢。。。
    miniliuke
        12
    miniliuke  
    OP
       2017-08-09 14:26:06 +08:00 via Android
    @hjc4869 这个就是我想实现的,不过没太搞懂,也不知道怎么实现
    SleipniR
        13
    SleipniR  
       2017-08-09 16:52:52 +08:00
    一些关键字,仅供参考:
    UPnP(Universal Plug and Play)
    STUN(Simple Traversal of UDP Through Netwoek Address Translators)
    TRUN(Traversal Using Relay NAT)
    ALG(Application Layer Gatewqy)
    ICE(Interactive Connectivity Establish)
    jedihy
        14
    jedihy  
       2017-08-10 02:52:17 +08:00
    映射都是映射监听的端口,只有内网被动监听才需要映射,主动发起连接在不在内网没区别。

    映射你 P2P 监听端口就行了。
    jedihy
        15
    jedihy  
       2017-08-10 02:53:31 +08:00
    @miniliuke 你真的需要实现 resue port?而不是搞错概念了?这个只需要一行代码就可以实现`setsockopt(...)`。
    mingl0280
        16
    mingl0280  
       2017-08-10 05:13:08 +08:00
    我觉得你好像搞错了什么东西…… TCP 的连接建立以后,两端(几乎)对等,不存在谁只能监听或者谁只能发送的问题……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1384 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 17:31 · PVG 01:31 · LAX 10:31 · JFK 13:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.