以太网Flow Control相关

以太网Flow Control相关pausepkt,MAC0为self-station,MAC1为link-partnerstationflow如下step1~2:MAC1向MAC0TXpkt,MAC0RX到pkt后送给后续moduleA处理。step3:MAC0来不及处理源源不断的MAC1送来的pkt,此时拉低FC_rdy(一般有RXctrl相关module起)(flowcontrolready)信号,表明此时需要进行flowcontrol;step4:MAC0TX端看到FC_rd.

大家好,又见面了,我是你们的朋友全栈君。

以太网folw control,分全双工和半双工应用情形,在full duplex mode下通过PAUSE packet进行流控。在半双工下通过背压(back pressure)进行流控。(Carrier sense 或者jam)

一、Full duplex with pause pkt.

(一) pause pkt 帧格式

以太网Flow Control相关
time-unit 是暂停传送时间参数,单位是当前速率下传输512bit的时间,即slot time;
如果是pause_on pkt,则time_unit不为0,eg,如果是0xffff,则暂停时间是0xffff * slot_time(实际上这个时间很长,而一般值设为0xfff0~0xffff)比较合适;
如果是pause_off pkt,则time_unit为0,当收到pause_off pkt时,则说明流控已经关掉,可以正常tx pkt了, 即具有唤醒功能。

(二)pause pkt工作原理

情形1、自身来不及处理pkt,需要向对方发送pause pkt暂停对方的TX.

以太网Flow Control相关
MAC0 为self-station, MAC1为link-partner station
flow 如下
step 1~2:  MAC1 向MAC0 TX pkt,MAC0 RX 到pkt后送给后续module A处理。
step 3: MAC0 来不及处理源源不断的MAC1送来的pkt,此时拉高FC_start(一般有RX ctrl相关module起)信号,表明此时需要进行flow control;
step 4: MAC0 TX端看到FC_start信号后,开始向对端MAC1 TX pause pkt,(TX_pause_on).间隔时间可以由register配置,只要FC_start为高期间,MAC0 TX端每隔一段时间发送一个pause pkt,其他时间发送normal pkt。Pause pkt的发送不会影响到MAC1正常TX的data pkt。
step 5: MAC1 RX到pause pkt后,会解析pause pkt里面相关的filed,让TX端暂停发送pkt,暂停时间是slot time * pause filed;
step 6~7~8: MAC1 暂停TX pkt,等到MAC0处理完之前收到的pkt,能够再有能力RX新的pkt后,会将FC_start拉低。
step9: MAC0 发送一个pause off pkt,告诉MAC1可以不用等,可以开始发pkt了。

情形2、对方来不及收pkt,想要停掉自己的tx,即自身收到pause pkt.
以太网Flow Control相关
step1: 对方发送 pause_on pkt, 想要暂停MAC0的TX;
step2~3: MAC0 RX到pause_on pkt后,根据DA=0180c2000001,len/type, op_code filed判断当前是一笔pause_on pkt,则会assert pause_on信号,同时解析time_unit字段供TX 端进行暂停时间计算。
step4: MAC0 根据time_unit的值,以back_off的方式实现暂停,即有一个bkoff_cnt,一个初始的bkoff_init值,在半双工时bkoff_init值是通过二进制回退算法得到,在全双工pause时,bkoff_init是(~time_unit)。每过一个slot_time,bkoff_cnt自加1,当bkof_cnt=‘hffff时,表示时间结束,即bkoff_done,此时就可以TX pkt;(假设time_unit值为0xFFFF,则需要等待个slot_time,时间会很长,可以将bkoff_ini的初始值设高一点)
step5: MAC1 RX端能够处理pkt后,有两种做法,1)通过TX端发送pause_off pkt, 让MAC0能够立即TX pkt。 2)不tx pause_off pkt,此时MAC0需要等暂停时间结束后才能TX pkt;
step5~9: MAC1 TX pause off pkt 立即唤醒MAC0 tx。
ps:实质上MAC0 在等待pause time期间,MAC1可能会一直发送pause pkt, MAC0 收到新的pause pkt后,会更新bkoff_cnt,当收到pause_off pkt时,bkoff_cnt立马更新为~16’h0=16’hffff,即bkoff_done了

二、Half Duplex mode下通过back pressure 方式进行流控

有两种方式,1,通过发送jam来撞掉包. 2,通过发送carrier_sense 来占用medium。

