以太网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)


相关推荐

  • Android移动开发-VR全景照片简单实现

    Android移动开发-VR全景照片简单实现VR技术的热度每年都在增长,在购物、旅游等方面运用度很高。该项目引用了Google的vr:sdk-panowidget依赖库,通过VrPanoramaView,简单实现在手机上查看全景照片,下面是项目介绍。build.gradle(Module:app)需要导入依赖:dependencies{implementation‘com.google.vr:sdk-panowidget:1.30.0’}布局文件activity_main.xml,调

  • 15款Java程序员必备的开发工具(转)

    15款Java程序员必备的开发工具(转)如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过。这是一款商业级的编程语言,我们没有办法不接触它对于Java,有两种截然不同的观点:一种认为Java是最简单功能

  • 继续卷!面试又问Spring 事务有几种传播行为和隔离级别?

    怕什么真理无穷进一步有近一步的欢喜面试又被问到了事务,来吧,要么卷起来,要么躺平。卷不动躺平会不会导致数据不一致?事务概念事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操…

  • xshell7激活成功教程版好用么_ppt官方下载免费版

    xshell7激活成功教程版好用么_ppt官方下载免费版文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):importnumpyasnpimport.

    2022年10月12日
  • Kettle实战视频教程

    Kettle实战视频教程呕心沥血制作的kettle视频教程,免费提供给大家,只要学不死,就往死里学,加油吧少年学完本课程,您将掌握:掌握kettle的基础知识,进阶知识和实际工作中的各种情况适合人群:1、熟悉数据库,想学习ETL的同学,想快速提升竞争力的ETL工程师2、运维相关工作人员课程目标:能够掌握实际工作中遇到的迁移和业务各种实际工作内容课程简介:1、本教程不是单纯的各种控件进行逐个讲解2、所有知识点均全部为项目实战的介绍和总结3、单表和全表所有的同步4、本视频由浅入深,再由深入浅,循序渐进逐步

  • IOS学习随笔三

    IOS学习随笔三IOS学习随笔三

发表回复

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

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