以太网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效果。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JointJS总结

    JointJS总结JointJS 图库允许用户为所有当前的浏览器创建完全交互的绘图工具 JointJS 不仅是一个图库 其 MVC 更多的是 MV 架构将图 元件 element 和连接 link 模型与绘制分离

    2025年6月25日
    23
  • 阿里云和腾讯云免费SSL证书 – 知识林[通俗易懂]

    阿里云和腾讯云免费SSL证书 – 知识林[通俗易懂]本文章来自【知识林】概述什么是SSL证书通俗的来讲SSL和TSL都是属于网络传输的安全协议,而SSL继承于TSL,且SSL是一种更为安全的加密协议。SSL和TSL的体现:TSL是通过浏览器以http://来访问,默认端口是80;SSL是通过浏览器以https://来访问,默认端口是443。 为什么要使用SSL SSL更加安全 在使用微信小程序开发时与后台数据交互必须使用https传输,即SSL协议 SSL如何获得 SSL证书在很多网站上都有出售,且价格都不便

    2025年10月10日
    4
  • Android中如何使用单选对话框[通俗易懂]

    Android中如何使用单选对话框[通俗易懂]给Button设置OnClick事件设置intid=0;finalString[]s={“单选A”,”单选B”,”单选C”,”单选D”,”单选E”};AlertDialog.BuilderDanItem=newAlertDialog.Builder(MainActivity.this);DanItem.setTitle(“单选列表”);…

    2022年5月30日
    37
  • touchesBegan: withEvent: 不执行解决

    touchesBegan: withEvent: 不执行解决touchesBegan:withEvent:/ touchesMoved:withEvent:/ touchesEnded:withEvent:等只能被UIView捕获(如有问题请指出对请指出,路过的大牛请勿喷),当我们创建UIScrollView或UIImageView时,当点击时UIScrollView或UIImageView 会截获touch事件,导致tou

    2022年7月25日
    16
  • 浅析分布式搜索引擎

    浅析分布式搜索引擎1.基础知识1.1认识Lucene维基百科的定义:Lucene是一套用于全文检索和搜索的开放源码程序库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其本身而论,Lucene是现在并且是这几年,最受欢迎的免费Java信息检索程序库。Lucene官网:http:/…

    2022年5月13日
    41
  • Microsoft® Windows® 恶意软件删除工具

    Microsoft® Windows® 恶意软件删除工具 偶然间发现XP自带的恶意软件删除工具: MicrosoftWindowsMaliciousSoftwareRemovalTool 位置:C:/WINDOWS/system32/MRT.exe 或直接在“开始–运行”中输入mrt.exe运行。 可以到www.microsoft.com更新最新版本的程序。                       

    2022年6月24日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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