client和server,如果server的port number已经确定,两者之间最大的TCP连接数是多少?工程上有什么需要注意的(1)

本文探讨了TCP连接的基础知识,包括TCP连接的四元组组成,并指出有效的TCP端口号范围。介绍了实验环境和注意事项,提供了实验代码链接,强调主线程如何通过监听端口与客户端建立连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. TCP基础

TCP connection的四元组为“<src IP(源IP), src Port(源端口), dst IP(目的IP), dst Port(目的端口)>”;TCP port占用2个Bytes,有效的TCP port号为1~65535。

<10.0.0.1, 4321, 10.0.0.2, 80> 和 <10.0.0.1, 4321, 10.0.0.2, 8181>是不同的连接,也是可以同时存在的连接。


2. 实验环境和实验前需要注意的

Client IP: 10.200.132.131;
Server IP: 10.200.132.135; Server Port: 9090

需要注意的:
1) Linux 默认一个进程只能打开 几千个socket(在Linux下,一切皆是文件,socket也不例外),需要提高这个配置。
用如下命令来检查当前系统"open files“:
ulimit -a |grep open
open files                      (-n) 1024

如何提高“open files"?
在/etc/sysctl.conf添加:
fs.file-max = 6553500
fs.nr_open = 6553500
执行"sysctl -p"使上面配置生效。

在/etc/security/limits.conf添加:
* soft nofile 3276800
* hard nofile 3276800
退出当前ssh session并重新登陆,使上面配置生效。

再次检查当前系统“open files":
ulimit -a |grep open
open files                      (-n) 3276800

这些参数的具体含义,请自行Google之。

2)用于连接远端server特定端口时,Linux随机选择本地剩余空闲端口,但是 默认不是从1~65535,而是由如下配置决定:
sysctl -a |grep port_range
net.ipv4.ip_local_port_range = 32768 60999
可以看到是从32768~60999,总数为28232。

3. 实验

server.cpp代码:

https://github.com/lzueclipse/learning/blob/master/c_cpp/tcp_64k_ports/server.cpp

主线程负责监听指定端口,通过accept()和client建立TCP 连接。

client.cpp代码:
https://github.com/lzueclipse/learning/blob/master/c_cpp/tcp_64k_ports/client.cpp
主线程向指定IP+指定Port发起连接,直到connect()耗尽所有本地Port.

在Server端(10.200.132.135)启动测试程序:
./server -p 9090
Binding TCP socket ...
Listening on ANY:9090 ...

在Client端(10.200.132.131)启动测试程序:
./client -s 10.200.132.135 -p 9090
Connect error:: Cannot assign requested address
Connection Number: 28232

可以用如下命令在Client或Server验证连接数是28232:
netstat -anp|grep 9090 |grep ESTABLISH |wc -l
28232


这是第1部分,工程上需要注意的在第2部分。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值