繁体   English   中英

使用多个接口创建到单个 IP 和端口(TCP 服务器)的 tcp 出站连接

[英]Use multiple interface to create tcp outbound connection to single IP and port(TCP server)

TCP 连接由 5 元组确定: [本地 IP、本地端口、远程 IP、远程端口、协议] 我无法更改远程 IP、远程端口、协议。 现在,当客户端的临时端口恒定(1024–65535)时,如何从同一客户端创建超过 65K(计划创建超过 2L)的并发 TCP 连接(保存记录器时间的连接) ?

问题

多个接口(来自同一个客户端实例的多个 IP)可以使用同一个临时端口来创建出站 TCP 连接吗?

编写了一个 TCP 客户端,它使用 eth1(10) 和 eth2(5) 接口创建 15 个 TCP 并发连接(保持记录器时间),并仅启用 10 个临时端口(49001 - 49010 ip_local_port_range 文件)。 并且 eth0 默认接口不使用 49001 - 49010 之间的任何端口,除了 49001。

现在,当我尝试发送 curl 命令时出现错误 curl http://google.com -v

* Rebuilt URL to: http://google.com/
*   Trying XXX.XXXX.XXXX.46...
* TCP_NODELAY set
* Immediate connect fail for XXX.XXX.XXX.46: Cannot assign requested address
*   Trying XXXX:XXXX:XXXX:XXXX::XXXX...
* TCP_NODELAY set
* Immediate connect fail for XXXX:XXXX:XXXX:XXXX::XXXX: Network is unreachable
* Closing connection 0
curl: (7) Couldn't connect to server

tcp        0      0 xxx.xxx.xxx.245:49001       xxx.xxx.xxx.xxx:443         ESTABLISHED XXXX         
tcp        0      0 xxx.xxx.xxx.116:49010       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.116:49006       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.248:49002       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.116:49008       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.248:49010       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.248:49009       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.248:49006       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.116:49004       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.248:49001       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.248:49008       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.248:49005       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.116:49002       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.248:49003       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.248:49004       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client        
tcp        0      0 xxx.xxx.xxx.248:49007       xxx.xxx.xxx.41:9999         ESTABLISHED 21805/client 

在 Linux 中,如果您使用 setsockopt 在您的套接字上设置SO_REUSEPORT ,您可以拥有多个使用相同源地址和源端口的套接字。 但是,您需要控制套接字创建代码才能使其工作。

正如您所指出的,您仍然受到限制,因为系统上的所有 TCP 套接字的 5 元组必须是唯一的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM