如何唯一确定一个 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对可打开的文件描述符的数量分别作了三个方面的限制:

    1. 系统级:当前系统可打开的最大数量,通过 cat /proc/sys/fs/file-max查看;
    2. 用户级:指定用户可打开的最大数量。通过 cat /etc/security/limits.conf 查看;
    3. 进程级:单个进程可打开的最大数量,通过 cat /proc/sys/fs/nr_open 查看;
  • 内存限制,每个TCP连接都要占用一定内存,操作系统的内存是有限的,如果内存资源被占满后,会
    发生OOM。

posted @ 2025-05-05 12:08  夜尽天明bylaw  阅读(42)  评论(0)    收藏  举报