【问题标题】:Use multiple interface to create tcp outbound connection to single IP and port(TCP server)使用多个接口创建到单个 IP 和端口的 tcp 出站连接(TCP 服务器)
【发布时间】:2021-06-17 10:58:42
【问题描述】:

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 命令时出现错误 卷曲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 

【问题讨论】:

  • “多个接口(来自同一个客户端实例的多个 IP)可以使用同一个临时端口来创建出站 TCP 连接?”是的,只要它们都不为 0.0.0.0。
  • @user207421 对。但是为什么 curl 命令(不仅仅是 curl 命令任何 HTTP 客户端)需要 --interface 才能在这种情况下工作。为什么它不使用主接口来发送请求。

标签: linux sockets networking tcp


【解决方案1】:

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

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

【讨论】:

  • 不在 TCP 中,也不是他想做的。阅读问题。
  • 啊,哎呀,对不起,错过了“来自同一客户端实例的多个 IP”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多