Basic里说过的,以太网(Ethernet)是连接层协议,传输单位是,所以下面是的格式

帧的格式

帧的格式,信息以帧(frame)为单位传输,帧像信封一样将数据(payload)包裹起来,并注明源目地址,连接层实现了局域网通信

帧是一段有限的0/1序列。它可以分为头部数据(Payload)和尾部三部分

Preamble | SFD | DST | SRC | Type | Payload (Data) | Pad | FCS | Extension

帧是按照上面的顺序进行发送和接收的,中间Payload部分是我们要传输的数据,头部和尾部虽然不是我们想要传输的,但是它们确实我们完成数据传输所必须的

帧头

Preamble

Preamble翻译为序言,Preamble大小为7个Bytes,每个Bytes都是十六进制的0xAA(二进制10101010),通常,我们都会预定好以一定的频率发送0/1序列(比如每秒10bit),

Preamble的作用是什么呢? 由于不同网卡的频率信号可能不同,所以序言的作用就是在通信前,调整彼此的信号频率为一致,就像特种部队执行任务前对表一样,网卡会在接收序言的过程中不断微调自己的接收频率,直到自己收到10101010,说明此时频率信号达到一致,然后开始进行通信

SFD

频率信号调整好了后,我们等待帧的起始信号(SFD, start frame delimiter), SFD是固定的值0xAB,也就是10101011这个二进制序列,这个0xAB就好像“小喇叭开始广播啦”一样,提醒我们好节目就要上演了。帧的格式是固定的,每个部分有固定的字节数。所以一旦设备识别出起始信号后,就能分辨出数据的各个部分。

DST、SRC

DSTSRC其实从字面就能看出来,分别是源地址和目标地址,DSTSRC都是6个字节,SRC会记录本地网卡Mac地址,而DST这里会记录网关Mac地址

Type

Type是头部的最后一个字段,它是用来标明Payload也就是我们传输的数据的类型,由于数据部分通常包含更高层的协议,所以类型实际上是更高层协议的种类,例如,0x0800(IPv4),0x0806(ARP),如果接收设备能理解该类型的网络协议,可以进一步解读数据部分内容。

数据

Payload

正如我刚才提到的,数据一般包含有符合更高层协议的数据,比如IP包。连接层协议本身并不在乎数据是什么,它只负责传输。

PAD

注意,数据尾部可能填充有一串0(PAD区域),原因是数据需要超过一定的最小长度(46~1500 octets)。

帧尾

FCS

跟随在数据之后的是校验序列(FCSFrame Check Sequence),FCS的作用是为了校验数据的传输是否发生错误,在物理层,我们是通过物理信号来表示0/1序列,高低电压,高低频率等,但这些信号可能会在传输的过程中出现问题,以致于接收到的二进制序列和发出的不一样。如何来发现我们的数据是正确的呢?

  • 一个方法,是将数据发送两遍,然后对比一下是否一样。理论上,两次犯相同错误的几率很低。如果两次的数据不一样,那就是在传输过程中出错了。但发送两遍的方法降低了网络的效率。而且逐一对比序列的每个字节的话,也需要耗费不少时间。

但是以太网采用了更加聪明的方法,帧的FCS就是通过CRC(Cyclic Redundancy Check)算法,在发送方基于这个算法生成一个校验码,接收方接收到数据后,同样根据CRC算法,比对生成的校验码是否与FCS一致,以此来判断传输过程中是否出现错误。(PS: 32‑bit位 CRC)

results matching ""

    No results matching ""