zoukankan      html  css  js  c++  java
  • 网络分层测试

    为了方便定位区分性能瓶颈所在,也为了方便测试网络稳定性,对网络的分层测试尤为重要,特别是针对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,     //数据域随意给

    }

  • 相关阅读:
    strut2接收参数的三种方式
    MySQL备忘录
    Java集合框架总结
    Hibernate之SchemaExport的使用
    MyEclipse中查看struts_spring_hibernate源码
    拦截器(Interceptor)中的invocation.invoke()
    ActionContext.getContext()用法
    Struts2 XML配置详解
    TCP协议中的三次握手和四次挥手
    反射如何破坏单例模式
  • 原文地址:https://www.cnblogs.com/mic-chen/p/12796618.html
Copyright © 2011-2022 走看看