一台机器最多只能同时发起65535个请求吗?

一台机器最多只能同时发起65535个请求吗?

一个请求要占用一个端口,端口只有 65535 个,属于有限资源。(不要在意保留端口等等细枝末节,所以不要纠结 65535 这个具体数字)

注意审题,是客户端发请求(client),不是服务端接受请求(server)

Linux 中,65535 这个上限值可以随便改吗?比如改成 8 字节的,这样就能同时发起 2000 多亿亿个请求了

只从端口(port)考虑,不考虑网卡、CPU、内存资源的瓶颈
假设:

  • 网口用的雷电4(40Gbps)
  • CPU 是神威太湖之光同款
  • 内存是 4096 PB

一台机器最多只能同时发起 65535 个请求吗?

注意是同时,就是并行的意思

为什么有这个问题,很简单,这个需求极其常见:

  • NAT n次,上层设备 port 不够用(nat设备我记得有一个表记录内网外网关系,具体记不清了,nat 会开类似 lru 的机制来维护那个表)
  • 压力测试,希望单机模拟并发 and 并行百万请求( client 同一时刻(并发并行)发出100w 个 requests ddos server,就要 100w 个port,但是单机只有 6.5w 个 port)


回答:

查了一下,65535 是 TCP 协议写死的,光改 Linux 没有意思。

想要单机并发并行的发出超过 65535 请求,可以多搞几个 ip 就行,因为 portip 下的概念。

至于怎么多搞 ip,很简单,参考 docker 容器就知道。

每个 docker 容器都是独立的 ip,想要高并发,多开几个容器,比如开 1000 个容器,每个容器 6.5w 的 port,就能同时发出 6500w 个请求

解决办法不是只有 docker,只是拿 docker 举例子

关键词:虚拟网卡、虚拟IP、网桥、namespace、cgroup


还有一种解决办法就是自定义协议,和 TCP、UDP 同级别的那种。

但是这样方法 emmmm

你写了,路由器、交换机也识别不了,白搭


回答:

兄弟,听说过Vip吗? 一个vip是65535,十个呢?


回答:

百度一下

总结

  • 服务端并不需要为每个客户端来的连接分配一个端口。所以不止 65535 个。
  • 客户端一般就是 65535 个。
  • 不行,是目前的传输协议限制的。

以上是 一台机器最多只能同时发起65535个请求吗? 的全部内容, 来源链接: utcz.com/p/938334.html

回到顶部