打印

[软件] 由修改TCP连接数想到的

最近一段时间在BBS上,看到了许多关于TCP连接数的讨论。其中有以理论为重的研究者的言论,也有以实用感受为重的使用者感想,无论是哪一种论调,都让我涨了知识,对TCP半开连接数有了一定的了解。于是,我也在自己的BLOG上发表一下自己的想法。

首先,无论是XP或VISTA系统中所作的连接数限制并不是限制系统的TCP的连接数量,而是TCP 的半开连接数。所谓TCP半开连接,就是发送了TCP连接请求,等待对方应答的状态(也就是连接尚未完全建立起来,双方还无法进行通信交互的状态。)

这里要说一个概念:
引用:
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。上述是一个完整的TCP连接过程。
在完成三次握手之后,TCP连接已经建立,那么对系统来说,这就是一个TCP连接数。系统对这样一个 没有限制。
如果三次握手没有完成,客户端与服务器没有开始传送数据,那么,这样试图完成三次握手的事件发生 的 是被系统所限制的。而这个数就是所谓的半开连接数了。
引用:
为什么一开BT就超级慢呢.问题的根本在于BT是频繁的建立TCP连接.并且是同时建立.所以导致有大量的SYN包.
TCP是Layer 4.从技术角度说是非常耗费资源的.无论是系统资源还是网络资源.在同时并发1000个左右的连接请求的时候.
你可以想象你的网络带宽里都充斥着SYN包.所以频繁建立TCP连接才是让BT影响网络的根本原因.
下面再说两个概念:一是系统所限制的TCP半开连接数,二是P2P软件所设定的TCP半开连接数。

我先举个例子:相信大家都上过高速,走过收费站。我在过江阴大桥的时候会经过一个收费站,那里大概有十几二十个收费通道。我把这个收费通道比做TCP半开连接数。这里需要做个说明:不考虑已经建立会话的TCP连接,把收费站理想地当成半开连接数发生的地方。

比如,这里的收费站只有20个通道(即系统限制的TCP半开连接数为20),同时最多只有有10辆车可以要求过收费站。但是如果此时有100辆车要求同时过收费站,那么必须在收费站再新建立80个收费通道(假设这样通道可以随时被建立起来),但这样就超出了限制,不会被允许。

同样的,P2P软件所设定的TCP半开连接数超过了系统所限制的数量,它们在下载文件的时候不断建立新的半开连接,系统自然会给出EventID 4226事件警告。

遇过这种情况应该怎么办呢?要做三个修改:一是修改系统所限制的TCP半开连接数,二是修改P2P软件所设定的TCP半开连接数,三是修改P2P软件所允许的最大TCP连接数(已经开始传送数据的连接数量)。

一是修改系统所限制的TCP半开连接数

相信大家应该都在高速上堵过车,我最惨的一次是从上海回来,原本2个小时的车程,硬是花去我9个多小时的时间。但今年五一过江阴大桥的时候,在收费站没有收费就过去了,当时还高兴一下,但很快就发现,离收费站不远的地方设立一个临时收费站,这个地方比较宽,增加几个收费通道,实在有利于车辆的快速流通的有效措施。

这里所做的临时措施就相当于修改系统的TCP半开连接数限制了,当然修改系统文件并不是每个人都可以的,但网络上的修改工具到处都是。修改了TCP半开连接数限制,可以帮助更快地找到你需要的连接来下载文件。就BT下载而言,我们需要的是优良的种子和对方给我们的下载速度。

二是修改P2P软件所设定的TCP半开连接数

我们也不能把系统所限制的TCP半开连接数改得过大。因为每进行一次半开连接都会系统(包括路由器、防火墙、操作系统等)引入额外的开销,过多的半开连接数只会导致系统资源紧张、不稳定甚至崩溃,反而会影响网络的实际传输。其实这个才是影响BT下载时不能浏览网页的主要因素。再者,可能会被黑客利用,散布虚假资源信息或进行DDoS攻击等手段。虽然我还没有碰到过类似的攻击,但不得不防啊。

三是修改P2P软件所允许的最大TCP连接数

这里补充一下:无论是否修改系统所限制的半开连接数,都不会对下载文件的最高速率有影响。也就是说,不会提高下载的最高速率。

如果已经建立了适当的连接,就没必要拥有更多的连接,这样反而可能造成网络负担。

到这里有人就说了,你说了半天又是在说废话。是啊,每个人的硬件和网络环境不一样,实在很难拿出一个两全的方案。那我就说一下我的情况吧:

