|
作者: guang0701 [guang0701] 论坛用户 | 登录 |
复制文件的时候,使用100M的网卡反倒慢了,换网卡就好了,初步判断不是系统的问题,经过查资料发现是某些网卡的设置问题,IEEE 802.3 规范规定,工作站必须等待 9.6 微秒(帧间间隔)后才可以在网线上传输数据。为了获取较高的数据传输率,一些适配器制造商将他们的适配器设计为较小的帧间间隔。这个较小的帧间间隔就可能导致较高的冲突率。 当两个工作站在网线上同时传输数据时,就会产生“冲突”。“早期冲突”是 512 位帧在网线上传输之前产生的任何冲突。在正常运行的 Ethernet 网络上也可能出现早期冲突。硬件没有故障,工作站也没有错误现象。 IEEE 802.3 规范规定,工作站必须等待 9.6 微秒(帧间间隔)后才可以在网线上传输数据。为了获取较高的数据传输率,一些适配器制造商将他们的适配器设计为较小的帧间间隔。这个较小的帧间间隔就可能导致较高的冲突率。 冲突的可能性也受上层协议行为的影响。TCP/IP 规范是收到两个数据帧发送一个 ACK(确认)。也就是说,当 TCP 主机收到两个数据帧后,该 TCP 主机才会向发送方发出一个 ACK。如果已经收到两个数据包的客户端尝试发出一个 ACK,但同时发送方也在尝试向客户端发送更多数据,这种情况下冲突的可能性就比较高。 分析 Windows XP 中的 Windows Explorer 文件复制 使用命令行或 Windows XP 中的 Windows Explorer 启动同一文件复制时,数据传输的模式是不一样的。此种情况下,转发程序将发出一个 60 千字节 (KB) 的“块读取”或“原始读取”。数据传输模式如下所示: 10 CLIENT SERVER SMB C read & X, FID = 0x1004, Read 0xf000 11 SERVER CLIENT SMB R read & X, Read 0xf000 12 SERVER CLIENT NBT SS:Session Message Cont., 1460 Bytes 13 SERVER CLIENT NBT SS:Session Message Cont., 1460 Bytes 14 SERVER CLIENT NBT SS:Session Message Cont., 1460 Bytes 15 SERVER CLIENT NBT SS:Session Message Cont., 1460 Bytes 16 CLIENT SERVER TCP .A...., len:0, seq:404791-404791, ack 17 CLIENT SERVER TCP .A...., len:0, seq:404791-404791, ack 18 SERVER CLIENT NBT SS:Session Message Cont., 1460 Bytes 19 SERVER CLIENT NBT SS:Session Message Cont., 1460 Bytes 20 SERVER CLIENT NBT SS:Session Message Cont., 1460 Bytes TCP 级: 10 CLIENT SERVER TCP len:64, seq:404727-404790, ack: 6992081 >客户端发送 64 字节数据(SMB 命令以读取 4KB); 11 SERVER CLIENT TCP len:1460, seq:6992081-6993540, ack: 404791 >服务器发送 Piggyback ACK,SMB 使用一些数据响应; 12 SERVER CLIENT TCP len:1460, seq:6993541-6995000, ack: 404791 13 SERVER CLIENT TCP len:1460, seq:6995001-6996460, ack: 404791 >服务器将其余数据发送给客户端。 >**可能在此时发生冲突,因为客户端尝试发送 ACK。 14 SERVER CLIENT TCP len:1460, seq:6996461-6997920, ack: 404791 15 SERVER CLIENT TCP len:1460, seq:6997921-6999380, ack: 404791 >但服务器将获得网线使用权并发送更多数据。 16 CLIENT SERVER TCP len:0, seq:404791-404791, ack: 6996461 >客户端将获得网线使用权并针对第 12 帧和第 13 帧数据发送 ACK。 17 CLIENT SERVER TCP len:0, seq:404791-404791, ack: 6999381 >客户端将获得网线使用权并针对第 14 帧和第 15 帧数据发送 ACK。 18 SERVER CLIENT TCP len:1460, seq:6999381-7000840, ack: 404791 19 SERVER CLIENT TCP len:1460, seq:7000841-7002300, ack: 404791 >服务器继续发送数据。 >**可能在此时发生冲突,因为客户端尝试发送 ACK。 20 SERVER CLIENT TCP len:1460, seq:7002301-7003760, ack: 404791 >但服务器将获得网线使用权并发送更多数据。 使用 TCP/IP 协议时,TCP 确认 (ACK) 将会影响冲突。但是,此问题并不是 TCP/IP 或 Windows Explorer 可以进行 60 KB 块读取这项改进引起的。此问题也可以用 FTP 来说明。TCP/IP、转发程序和 Windows Explorer 绝对无法控制帧间间隔。帧间间隔处于物理层,它是由适配器上的芯片控制的。因此,如果您的网络冲突率太高,请联系网络适配器制造商。 解决方案 要解决此问题,请联系您的网络适配器制造商,以了解有关增加帧间间隔的信息。 方法1: Intel EtherExpress 100B 网络适配器有一个注册表参数可以用来控制帧间间隔的长度。如果您使用 Intel EtherExpress 100B 网络适配器,要修改此参数,请执行以下步骤: 启动注册表编辑器 (Regedit.exe)。 在注册表中找到以下注册表键,其中 x 是网络适配器的编号: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\e100bx\Parameters 单击编辑,单击添加数值,然后键入以下信息: 数值名称:Adaptive_ifs 数值类型:REG_DWORD 数据:1(启用自适应算法) 默认情况下,用于检测冲突和调整帧间间隔的自适应算法是启用的。将此数值设置为 0 可以禁用自适应算法。一个介于 2 到 200 之间的数值设置了预定义的帧间间隔。开始时,请将此值设置为 20,然后以 20 为单位逐渐递增。在此过程中,测量冲突次数同时注意性能,然后设置一个具有较小冲突率又不影响性能的最终值。 变通办法: 要解决此问题,您可以创建一个 TcpWindowSize 注册表参数,这样,发送方必须收到接收方的 ACK 才会发送更多数据。进行此更改可减少冲突发生的可能性。按照下列步骤操作: 启动注册表编辑器 (Regedit.exe)。 在注册表中找到下面的项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 单击添加,单击数值,然后添加以下信息: 数值名称:TcpWindowSize 数值类型:REG_DWORD 数据:2920(十进制数)-- 字节数 对于 Ethernet,请将此数值设置为十进制数 2920;对于其他网络拓扑,将其设置为最大 TCP 数据大小的两倍。但是,对于其他网络可以不必修改此设置,因为基于令牌环或“光纤分布数据接口” (FDDI) 的网络的冲突率没有 Ethernet 网络那么高。 请注意,修改此参数可能会严重影响性能。一般说来,根据网络拓扑的不同,广域网 (WAN) 或常规 10 MB 网络上的发送方和接收方之间通常存在一定的滞后。因此,由于 TCP/IP 确认 (ACK) 而导致冲突的可能性是不存在的。此种情况下,调整 TcpWindowSize 只是减少吞吐量。 |
地主 发表时间: 04-07-11 10:50 |
回复: lionet67 [lionet67] 论坛用户 | 登录 |
太长了,看不完啊 |
B1层 发表时间: 04-07-12 08:08 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号