如何唯一确定一个 TCP 连接呢?
TCP 四元组可以唯一的确定一个连接,四元组包括如下:
- 源地址
- 源端口
- 目的地址
- 目的端口
源地址和目标地址字段(32位)是在IP头部中,作用是通过IP协议发送报文给对方主机。
源端口和目标端口字段(16位)是在TCP头部中,作用是告诉TCP协议应该把报文给哪个进程。
如果有一个IP的服务端监听了一个端口,它的TCP最大连接数是多少?
服务端通常固定在某个端口上监听,等待客户端的连接请求。
因此,客户端IP和端口是可变的,其理论计算值如下:
最大TCP连接数 = 客户端IP数 X 客户端的端口数
对IPV4,客户端的IP数最多为2的32次方,客户端的端口数最多为2的16次方,也就是服务端单机最大TCP连接数,约为2的48次方。
当然,服务端最大并发TCP连接数远不能达到理论上限。会受以下因素影响:
-
文件描述符限制,每个TCP连接都是一个文件,如果文件描述符被占完了,会发生Too many open files错误。
Linux对可打开的文件描述符的数量分别作了三个方面的限制:- 系统级:当前系统可打开的最大数量,通过
cat /proc/sys/fs/file-max
查看; - 用户级:指定用户可打开的最大数量。通过
cat /etc/security/limits.conf
查看; - 进程级:单个进程可打开的最大数量,通过
cat /proc/sys/fs/nr_open
查看;
- 系统级:当前系统可打开的最大数量,通过
-
内存限制,每个TCP连接都要占用一定内存,操作系统的内存是有限的,如果内存资源被占满后,会
发生OOM。
本文来自博客园,作者:夜尽天明bylaw,转载请注明原文链接:https://www.cnblogs.com/llwhrbust/p/18859990