失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > linux的TCP连接数量最大不能超过65535个 那服务器是如何应对百万千万的并发的?

linux的TCP连接数量最大不能超过65535个 那服务器是如何应对百万千万的并发的?

时间:2020-05-13 09:34:17

相关推荐

linux的TCP连接数量最大不能超过65535个 那服务器是如何应对百万千万的并发的?

光是在知乎上这个问题我都看了好几遍了,问之前先搜一下不好吗?简单说来:

TCP连接数量最大不能超过65535是错的。

一个连接由一个5元组决定(protocol,local IP,local port,remote ip,remote port),对于TCP,protocol固定是TCP,还有四个元素。对于服务器来说,local port一般是固定的,比如HTTP(80),但是remote ip和remote port没有限制。

连接数量是没有限制的,除非是一个端口只能有一个连接。你说的这个65535是端口个数,这不光是Linux,所有的系统都只有这么多端口。端口数和连接个数没有必然联系。如果你学过网络编程的话,在创建连接的时候肯定是IP+port的形式,并且有一个参数指定最大连接数,这个最大连接数并没有限制,可以很小也可以非常大。

/zvideo/1386712439304597504?playTime=6.1

首先,服务器服务进程只会占用一个端口(listen)对外提供连接请求。

其次,百万并发指的是百万个不同请求方(remote ip,remote port)同时请求服务进程监听的端口。注意这里,服务进程只会用这一个监听端口与请求方建立连接,服务进程不会消耗服务器其他端口去建立连接的。

也就是说服务进程只要一个端口就够了,况几千个端口呼~

端口号主要是用来在服务器本地解复用用的,数据包通过IP和端口号来告知目的地,也就是网络通过数据包中的IP找到服务器,然后服务器再通过数据包中的端口号把数据包交到这个服务器上跑着的特定进程。同一IP下端口号相同数据包同时只能被一个进程处理,不过每个进程同时可以处理多个端口号的数据。就是服务器计算机会维护一个端口号与进程号的映射,这个映射就是严格函数关系,也就是每个端口号有唯一进程号,但是一个进程号可以对应多个端口号,通过这个映射,服务器计算机的网络堆栈把数据包分发给指定进程。进程监听端口号,你可以理解为在这个映射中插入一项对应关系,进程关闭端口监听或者进程当掉了,就是抹掉关于这个进程号的对应关系。所以呢,端口数限制只是表示服务器最多只可以开65535个使用网络的进程。这个限制在实际中不会遇到,因为服务器多是一个计算机只提供一种服务,然后一种服务开个位数进程(一般为了最大利用CPU,数目是与CPU的核数对齐的)处理几十万、上百万请求的。理论上,并没有什么限制请求数,实际上呢,内存会限制请求数,因为每个请求需要用到一块内存来维护请求的状态和缓存收发数据,另外带宽也会限制请求数量,因为一部分请求可能会因为丢包而建立不了连接。

不过在计算机作为客户端测试机,来测试与服务器的连接时,对于同一个远端IP端口组合,是最多只能有65535个连接,因为数据包中的端口号就16位,大于这个,就装不下了,这种情况本地是最多可以对应65535个数据连接。这个限制做压力测试时客户机是会遇到。

如果觉得《linux的TCP连接数量最大不能超过65535个 那服务器是如何应对百万千万的并发的?》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。