一、不归零制编码(Non-Return to Zero)
对于不归零制编码是最简单的一种编码方式,正电平代表1,负电平代表0。如下图:
其实在不归零制编码中有一个很明显的缺陷,那就是它不是自同步码。
对于上图,你知道它传输的数据是什么吗?你可以回答说是一串“1”的序列,但是你却不知道它有多少个“1”,这就是NRZ编码的缺陷。
所以为了知道它到底有多少个“1”,我们必须对照时钟序列进行比对。对于计算机而言也是如此,如果采用NRZ编码进行传输数据,一般情况下计算机有几种方式进行时钟同步。
1、增加一对线传输时钟序列
这种同步方式必须保证时钟相位(clock phase)与数据一致。但是在实际的传输过程中,时钟相位可能会发生偏差,可能是由于采用了不同的线路或者是导电率不同等原因,特别的当在较长的线路以较高的传输速率进行传输时,发生时钟偏差的概率会变大或者说偏差会更明显。在时钟发生偏差的情况下,计算机就会误读一些位。
2、通过GPS天线进行时钟同步
优点:精确的时间 + 频率同步
缺点:增加了额外的硬件设施
3、计算机内置原子时钟(这种做法相当少见)
二、曼彻斯特编码(Manchester Code)
曼彻斯特编码用信号的变化来保持发送设备和接收设备之间的同步,也有人称之为自同步码( Self-Synchronizing Code)。
关于曼彻斯特编码有四点最基本的你需要知道:
1、每个比特(bit)的发送时间恒定(“周期”)
2、0 用低至高转换表示,1 用高至低转换表示(根据G.E.Thomas方式---IEEE 802.3方式与之相反)
3、表示 0 或 1 的转化出现在周期的中点
4、周期开始的转换不表示数据
三、HDLC(High level Data Link Control)
HDLC是计算机网络中国常用的一种传输模式。在HDLC传输模式中它标志了一个帧定界符(一个flag),在帧开始和结束的地方都放一个帧定界符,这样计算机就会知道哪里是帧开始以及结束的地方。
帧定界符:01111110(二进制)-> 7E(十六进制)
这是一个帧的示例:
01111110......(0、1代码)......01111110
(帧定界符之间的0、1代码包括要传输的数据以及一些其他信息)
零比特填充法:
那么,就会出现一个问题:如果在帧的中间(不包括帧定界符)的地方也出现了 ...01111110... 怎么办呢?一般采用零比特填充 的方式,即如果帧中间出现了 111111(五个连续的“1”),那么就在第五个“1”后面加一个“0”,这样在帧定界符中间就不会出现六个连续的“1”,自然也不可能出现 01111110 。
当接收端接收到比特流时,如果发现五个连续的“1”,就删除掉后面的一个“0”,从而恢复原来的数据。
HDLC帧结构:帧标志F -> 地址A-> 控制C -> 信息Info -> 帧检验序列FCS -> 标志F
帧标志F(flag):即帧定界符 01111110(二进制)-> 7E(十六进制)
地址A(address):地址字段。
控制C(control):控制字段,用于构成各种命令及响应,以便对链路进行监视与控制。发送方主节点或组合节点利用控制字段来通知被寻址的从节点或组合节点执行约定的操作;相反,从节点用该字段作为对命令的响应,报告已经完成的操作或状态的变化。该字段是HDLC的关键。由于Control字段的构成不同,可以把HDLC帧分为三种类型:信息帧、监控帧、无编号帧,分别简称I帧(Information)、S帧(Supervisory)、U帧(Unnumbered)。在控制字段中,第1位是“0”为I帧,第1、2 位是“1 ”为S帧,第1、2位是“11”为U帧。
信息帧(I帧):信息帧包含用户数据、该帧的编号和捎带的应答序列N(R)。
管理帧(S帧):管理帧负责流量控制和差错控制,管理帧有4种,包括接收就绪(RR)、接收未就绪(RNR)、拒绝接收(REJ)和选择性拒绝接收(SREG)。
无编号帧(U帧):U帧用于链路控制。
信息Info:长度不做限定
帧检验序列FCS:用于对帧标志F之间的整个序列进行检验
四、EhternetⅡ型以太网帧结构
帧间间隙IFG(inter-frame gap):在互联网帧的开头,有一段帧间间隙IFG(inter-frame gap)或IPG(inter-packet gap)。它的特点是:这是一段沉默的时间,没有任何数据被传输(电压为0),并且任何一个网络要求这一段时间至少是 96bit 的IFG。每发完一个帧后要等待一段时间才能再发另外一个帧,以便让帧接收者对接收的帧作必要的处理(如调整缓存的指针、更新计数、通知对报文进行处理等等)。帧间间隙不属于EhternetⅡ型以太网帧结构中。
前导码(preamble):七个字节,在这一段沉默的时间结束后,以太网开始发送 前同步码 或者叫 前导码(preamble),前导码用十六进制表示就是:AA AA AA AA AA AA AA。7个字节的作用是同步时钟,和发送端保持时钟同步。
帧开始定界符:一个字节,帧开始定界符用十六进制表示就是 AB 。帧开始定界符和前导码从二进制来看,仅有一位不同。
AA -> 1010 1010
AB -> 1010 1011
MAC目标地址:接收方的地址
MAC源地址:发送方的地址
类型:用于标志上一层使用的是什么协议,以便把收到的帧的数据上交给上一层的这个协议
帧检验序列FCS:用于检验帧序列是否发生差错,当传输媒体的误码率为时,MAC子层可使未检测到的差错小于。
部分信息摘自百度百科。
部分信息参考网名为:Ben Eater 的youtuber的讲解
Ben Eater的youtube网址如下:
https://www.youtube.com/playlist?list=PLowKtXNTBypGqImE405J2565dvjafglHU
图文:ZJL