scoket和浏览器的连接限制
1,一个socket由两个端口唯一确定
“socket连接由双方的端点来决定”
下面作者写了解释,大致就是说:
一个socket是由一对计算机IP(在socket连接打开前还要区分网卡mac地址)加端口号来区分的,因此只要端口不同,那么在两台计算机间就可以存在多个socket连接。
它的原理是:每个socket发送的报文头部含有ip和port信息,接收方服务器的操作系统网络协议层会根据这些信息把TCP报文转发给相应的处理程序。(就像一个分流闸门,把水流根据来源导向到不同的水池)这些底层事情是由socket守护进程和TCP协议层来做的,作者还讲了了一堆c函数。
单从网络角度上看应该是Socket是通过传输层协议进行工作的。在TCP IP协议对应的便是TCP UDP层了。因而Socket也有两种类型:面向连接的TCP socket和面向无连接的UDP socket.
socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用。客户随机申请一个socket (相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的 socket ,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。
2,HTTP协议对并发的建议
HTTP协议中规定了一个特殊规则:浏览器对一个服务器(后来我google到,其实这个限制是精确到域名的)不能同时打开两个以上的端口(即连接)估计这个规则应该是为了保护服务器不会被很容易被洪水攻击。主流浏览器都很乖,实现了这个规则。(我以前还没用FlashGet之前,发现用IE下载一个网站的文件,只能同时打开2个,第三个就需要等待,那时候不了解怎么回事,现在明白了) 。
引用《HTTP协议1.1中文版》
使用持续连接的客户机应限制与某一服务器同时连接的个数。单用户客户机不应与任一服务器或代理服务器保持两个以上的连接。代理服务器与其它服务器或代理之间应维护2*N个连接,其中N是同时在线的用户数。设定这一规则是为了改进HTTP应答时间且避免拥塞。(规范中用的是“应该”这个字眼,HTTP无法从协议本身来限制连接。这个是取决于客户端和服务端的实现。)
火狐中各种不同的连接数限制设置
:
总连线上限是这个: network.http.max-connections
每一Server是这个: network.http.max-connections-per-server
Keep-Alive(持续连线不中断的限制连接数)是这个: network.http.max-persistent-connections-per-server
Proxy Keep-Alive是这个: network.http.max-persistent-connections-per-proxy
同时应该注意的一点是现在的浏览器随着版本升级连接数限制也是在逐渐放开中,应该与现在硬件软件技术和网路技术发展有关了,可以实现对网络更加充分利用。