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/CD10 MAC Address: 00:00:a8:43:52:2211 Device Name: #sdlmux.m16.11-312 Line Speed : 100 mb/s13 Line Duplex: Full-Duplex1415 MAC Statistics:16 Received frames : 2078318117 Received multicast and broadcast frames : 298437518 Received octets : 178791386919 Transmitted frames : 974701520 Transmitted octets : 278048581921 LAN Chipset re-initialized : 022 SQE error : 023 Transmit ring full : 024 Transmit frame discarded, late collisions: 025 Transmit frame was deferred : 026 Transmit frame after a single retry : 027 Transmit frame after multiple retry : 028 Transmit frame discarded, excessive retry: 029 Receive frame discarded, lack of buffers : 030 Receive frame discarded, improper framing: 031 Receive frame discarded, an overflow : 032 Receive frame discarded, bad CRC : 67433 Receive frame discarded, bad address : 034 Receive frame discarded, congestion : 035 36 MAC Summary:37 Transmitted frames : 974701538 Transmitted octets : 278048581939 Retransmitted frames : 040 Received frames : 2376755641 Received octets : 178791386942 Total of lost frames : 043 Partner Device Statistics: . . . . ready 08:35:14您是如何陷入这种双工模式不匹配的状况的?当然,可能出现一种设备配置为全双工模式而链路对端配置为半双工模式的情况,但最常见的场景是:一台设备配置为全双工,而链路对端配置为自动协商模式。 多数设备在全双工模式下不会进行自动协商。根据自动协商规范,当链路对端未响应自动协商协议时,发起协商的一方必须降级至半双工模式。
默认情况下,OpenVOS使用的以太网适配器会自动协商通信模式。因此,除非链路对端也配置为自动协商或半双工模式,否则将出现双工模式不匹配的情况。若需为适配器设置特定双工模式,需添加
“-duplex full” 或 “-duplex half” 在适配器的 devices.tin 条目中,将字符串添加到参数字段。您还必须设置传输速率。《OpenVOS Streams TCP/IP 管理员指南》(R419)对此有详细说明。最后需要说明的是,如果适配器以1千兆比特运行,则必然处于全双工模式。目前没有任何设备支持半双工千兆位传输。
