[英]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.