【问题标题】:What does socket remote port represent?socket远程端口代表什么?
【发布时间】:2018-04-02 01:36:35
【问题描述】:

http-client.js:

const http = require('http');

http.get
(
    {
        port : 9001,
        host : 'localhost'
    },
    (res) =>
    {
        //...
    }
);

tcp-server.js:

const net = require('net');

let server = new net.Server();

server.listen(9001, 'localhost', (err) =>
{
    console.log('Started listening', server.address());
});

server.on('connection', (sock) =>
{
    console.log(`Connected ${sock.remoteAddress}:${sock.remotePort}`);
});

我运行node tc-server.js,然后当我运行node http-client.js 时,我看到如下输出:

Started listening { address: '127.0.0.1', family: 'IPv4', port: 9001 }
Connected 127.0.0.1:59506

我关闭http-client.js 并再次运行node http-client.js。我明白了:Connected 127.0.0.1:59508

我关闭服务器并再次运行,再次运行客户端,我看到Connected 127.0.0.1:59510

所以socket.remotePort 一直在增加。我不明白为什么这些端口号,我期待看到9001 的端口号,因为这是发送http请求并成功到达监听tcp服务器的地方。

【问题讨论】:

    标签: javascript node.js sockets http tcp


    【解决方案1】:

    TCP 会话的双方都必须有一个地址和一个端口。例如,客户端也使用端口。您的console.log 告诉您的是客户端使用其端口 59506 连接到您的端口 9001。当您的服务器向客户端发送数据包时,它使用客户端的地址和该端口号来寻址它们,因此网络的 TCP 层客户端上的堆栈知道将数据包发送到哪个进程。 (the Wikipedia article on TCP 中的更多内容。)您会看到数量增加只是您的客户端系统如何将可用端口分配给连接的副产品。

    您通常不需要关心客户端的端口。

    【讨论】:

    • 如果http客户端正在与底层tcp客户端通过端口59506发送tcp消息,那么在tcp端口9001上监听的tcp-server.js如何接收消息,不是吗? tcp 服务器必须改为侦听端口 59506
    • @RobertC.Holland:不,每一方都使用自己的端口,并且端口不必匹配(他们通常不需要)。考虑一个 Web 服务器也用作 Web 客户端的常见情况(可能从另一个站点抓取信息以响应请求)。如果它使用端口 80 为客户端提供 HTTP 服务,那么当 它是 客户端连接到另一台服务器时,它显然不会使用端口 80。 (或者如果你在运行 web 服务器的机器上运行 web 浏览器,更明显的是端口 80 不能同时用于两个进程......)
    • 选择不同端口的原因现在已经弄清楚了,谢谢。我仍然不明白 - 如果客户端通过不同的端口发送,它仍然设法到达指定端口上的侦听服务器。
    • @RobertC.Holland: :-) 假设我们有服务器 S 和客户端 C。S 正在侦听 IP 1.2.3.4 端口 9001。C(在 IP 9.10.11.12 上)连接到 S 的端口 9001使用 C 的端口 59506,并且作为该连接设置的一部分,告诉 S 这是它正在使用的端口。当 C 向 S 发送数据包时,它会将其发送到 1.2.3.4:9001。当 S 向 C 发送数据包时,它会将其发送到 9.10.11.12:59506。双方都非常高兴,他们每个人都有一个唯一的地址+端口来发送数据以进行连接。
    • 这个细分非常有帮助。我现在知道了。非常感谢您花时间解释它!
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2013-05-17
    • 2018-04-03
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多