我是一个 linux 服务器上的进程,名叫小进 。
老是有人说我最多只能创建 65535 个 TCP 连接 。
我不信这个邪,今天我要亲自去实践一下 。
我走到操作系统老大的跟前,说:
"老操,我要建立一个 TCP 连接!"
老操不慌不忙,拿出一个表格递给我,"小进,先填表吧"
文章插图
我一看这个表,这不就是经典的 socket 四元组嘛 。我只有一块网卡,其 IP 地址是 123.126.45.68,我想要与 110.242.68.3 的 80 端口建立一个 TCP 连接,我将这些信息填写在了表中 。
文章插图
源端口号填什么呢?我记得端口号是 16 位的,可以有 0 ~ 65535 这个范围的数字,那我随便选一个吧!
正当我犹豫到底选什么数字的时候,老操一把抢过我的表格 。
"你墨迹个啥呢小进?源端口号不用你填,我会给你分配一个可用的数字 。源IP也不用你填,我知道都有哪些网卡,并且会帮你选个合适的 。真是个新手,回去等消息吧 。"
"哦"
老操带着我的表格,走了 。
过了很长时间,老操终于回来了,并且带着一个纸条 。
文章插图
"小进,你把这个收好了 。"
我问道,"这是啥呀?"
老操不耐烦地说道,"刚刚说你是新手你还不服,这个 5 表示文件描述符,linux 下一切皆文件,你待会和你那个目标 IP 进行 TCP 通信的时候,就对着这个文件描述符读写就好啦 。"
"这么方便!好的,谢谢老操 。"
我拿着这个文件描述符,把它放到属于我的内存中裱起来了,反正我只是想看看最多能创建多少 TCP 连接,又不是去真的用它,嘻嘻 。
端口号
过了一分钟,我又去找老操了 。
"老操,我要建立一个 TCP 连接!"
老操不慌不忙,拿出一个表格递给我,"小进,先填表吧"
文章插图
这回我熟悉了,只把目标IP和目标端口填好 。
文章插图
老操办好事之后,又带着一个纸条回来,上面写着数字"6" 。
就这样,我每隔一分钟都去找老操建立一个新的 TCP 连接,目标 IP 都是110.242.68.3,目标端口都是 80 。
老操也很奇怪,不知道我在这折腾啥,他虽然权力大,但无权拒绝我的指令,每次都兢兢业业地把事情办好,并给我一张一张写着文件描述符的纸条 。
直到有一次,我收到的纸条有些不同 。
文章插图
我带着些许责怪的语气问,"老操,这是怎么回事呀?"
老操也没好气地说,"这表示端口号不够用啦!早就觉得你小子不对劲了,一个劲地对着同一个 IP 和端口创建 TCP 连接,之前没办法必须执行你给的指令,现在不行了,端口号不够用了,源端口那里我没法给你填了 。"
我也不是那么好骗的,质疑道 。"老操,你也别欺负我这个新手,我可是知道端口号是 16 位的,范围是 1~65535,一共可以创建 65535 个 TCP 连接,我现在才创建了 63977 个,怎么就不够了!"
老操鄙视地看了我一眼,"你小子可真是闲的蛋疼啊,还真一个个数,来我告诉你吧,Linux 对可使用的端口范围是有具体限制的,具体可以用如下命令查看 。"
[root]# cat /proc/sys/net/ipv4/ip_local_port_range
1024 65000
"看到没,当前的限制是1024~65000,所以你就只能有63977个端口号可以使用 。"
文章插图
我赶紧像老操道歉,"哎哟真是抱歉,还是我见识太少,那这个数可以修改么?"
老操也没跟我一般见识,还是耐心地回答我,"可以的,具体可以 vim /etc/sysctl.conf 这个文件进行修改,我们在这个文件里添加一行记录"
net.ipv4.ip_local_port_range = 60000 60009
"保存好后执行 sysctl -p /etc/sysctl.conf 使其生效 。这样你就只有 10 个端口号可以用了,就会更快报出端口号不够用的错误"
"原来如此,谢谢老操又给我上了一课 。"
推荐阅读
- Linux 怎么修改最大文件打开数量?
- 心血管病人的最适宜锻炼时间
- 薄荷天最多吃多少,人参次吃多少好
- 石斛的主要功效是什么,它最重要的功效是什么
- 做什么运动最容易减肚子上的肉呢
- 做什么运动减肚子最有效的方法有吗
- 陈皮哪里的质量最好,陈皮搭配什么最好
- 化瘀散结最厉害中药,旋覆花的做法大全
- 朱标太子地位有多稳固,朱标是历史上权力最大的太子
- 女性治痔疮最有效的偏方,痔疮怎么办治痔疮的小偏方