zoukankan      html  css  js  c++  java
  • 4B/5B编码原理

    see also:http://course.cc.shu.edu.cn/safe/tcpip/start.htm 

    很详细的介绍物理层:http://www.highteck.net/EN/Physical/OSI_Physical_Layer.html 
     

    什么是4B/5B编码?

          4B/5B编码是百兆以太网中线路层编码类型之一,就是用5bit的二进制数来表示4bit二进制数,映射方式如下表所示:

       

        为什么要进行4B/5B编码?

    在通信网络中,接收端需要从接收数据中恢复时钟信息来保证同步,这就需要线路中所传输的二进制码流有足够多的跳变,即不能有过多连续的高电平或低电平,否则无法提取时钟信息。

    Manchester编码可以保证线路中码流有充分的跳变,因为它是用电平从“-1到“+1的跳变来表示“1,用电平从“+1到“-1的跳变来表示“0,但是这种编码方式的效率太低,只有50%,相当于用线路的有效带宽来换取信号的跳变,十兆以太网就是使用Manchester编码,虽然线路的有效带宽只有10Mbps,但实际带宽却是20Mbps

    百兆以太网用的4B/5B编码与MLT-3编码组合方式,发送码流先进行4B/5B编码,再进行MLT-3编码,最后再上线路传输;千兆以太网用的是8B/10B编码与NRZ编码组合方式;万兆以太网用的是64B/66B编码;PCIE 3.0用的是128B/130B编码。

    4B/5B编码规则有哪些?

    4B/5B编码其实就是用5bit的二进制码来代表4bit二进制码。此编码的效率是80%,比Manchester码高。4B/5B编码的目的在前面已经说过了,就是让码流产生足够多的跳变。4位二进制共有16种组合,5位二进制共有32种组合,如何从32种组合种选取16种来使用呢?这里需要满足两个规则:

    1). 每个5比特码组中不含多于3个“0

    2). 或者5比特码组中包含不少于2个“1

    此规则是怎么来的?这就要从MLT-3的特点来解释了。MLT-3的特点简单的说就是:逢“1”跳变,逢“0”不跳变。为了让4B/5B编码后的码流中有足够多的跳变就需要编码后的码流中有尽量多的“1”和尽量少的“0”。

    关于线路编码类型,如NRZNRZIHDB3B3ZSB8ZSAMICMIMLT-3Manchester等。

    问:如何实现单片以太网微控制器? 
    答:诀窍是将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件。这种方案可使MAC和PHY实现很好的匹配,同时还可减小引脚数、缩小芯片面积。单片以太网微控制器还降低了功耗,特别是在采用掉电模式的情况下。
    问:以太网MAC是什么?
    答:MAC就是媒体接入控制器。以太网MAC由IEEE-802.3以太网标准定义。它实现了一个数据链路层。最新的MAC同时支持10Mbps和100Mbps两种速率。通常情况下,它实现MII接口。
    问:什么是MII?
    答:MII即媒体独立接口,它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1)。数据接口包括分别用于发送器和接收器的两条独立信道。每条信道都有自己的数据、时钟和控制信号。MII数据接口总共需要16个信号。管理接口是个双信号接口:一个是时钟信号,另一个是数据信号。通过管理接口,上层能监视和控制PHY。


    问:以太网PHY是什么?
    答:PHY是物理接口收发器,它实现物理层。IEEE-802.3标准定义了以太网PHY。它符合IEEE-802.3k中用于10BaseT(第14条)和100BaseTX(第24条和第25条)的规范。
    问:造成以太网MAC和PHY单片整合难度高的原因是什么?
    答:PHY整合了大量模拟硬件,而MAC是典型的全数字器件。芯片面积及模拟/数字混合架构是为什么先将MAC集成到微控制器而将PHY留在片外的原因。更灵活、密度更高的芯片技术已经可以实现MAC和PHY的单芯片整合。
    问: 除RJ-45接口外,还需要其它元件吗?
    答:需要其它元件。虽然PHY提供绝大多数模拟支持,但在一个典型的实现中,仍需外接6、7只分立元件及一个局域网绝缘模块。绝缘模块一般采用一个1:1的变压器。这些部件的主要功能是为了保护PHY免遭由于电气失误而引起的损坏。
    问:10BaseT和100BaseTX PHY实现方式不同的原因何在?
    答:两种实现的分组描述本质上是一样的,但两者的信令机制完全不同。其目的是阻止一种硬件实现容易地处理两种速度。10BaseT采用曼彻斯特编码,100BaseTX采用4B/5B编码。
    问:什么是曼彻斯特编码?
    答:曼彻斯特编码又称曼彻斯特相位编码,它通过相位变化来实现每个位(图2)。通常,用一个时钟周期中部的上升沿表示“1”,下降沿表示“0”。周期末端的相位变化可忽略不计,但有时又可能需要将这种相位变化计算在内,这取决于前一位的值。
    [url=http://blog.sina.com.cn/main/html/showpic.html#url=http://static7.photo.sina.com.cn/orignal/4899b874dd086780c791e]



    问:什么是4B/5B编码?
    答:4B/5B编码是一种块编码方式。它将一个4位的块编码成一个5位的块。这就使5位块内永远至少包含2个“1”转换,所以在一个5位块内总能进行时钟同步。该方法需要25%的额外开销。  

     

    100BASE-T技术规范 
     

     6.2.2. 100BASE-T

    协议

      采用802.3标准、CSMA/CO访问方式,又称快速以太网。

    传输介质


    1 标准
    100Base-TX

      • Cable: 两对5类UTP(非屏蔽双绞线),或两对1型STP(屏蔽双绞线)
      • 编码: 4B/5B码
      • Connector: RJ45(有1-8根Pin)
      • 连线与100Base-T相同
        Pin 1, 2 : 发送; 
        Pin 3, 6 : 接收; 
        其余未用
      • 工作站与HUB之间最长距离为100米,故它不适用于大型网

    100Base-FX

      • Cable: 2根多模光纤
      • 编码: 4B/5B码
      • Connector: SC, MIC(Media Interface Connector), ST
      • 最长距离400米

    100Base-T4

      • Cable: 4对3, 4, 5类UTP
      • 编码: 8B6T码
      • Connector: RJ45
      • Pin 1, 2 TX-D1 : 发送
        Pin 3, 6 RX-D2 : 接收
        Pin 4, 5 BI-D3 : 双向传送
        Pin 7, 8 BI-D4 : 双向传送
      • 最长距离100米

    2 编码

        NRZ(Nonreturn to Zero)

    •     NRZ-L(-level)

    sdf.gif (1868 bytes)

    图 1

                 这种编码最简单,也最常用

    •     NRZI    Nonreturn to Zero,invert on ones

            属于查分编码

              “1”有变化,“0”无变化

    sdf2.GIF (15058 bytes)

    图 2

            其优点是:减少噪声和失真的影响

    (1)4B/5B码

        每四位二进制代码由5位编码表示,这5位编码称为编码组(code group),并且由NRZI方式传输。

        4B/5B码举例:

            每个code group中“0”的个数不超过3个。

        实用4B/5B码的最大优点是能够在很大程度上降低线路传输中的调制速率,从而降低了对线路的要求。

        所谓调制速率是指单位时间内线路状态变化的数目,以波特(baud)为单位。

    我们一般所说的数据信号传送速率是指单位时间内传送的信息量,以每秒多少比特(位)为单位,即bps(bit per second)。

    注意:不要将数据传送速率与调制速率相混淆,如果1个调制时间间隔和1个代码相对应,则两者在数值上相等。如是多相调制,那么它们在数值上不同,例如曼彻斯特编码,它在每个调制时间间隔内跳动两次,故其波特率将是数据传送速率的两倍。

    在快速以太网中,数据传输速率为100Mbps,如果采用曼彻斯特编码,波特率将达200Mbps,对传输介质和设备的技术要求都将提高,也增大了传输成本。

    使用4B/5B编码后,在传输速率为100Mbps的情况下,其调制速率为:

    100M×(5/4)=125M(baud)

    即波特率仅为125M baud,大大低于曼彻斯特编码时的200M baud,这样就在快速以太网中使用非屏蔽双绞线成为可能。

    (2)8B6T码

    8B6T码将8位二进制代码由六位三重信号的编码来表示,从下式计算可知,8B6T码对100Mbps的信号传输率来说,使其调制速率进一步降低为25M baud。

    100M×(6/8)×(1/3)=25M(baud)

    8B6T码采用三重信号(ternary sianaling)即:正电压值,负电压值和零电压值。具体编码如下:

    Data Octet6T code group
    Data Octet6T code group
    Data Octet6T code group
    Data Octet6T code group
    00+-00+-
    010+-+-0
    02+-0+-0
    03-0++-0
    04-0+0+-
    050+--0+
    06+-0-0+
    07-0+-0+
    08-+00+-
    090-++-0
    0A-+0+-0
    0B+0-+-0
    0C+0-0+-
    0D0-+-0+
    0E-+0-0+
    0F+0--0+
    10+0+--0
    11++0-0-
    12+0+-0-
    130++-0-
    140++--0
    15++00--
    16+0+0--
    170++0--
    180+-0+-
    190+-0-+
    1A0+-++-
    1B0+-00+
    1C0-+00+
    1D0-+++-
    1E0-+0-+
    1F0-+0+-
    2000-++-
    21--+00+
    22++-0+-
    23++-0-+
    2400+0-+
    2500+0+-
    2600-00+
    27--+++-
    28-0-++0
    29--0+0+
    2A-0-+0+
    2B0--+0+
    2C0--++0
    2D--00++
    2E-0-0++
    2F0--0++
    30+-00-+
    310+--+0
    32+-0-+0
    33-0+-+0
    34-0+0-+
    350+-+0-
    36+-0+0-
    37-0++0-
    38-+00-+
    390-+-+0
    3A-+0-+0
    3B+0--+0
    3C+0-0-+
    3D0-++0-
    3E-+0+0-
    3F+0-+0-

    图 3

    从8位代码转换成6位三重信号的过程见下图所示:

    8b6t.jpg (16501 bytes)

    因为6B6T码的调制速率仅是25M baud,所以100BASE-T4可以使用传输质量最低的3类双绞线。

     =====================================================================================

    根据RFC894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步吗+1字节帧开始定界符+6字节的目的MAC+6字节的源MAC+2字节的帧类型+1500+4字节的FCS。

            按照上述,最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1514字节,为什么不是1526字节呢?原因是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交“设备驱动程序”做进一步处理。这时我们的抓包软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,其最大值是6+6+2+1500=1514。

            以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是6+6+2+46+4=64。除去4个字节的FCS,因此,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64字节。由于填充数据是由MAC子层负责,也就是设备驱动程序。不同的抓包程序和设备驱动程序所处的优先层次可能不同,抓包程序的优先级可能比设备驱动程序更高,也就是说,我们的抓包程序可能在设备驱动程序还没有填充不到64字节的帧的时候,抓包程序已经捕获了数据。因此不同的抓包工具抓到的数据帧的大小可能不同。下列是本人分别用wireshark和sniffer抓包的结果,对于TCP 的ACK确认帧的大小一个是54字节,一个是60字节,wireshark抓取时没有填充数据段,sniffer抓取时有填充数据段。

    【原创】以太网最大帧和最小帧、MTU - 大河§晕王 - 大河Blog

    wireshark抓包结果,帧是54字节,帧数据部分没有填充数据段

     

    【原创】以太网最大帧和最小帧、MTU - 大河§晕王 - 大河Blog

    sniffer抓包结果,帧是60字节,帧数据部分后有6字节的填充数据

    查看网络接口MTU的方法:

    WINDOWS下,在命令提示符下输入netstat -e -v

    FreeBSD下输入netstat -i

    常见网络的MTU(RFC1191):

       Plateau    MTU    Comments                      Reference
       ------     ---    --------                      ---------
                  65535  Official maximum MTU          RFC 791
                  65535  Hyperchannel                  RFC 1044
       65535
       32000             Just in case
                  17914  16Mb IBM Token Ring           ref. [6]
       17914
                  8166   IEEE 802.4                    RFC 1042
       8166
                  4464   IEEE 802.5 (4Mb max)          RFC 1042
                  4352   FDDI (Revised)                RFC 1188
       4352 (1%)
                  2048   Wideband Network              RFC 907
                  2002   IEEE 802.5 (4Mb recommended)  RFC 1042
       2002 (2%)
                  1536   Exp. Ethernet Nets            RFC 895
                  1500   Ethernet Networks             RFC 894
                  1500   Point-to-Point (default)      RFC 1134
                  1492   IEEE 802.3                    RFC 1042
       1492 (3%)
                  1006   SLIP                          RFC 1055
                  1006   ARPANET                       BBN 1822
       1006
                  576    X.25 Networks                 RFC 877
                  544    DEC IP Portal                 ref. [10]
                  512    NETBIOS                       RFC 1088
                  508    IEEE 802/Source-Rt Bridge     RFC 1042
                  508    ARCNET                        RFC 1051
       508 (13%)
                  296    Point-to-Point (low delay)    RFC 1144
       296

       68                Official minimum MTU          RFC 791 

  • 相关阅读:
    【字符串】C语言_字符串常量详解
    2138=数据结构实验之图论三:判断可达性
    3363=数据结构实验之图论七:驴友计划
    1916=字符串扩展(JAVA)
    2140=数据结构实验之图论十:判断给定图是否存在合法拓扑序列
    3364=数据结构实验之图论八:欧拉回路
    2138=数据结构实验之图论三:判断可达性
    2271=Eddy的难题(JAVA)
    2246=时间日期格式转换(JAVA)
    2804=数据结构实验之二叉树八:(中序后序)求二叉树的深度
  • 原文地址:https://www.cnblogs.com/jjkv3/p/2494339.html
Copyright © 2011-2022 走看看