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

发布于 1周前 作者 vueper 来自 nodejs/Nestjs

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

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

17 回复

难道真的没有好的解决方法?哪怕是全克隆


bt 下载点对点传输文件用的是 tcp 还是 udp 啊

可以看看 Http 权威指南,
你这么一问,让我第一想到的是 web 隧道。

感觉 lz 一些概念没搞明白

tcp 和 udp 都有
主动发送请求时端口是随机的,被动接受请求时用的是监听端口

可以搜搜内网穿透的原理看看



UDP 的穿透我可以实现,因为我可以把监听和发送绑定在同一个端口,这样 NAT 映射的也是同一个端口。。。但是 TCP 无法实现,我看网上都说 tcp 的端口复用,不是很明白,因为印象中一般 TCP 绑定了端口,就没法再从同一个端口发送了,还是我错了

TCP 也可以 reuse address/port。

p2p 有 tracker 服务器的,客户端需要把一个监听端口映射出去。你干吗要自己造轮子呢。。。

这个就是我想实现的,不过没太搞懂,也不知道怎么实现

一些关键字,仅供参考:
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)

映射都是映射监听的端口,只有内网被动监听才需要映射,主动发起连接在不在内网没区别。

映射你 P2P 监听端口就行了。

你真的需要实现 resue port?而不是搞错概念了?这个只需要一行代码就可以实现setsockopt(...)

我觉得你好像搞错了什么东西…… TCP 的连接建立以后,两端(几乎)对等,不存在谁只能监听或者谁只能发送的问题……

关于Node.js中的TCP穿透问题,通常是指在不同网络环境下的两台设备,通过中间服务器进行数据传输,实现直接通信的过程。这通常涉及NAT(网络地址转换)穿透技术,如TCP Hole Punching。以下是一个基本的TCP穿透示例,展示如何使用Node.js和net模块来实现简单的TCP服务器和客户端。

服务器端(server.js)

const net = require('net');
const server = net.createServer((socket) => {
  console.log('Client connected');
  socket.on('data', (data) => {
    console.log('Received:', data.toString());
    // Echo the data back to the client
    socket.write(data);
  });
  socket.on('end', () => {
    console.log('Client disconnected');
  });
});

server.listen(8080, () => {
  console.log('Server listening on port 8080');
});

客户端(client.js)

const net = require('net');
const client = new net.Socket();

client.connect(8080, '127.0.0.1', () => {
  console.log('Connected to server');
  client.write('Hello, server!');
});

client.on('data', (data) => {
  console.log('Received from server:', data.toString());
  client.destroy(); // Kill client after server's response
});

client.on('close', () => {
  console.log('Connection closed');
});

TCP穿透通常涉及更复杂的NAT处理、信令服务器(用于交换IP和端口信息)以及防火墙配置。上面的示例仅展示了基本的TCP通信,实际穿透实现需根据具体应用场景和网络环境进行调整。

回到顶部