您好、欢迎来到现金彩票网!
当前位置:秒速时时彩 > 四元组 >

网络通信socket连接数上限

发布时间:2019-07-21 15:39 来源:未知 编辑:admin

  要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。

  对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和UDP,前者可以保证数据的正确和可靠性,后者则允许数据丢失。最后,我们还知道,在建立连接前,必须知道对方的IP地址和端口号。除此,普通的程序员就不会知道太多了,很多时候这些知识已经够用了。最多,写服务程序的时候,会使用多线程来处理并发访问。

  1.一个指定的端口号不能被多个程序共用。比如,如果IIS占用了80端口,那么Apache就不能也用80端口了。

  3.服务程序在listen某个端口并accept某个连接请求后,会生成一个新的socket来对该请求进行处理。

  于是,一个困惑了我很久的问题就产生了。如果一个socket创建后并与80端口绑定后,是否就意味着该socket占用了80端口呢?如果是这样的,那么当其accept一个请求后,生成的新的socket到底使用的是什么端口呢(我一直以为系统会默认给其分配一个空闲的端口号)?如果是一个空闲的端口,那一定不是80端口了,于是以后的TCP数据包的目标端口就不是80了--防火墙一定会阻止其通过的!实际上,我们可以看到,防火墙并没有阻止这样的连接,而且这是最常见的连接请求和处理方式。我的不解就是,为什么防火墙没有阻止这样的连接?它是如何判定那条连接是因为connet80端口而生成的?是不是TCP数据包里有什么特别的标志?或者防火墙记住了什么东西?

  后来,我又仔细研读了TCP/IP的协议栈的原理,对很多概念有了更深刻的认识。比如,在TCP和UDP同属于传输层,共同架设在IP层(网络层)之上。而IP层主要负责的是在节点之间(End to End)的数据包传送,这里的节点是一台网络设备,比如计算机。因为IP层只负责把数据送到节点,而不能区分上面的不同应用,所以TCP和UDP协议在其基础上加入了端口的信息,端口于是标识的是一个节点上的一个应用。除了增加端口信息,UPD协议基本就没有对IP层的数据进行任何的处理了。而TCP协议还加入了更加复杂的传输控制,比如滑动的数据发送窗口(Slice Window),以及接收确认和重发机制,以达到数据的可靠传送。不管应用层看到的是怎样一个稳定的TCP数据流,下面传送的都是一个个的IP数据包,需要由TCP协议来进行数据重组。

  所以,我有理由怀疑,防火墙并没有足够的信息判断TCP数据包的更多信息,除了IP地址和端口号。而且,我们也看到,所谓的端口,是为了区分不同的应用的,以在不同的IP包来到的时候能够正确转发。

  TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也必须对外提供编程接口,这就是Socket编程接口--原来是这么回事啊!

  在Socket编程接口里,设计者提出了一个很重要的概念,那就是socket。这个socket跟文件句柄很相似,实际上在BSD系统里就是跟文件句柄一样存放在一样的进程句柄表里。这个socket其实是一个序号,表示其在句柄表中的位置。这一点,我们已经见过很多了,比如文件句柄,窗口句柄等等。这些句柄,其实是代表了系统中的某些特定的对象,用于在各种函数中作为参数传入,以对特定的对象进行操作--这其实是C语言的问题,在C++语言里,这个句柄其实就是this指针,实际就是对象指针啦。

  现在我们知道,socket跟TCP/IP并没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以,socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。

  现在我们明白,如果一个程序创建了一个socket,并让其监听80端口,其实是向TCP/IP协议栈声明了其对80端口的占有。以后,所有目标是80端口的TCP数据包都会转发给该程序(这里的程序,因为使用的是Socket编程接口,所以首先由Socket层来处理)。所谓accept函数,其实抽象的是TCP的连接建立过程。accept函数返回的新socket其实指代的是本次创建的连接,而一个连接是包括两部分信息的,一个是源IP和源端口,另一个是宿IP和宿端口。所以,accept可以产生多个不同的socket,而这些socket里包含的宿IP和宿端口是不变的,变化的只是源IP和源端口。这样的话,这些socket宿端口就可以都是80,而Socket层还是能根据源/宿对来准确地分辨出IP包和socket的归属关系,从而完成对TCP/IP协议的操作封装!而同时,放火墙的对IP包的处理规则也是清晰明了,不存在前面设想的种种复杂的情形。

  明白socket只是对TCP/IP协议栈操作的抽象,而不是简单的映射关系,这很重要!

  65535这个数字的由来,很多人想当然地将它与port最大值联系起来。的确,TCP的端口数,最大值确实为65535。但是,这并不代表一个服务器可以接受的连接数就是这个值。很多人之所以把这两个概念搞混淆是因为对socket和port没有更深的认识和理解。我们先来回想一下服务器服务的先后过程:

  从以上流程来看,最大值为65535的“端口号”这个重要的东东,我们只用了一次,就是执行bind的时候!而以后创建的socket,说白了就是一个可以进行网络IO操作的HANDLE而已。通过查看该HANDLE的RemoteEndPoint能查看到远程客户端连接的IP和端口号(注意,该端口是远程客户端的端口),查看该HANDLE的LocalEndPoint能看到该Socket的Ip和端口就是该服务绑定的IP和端口。所以,accept的socket值与端口号无关,又何来65535的“理论”上限?

  好了,已经弄明白了服务器端接收的客户端连接连接数不受最大端口号65535的限制。但是,在客户端,应用程序最多可以建立多少个TCP连接呢?以及如何调整系统参数来调整单机的最大TCP连接数。

  以上注册表信息配置单机的最大允许的TCP连接数,默认为 16M。这个数值看似很大,这个并不是限制最大连接数的唯一条件,还有其他条件会限制到TCP 连接的最大连接数。

  TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 个Socket 连接。我们可以修改如下注册表来调整这个动态端口的范围

  也就是说,默认情况下,Server 版本最多同时可以建立并保持2000个TCP 连接。

  那么 MaxHashTableSize 应大于 500 才行。这个数量越大,则Hash table 的冗余度就越高,每次分配和查找 TCP  连接用时就越少。这个值必须是2的幂,且最大为65536.

  就是比如你监听了recv事件 事件来了 你要有内存可用(一般都是socket建立起就分配好,断开才会释放的).

  这个内存是自己写socket程序时候自己控制的, 最低也要4K,4K, 实际使用8K,8K至少.

  现在设定一个优化方案和使用场景, 首先假设4G内存全部为空闲(系统和其他进程也要内存的....

  假如网络包的大小都可以控制在4K以下, 假设所有连接的网络都不会拥堵, 或者拥堵时候的总量在4K以下:

  假如网络包的大小都可以控制在8K以下, 假设所有连接的网络都不会拥堵, 或者拥堵时候的总量在8K以下

  4G/32K=13.1万并发, 这个在生产环境作为一个纯网络层面的内存消耗, 是可以作为参考的.

  假如使用默认配置, 假如所有连接的网络都出现严重拥堵, 不考虑逻辑上的发送队列的占用,

  如果只是为了跑分 为了并发而优化, 没有常驻的逻辑缓冲区 并且socket的网络吞吐量很小并且负载平滑, 把socket buffer size设置系统最低.

  下单机的TCP连接数有多个参数共同决定,下面一一介绍:最大TCP连接数[...博文来自:的博客

  在去年的2个面试中被问及用过epoll吗?这个肯定没啥说的,不说多精通,但也是熟练;但又被问你实现过的最大并发连接数是多少? -- 这个。。还真没概念,产品和项目里也没很大的并发连接要求,所以,不知道...博文来自:wangcg123的专栏

  WebSocket现在很常用,想要测试tomcat的最大连接数,今天试了一个可行的办法和配置(之前是用全公司的设备一起来测试的,真机环境的测试收到网络的影响很大,其实真实环境应用中,网络才是webso...博文来自:z915412321的博客

  一台机器只利用socket是否可以支持100000并发连接(tcp)?(不是65536)io多路复用到底复用什么?(不是端口复用)...博文来自:p2016的博客

  select的限制用select实现的并发服务器,能达到的并发数一般受两方面限制:1)一个进程能打开的最大文件描述符限制。这可以通过调整内核参数来改变。可以通过ulimit -n(number)来调整...博文来自:NK_test的博客

  windows系统对于ie浏览器的websocket连接数进行了限制,默认大小为6个修改设置方法:开始菜单--运行--gpedit.msc(进入本地组策略编辑器)--用户配置--管理模板--windo...博文来自:iteye_3361的博客

  tcp网络编程tcp网络编程步骤:由于tcp传输特点是可靠有连接,那么就有1.客户端向服务端发送连接请求(SYN),2.服务端接受请求并向客户端发送(SYN+ACK);3.客户端向服务端回复ACK表明...博文来自:sophia__yu的博客

  原文连接:关于TCP服务器最大并发连接数有一种误解就是“因为端口号上限为65535,所以TCP服务器理论上的可承载的最大并发连...

  基于Socket的局域网络通信 基于Socket的局域网络通信 基于Socket的局域网络通信 基于Socket的局域网络通信 基于Socket的局域网络通信 基于Socket的局域网络通信 基于Socket的局域网络通信

  tcp 连接数设置,以及查看电脑的连接数,非常实用tcp 连接数设置,以及查看电脑的连接数,非常实用

  hcmony的博客linux下遇到服务器的网络连接限制数为1024个的原因及修正

  利用Boost::asio写了一个TCP服务器,测试并发数量,发现超过1024个连接就会失败。一开始怀疑asio库的原因(查看了asio的win_fd文件,发现其超过1024个文件描述符之后,会再动态...

  今天准备写一下epoll_timer(即epoll实现的简单定时器,后面会分享blog)由于用到epoll的模型,翻出原先的代码跑了一下,看到原来define的最大的处理用户上限,感觉有些不妥,所以决...

  最近在找工作,无聊,模拟客户端测试一下以前写的一个nio框架:测试机器:Windowxpsp3一:客户端准备:1.修改注册表:因为windows默认只开通0-5000个端口,经测试最多可以连接3900...

  第一讲:多线:进程与线程的描述:进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1~n个线程。(进程是资源分配的最小单位)线程:同一类线程共享代码...

  网络通信 本节将基于socket编写服务器端和客户端,实现网络通信。程序采用MFC对话框框架,在visualstdio2012平台上实现。 程序采用面向对象的方法设计,服务器端由CServerDlg构...

  缺省最大socket连接数是128,因此用MacOSX做服务器可能会遇到[url=

  ulimit查看系统的文件相关限制单个进程最多允许打开的文件句柄数(包括socket连接数)是有限制的,当大于这个系统限制时,程序会抛出大量的无法打开文件的报错。...

  1.网络通信与Socket前言TCP/IP协议族中网络层的IP地址可以唯一标识网络中的主机,而传输层的端口可以唯一标识主机中的应用程序。Socket通常也称作套接字,用于描述I...

  Socket说明socket也称为“套接字”,用来描述IP地址跟端口,是一个通信链的句柄,通过socket来发送网络请求以及接收网络请求。通信流程图服务器代码#includeamp;amp;...

  一直以来很迷惑TOMCAT的连接数,网上也是众说纷纭,所以今天自己专门来测试一下,配置参数请参考:TOMCAT配置参数说明,本人比较懒,所以只测试了BIO和NIO,没有ARP模式(主要是看说的......

  ●TCP和UDP的区别UDP与TCP的主要区别在于UDP不一定提供可靠的数据传输,它不能保证数据准确无误地到达,不过UDP在许多方面非常有效。当程序是要尽快地传输尽可能多的信息时,可以使用UDP。TC...

  linux最近一直再看gstreamer,使用了很多插件和库,虽然我总结了一部分rtsp流程,对于这么大的框架,明显感觉分析不了,比如linuxAPI、Gobject(Glib库)推荐一本入门书籍《l...

  本课程由刘远东、张立铜两位工程师将两人在企业多年积累的开发经验结合而成。从基础的网络知识开始由浅入深地讲解如何使用C++实现一套支持百万级别并发的网络通信引擎。包含:高频并发、多线程、多进程、线程池、...

  实现单机的百万连接,瓶颈有以下几点:1、如何模拟百万连接2、突破局部文件句柄的限制3、突破全局文件句柄的限制在linux系统里面,单个进程打开的句柄数是非常有限的,一条TCP连接就对应一个文件句柄,而...

http://christianiaart.com/siyuanzu/193.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有