1、什么是TCP Window
TCP协议在能够发送数据之前就建立起了“连接”。要实现这个连接,启动TCP连接的那一方首先将发送一个SYN数据包。这只是一个不包含数据的数据包, 然后,打开SYN标记。如果另一方同时在它收到SYN标记的端口通话,它将发回一个SYN+ACK:SYN和ACK标志位都被打开,并将ACK(确认)编 号字段设定为刚收到的那个数据包的顺序号字段的值。接下来,连接发起方为了表示收到了这个SYN+ACK信息,会向发送方发送一个最终的确认信息(ACK 包)。这种SYN、SYN+ACK、ACK的步骤被称为TCP连接建立时的“三次握手”。在这之后,连接就建立起来了。这个连接将一直保持活动状态,直到 超时或者任何一方发出一个FIN(结束)信号。
任何一方都可以关闭一个TCP连接,要求双方发送一个FIN信号关闭自己的通讯频道。一方可以在另 一方之前关闭,或者双方同时关闭TCP连接。因此,当一方发送一个FIN信号时,另一方可发送“FIN+ACK”,开始关闭自己一方的通信并且确认收到了 第一个FIN信号。发送第一个FIN信号的人接下来再发送一个“FIN+ACK”信息,确认收到第二个FIN信号。另一方就知道这个连接已经关闭了,并且 关闭了自己的连接。发送第一个FIN的人没有办法收到最后一个ACK信号的确认信息。这时它会进入“TIME_WAIT”(等待时间)状态并启动一个定时 器,防止另一方没有收到ACK信息并且认为连接仍是打开的。一般来说,这个状态会持续1至2分钟。
现在,我们来讨论第一个问题。如果有人(假如一 个黑客)在你的Web服务器上留下一个半开或者半关的连接,那就是一个坏消息。每一个连接都要消耗内存,打开数千个虚假的TCP连接可能导致服务器瘫痪。 当然,你实际上不可能在不影响TCP正常工作的情况下调整TCP定时器。如果你听说过TCP SYN 攻击的话,那就是这个意思。为了防止出现这种情况,大多数操作系统都要限制半开连接的数量。例如,Linux默认的限制一般是256个。
关于持续 流控制问题,现在我们就来讨论这个问题。TCP中实现它的机制是TCP滑动窗口机制。TCP协议使用“重新发送与正向ACK”来保证数据传输的可靠性。发 送方将等待一段时间,如果没有收到其发送的数据包的ACK确认信息,发送方就要重新发送。顺便说一下,TCP协议中有许多定时器。这只是其中一个定时器。 ACK的概念对于流控制是非常重要的,因为TCP滑动窗口协议使TCP的往复确认变得更有效率。如果TCP要发送一个数据包并且等待每一个ACK确认信 息,它实际上就把数据吞吐量削减了一半。
理想的情况是,我们能够一次发送许多数据包,然后等待收到一个确认收到全部数据包的ACK信息,而不用对 方发来更多的数据。但是,我们如何知道发送了多少个数据包呢?TCP窗口尺寸可以控制在“已发送但是没有确认”的状态下能够容纳多少个数据包。如果这个窗 口尺寸很大,我们不必等待ACK信息就可以发送大量的数据包。这实际上就是流控制。
接收方就是控制窗口大小的那一方。如果接收方将窗口大小设为 “0”,那么,发送方根本就不能发送任何数据。如果这个窗口的尺寸是“1”,那么,我们就回到了简单的“发送和等待ACK”的协议。如果最后的窗口尺寸是 “0”,发送者将发出一个探测信号以搞清这个窗口什么时间再次打开。如果发送方从来没有收到ACK信息,它就一直不断地重试,直到定时器过期。请记住,这 个窗口尺寸在TCP头中是一个16位字段。如果你要一个窗口尺寸(按字节计算)大于16位可以表示的容量(2的16次方个字节),还可以使用一个名为“窗 口缩放”的TCP协议选项。这个选项允许窗口尺寸乘以比例因子。如果没有极大的窗口尺寸,TCP协议就就无法充分利用GB级别的高速连接。这也是我们需要 针对这些新的高速连接调整TCP参数的原因,
关于TCP流控制的问题,我们不能不提一下Nagle算法。如果我们在一个telnet连接上使用一 个大的TCP窗口会发生什么事情呢?你会输入一个指令(例如敲了一个字母),然后一直等待回应它却迟迟不出现在终端回显上。这对于实时通信来说是一个大问 题。而且,telnet也会增加网络的阻塞度,因为一个字节的数据(例如我们的一次击键)需要40个字节的包头。于是RFC 896定义这个Nagle算法,用以消除小的数据包。这个思路是我们应该在数据发送之前给先把小数据集中起来然后一次性发送,以便提高效率。为了更有效 率,它还限定只允许存在一个未经确认的数据段,你在得到确认信息之前不能发送更多的数据。Telnet和互动SSH连接使用TCP_NODELAY套接口 选项启用这个功能,这样当你按下一个按键的时候,你能够立即得到一个回应。
当然,我们仍是忽略了有关TCP协议的许多事情。然而,通过这两篇文章的了解,你应该能够理解其它一些更专业的TCP著作。阻塞控制与流控制不同,本文没有讨论。如果你真的对了解TCP协议的全部工作原理感兴趣,你可以详细阅读TCP RFC。
小结
TCP 协议非常善于解决流控制问题,因此非常适应于许多应用程序。TCP协议中的流控制的含义是:“在收到对发送的数据的确认信息这前,我可以发送多少数据?” 这就是TCP窗口。学习阻塞控制的问题可以留作读者的练习。需要指出的是,在TCP协议之下连接速度开始很慢,然后速度逐渐加快。这个做法并不总是最理想 的。
2、如何修改windows服务器最大的tcp连接数
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters\TcpTimedWaitDelay to 30and HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters\MaxUserPort to 65534and rebooting the machineSee the readme.doc file for more information通过网络搜索介绍最多的还是让修改TimedWaitDelay 和MaxUserPort这2个值,其中是将TimedWaitDelay修改的相对小点,可以根据实际情况来定,同时将MaxUserPort这个值修改大些,但是修改完并重启机器后,该问题仍然存在,通过多方查资料,然后对一些注册表进行修改:[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] TcpNumConnections = 0x00fffffe (Default = 16,777,214) 以上注册表信息配置单机的最大允许的TCP连接数,默认为 16M。这个数值看似很大,这个并不是限制最大连接数的唯一条件,还有其他条件会限制到TCP 连接的最大连接数。 最大动态端口数 TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 个Socket 连接。我们可以修改如下注册表来调整这个动态端口的范围 [HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] MaxUserPort = 5000 (Default = 5000, Max = 65534) 最大TCB 数量 系统为每个TCP 连接分配一个TCP 控制块(TCP control block or TCB),这个控制块用于缓存TCP连接的一些参数,每个TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就说,每个TCP连接会占用 1KB 的系统内存。 系统的最大TCB数量由如下注册表设置决定 [HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro = 1000, Srv=2000) 非Server版本,MaxFreeTcbs 的默认值为1000 (64M 以上物理内存) Server 版本,这个的默认值为 2000。 也就是说,默认情况下,Server 版本最多同时可以建立并保持2000个TCP 连接。 最大TCB Hash table 数量 TCB 是通过Hash table 来管理的,下面注册表设置决定了这个Hash table 的大小 HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters] MaxHashTableSize = 512 (Default = 512, Range = 64-65536) 这个值指明分配 pagepool 内存的数量,也就是说,如果MaxFreeTcbs = 1000 , 则 pagepool 的内存数量为 500KB 那么 MaxHashTableSize 应大于 500 才行。这个数量越大,则Hash table 的冗余度就越高,每次分配和查找 TCP 连接用时就越少。这个值必须是2的幂,且最大为65536. MaxUserPort = 65534 (Decimal) MaxHashTableSize = 65536 (Decimal) MaxFreeTcbs = 16000 (Decimal) 这里我们可以看到 MaxHashTableSize 被配置为比MaxFreeTcbs 大4倍,这样可以大大增加TCP建立的速度。
3、什么是TCP Window
TCP协议的数据传输需要ACK来确认,但是考虑数据在网络传输的RTT,如果发送端每发送下一个数据包之前都要收到接收方的ACK才行,这样会严重影响TCP的传输带宽。
所以就有TCP window的概念,如果TCP接收方通过TCP WINDOW告诉发送方自己的TCP WINDOW size,那么发送方就可以一口气最多发送TCP WINDOW size大小的数据包,而不用每次发送都要等对方ACK。这样可以大大加快TCP的传出带宽。
4、什么是TCP Window
简单来说, TCP Receive Window是在TCP连接两端都有的缓冲区, 用于暂时保存到来的数据. 在这个缓冲区中的数据会被发送到应用程序中, 为新到来的数据腾出空间. 如果这个缓冲满了, 那么数据的接收方会警告发送方在缓冲去清空之前已经不能在收取更多的数据了.
这其中涉及到一些细节, 但那都是很基本的东西.
一般, 设备会在TCP Header信息中通知对方当前它的TCPWindows的大小.
5、如何修改windows服务器最大的tcp连接数
众所周知,为了防范蠕虫病毒的传播和攻击,Windows XP SP2将并发线程最多限制为10个。SP2利用Messages动态链接库,来实时监控每个进程的并发线程数目,一旦它发现某进程的线程数超过10个,就会屏蔽掉部分线程。SP2这样做,虽然可以防范震荡波类型的蠕虫病毒,加强系统安全,但是也带了一些负面影响,例如当你使用BT、P2P或FlashGet软件下载时,部分线程将被屏蔽掉,因此下载速度会变得很慢。为此,你可以采取以下对策,来突破TCP并发连接数,从而提高SP2的多线程访问速度。
一、注册表修改法的误区
为了突破SP2对TCP并发连接数的限制,网上曾经流传过一种修改注册表的方法,操作步骤如下:
单击“开始”/运行,输入Regedit打开注册表,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,修改的“TcpNumConnections”的键值,将之由10改为250,即设置TCP最大并发连接数为250。
经过实际测试,我们发现该方法看起来有效,但实质上并不能突破并发连接数限制,提高SP2的多线程访问速度。因为SP2对线程数目的控制,是通过“Tcpip.sys”这个系统文件来实现的,并不是通过注册表实现的,因此,该方法不能增加SP2的TCP并发连接数。
二、使用工具来替换Tcpip.sys
为了突破SP2的TCP并发连接数限制,正确地方法是修改Windows XP SP2的系统文件Tcpip.sys。Tcpip.sys是Windows XP SP2重要的系统文件,位于“C:\Windows\system32\drivers目录下。该文件由于平时受到系统保护,所以正常情况下你是无法替换它的,必须在安全模式或纯DOS模式下才能替换,建议你使用以下专门工具、来替换“Tcpip.sys”文件,操作步骤如下:
从网上下载替换工具(仅为30KB),用它来修改系统文件Tcpip.sys最大安全并发连接限制;然后备份一下C:\Windows\system32\drivers\Tcpip.sys文件。
接下来,双击打开下载文件ZIP压缩包,运行其中的替换工具EvID4226Patch.exe,随之将弹出一个命令行提示符窗口,首先显示Windows当前的Tcpip.sys文件版本,以及并发连接的限制数值(默认为10);接着询问你是否将连接数限制在50(如下图1),你可以选择“Yes/No/Change”,如果你输入“Y”,则会将并发连接数改为“50”,如果想改为其他数(例如250),可以在提示符后输入“c”,然后输入最大的并发连接数(例如250)回车,最后在提示符下输入“Y”并回车,这样就替换了Tcpip.sys文件;Tcpip.sys文件被替换后,随之会弹出系统文件保护对话框,你可以点击“取消”按钮,然后点击“是”按钮,重新启动后,Tcpip.sys文件的替换就大功告成了!
现在你的最大并发连接数已超过10个,达到了250个,因此Windows XP SP2的多线程访问速度得到了提升,当你用FlashGet、BT等多线程下载时,就不会感到网络带宽的限制了。
三、DOS下修改Tcpip.sys文件
以上替换程序EvID4226Patch.exe也可以在DOS下使用,方法是:首先把EvID4226Patch.exe拷贝到C盘根目录下;然后再进入DOS模式,进入C盘根目录,输入命令EvID4226Patch/L=$n$/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可修改Tcpip.sys文件。
注意:以上$n$为你要设置的最大安全连接数,假如要把最大并发连接数设置为250个线程,那么输入命令EvID4226Patch/L=150/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可。
四、使用比特精灵附带的工具
比特精灵附带的工具“TCP/IP连接数破解补丁”也可以替换Tcpip.sys,突破SP2的TCP并发连接数限制。
从网上下载比特精灵(BitSpirit)V2.7.2.225简体中文正式版,然后双击下载文件进行安装。你可以选择安装哪些组件(下图2),应该安装“用于Windows XP SP2的TCP/IP连接数破解补丁”,安装结束后,XP开始菜单中就会有BitSpirit程序组,单击其中的“XP SP2连接数破解补丁”,即可修改Tcpip.sys文件。
单击“XP SP2连接数破解补丁”,弹出该软件的界面,界面中列出了当前Tcpip.sys的版本、及最大并发连接数(右图3),你可以在“TCP/IP Linitation”输入一个数,来设置最大并发连接数,例如输入250,然后按“Apply”按钮,重启系统后,你的SP2最大并发连接数就改为了250。
以上几种方法虽然提高了Windows XP SP2的多线程访问速度,但却降低了SP2的安全性能,如果你的电脑感染了病毒和木马,过多地启用新线程,会加速病毒和木马地蔓延,因此你在追求网络下载速度的同时,也要注意网络安全。建议你及时安装升级杀毒软件和防火墙,如果是普通用户,可以利用上面的方法,将TCP最大并发连接数设置为5~8,BT用户可以设置为160~400。
6、什么是TCP Window
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内[1] 另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。[1]
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元([1] MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体[1] 的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。[1]
7、怎样修改windows服务器中最大的tcp连接数?
在做性能测试测试时候,如果被测试的系统页面很简单,并且性能很好,这样会导致压力机得tcp链接数不够而导致如下错误:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters\TcpTimedWaitDelay to 30
and HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters\MaxUserPort to 65534
and rebooting the machine
See the readme.doc file for more information
通过百度搜索介绍最多的还是让修改TimedWaitDelay 和MaxUserPort这2个值,其中是将TimedWaitDelay修改的相对小点,可以根据实际情况来定,
同时将MaxUserPort这个值修改大些,但是修改完并重启机器后,该问题仍然存在,通过多方查资料,然后对一些注册表进行修改:
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
TcpNumConnections = 0x00fffffe (Default = 16,777,214)
以上注册表信息配置单机的最大允许的TCP连接数,默认为 16M。这个数值看似很大,这个并不是限制最大连接数的唯一条件,还有其他条件会限制到TCP 连接的最大连接数。
最大动态端口数
TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 个Socket 连接。我们可以修改如下注册表来调整这个动态端口的范围
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxUserPort = 5000 (Default = 5000, Max = 65534)
最大TCB 数量
系统为每个TCP 连接分配一个TCP 控制块(TCP control block or TCB),这个控制块用于缓存TCP连接的一些参数,每个TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就说,每个TCP连接会占用 1KB 的系统内存。
系统的最大TCB数量由如下注册表设置决定
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro = 1000, Srv=2000)
非Server版本,MaxFreeTcbs 的默认值为1000 (64M 以上物理内存)
Server 版本,这个的默认值为 2000。
也就是说,默认情况下,Server 版本最多同时可以建立并保持2000个TCP 连接。
最大TCB Hash table 数量
TCB 是通过Hash table 来管理的,下面注册表设置决定了这个Hash table 的大小
HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters]
MaxHashTableSize = 512 (Default = 512, Range = 64-65536)
这个值指明分配 pagepool 内存的数量,也就是说,如果MaxFreeTcbs = 1000 , 则 pagepool 的内存数量为 500KB
那么 MaxHashTableSize 应大于 500 才行。这个数量越大,则Hash table 的冗余度就越高,每次分配和查找 TCP 连接用时就越少。这个值必须是2的幂,且最大为65536.
MaxUserPort = 65534 (Decimal)
MaxHashTableSize = 65536 (Decimal)
MaxFreeTcbs = 16000 (Decimal)
这里我们可以看到 MaxHashTableSize 被配置为比MaxFreeTcbs 大4倍,这样可以大大增加TCP建立的速度。
8、如何修改windows服务器最大的tcp连接数
去注册表来:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新建以下自项(类型为:DWORD 值,选择十进制)
MaxUserPort=65534
重启服务器即可。
9、windows7如何开启TCP/IP
1. 右键点 网络(桌面)——属性——更改适配器设置(左上角),详细见图
2. 本地连接、无线连接和宽带等等的都在这儿,右键属性就有了
用IP4就行了 IP6不用动 吧他设置成自动的获取
以下和XP一样 注意是IP 4
下来解释一下这里的复选框都代表些什么:
自动获得IP地址(O):选择此项后,每次开机系统将从DHCP服务器上自动分配到一个动态IP地址,这个地址是公网IP地址,也就是本地计算机在广域网中的地址信息;
使用下面的IP地址(S):选择此项后,需要进行一系列的IP地址配置,主要用于配置局域网IP地址;
IP地址(I):本地计算机在局域网中的IP地址,这个IP地址必须在默认网关允许的字段范围之内,比如说默认网关(路由器)只认为在 192.168.0.1~192.168.0.255字段之间合法,那么IP地址(I)就只能在该字段之内,本文所讲的修改IP地址就是指的修改这串局域 网IP地址的最后一位数值,它可以在1~255之间任意改动,但任何时候最后一个字段都不能超过255;
子网掩码(U): 用于声明哪些字段属于公网位标识,哪些字段属于局域网位标识,默认都为255.255.255.0;解释一下,前面三个255表示在公网中的位标识,这三 个字段只能在255数值之内,而最后的一个0表示在局域网中的位标识,局域网位标识也只能在255数值之内;
默认网关(D):所处的局域网服务器的IP地址(路由器的IP地址),通常局域网服务器(路由器)的默认IP地址为192.168.0.1或192.168.1.1;
自动获得DNS服务器地址(B):跟自动获得IP地址一样,选择此项后,每次开机DHCP服务器都会为计算机分配一个合适的DNS解析服务器IP地址;
使用下面的DNS服务器地址(E):可以手动添加当地的DNS服务器解析地址,但在使用路由器的情况下可以不用设置,直接为空,因为通常路由器 自带开启DHCP服务器自动分配的功能,每次开启路由器,DHCP服务器都会向路由器分配一个合适的DNS解析地址,该地址保存在路由器中;
首选DNS服务器(P):手动设置默认的DNS服务器解析地址,用于每次开机计算机会向该DNS服务器请求分配一个IP地址;
备用DNS服务器(A):手动设置的备用DNS服务器解析地址,一旦首选DNS服务器无法分配IP地址时,就会向备用DNS服务器发出分配请求;
最后点击确定即可修改ip地址了,IP地址更改完毕之后需要重新启动计算机;
10、什么是TCP Window
前些天刚回答过同抄样的袭问题,应该多利用搜索功能,很少有得不到答案的问题。
如图,TCP的window段,也就是窗体字段,占16位,窗体字段用来控制对方发送的数据量,单位为字节。TCP连接的一端依据设置的缓存空间大小确定
自己的接收窗体大小,然后通知对方以确定对方的发送窗体的上限。一般来说,双方通过告知对方这个值的大小,保证数据高速,可靠传输,网上关于这个值的应用
的文章很多,可以查一下,一般来说,这个值对于提高传输效率方面的研究非常有价值