以太网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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python常用模块大全_python3内置模块大全

    python常用模块大全_python3内置模块大全mathmath.ceil(a):用来返回≥a的最小整数math.floor(a):用来返回≤a的最大整数round(a[,b])如果没有参数b,只有a,round()作用是四舍五入如果

    2022年7月30日
    6
  • MATLAB强化学习入门——三、深度Q学习与神经网络工具箱

    MATLAB强化学习入门——三、深度Q学习与神经网络工具箱零、为什么需要深度Q学习上一期的文章《网格迷宫、Q-learning算法、Sarsa算法》的末尾,我们提到了Q学习固有的缺陷:由于智能体(agent)依赖以状态-动作对为自变量的Q函数表(QFunctionTable)来形成对当前状态的估计,并以此为依据利用策略π选择动作。Q函数表就必须包含智能体在环境中所可能出现的所有动作-状态对及其对应Q值。显然,当一个多步决策问题变得足够复杂甚至变为连…

    2022年10月3日
    2
  • Redis的bind的误区

    Redis的bind的误区今天在搭建 Redis 服务集群的时候 发现自己一直以来对 Redis 中 bind 的理解的一个误区 在今天以前 我一直认为 Redis 中的配置文件中的 bind 的作用是 用来限制 Redis 服务器用来接收来自哪些服务器 IP 地址 的 Redis 连接请求 即 只有在 bind 指定的 IP 地址的计算机才可以访问这个 Redis 服务器 直到今天我才知道以上的理解都是错误 例如 bind127 0 0 1

    2025年10月30日
    3
  • linux ntp时钟服务器地址_Linux时间同步+国内常用的NTP服务器地址【NTP时间同步服务器】…

    linux ntp时钟服务器地址_Linux时间同步+国内常用的NTP服务器地址【NTP时间同步服务器】…210.72.145.44(国家授时中心服务器IP地址)133.100.11.8日本福冈大学time-a.nist.gov129.6.15.28NIST,Gaithersburg,Marylandtime-b.nist.gov129.6.15.29NIST,Gaithersburg,Marylandtime-a.timefreq.bldrdoc.gov132.163.4.1…

    2022年5月28日
    60
  • php接口如何openssl_encrypt 使用 aes和des ,base64加密解密总结「建议收藏」

    php接口如何openssl_encrypt 使用 aes和des ,base64加密解密总结

    2022年2月18日
    43
  • setfacl命令基本用法[通俗易懂]

    setfacl命令基本用法[通俗易懂]setfacl命令可以用来细分linux下的文件权限。chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限。换句话说,setfacl可以更精确的控制权限的分配。比如:让某一个用户对某一个文件具有某种权限。这种独立于传统的u,g,o的rwx权限之外的具体权限设置叫ACL(AccessControlList)ACL可以针

    2022年6月16日
    46

发表回复

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

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