我现在的操作系统是VISTA SP1,也破解了TCP半开连接数限制。不过,这个破解工具很好(远景论坛的),可以实时查看当前的连接有多少。我先是将半开连接数的限制修改到无限大,然后在下载文件的时候实时查看。在高速下载的情况下我发现,连接数有时候很少,只有4或者5;而有时候很大,会有113左右。所以,我重新将我的半开连接数限制改为了100。同样的,我也将P2P软件的半开连接数和连接数也要重新设置,这样也不会有4226事件了。

耳语:
欢迎诸位看官交流!希望不要攻击我,我心灵脆弱的说。
耳朵不在西 www.windsn.com

[ 本帖最后由 sunset 于 2008-5-23 11:33 编辑 ]

TOP

我一般都在迅雷中把它改成1024
乘天地之正,御六气之辩,以游于无穷,谓之逍遥。

TOP

恩。改成和内存一样大。
别进这里:Www.Ciker.Net 论坛十大菜子。

TOP

如果文章是楼主原创的.我是很支持楼主发自己查询和思考后的作品.
不过.楼主很明显对TCP的基础三次握手不是很清楚.同时引用的内容也是概念不清.中英文术语混杂.很乱.

比如这句: "TCP 的半开连接数(或称TCP并发连接数)"就明显的不知所云!
"TCP半开连接"是否是指TCP Session没有完成?比如SYN后没有ACK.或者ACK-RECV?
那既然TCP Session都没有完成?根本就没有完成3次握手.那就根本不是一个Session.那何谈"TCP并发连接数"?

总的说来其实文章就是一个意思.WINDOWS XP只允许同一时间内有10个Send TCP SYN.
换句话说.同时只能新建10个TCP请求.而对于已经建立的(已经完成3次握手的)TCP Session的数量则不做限制.

其实概念应该是2个.一个是: 新建会话数! 另外一个是: 并发连接数!

我想.应该是这个意思吧?套用楼主的中文术语.XP只支持同时新建会话数10个.对于已经完成的连接.并发数没有限制.
www.Reistlin.com

TOP

多谢雷斯林的批评。

写这篇之前没有翻阅相关资料,并且将以前所学习的内容忘记了。
我的确是把半开连接数和TCP并发连接数搞混淆了。或者说根本没有并发连接数的概念。

半开连接的情况应该是TCP的三次握手没有完成,处于请求会话状态。不知道这样理解对不对?

[ 本帖最后由 sunset 于 2008-5-22 23:33 编辑 ]

TOP

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。上述是一个完整的TCP连接过程。
www.Reistlin.com

TOP

谢谢这么晚 还在帮助回复,让我详细理解TCP连接的基本情况
我在写这篇东西的时候,试图用非专业的词汇描述出连接情况,但因为对知识的认识不到位而写的混淆。
我现现在的理解是这样的:

完成三次握手之后,TCP连接已经建立,那么对系统来说,这就是一个TCP连接数。系统对这样一个 数 没有限制。
如果三次握手没有完成,客户端与服务器没有开始传送数据,那么,这样试图完成三次握手的事件发生 的数 是被系统所限制的。

如果上面的理解是正确的话,那么我在文中所举的例子就不恰当了吧。或者如果硬是要用收费站作比喻的话,必须先假定TCP连接之后的数据传送都是瞬间完成,然后要重新请求建立。但我有觉得这样一个假定不合理,不知道对不对?

TOP

刚打玩魔兽上来看看.恩.没错.你理解的没错.其实BT下载对带宽的影响不大.我说的带宽是throughput rate.
为什么一开BT就超级慢呢.问题的根本在于BT是频繁的建立TCP连接.并且是同时建立.所以导致有大量的SYN包.
TCP是Layer 4.从技术角度说是非常耗费资源的.无论是系统资源还是网络资源.在同时并发1000个左右的连接请求的时候.
你可以想象你的网络带宽里都充斥着SYN包.所以频繁建立TCP连接才是让BT影响网络的根本原因.

如果你把BT的硬性连接限制设置为50.那你开BT跟开Flashget就差不多了.
www.Reistlin.com

TOP

多谢肯定!
我重新修改了文字,还请帮我再看看。

TOP

自己明白就成了.论坛嘛.不用太当真.玩玩而已.
www.Reistlin.com

TOP

哈哈,了解

TOP

引用:
原帖由 REISTLIN 于 2008-5-23 12:14 发表
自己明白就成了.论坛嘛.不用太当真.玩玩而已.
你就不怕教坏下一代啊。
我正在看这文章,如果我不看下面的回复,就误导了。所以说不能玩玩。
域名空间,服务器安全 QQ:5515804
www.fsecn.com

TOP