• 您好,欢迎来到【天云】!,全国最大的IT技术交易中心!
  •   注册
  •   登录
  • 京东运维

    • 新建
    • 时间:2017-09-14 04:38 编辑: 来源: 阅读:139
    • 扫一扫,手机访问
    摘要:"因为TCP端口号是16位无符号整数, 最大65535, 所以一台服务器最多支持65536个TCP socket连接." - 一个非常经典的误解! 即使是有多年网络编程经验的人, 也会持有这个错误结论.要戳破这个错误结论, 可以从理论和实践两方面来.理论

    "因为TCP端口号是16位无符号整数, 最大65535, 所以一台服务器最多支持65536个TCP socket连接." - 一个非常经典的误解! 即使是有多年网络编程经验的人, 也会持有这个错误结论.

    要戳破这个错误结论, 可以从理论和实践两方面来.

    理论

    系统通过一个四元组来唯一标识一条TCP连接. 这个四元组的结构是{local_ip, local_port, remote_ip, remote_port}, 对于IPv4, 系统理论上最多可以管理2^(32+16+32+16), 2的96次方个连接.

    因为对于同一台服务器来说, 一般只有一个 local_ip, 那么, 同一台服务器可以管理 2^(16+32+16) 个连接. 而一个服务(进程, 如 Nginx 进程)一般只监听一个 local_port, 那么, 同一台服务就可以管理 2^(32+16) 个连接. 而如果从一台远端机器(所谓的 client)来连接这台服务器上的一个服务, 那么 local_ip, local_port, remote_ip 这3个变量是固定的, 那么, 就只能建立 2^16=65536 个连接了. 这就是经典的误解的来源!

    如果不仅仅考虑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-max
    580382

    单个进程所能打开的最大文件描述符数:

    [root@benegg.com ~]# ulimit -n
    1024

    结论

    无论是对于服务器还是客户端, 认为"一台机器最多建立65536个TCP连接"是没有根据的, 理论上远远超过这个值.

    另外, 对于client端, 操作系统会自动根据不同的远端 ip:port, 决定是否重用本地端口. 

    资讯详情页最新发布上方横幅
    最新发布的资讯信息
    【windows|】十六进制颜色码(2017-12-19 19:31)
    【电影天云|】《白夜追凶》32集全 磁力链接可满速下载(2017-12-17 13:44)
    【windows|】详细安装ss-panel-v3魔改版前端+后端教程(2017-12-17 13:41)
    【windows|】国外影视程序AdultVideoScript详细安装教程(2017-12-17 13:30)
    【windows|】test(2017-12-13 22:19)
    【新闻中心额|新闻中心额】xinwen (2017-12-07 23:17)
    【windows|】新闻(2017-12-07 23:15)
    【新闻中心额|新闻中心额】发布资讯(2017-12-07 21:15)
    【新闻中心额|新闻中心额】test2test2test2test2(2017-12-07 21:10)
    【windows|】查看被占用端口对应的PID,输入命令:netstat -aon|findstr (2017-12-06 15:36)
    客 服

    QQ:1084931388

    微信:OnlyGlobal

    邮箱:1084931388@qq.com

    时间:9:00-24:00

    扫一扫进手机版

    关于我们 广告合作 联系我们 隐私条款 免责声明 |    2013- 天云 版权所有

    天云信息技术有限公司 | 苏ICP备16033617号

    会员中心

    联系管理

    返回顶部