zoukankan      html  css  js  c++  java
  • 二层转发

    二层转发原理

     

    1 二层转发基础

      这里的二层指的是计算机网络七层模型中的二层,从第一层到第7层分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。还有一种说法是4层(或者是5层)网络模型,分别是数据链路层、网络层、运输层和应用层,如果按照5层的说法还要加上物理层。这里的二层指的是数据链路层。

    1.1 以太网基础

    以太网冲突检测

      CSMA/CD:载波侦听与冲突检测,主机在发送数据包时,先检测线路是否被其他主机占用,确保发送数据包时线路是空闲的;发现冲突就停止发送,延迟一个随机时间之后再继续发送。

    MAC地址

      MAC地址也就是物理地址,大小为48位,6个字节,前24位是厂商代码,后24位为序号,比如H3C厂商代码为00-0f-e2。

    • 单播地址:第一个字节最低位为0,如 00-0f-e2-00-00-06
    • 多播地址:第一个字节最低位为1,如 01-0f-e2-00-00-06
    • 广播地址:48位全为1,如ff-ff-ff-ff-ff-ff

    以太帧格式

      前两个字段分别是目的地址源地址字段。第3个字段是2字节的类型字段,用来标识上一层是什么协议(0x800:IP协议,0x0806:ARP协议等)。第4个字段是数据字段,长度在46-1500字节之间。最后一个字段是CRC检验字段,存放4字节的帧检测序列FCS。校验范围是目的地址、源地址、类型、数据字段。

      MAC帧长度最小为64字节,数据字段最小为46字节,如果不够,则自动加0填充。

      MAC帧格式中,其首部并没有帧长度字段,那么MAC层怎么知道接收到的以太网帧中取出多少字节数据交付上一层协议呢?我们知道,以太网帧使用的曼切斯特编码,这种编码的一个重要特点就是:在曼切斯特编码的每一个码元(不管码元是1还是0)的正中间有一次电压转换(从高到低或从低到高)。当发送方把一个以太网帧发送完毕后,就不再发送其他码元了,一次,发送发网络适配器接口上电压也就不再变化,这样接收方就很容易找到以太网的结束位置。

    802.3帧格式

    以太帧和802.3帧如何区别

      802.3定义的有效长度值与以太网的有效类型无一相同,这样就可以区分了。

    MAC最小长度为什么是64字节

      以太网采用CSMA/DA冲突检测算法,一个主机发送一个数据包后最多经过一个征用时间就会知道该数据包是否收到了碰撞,以太网以51.2us作为征用时间,对于10M以太网,在征用时间时间内可以发送512 bit数据,也就是64字节。这64字节出去以太帧首部以及检验和字段的长度共16字节,也就剩下46字节,也就是以太帧数据域的最小长度了。

    冲突域和广播域

    • 冲突网络(冲突域):连接在同一个到导线上的所有工作站点集合,一个节点发出的报文其余节点都能收到,从而产生冲突。
    • 广播网络(广播域):限制以太网广播报文的范围,一个站点发送一个广播报文其余站点都可以收到。

      一般来说,广播网络定义了第三层网络,如IP子网等,VLAN简单来说就是一个广播域。

    HUB设备

      HUB设备也就是咱们常说的集线器,HUB对所有连接的LAN制作信号的中继,也就是当信号衰减时,再重新修正信号重新发送。连接在集线器上的所有设备构成了一个冲突域和广播域,这样在主机数目比较多时就会产生冲突泛滥和广播严重问题。

    2 二层转发原理 

    二层转发流程

    1. 提取数据报的源MAC地址,查询MAC转发表(也就是L2FDB),如果找到就直接发送到对应端口。
    2. 对于表中不包含的地址,通过广播发送,也就是发送到所有端口。
    3. 使用地址自动学习(根据源MAC地址学习)和老化机制(定时机制)来维护MAC转发表的信息,二层转发一般不会更改数据包内容。

    引入VLAN

      虽然交换机解决了冲突域的问题,但是还是存在广播域问题,这里就应用到了VLAN,也就是在二层交换机上引入VLAN机制。

      VLAN机制可以使处在相同VLAN下的主机任意通信(二层交换),不同VLAN主机通信完全隔离,如需通信需通过三层交换,阻断广播包,减小广播域,提供了网络安全性。VLAN简单来说就是一个广播域,可以跨越多个物理设备构成一个VLAN,这样网络构建和维护更加方便。

      VLAN的划分方法可以根据交换机端口来划分,根据MAC地址来划分,根据网络层(IP地址、IP子网)来划分,根据IP组播划分等。

    VLAN协议格式

    • TPID:协议标志,通常是0x8100
    • Priority:优先级
    • CFI:规范指示为,总设为0
    • VLAN ID:VLAN号

    VLAN端口

      VLAN基于端口划分可以分为种类端口类型:access、trunk、hybird。

    • Access类型的端口只能属于1个VLAN,一般用于连接计算机的端口
    • Trunk类型的端口可以允许多个VLAN通过,可以接收和发送多个VLAN的报文,一般用于交换机之间连接的端口
    • Hybrid类型的端口可以允许多个VLAN通过,可以接收和发送多个VLAN的报文,可以用于交换机之间连接,也可以用于连接用户的计算机

        Hybrid端口和Trunk端口在接收数据时,处理方法是一样的,唯一不同之处在于发送数据时:Hybrid端口可以允许多个VLAN的报文发送时不打标签,而Trunk端口只允许缺省VLAN的报文发送时不打标签。

    VLAN下交换机接口出入数据处理过程

    1)Acess端口收报文:收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有则直接丢弃(缺省)

    2)Acess端口发报文:将报文的VLAN信息剥离,直接发送出去

    3)trunk端口收报文:收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有判断该trunk端口是否允许该VLAN的数据进入:如果可以则转发,否则丢弃

    4)trunk端口发报文:比较端口的PVID和将要发送报文的VLAN信息,如果两者相等则剥离VLAN信息,再发送,如果不相等则直接发送

    5)hybrid端口收报文:收到一个报文,判断是否有VLAN信息,如果没有则打上端口的PVID,并进行交换转发,如果有则判断该hybrid端口是否允许该VLAN的数据进入;如果可以则转发,否则丢弃(此时端口上的untag配置是不用考虑的,untag配置只对发送报文时起作用)

    6)hybrid端口发报文:1.判断该VLAN在本端口的属性(disp interface 即可看到该端口对哪些VLAN是untag, 哪些VLAN是tag);2.如果是untag则剥离VLAN信息,再发送,如果是tag则直接发送

    3 VLAN下的二层转发流程

      支持VLAN的交换机,MAC地址学习方式分为2中:独立式(IVL)和共享式(SVL),对应的L2FDB表项内容有VLAN ID、MAC地址和所在端口。

    • 根据目的地址查MAC转发表(L2FDB)处理转发
      • -独立式:根据VLAN ID查找转发表,找出相同VLAN ID的转发表项范围,在这些表项中找出MAC地址相匹配的出端口。
      • -共享式:根据目的地址查转发表,找到对应的出接口,判断出接口的VLAN ID和报文中的VLAN ID是否一致,若匹配则通过该端口转发报文,否则丢弃。
    • 对于转发表中不包含的地址,通过广播方式转发
      • -独立式:查找不到目的MAC,则在该VLAN下的所有端口进行广播
      • -分享式:查找不到目的MAC,然后判断报文中的VLAN ID和端口的VLAN ID是否匹配,若匹配则在该VLAN中广播,否则丢弃。
    • MAC转发表的源地址学习
      • -独立式:以源MAC地址和VLAN创建表项,故存在MAC地址相同,VLAN ID不同的表项。
      • -共享式:以源MAC地址创建表项,若MAC转发表中存在MAC地址相同的表项,则覆盖原有表项。

    参考:

      1、vlan协议及端口类型

      2、《TCP IP详解 卷一》 

  • 相关阅读:
    Hessian 服务端流程
    JSH面试感悟
    hibernate的update() 更新延迟或者无法更新,导致同个service调用存储过程执行方法不精确
    一个变量名引发的血案
    oracle for loop循环以及游标循环
    My97Datepicker 去掉 “不合法格式或超期范围”自动纠错限制
    获取前后n天的时间
    基于spring aop的操作日志功能
    为TIF、JPG图片添加地理坐标/平面直角坐标
    NGINX 中常规优化
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5863172.html
Copyright © 2011-2022 走看看