(一)、jam

    jam signal,是一种拥塞信号,一般是”Preamble+SFD+JAM_DATA”,JAM_DATA长度为4byte,具体value不用care,一般为‘ha,主要目的是撞掉pkt,
在以太网半双工时,因为medium只能要么被TX占用,要么被RX占用。假设正在RX pkt,MAC TX端此时需要发送pkt,TX端会检测medium是否idle,如果发现midium busy,就会起coll_detect信号(coll_dect会在能发下一笔pkt时de-assert),表明产生了collision,此时TX会发送jam pkt ,撞掉medium的pkt,这样TX和RX都没传送成功,各自根据二进制回退算法进行backoff。
   当MAC0来不及处理pkt,需要暂停对方MAC1 TX时,MAC0就会发送jam来撞掉MAC1 TX的pkt,然后MAC1进行backoff,起到flow control效果。

(二)、carrier_sense

   可以理解为加长版的jam,比最大pkt 1536长度还长,(长度可以自定义,取决于designer想让carrier_sense占据多长时间的medium),但carrier_sens不是为了简单撞掉pkt,而是为了长时间占用medium。
   比如当MAC0来不及处理pkt,需要暂停MAC1发送pkt,那MAC0可以在midium idle时发送carriier_sense来长时间占用mediuem,这样对方在TX pkt时,就会始终检测到collision,然后backoff,这样也间接暂停了对方发送pkt,起到flow control效果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134961.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • AMD CPU电脑安装Android Studio详细步骤以及无法成功install HAXM的解决办法「建议收藏」

    AMD CPU电脑安装Android Studio详细步骤以及无法成功install HAXM的解决办法「建议收藏」想做个手机APP,安装Androidstudio遇到了各种各样的问题,这一切都源于电脑CPU是AMD的,经过各种各样方法的探索,终于找到了解决办法,成功安装了Andriodstudio及模拟器并成功运行了第一个程序Helloworld!下载Androidstudio国外网站下载比较慢,这里推荐一个下载网站,里面的资源很全,包括Android开发的AndroidSDK,开发中遇到的工…

  • vgg网络论文_dna结构综述论文

    vgg网络论文_dna结构综述论文原文地址:https://arxiv.org/pdf/1409.1556.pdfVGG简介:VGG卷积神经网络是牛津大学在2014年提出来的模型。当这个模型被提出时,由于它的简洁性和实用性,马上成为了当时最流行的卷积神经网络模型。它在图像分类和目标检测任务中都表现出非常好的结果。在2014年的ILSVRC比赛中,VGG在Top-5中取得了92.3%的正确率。同年的冠军是googl…

    2022年10月21日
  • 强化学习(Q-Learning,Sarsa)

    强化学习(Q-Learning,Sarsa)ReinforcementLearning监督学习–>非监督学习–>强化学习。监督学习:拥有“标签”可监督算法不断调整模型,得到输入与输出的映射函数。非监督学习:无“标签”,通过分析数据本身进行建模,发掘底层信息和隐藏结构。但是1.标签需要花大量的代价进行收集,在有些情况如子任务的组合数特别巨大寻找监督项是不切实际的。2.如何更好的理解数据,学习到具体的映射而不仅仅是数据的底…

  • MySql多表、多字段分组,多字段去重「建议收藏」

    MySql多表、多字段分组,多字段去重「建议收藏」直接了当上SQL SELECT a.字段1, a.字段2, b.字段1, COUNT(DISTINCT a.字段1),COUNT(DISTINCT b.字段1) FROM xs_highway_transport_log a LEFT JOIN b表 b ON b.id = a.main GROUP BY a.字段1 ,b.字段1// 这行为分组直接这样 即可实现 多字段去重情况。同时可以配合having过滤分组,也可以在 分组

  • matlab中wavedec2,Matlab中wavedec使用學習及詳解

    matlab中wavedec2,Matlab中wavedec使用學習及詳解最近在使用對ECG訊號進行小波係數的提取,所以用到了wavedec這個matlab中内置函數。然後盡心學習,發現還挺高深,不是我學到的衹是一點皮毛,因爲要對一段波形進行特徵提取,所以我要看哪個小波係數最能代表波形特徵,然後進行保留。我使用的是:[C,L]=WAVEDEC(X,N,’wname’)這個會返回信號X在levelN(小波分解級數)的小波分解係數。輸出爲兩部分,第一部分C爲小波分解係…

  • 使用ButterKnife 在开发中需要注意的地方

    使用ButterKnife 在开发中需要注意的地方

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号