经典的”服务器最多65536个连接”误解
来源:互联网 发布:255hh的新域名网站 编辑:程序博客网 时间:2024/06/03 21:43
"因为TCP端口号是16位无符号整数, 最大65535, 所以一台服务器最多支持65536个TCP socket连接." - 一个非常经典的误解! 即使是有多年网络编程经验的人, 也会持有这个错误结论.
要戳破这个错误结论, 可以从理论和实践两方面来.
理论
系统通过一个四元组来唯一标识一条TCP连接. 这个四元组的结构是{local ip, local port, remote ip, remote port}, 对于IPv4, 系统理论上最多可以管理2^(32+16+32+16), 2的96次方个连接. 如果不仅仅考虑TCP, 则是一个五元组, 加上协议号(TCP, UDP或者其它).
实践
服务器绑定一个ip:port, 然后accept连接, 所有accept的连接使用的本地地址也是同样的ip:port.
扩展内容
如果某个客户端向同一个TCP端点(ip:port)发起主动连接, 那么每一条连接都必须使用不同的本地TCP端点, 如果客户端只有一个IP则是使用不同的本地端口, 该端口的范围在*nix系统上的一个例子是32768到61000, 可以通过如下命令查看:
[root@benegg.com ~]# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000
也就是说, 一个客户端连接同一个服务器的同一个ip:port(比如进行压力测试), 最多可以发起30000个左右的连接.
TCP客户端(TCP的主动发起者)可以在同一ip:port上向不同的服务器发起主动连接, 只需在bind之前对socket设置SO_REUSEADDR选项.
系统支持的最大打开文件描述符数(包括socket连接):
[root@benegg.com ~]# cat /proc/sys/fs/file-max580382
单个进程所能打开的最大文件描述符数:
[root@benegg.com ~]# ulimit -n1024
结论
无论是对于服务器还是客户端, 认为"一台机器最多建立65536个TCP连接"是没有根据的, 理论上远远超过这个值.
- 经典的"服务器最多65536个连接"误解
- 经典的”服务器最多65536个连接”误解
- 经典的”服务器最多65536个连接”误解
- 使用完成端口的单台服务器最多可连接2500个客户端
- 使用完成端口的单台服务器最多可连接2500个客户端
- 对服务器开发的误解
- Linux命令经典面试题:统计文件中出现次数最多的前10个单词
- 关于 C3P0 连接池的一种误解
- 对软件测试的12个误解
- 关于性格内向者的10个误解
- 关于性格内向者的10个误解
- 关于 IPv6 的10个误解
- 程序员性格内向的10个误解
- 关于性格内向者的10个误解
- TCP的多个客户端连接服务器
- 单机最多开启不超过4千个客户端连接的问题
- 解决win2003远程桌面只能最多连接2个用户的问题
- 一台路由器最多能连接多少个设备上网
- CSS之边框及盒子效果
- 循环某个Viewpager或别的控件时,获取某个数据的倍数
- ORA-00245 & RMAN-08132 RMAN之snapshot control file
- Python ImportError: No module named requests
- POJ 1064 Cable master (二分搜索)
- 经典的”服务器最多65536个连接”误解
- 齐次坐标
- R语言学习(六)
- java基础:多态(动态绑定)
- C++课本总结(第一遍)
- oracle RMAN快照控制文件
- vijos P1007绕钉子的长绳子
- CentOS Linux防火墙配置及关闭
- 就是这个美女程序员,写出了让阿波罗成功登陆月球的代码!