关“半开连接数”的那些事儿

引子

  至少在3年以前,包括迅雷在内的很多下载软件都提供了"修改(破解)操作系统'TCP半开连接'数量限制(简称"半开连接数")"的功能,但是有部分用户并没有正确的理解这玩意儿。

 

 

什么是"TCP半开连接"及"限制"?

  所谓"TCP半开连接",简单的说就是发起了TCP连接请求,但尚处于建立连接阶段,双方还无法进行互相通信的状态。

 

  那么"TCP半开连接数量限制"就是指,限制连接发起者最多同时存在"TCP半开连接"的数量。

 

  在Windows XP
SP2中,微软首次引入了半开连接数限制,限制数量:10。限制包括了后续的XP
SP3、Windows 2003、Windows Vista 、Vista SP1。

 

【但是微软在Windows
7、Vista SP2、Windows
2008中没有启用半开连接限制】

 

 

为什么要修改"TCP半开连接"限制,这样的限制会导致什么?

一、连接多资源的效率降低

 

  如果我们将上面"建立连接阶段"比喻为正在食堂打饭的顾客,就容易理解多了。

 

1、TCP半开连接被限制为10,就相当于这座食堂有10个窗口可以同时打饭。

 

2、系统有大量,远超过10个建立TCP连接的请求,就相当于这座食堂有很多顾客光顾,却不得不排队等着前面那10位顾客打饭。

 

  显而易见的,TCP半开连接数限制导致建立TCP连接的效率降低了。套用到下载工具上,由于迅雷下载时可能存在大量需要通过TCP连接进行下载的候选资源,因此就导致连接多资源的效率降低了。

 

二、当某程序占满区区10个半开连接后,将影响其他应用程序发起TCP连接请求

 

  假设发起连接请求的是都是同一个程序(比如"迅雷"),这时其他程序(比如"浏览器")的发起连接请求也得排队,由于排队的耗时。就出现了使用迅雷下载时,打不开网页或打开变慢的情况。

 

 

微软为什么限制"TCP半开连接"数量?

  按照伊文的理解,限制"TCP半开连接"数量的原因,是微软为了防范类似"冲击波病毒"爆发时。受感染的机器发起成百上千的连接,攻击其他计算机的情况。

 

  但是前文中提到"微软在Windows
7、Vista SP2、Windows
2008中没有启用半开连接限制",但仍保留了限制机制。可能是因为微软决定在正常情况中无必要限制半开连接数量,当情况变化(例如类似病毒爆发)微软可能会重新开启半开连接数限制。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据