单机单网卡最大tcp长连接数真的是65535吗

数据库有两个专业词汇:主键组合键。同学们肯定想知道这两者是什么含义与区别,不急,接下来一一解释。

主键
一个数据库用来存储一个个表项,当我们查询到数据库某一条表项时,我们希望用一个关键字就可以过滤出想要查询的表项,这个唯一标识(Uniquely Identify)的关键字就是主键。



组合键
顾名思义,就是用几个关键字组合在一起,尽管每一个关键字在数据库条目里不唯一,但组合在一起却可以唯一定位一个条目。
 

计算机通信,有一个问题必须解决,就是如何唯一识别一个会话,英文名称是session,TCP/IP协议里没有一个字段可以完全胜任这个工作,意味着,无法遴选出一个主键,我们可以退而求其次,遴选出组合键来完成这个使命。

既然通信是双方的事,最终遴选出五元组的这个组合键:

服务器IP + 服务器端口 + TCP + 客户端IP + 客户端端口

只要保证这个五元组是唯一的,就可以唯一识别一个session,不是吗?

对于一个特定的服务器,一般IP、端口号都是固定的,比如提供网页服务的默认端口是80不会变。

如果相同的客户端来连接这个服务器,客户端的IP是相同的,多个TCP连接都使用相同的端口号,那么这个组合键是不是都是一样的?这是绝对不行的!因为无法唯一识别一个session!

客户端的操作系统TCP/IP必须做出硬性的限制,每次连接,如果本地端口已经被别的session占用,要从空闲的端口号池子里选取一个端口号,以此方式,无论是在客户端的眼里,还是服务器的眼里,最终的五元组肯定是唯一的。

端口号在TCP协议字段里,一共两个字节,二进制的16位,意味着有2^16= 65536个端口号可用,但0-1023系统通常保留为知名服务端口,所以最多有64512个端口做为端口池资源。

 

一个问题
如果相同的客户端使用相同的端口号来连接同一个服务器(IP相同)的不同端口、或不同服务器(IP不同)相同端口,那可不可以呢?

理论上,按照五元组的精神,根据五元组的哈希值,只要有任何一项是不同的,session ID 就是不同的,所以是完全可行的,但为何操作系统也要限制?

是为了简化实现,试想客户端每个TCP连接硬性规定,使用不同的端口号,服务器一点也不需要担心session ID 的唯一性。此外,64512个端口难道还不够一个客户端使用?

服务器
服务器在监听端口(比如80)可以接受来自五湖四海的客户端TCP连接,至于这个连接数的上限是多少,则完全取决于服务器的CPU、Memory 资源限制。

 

转载:https://www.zhihu.com/question/66553828/answer/244123563

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值