最大 tcp 连接数

2023-07-31 04:27:00 生活常识 投稿:幻想症

TCP并发连接数就是防止死传输的线程,TCP连接数量越大,成功可能性越大。理论上的单机最大连接数,在实际环境中,受到机器资源、操作系统等的限制,特别是sever端,其最大并发tcp连接数远不能达到理论上限。

TCP 并发连接数就是防止死传输的线程,TCP 连接数量越大,成功可能性越大。理论上的单机最大连接数,在实际环境中,受到机器资源、操作系统等的限制,特别是 sever 端,其最大并发 tcp 连接数远不能达到理论上限。

最大 tcp 连接数

在 tcp 应用中,server 事先在某个固定端口监听,client 主动发起连接,经过三路握手后建立 tcp 连接。

client 每次发起 tcp 连接请求时,除非绑定端口,通常会让系统选取一个空闲的本地端口(local port),该端口是独占的,不能和其他 tcp 连接共享。tcp 端口的数据类型是 unsigned short,因此本地端口个数最大只有 65536,端口 0 有特殊含义,不能使用,这样可用端口最多只有 65535,所以在全部作为 client 端的情况下,最大 tcp 连接数为 65535,这些连接可以连到不同的 server ip。

在 unix/linux 下限制连接数的主要因素是内存和允许的文件描述符个数(每个 tcp 连接都要占用一定内存,每个 socket 就是一个文件描述符),另外 1024 以下的端口通常为保留端口。在默认 2.6 内核配置下,经过试验,每个 socket 占用内存在 15~20k 之间。

对 server 端,通过增加内存、修改最大文件描述符个数等参数,单机最大并发 TCP 连接数超过 10 万 是没问题的,国外 Urban Airship 公司在产品环境中已做到 50 万并发 。在实际应用中,对大规模网络应用,还需要考虑 C10K 问题。

启动线程数=【任务执行时间/(任务执行时间-IO 等待时间)】*CPU 内核数

最佳启动线程数和 CPU 内核数量成正比,和 IO 阻塞时间成反比。如果任务都是 CPU 计算型任务,那么线程数最多不超过 CPU 内核数,因为启动再多线程,CPU 也来不及调度;相反如果是任务需要等待磁盘操作,网络响应,那么多启动线程有助于提高任务并发度,提高系统吞吐能力,改善系统性能。

在 Linux 平台上,无论编写客户端程序还是服务端程序,在进行高并发 TCP 连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个 TCP 连接都要创建一个 socket 句柄,每个 socket 句柄同时也是一个文件句柄)。

在 Linux 上编写支持高并发 TCP 连接的客户端通讯处理程序时,有时会发现尽管已经解除了系统对用户同时打开文件数的限制,但仍会出现并发 TCP 连接数增加到一定数量时,再也无法成功建立新的 TCP 连接的现象。出现这种现在的原因有多种。

声明:犀牛文库所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系admin@qq.com