五、以太网速率计算
我们通常所说的10M、100M,1000M、10GE,这些都是指物理介质每秒可以传送多少bit的数据。在我们实际中经常使用每秒传送实际数据帧的数目即PPS(packets per second)来表示报文的速率。下面介绍对于以太网来说如何进行链路速率与pps之间的换算。
以太网传送数据时,每两个帧之间存在帧间隙IFG(Inter Frame Gap),帧间隙的作用是使介质中的信号处于稳定状态,同时让帧接收者对接收的帧作必要的处理(如调整缓存取的指针、更新计数、发中断让主机对报文进行处理)。对于Ethernet(10M)帧间隙时间为9.6usec,100M快速以太网帧间隙为0.96usec,1000M帧间隙为0.096usec,10GE帧间隙为0.0096usec,这个时间正好相当于传送96bit数据的时间。
下面我们看怎么把以太网速率与pps进行换算,假设数据帧的长度为 k bytes(包括CRC),端口速率为R,转化后的PPS为N,那么:
N=R/(k×8+8×8+96)
其中k×8表示实际数据帧的长度(bits),8×8表示前导码(Preamble+SFD)的长度,96bit相当于帧间隙占用的bits。
下面举例说明,假设端口速率为100M,发送数据帧的长度为64字节,那么线速发送报文换算成pps后,
N=100 000 000/(64×8+8×8+96)≈148810 pps
六、半双工、全双工、自协商
在10BASE5和10BASE2的总线型拓扑中,同一时刻只能有一个节点发送数据。随着10BASE-T和hub的出现,网络节点的连接变成了点到点的连接。在节点之间点到点连接中,同一节点同一时刻只能接收或发送数据,不能同时接收、发送数据。这种同一时刻只能接收或发送数据的工作模式为半双工模式。在半双工模式下,使用CSMA/CD的机制来避免冲突。
全双工模式下,同一时刻可以同时接收和发送数据帧。
自协商功能允许一个网络设备能够将自己所支持的工作模式信息传达给网络上的对端,并接收对方可能传递过来的相应信息。对于两端处于自协商工作方式的设备,最终协商的结果是采用二者技术能力域中优先级低的网口提供的工作方式工作。协商级别一般为1000Mfull,1000Mhalf,100Mfull,100Mhalf,10Mfull,10Mhalf。
10BASE-T的以太网接口(它只支持10M,不支持自协商)在链路UP之前会发送Link Test Pulse(LTP),该脉冲用以检测链路是否应该UP;而100BASE-T以太网接口(它只支持100M,不支持自协商)在链路UP之前会发送FAST ETHERNET IDLE流,用以检测链路是否应该UP。
支持自协商(Autonegotiation)的以太网接口则在链路UP之前发送FLP(Fast Link Pulse),FLP实际上是一组LTP和数据脉冲的组合,它们表明一种含义:例如我支持100M全双工。较旧的设备例如10BASE-T仍然将这些FLP识别为LTP,而自协商设备则能够识别FLP的含义并通过交互这种握手信息来使链路成为最优配置。如果自协商设备看到有一般的LTP(不是有特定含义的FLP)输入,它就将本端设置为10M半双工。如果自协商设备看到有FAST ETHERNET IDLE输入,它就将本端设置为100M半双工。以上所述的自协商机制只对10/100兆铜缆接口或千兆光/电口有效,100BASE-FX不支持自协商。
千兆自协商和10/100兆自协商使用同样的机制,1000BASE-LX和1000BASE-SX使用自协商机制来协商双工和流控。1000BASE-T设备的自协商还会包含附加域(例如是MASTER还是SLAVE)的协商。千兆设备几乎没有半双工的情况(虽然可以协商),所以很多双工的问题都不存在了。
七、流控
流控指当接收者没有能力处理接收到的报文时,为了防止丢包,接收者需要通知报文的发送者一段时间内停止发送报文。
对于半双工模式和全双工模式,流控通过不同的方式来实现。在全双工模式下,接收者通过发送一种特殊的数据帧来通知发送者,停止发送报文,这种特殊的数据帧称为PAUSE帧,下面是PAUSE帧的结构:
PAUSE帧的长度固定为64字节(包括CRC),PAUSE帧的目的MAC为组播MAC:0180-c200-0001,源MAC为发送PAUSE帧的节点的MAC,LENTH/TYPE字段固定为0x8808。MAC CONTROL PARAMETERS字段表示要求发送者暂停发送流量的时间,数值有效范围为0-65535, 单位为512bit time(bit time指链路上传输1bit需要的时间,如100M链路bit time为10ns)。如果数据报文的接收者在发送PAUSE帧后,在PAUSE帧发送的等待时间超时之前可以处理数据报文,则再发送一个等待时间为0的PAUSE帧通知数据发送者开始发送数据。
PAUSE的接收者(也是数据报文的发送者),收到PAUSE帧后会根据PAUSE帧中的等待时间停止发送报文,等待时间超时后继续发送报文。
半双工模式下,以太网利用CSMA/CD机制处理冲突和链路使用问题。根据CSMA/CD机制,半双工的模式下,采取的流控方式为Backpressure,即背压。该种方法有两种实现,一个是数据接收者有意制造一次冲突,数据发送者检测到冲突采取Backoff,这样就延缓了数据的发送;另外一个方法是制造载波信号,使数据发送者感觉到接收者要发送数据,从而通过检测到载波而进行延时传输。