以太网数据链路层和物理层工作模式一般为全双工或者半双工。
在半双工模式下,链路层能够通过CSMA/CD(载波监听多点接入/碰撞检测)技术在共享以太网中进行数据传输。
它的工作原理是: 发送数据前 先侦听信道是否空闲 ,若空闲,则立即发送数据。若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;若在上一段信息发送结束后,同时有两个或两个以上的节点都提出发送请求,则判定为冲突。若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。其原理简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发。
一个帧以7个字节的前导码和1个字节的帧开始符作为帧的开始。在线路上帧的这部分的位模式是10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011。由于在传输一个字节时最不重要的位最先传输(即低位最先传输),因此其相应的16进制表示为0x55 0x55 0x55 0x55 0x55 0x55 0x55 0xD5。10/100M 网卡(MII PHY)一次传输4位(一个半字节)。因此前导符会成为7组0x5+0x5,而帧开始符成为0x5+0xD。1000M网卡(GMII)一次传输8位,而10Gbit/s(XGMII) PHY芯片一次传输32位。 注意当以octet描述时,先传输7个01010101然后传输11010101。由于8位数据的低4位先发送,所以先发送帧开始符的0101,之后发送1101。以太网传输数据时先传输高字节,传输字节时先传输低位。比特流进入物理芯片后,在10/100M是通过MII口输出低半字在前,高半字在后。
混杂模式(Promiscuous Mode)是指一台机器能够接收所有经过它的数据流,而不论其目的地址是否是他。
是相对于通常模式(又称“非混杂模式”)而言的。这被网络管理员使用来诊断网络问题,但是也被无认证的想偷听网络通信(其可能包括密码和其它敏感的信息)的人利用。一个非路由选择节点在混杂模式下一般仅能够在相同的冲突域(对以太网和无线局域网)内监控通信到和来自其它节点或环(对令牌环或FDDI),其是为什么网络交换被用于对抗恶意的混杂模式。
混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包。默认情况下网卡只把发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。
简单的讲,混杂模式就是指网卡能接受所有通过它的数据流,不管是什么格式,什么地址的。事实上,计算机收到数据包后,由网络层进行判断,
确定是递交上层(传输层),还是丢弃,还是递交下层(数据链路层、MAC子层)转发。
通常在链路层,都会对接收的MAC地址进行保护加密。----哈希算法
哈希算法(HASH)就是把任意长度的输入(又叫做预映射,pre-image)
通过散列算法,变换成固定长度的输出,该输出就是散列值
帧间隙:
对于百兆以太网,两个帧之间的间隙应大于9600ns。
发送冲突:
如果冲突在前导发送期间
被检测到,它们发送完全部64位并额外发送32位的拥塞序列。如果检测到冲突时前导已被发送完,站点同样再发送32位的拥塞序列这两种情况都被称为窗口内冲突。
如果发现冲突且正在发送数据或者FCS,,而且没有超过冲突时间窗,那么发送状态马上进入Jam状态发送拥塞码,之后经过回退算法以及帧间隙回到空闲,并根据重试计数器的值决定是否重新发送刚才的数据帧。
一旦发生冲突
发生下列情况之一,发送过程将终止
1,过延迟(excessive deferral) 发送MAC在超过两个最大以太帧的时间内仍无发送机会
2,迟冲突(late collision) 发送完512bit后才检测冲突
3,过冲突(excessive collision)检测到冲突超过15次
4,下溢出(under-run)主机无法以足够快的速度提供发送数据
5,帧过长(excessive lenght)分组长度超过1518字节
一旦冲突发生,物理层会监测到干扰信号,于是冲突监测信号被置1。在半双工模式下,发送模块的接入管理模块响应这一信号,冲突处理机制开始执行。首先,该模块会发送一系列被称为冲突强化的信息,确保其他的站点也能得知冲突的发生,强化冲突过后, 发送端终止当前发送,并等待一个随机的时间重新尝试发送。重新发送同样也有可能遭遇到冲突, 最终的结果有两个,一是发送成功,二是达到了重传的数量上限,发送失败。
inter packet gap
报文之间间隔 96位时间
如果网络当前处于忙状态,包间间隔站点将推迟发送直到现行活动停止,并再加上一段预定的寂静期,这段非活跃的寂静期称为包间间隔IPG将每一数据包分隔开来以便所有站点都可以探测到不活跃的载波侦听状态一旦过了IPG,站点就被允许对截止进行访问并开始发送数据。
由于介质是共享的,它们的发送将因相互干扰而变得混乱,从而产生冲突。所有站点都具有冲突检测的能力。并且在检测到冲突后发出一个拥塞序列。如果冲突在前导发送期间被检测到,它们发送完全部64位并额外发送32位的拥塞序列。如果检测到冲突时前导已被发送完,站点同样再发送32位的拥塞序列这两种情况都被称为窗口内冲突拥塞序列用于保证网络;两端的站点都能检测到冲突的发生丢弃发送前允许有15次重发机会(共16次重发)。
ColWindow,冲突窗口。
当某个站点开始发送数据时,仅在发送开始的一段时间内可能遭遇到冲突,这个时间段被称为冲突窗口(collision window)。这是由于信号在媒体上传播也需要时间,冲突窗口就是发送站点的信号传遍冲突域所需的时间。这是一个很重要的参数,以太网取传输512bit数据所用时间为争用期的长度。需要指出,以太网的端到端时延实际上是小于争用期的一半的,争用期被规定为传输512bit所用时间,不仅是考虑了以太网的端到端时延,而且还包括其它的许多因素,如可能存在的转发器所增加的时延,以及强化冲突的干扰信号的持续时间等。一般以太网的冲突多为发生在冲突窗口内。
退避算法以及重传
以太网使用截断二进制指数回退算法来解决冲突后的重发问题。截断二进制指数回退算法很简单,
就是让发生冲突的站点在停止发送数据后,不是立刻重发,而是推迟一个随机的时间。这样就使得重发时再次发生冲突的概率减小。具体的算法是:
(1)确定单位回退时间,通常是取冲突窗口的值,即传输512bit数据所需时间,称为时槽。
(2)定义参数k,它等于重传次数,但不超过10,因此k=min (n, 10)。
(3)取r满足0≤r <2 k。重传的时延就是r倍的时槽。
(4)当重传达到16次仍不能成功时(这表明同时打算发送数据的站点过多,导致连续发生冲突),则丢弃该帧,并向上层协议报告。
使用以上的回退算法可使重传需要推迟的平均时间随重传次数增加而增加,这也被称为动态退避,有利于整个系统的稳定。
版权所有权归卿萃科技 杭州FPGA 事业部,转载请注明出处
作者:杭州卿萃科技ALIFPGA
原文地址:杭州卿萃科技FPGA极客空间 微信公众号
扫描二维码关注杭州卿萃科技FPGA极客空间