Sockets 使用同一端口的两个进程?

Sockets 使用同一端口的两个进程?,sockets,http,tcp,Sockets,Http,Tcp,所以我研究了dropbox在我的计算机上使用的端口,并试图看看如果我在该端口上创建了一个新的http服务器会发生什么。令人惊讶的是,它奏效了。所以dropbox和我的http服务器都在同一个端口上运行,但是传入的请求会根据源地址路由到不同的应用程序 lsof -i tcp:51311 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Dropbox 3811 user 18u IP

所以我研究了dropbox在我的计算机上使用的端口,并试图看看如果我在该端口上创建了一个新的http服务器会发生什么。令人惊讶的是,它奏效了。所以dropbox和我的http服务器都在同一个端口上运行,但是传入的请求会根据源地址路由到不同的应用程序

lsof -i tcp:51311

COMMAND  PID           USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME

Dropbox 3811 user   18u  IPv4 0xdedc291239eb197f      0t0  TCP 172.20.10.2:51311->108.160.163.34:http (ESTABLISHED)

node    3984 user   11u  IPv4 0xdedc29123b1494cf      0t0  TCP *:51311 (LISTEN)

我想知道这是怎么回事。我原以为操作系统会拒绝绑定我的http服务器,因为端口已经分配给dropbox,但令我惊讶的是,它居然成功了。有人想到了吗?

Dropbox使用的HTTP端口是108.160.263.34,而不是您的本地主机


端口51311被用作一个出站端口和一个侦听端口。不是“在同一端口上运行的两个服务”。否则将有两条侦听线路。

Dropbox使用的HTTP端口位于108.160.263.34,而不是您的本地主机


端口51311被用作一个出站端口和一个侦听端口。不是“在同一端口上运行的两个服务”。否则将有两条侦听线。

TCP套接字与4元组(源ip、源端口、目标ip、目标端口)匹配。只要这四个端口不冲突,就可以进行端口重用

只要你的守护进程没有收到来自
108.160.163.34:80的连接,你的堆栈就可以处理它。如果服务器
108.160.163.34
表现良好,它将不允许应用程序启动到源端口为80的套接字(
172.20.10.2:51311
)的连接。(
bind()
应该失败,因为
地址已经在使用中


如果表现不好,现有的dropbox连接将收到一个意外的数据包(错误的序列号空格),堆栈将
RST
它。

TCP套接字与4元组(源ip、源端口、目标ip、目标端口)匹配。只要这四个端口不冲突,就可以进行端口重用

只要你的守护进程没有收到来自
108.160.163.34:80的连接,你的堆栈就可以处理它。如果服务器
108.160.163.34
表现良好,它将不允许应用程序启动到源端口为80的套接字(
172.20.10.2:51311
)的连接。(
bind()
应该失败,因为
地址已经在使用中


如果表现不好,现有的dropbox连接将接收到一个意外的数据包(错误的序列号空格),堆栈将
RST
它。

OP正在谈论他的设备上的端口51311。端口51311被用作一个出站端口和一个侦听端口。不是“在同一端口上运行的两个服务”。否则会有两条监听线。根据我的阅读,我认为他是想说“两个进程使用同一端口”。任何事情都是可能的。我正在回答他实际提出的问题。OP正在谈论他的盒子上的51311端口。51311端口被用作一个出站端口和一个侦听端口。不是“在同一端口上运行的两个服务”。否则会有两条监听线。根据我的阅读,我认为他是想说“两个进程使用同一端口”。任何事情都是可能的。我在回答他实际提出的问题。