以太网有七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、表示层和应用层。

物理层编码成码流,数据链路层也称为MAC地址,网络层实现源和终点连接,传输层实现端到端网络数据传输,对于FPGA数据传输来说可以传数据了。

以太网物理层接口分为MII接口、GMII接口和RGMII接口,除了MII接口为百兆以太网外,其余两种为千兆以太网。

接下来以百兆以太网网卡为例来分析整个网卡的结构,       

以太网网卡MAC层由以太网帧头、数据部分和CRC校验3部分组成,其中MAC层的数据部分为网络层,网络层由IP报头和数据部分组成,网络层的数据部分为传输层的,传输层由UDP头和数据部分组成,用户数据就可以在UDP层传输。

以太网帧头格式如下:

字段

字段长度(字节)

描述

前导码

7

0x55,01010101

帧开始符

1

表明下一字节的MAC字段0xD5(11010101)

目的MAC地址

6

指明帧的接受者(接受的网卡地址)在电脑的开始菜单输入cmd,输入命令ipconfig-all

源MAC地址

6

指明帧的发送者(发送方的物理网卡地址)

长度类型

2

帧数据字段长度,ARP(0X0806)UDP(0x0800)

数据和填充(上层数据)

     46-1500

上层数据,  通常为3层,协议数据单元

帧校验序列

4

校验数据,校验的是目的MAC、源MAC、长度类型和数据部分

网络层:

IP 是 TCP/IP 协议族中最核心的协议,所有的 TCP、UDP、ICMP、IGMP 数据都以IP数据报的格式传输。IP仅提供尽力而为的传输服务,如果发生某种错误,IP 会丢失该数据,然后发送 ICMP 消息给信源端。网络层包含IP报头和数据部分

网络层

字段

长度

(字节)

名称

描述

IP

版本+首部长度

1

IP协议版本 

IP首部长度

版本就是 IPV4或者 IPV6 ,一般选 择 IPV4 ,即版本值为 4。

IP首部长度即有多少个 32位数(IP报头),当 IP首部长度为 20时(即无可选字段),该值为 5.(5*4 =20个字节)

服务类型

1

指示了报文的优 先权等

默认全部置 0即可

总长度

2

IP报文长度

IP报文(报头+数据)长度

分段标识

2

是否属于同一数 据段

IP报文的分段 ID

段标识和段偏 移

2

可设为 0

生存周期 (TTL)

1

可以经过的最大 路由数

生存时间字段设置了数据报可以经过的最多路由器数,表示数据包在网络上生存多久。TTL的初始值由源主机设置(通常为 32 或 64),一旦经过一个处理它的路由器,它的值就减去 1。当该字段的值为 0 时,数据报就被丢弃,并发送 ICMP 消息通知源主机。这样当封包在传递过程中由于某些原因而未能抵达目的地 的时候就可以避免其一直充斥在网路上面。 占 8位。

上层协议类型(传输层协议)

1

指该封包所使用的网络协议类型,如ICMP、DNS等。占 8位。 

常用协议号:

00 :IP

01 :ICMP

06 :TCP    

17 :UDP

报头校验和

2

IP报头的校验和

只是报头的校验和不含数据部分

源 IP地址

4

发送端的 IP地址

如 192.168.0.8

目的 IP地址

4

接收端的 IP地址

如 192.168.0.9

数据部分

可选字段

可选

没有的时候长度可以为 0

报头检验和的计算方法:

协议类型报头长度

服务类型

IP 报文长度

分段标识

分段和偏移

0x45

0x00

0x00

0x32

0x00

0x00

0x00

0x00

普通

50 字节

生存周期

上层协议

报头校验和

源地址

0x40

0x11

0xf9

0x59

0xc0

0xa8

0x00

0x08

64 

17 UDP

192

168

0

8

目标地址

0xc0

0xa8

0x00

0x09

192

168

0

9

按照上述提到的IP首部校验和的方法计算IP首部校验和,即:

1:0x4500+0x0032+0x0000+0x0000+0x4011+0x0000(计算时强制0

)+0xC0a8+0x0008+0xC0a8+0x0009=0x206A4

2:0x0002+0x06A4=0x06A6;

3:sum=~0x06A6=0xf959;

传输层:传输层UDP头和数据部分,UDP由16位源端口号、16位目的端口、16位UDP长度和16位UDP校验和。

传输层

字段

长度

(字节)

描述

UDP头

源端口号

2

例如 5000

发送方的网络端口地址

目的端口号

2

例如 6000

接收方的网络端口地址

UDP长度

2

UDP报文长度

UDP报文(含数据)长度,包含UDP头的长度8和数据部分长度,单位都是字节

UDP校验和

2

UDP报头校验和

UDP协议的报头和数据的和校验,可以全部设置为0

数据

UDP数据

n

用户根据数据进行定义

        百兆以太网的数据发送方式:一个8位数据先发低4位再发高4位,最后发CRC校验数据的8位数据时,先发高4位再发低4位。

利用verilog实现的结构如下:

仿真波形如下:

板级实现:可以通过wireshark抓包工具看到网卡发送到笔记本电脑的数据。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