跳转至主要内容

FTP传输速度慢得令人痛苦,交互式登录响应时间过长,明明是100Mbps的网络却只能达到1Mbps的速率。虽然我总爱把问题归咎于网络,但不得不承认有时问题并不出在网络本身。

处理TCP性能问题时,首要排查的是底层以太网故障,其中最常见的问题当属双工模式不匹配。以太网可运行于全双工或半双工模式。全双工模式下,模块适配器与其连接设备(通常为交换机,但非绝对)可同时发送数据;半双工模式则仅允许单向传输。 存在一个时间窗口,双方可能同时认为可以发送数据并执行传输。此时系统会判定发生冲突,双方停止传输,等待随机时长后重试。需要注意的是:当双方均处于半双工模式时,此类冲突不会显著降低网络吞吐量。
在双工不匹配情况下,一方处于全双工模式,而其链路对端处于半双工模式。处于半双工模式的一方可能出现延迟碰撞和过度碰撞,此类错误会显著降低吞吐量。  任何延迟碰撞或过度碰撞都表明存在问题。网络速度下降可能与延迟碰撞和过度碰撞的数量不成比例,因为在双工不匹配状态下,即使是正常的碰撞也会降低吞吐量——由于链路对端无法识别全双工模式下的碰撞,因此不会重传帧。
那么,你如何判断自己是否正经历这种情况?netstat -interface"命令将显示统计信息,使您能够判断是否存在双工不匹配情况。在下面的示例中,活动适配器的统计信息为: #sdlmux.m16.11-3 接口信息已显示。为节省空间,我已移除备用适配器的统计数据,并添加了行号。
如果适配器处于半双工模式,您将在第25行(传输帧被延迟)、第26行(单次重试后传输帧)和第27行(多次重试后传输帧)看到正计数。这些是正常的碰撞计数器。 若在第24行(因延迟碰撞丢弃的发送帧)和/或第28行(因重试次数过多丢弃的发送帧)出现正计数,则可能存在或曾存在双工模式不匹配问题。这些计数器仅在适配器重置时清零,因此正值表明曾发生故障;持续累积的计数值则表明问题尚未解决。 若适配器处于全双工模式,而第32行(接收帧丢弃,CRC错误)显示正值,则链路对端很可能处于半双工模式。
1    netstat -interface #sdlmux.m16.11-3
2
3    Ethernet adapters are grouped
4    Number of failovers = 0
5
6    Active Device Statistics:
7
8
9    MAC Type   : CSMA/CD
10    MAC Address: 00:00:a8:43:52:22
11    Device Name: #sdlmux.m16.11-3
12    Line Speed : 100 mb/s
13    Line Duplex: Full-Duplex
14
15    MAC Statistics:
16     Received frames                          : 20783181
17     Received multicast and broadcast frames : 2984375
18     Received octets                          : 1787913869
19     Transmitted frames                       : 9747015
20     Transmitted octets                       : 2780485819
21     LAN Chipset re-initialized               : 0
22     SQE error                                : 0
23     Transmit ring full                       : 0
24     Transmit frame discarded, late collisions: 0
25     Transmit frame was deferred              : 0
26     Transmit frame after a single retry      : 0
27     Transmit frame after multiple retry      : 0
28     Transmit frame discarded, excessive retry: 0
29     Receive frame discarded, lack of buffers : 0
30     Receive frame discarded, improper framing: 0
31     Receive frame discarded, an overflow     : 0
32     Receive frame discarded, bad CRC         : 674
33     Receive frame discarded, bad address     : 0
34     Receive frame discarded, congestion      : 0
35
36    MAC Summary:
37     Transmitted frames         : 9747015
38     Transmitted octets         : 2780485819
39     Retransmitted frames       : 0
40     Received frames            : 23767556
41     Received octets            : 1787913869
42     Total of lost frames       : 0
43    Partner Device Statistics:
. . . .
ready 08:35:14
您是如何陷入这种双工模式不匹配的状况的?当然,可能出现一种设备配置为全双工模式而链路对端配置为半双工模式的情况,但最常见的场景是:一台设备配置为全双工,而链路对端配置为自动协商模式。 多数设备在全双工模式下不会进行自动协商。根据自动协商规范,当链路对端未响应自动协商协议时,发起协商的一方必须降级至半双工模式。
默认情况下,OpenVOS使用的以太网适配器会自动协商通信模式。因此,除非链路对端也配置为自动协商或半双工模式,否则将出现双工模式不匹配的情况。若需为适配器设置特定双工模式,需添加 “-duplex full” “-duplex half” 在适配器的 devices.tin 条目中,将字符串添加到参数字段。您还必须设置传输速率。《OpenVOS Streams TCP/IP 管理员指南》(R419)对此有详细说明。
最后需要说明的是,如果适配器以1千兆比特运行,则必然处于全双工模式。目前没有任何设备支持半双工千兆位传输。