Mic_chen

It is not the strongest of the species that survive, nor the most intelligent, but the one most responsive to change

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

为了方便定位区分性能瓶颈所在,也为了方便测试网络稳定性,对网络的分层测试尤为重要,特别是针对RTOS。

前言:

OSI的7层模型大而全,但也比价复杂,而且是先有了理论模型,没有实际应用。TCP/IP的四层模型是从实际应用发展总结出来的。他包含了如下层次:

应用层

传输层

网络层

物理+数据链路层

从实质上将TCP/IP只对最上面三层进行了定义,最下面的MAC+LLC层,TCP/IP参考模型并没有真正描述这一层的实现,只是要求能够提供给上层----网络互连层一个访问接口,以便为期向上传递IP分组。

 

 

MAC层测试

理论依据:

以太网是目前最流行的一种局域网组网技术,以太网技术的正式标准是IEEE 802.3标准,他规定了在以太网中传输的数据帧结构,如下所示:

前同步码 |   SFD    |目的地址 | 源地址 | 长度/类型 | 数据和填充   |  CRC

7字节      | 1字节    | 6字节     | 6字节  | 2字节       | 46-1500字节 | 4字节

从物理层看,一个完整的以太网帧有7个字段,而事实上,前两个字段是以太网控制器在数据传输时自动加上去的。

在以太网帧中,目的地址可以分为三类:单播地址、多播地址、广播地址。单播地址与一个具体的以太网卡的MAC地址相对应,它要求第一个字节的bit0(最先发出出去的位)必须是0,;

多播地址则要求第一个字节的bit0是1;这样,在网络上中,多播地址不会和任何网卡的MAC地址冲突,多播数据可以被多个网卡同时接收;广播地址的所有位(48位)都是1,同一局域网中的所有网卡可以接收网络数据包。

上面的长度/类型有两个意义,当它的值小于1518的时候,代表是长度,如果大于,则表示该以太帧的数据属于哪个上层协议(例如0x800,代表IP数据包;0x806,代表ARP数据包)

驱动只需要将目的地址 | 源地址 | 长度/类型 | 数据和填充这些值写入网卡驱动(LLC控制器),网卡MAC层会自动填充另外三个字段,将数据帧发送出去;在接收数据时,控制器会自动截取这四个字段放到sram中给控制器读取。

数据链路层分为上层LLC(logic links control,逻辑链路控制)和下层MAC(媒体访问控制)。

 

实验:

根据源MAC和目的MAC构造以太帧,写入到MAC层驱动,MAC地址是初始化的时设置的:

static unsigned char eth_frame_src[6+6+2+1475] = {

    0x00, 0x55, 0x7B, 0x5C, 0x6D, 0x7F,    // 目的MAC地址

    0x00, 0x55, 0x7B, 0xB5, 0x7D, 0xF7,    // 源MAC地址

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,     //数据域随意给

}

 

static unsigned char eth_frame_dst[6+6+2+1475] = {

    0x00, 0x55, 0x7B, 0xB5, 0x7D, 0xF7,   // 目的MAC地址

    0x00, 0x55, 0x7B, 0x5C, 0x6D, 0x7F,   // 源MAC地址

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,     //数据域随意给

}

posted on 2020-04-29 09:29  Mic_chen  阅读(349)  评论(0编辑  收藏  举报