我是靠谱客的博主 清爽大神,最近开发中收集的这篇文章主要介绍数据链路层知识梳理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

    • 目录
    • 链路层概述
    • MAC地址与ARP协议
    • 链路层功能
      • 分帧
        • 帧的格式
        • 停等协议(stop and wait)
        • go-back-N
        • 选择确认
      • 差错检测
        • 奇偶校验和
        • 校验和
        • 循环冗余校验码
      • 差错控制
        • 载波监听多路访问CSMA
        • 带冲突检测的载波监听多路访问CSMA/CD
    • 网桥
    • 链路层设备
    • 虚拟局域网(VLAN)


链路层概述

结点: 运行链路层协议的任何设备,包括主机、路由器、交换机和wifi接入点
链路:沿着通信路径连接相邻结点的通信信道

  • 定义数据链路层的体系结构(802.1)
    掌握生成树协议(802.1D),虚拟局域网VLAN(802.1Q)
  • 逻辑链路控制(LLC, logic link control)子层(802.2)
    负责链路层协议向上层提供服务
    掌握帧的发送接收的停等协议,Go-Back-N,选择性重发
  • 介质访问控制(MAC, median access control)子层
    数据帧的封装,差错控制
    随机访问(random access):掌握差错控制中的CSMA/CD(802.3)
    轮转法(take turns):了解令牌环网络(802.5)

不同类型的链路层通道

  • 广播信道
    用于连接有线局域网、卫星网和和混合光纤同轴电缆接入网中的多台主机
  • 点对点通信链路
    适用范围从经电话线的拨号服务到经光纤链路的高速点到点帧传输

链路层提供的服务

  • 成帧:一个帧是由一个数据字段和若干首部字段组成。
  • 链路接入:MAC(medium access control)协议规定帧在链路上传输的规则,用于调节多个结点的帧传输。
  • 可靠交付:通过确认和重传实现。
  • 差错检测和纠正:差错检测比特,奇偶校验和、校验和、循环冗余检测CRC

以太网
以太网是第一个广泛部署的高速局域网。其他局域网技术包括令牌环,FDDI,ATM,有更高的数据速率,更复杂,更昂贵。

网络适配器
也叫网络接口卡,简称网卡,该控制器是一个实现了许多链路层服务(成帧、链路接入、差错检测等)的专用芯片

多路访问链路和协议

  • 点对点链路:有链路的单个发送方和链路另一端的单个接收方组成(PPP协议,HDLC协议)
  • 广播链路:多个发送和接收结点都连接到相同的、单一的、共享的广播信道上。当任何一个结点传输一个帧时,信道广播该帧,每个其他结点都收到一个副本。(以太网、无线局域网)

多路访问问题

  • 多信道划分
    FDM,TDM, 码分多址(CDMA)
    CDMA网络的特性,不同的结点能够同时传输,并且他们各自相应的接收方仍能接收发送方编码的数据比特(接收接收方知道发送方的编码),而不在乎其他结点的干扰传输。
  • 随机接入协议
    pure ALOHA:直接发送,不管其他人有没有给你发
    slotted ALOHA:① 假设所有的帧都是一样的大的,将时间分为一个个时间片;② 时钟同步,每个节点只能在时间片开始时进行发送;③ 当节点收到一个数据包时立即在下一个时间片的开头尝试进行发送
    CSMA:发送前先监听载波,如果空闲就立即完成发送,信道忙就要等待
    CSMA是载波检测(侦听)多路访问.它检测其他站的活动情况,据此调整自己的行为.分为以下几类:

    • 1-持续CSMA(1-persistent CSMA):当信道忙或发生冲突时,要发送帧的站,不断持续侦听,一有空闲,便可发送. 其中,长的传播延迟和同时发送帧,会导致多次冲突,降低系统性能.
    • 非持续CSMA:它并不持续侦听信道,而是在冲突时,等待随机的一段时间.它有更好的信道利用率,但导致更长延迟.
    • p-持续CSMA:它应用于分槽信道,按照P概率发送帧.即信道空闲时,这个时槽,欲发送的站P概率发送,Q=1-P概率不发送.若不发送,下一时槽仍空闲,同理进行发送.若信道忙,则等待下一时槽,若冲突,则等待随机的一段时间,重新开始.

    CSMA/CD:送数据前 先侦听信道是否空闲 ,若空闲,则立即发送数据。若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;若在上一段信息发送结束后,同时有两个或两个以上的节点都提出发送请求,则判定为冲突。若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。其原理简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发

  • 轮流协议
    轮询,令牌传递

MAC地址与ARP协议

链路层地址
链路层地址也叫LAN地址,MAC地址,物理地址。
地址长度为6字节,共有2^48中可能的MAC地址。通常用16进制表示法。
广播地址:FF:FF:FF:FF:FF:FF

地址解析协议(Address Resolved Protocol,ARP)
将网络层地址(ip地址)与链路层地址(mac地址)进行转换。
只为同一个子网上的主机和路由器接口解析IP地址。
ARP可以看成是跨越链路层和网络层边界两边的协议。

ARP表,包含IP地址到MAC地址的映射关系
查询ARP报文:在广播帧中发送
响应ARP报文:在一个标准帧中发送


链路层功能

一般来说在数据链路层中主要有两种错误

  • 帧内:比特错误(位错误)
    检测方法:帧尾部加入校验码,目的地通过校验码进行差错检测
    常见方法有:奇偶校验码校验和CRC校验码
  • 帧间:逻辑错误:丢包,错序,重复
    检测方法:在帧的发送和接收过程进行检错以避免错误扩大
    两种处理思路:
    反馈确认(acknowledge):接收方没有收到,就给发送方一个反馈
    超时重发(timeout):设定一个超时时间,每隔一段时间进行发送,发出后在timeout时间内收不到反馈就认为发生丢失错误,发送方重新发送。Timeout设置太长,丢失代价太大;设置太短,会出现误认为丢包,重发可能造成重复错误

分帧

帧的格式

这里写图片描述

  • 8Byte前导位(preamble)
    用于同步
  • 6Byte目的地址和源地址
    标识发送/接收主机的MAC地址
    如果是广播目的地址全为F
    思考:为什么要设置目的地址?
    其实在上层也可以判断该数据是不是自己想要的
  • 2Byte类型或长度
    小于1500为类型,大于1500为长度
    类型必填,如果这一段表示的是长度那么payload中会划分出一段表示类型
  • 46Byte~1500Byte的数据
    数据有大小限制,过大过小都不行
  • 4Byte的校验码

停等协议(stop and wait)

这里写图片描述

  • 必须等到对方收到上一块数据以后再发送下一个数据
  • 还是可能出现三种错误类型:
    数据丢失:timeout时间内发送方没有得到收包反馈
    反馈丢失:确认信息(ACK)丢失
    反馈延迟:确认信息在timeout时间内未能传回
    反馈丢失或者反馈延迟会触发timeout,发送方进行重发,如果接收方重复接收会出现重复错误
  • 此方法效率不高

go-back-N

这里写图片描述 原理
发送方可以连发数帧,每发一帧都对应 一个计时器timeout,发送方会把丢失帧及其之后的帧全部重传
因为光凭一个ACK并不能确定哪些帧出现了丢失
ACK
期待接收序号为N的帧,之前所有的帧都已经成功收到并依此交给了上层
需要有 发送窗口(sending window)接收窗口(receiving window)
发送窗口也称为发送缓冲区,它限制了在下一确认到来之前还可以发送多少未确认的帧
未确认的帧会保留在发送窗口内,以应对未来的重传
假设发送窗口大小(SWS)为n,那么在确认到来之前还可以发送n-1帧
接收窗口也称为接收缓冲区,一般与发送窗口一样大
接收窗会将已经到来但还没交给上层的帧保存下来
问题
一个帧丢失了要重传后面全部的帧
选择性重发(selective repeat) 这里写图片描述 实现
在原来ACK之上又加上了 NAK(否定性确认帧)
当发送端收到NAK以后会将这个帧重传,同时会将此帧和之后所有帧的timeout延长一倍
NAK含义
小于N的帧已经全部收到并交给了上层,而第N帧丢失了,要求重发第N帧

选择确认

  • 收到哪些帧就反馈哪些帧
  • 同时有下面的机制减少反馈的数目
    延迟确认:收到一定数量以后再发回确认
    捎带确认:接收方往发送方发送信息时捎带确认信息

差错检测

奇偶校验和

看1的个数是奇数还是偶数

  • 1维奇偶校验码:可发现1bit的错误,但不可纠正
  • 2维奇偶校验码:带有一定的纠错功能

这里写图片描述

这里写图片描述

校验和

这里写图片描述

循环冗余校验码

  • 在原码后补n-1位0,以此作为被除数,用一个n位的码作为除数,最后所得余数为校验码
  • 注意除法里面的减法是抑或操作
  • 校验码将随着原码进行发送

这里写图片描述

差错控制

载波监听:说话前先听。一个结点在传输前先听信道。如果来自另一个结点正在向信道传输帧,就等到知道检测到一小段时间没有传输,然后开始传输。
冲突检测:如果与别人同时开始说话,停止说话。当一个传输结点在传输时一直侦听该信道。如果检测到另一个结点正在传输干扰帧,就停止传输,在重复“侦听-当空间时传输”循环之前等待一段随机的时间。

载波监听多路访问CSMA

发送前先监听载波,如果空闲就立即完成发送,信道忙就要等待

如何知道信道空闲?

三种信道监听的办法

  • 一监时:持续监听直至信道空闲,空闲就立即发送
  • 非监时:不持续监听,随机等待一段时间监听一次
  • p监时:持续监听信道,信道空闲时以概率p发送,以概率1-p延迟发送

带冲突检测的载波监听多路访问CSMA/CD

边发送边监听,监听到冲突以后立即停止发送,并与其发生冲突的主机都随机延迟一段时间再采用CSMA算法

流程

  • 1-监时监听信道,如果空闲立即发送;如果忙持续监听直至信道空闲
  • 发送过程中如果没有检测到冲突返回发送成功信号,否则立即停止发送并发送jam信号并随机延迟一段时间,回到上一步再持续监听信道尝试下一次发送。延迟时间:二进制指数退避算法(binary exponential back-off algorithm)
    这里写图片描述
    二进制指数退避算法

  • 首次冲突
    在0t和1t之间随机选择一个时间进行延迟

  • 十次以内冲突
    在0t和2n-1t之间随机选择一个时间进行延迟
  • 十次以上的冲突
    在0t和1023t之间随机选择一个时间进行延迟
  • 十六次冲突
    直接丢包

网桥

网桥工作在数据链路层,将多个局域网(LAN)连接起来,根据MAC地址转发帧

  • 往前可以堪称是一个“低层的路由器”,不过路由器是在网络层根据IP地址转发,网桥是在数据链路层根据MAC地址转发
  • 从而有了“内网”和“外网”的概念
  • 每个被网桥连接的局域网称为网段(segment)

功能

  • 泛洪:从一个端口进来就立即转发到其他端口上去
  • 存储转发:将数据只发到指定的局域网上面。在网桥上面有个MAC地址表,通过查询MAC地址获取发到什么位置
  • 过滤:同个局域网上的数据也会被传到网桥上面,如果网桥还是进行存储转发网段上目的主机会收到多份数据会出现重复错误。因此网桥应该丢弃这些数据
  • 自学习
    1. 初始化MAC地址表为空
    2. MAC地址表记下每一次发送发送端所属的网段,并更新生存期(TTL, time-to-live)
      生存期为了应对目的节点关闭或者移动的问题
      MAC地址表中过了TTL以后的项会被删除
      每有一次数据交互,对应MAC地址表中的项会重新计时

广播风暴
对于存在多个网桥的情况下很容易产生回路,这将导致严重错误

生成树算法

  • S1:找根节点
    网桥下标最小(优先级数最小)的那个为根节点
    具体方法是每个节点都扩散消息,如果一个网桥收到比自己小的消息就不再扩散,直至只有一个扩散
  • S2:其他网桥找一条到根节点的最短路径
    多条最短路径下往下一网桥下标小的走
    如果网桥也相同就往端口号小的走
    网桥出这条路径的端口称为根端口(root port)
  • S3:每个网段找一条到根节点的最短路径
    多条最短路径下往下一网桥下标小的走
    如果网桥也相同就往端口号小的走
    这样每个局域网会对应一个网桥,这个网桥称为指定网桥(designated bridge),网桥上与其连接的端口称为指定端口(designated port)
  • S4:断开其他路径
    非根端口,指定端口的端口称为阻塞端口(blocked port)

这里写图片描述


链路层设备

种类

交换机

  • 实现存储转发的功能
  • 每个端口一个冲突域
  • 全双工

集线器

  • 物理层设备
  • 无存储功能,从一个端口收到任何信号后立即转发到其它端口(泛洪)
  • 没有逻辑,因此是物理层设备
  • 半双工:同时只能支持一个端口的接收
  • 所有端口都在一个冲突域上。冲突域:冲突域内可能出现冲突,两个冲突域间不会出现冲突

令牌环网络

  • 有一个特殊的帧作为令牌(token),令牌绕环而行,截到令牌的主机才能发送数据 每台主机持有令牌的时间有限制
    数据也像令牌一样绕环而行,目标主机发现是自己的就将其备份,将副本收下
    最后由发送方收回数据
  • 如果拿到令牌的主机故障?
    需要有个主机发令牌监控令牌
  • 如果发令牌的主机也故障?
    其它主机需要监控发令牌的主机

虚拟局域网(VLAN)

虚拟局域网用于同一局域网内不同主机间的隔离

  • 局域网内主机分组标记,同一组内可以交换信息,不同组内隔离信息
  • 网桥会根据VLAN ID端口转发数据
    网桥默认全部端口都属于VLAN 1

网桥和网桥之间就存在了信息交互的问题

  • 因此需要在网桥间连通一条通路保证信息的交互,这条通路称为干道(trunk),干道两端的接口称为干道接口(trunk interface)
    任一VLAN的帧都可以在trunk上转发,不过要带有VLAN ID,这个VLAN ID由网桥进行判断并加入到帧里面
    在干道接口上往来的帧要加VLAN ID信息,如果干道接口接收到一个没有VLAN ID信息的帧会遵从默认值,认为这个帧属于VLAN 1(如果没有另外修改默认值的话)
  • 干道接口以外的接口都称为主机接口(host interface)
    在主机接口上往来的帧不加VLAN ID,如果主机接口上收到带有VLAN ID信息的帧会直接丢弃
    这里写图片描述

接收时

  • 主机端口接收到不带VLAN信息的帧会根据接收端口所属的VLAN给其指定一个VLAN
  • 主机端口接收到带有VLAN信息的帧会将整个帧直接丢弃
  • VLAN里面trunk接口收到一个不带VLAN信息的帧会认为其属于native VLAN(VLAN 1)
  • VLAN里面trunk接口收到带有VLAN信息的帧会根据VLAN信息进行转发

发送时
- 主机接口发送不带有VLAN信息的帧
- trunk接口发送带有VLAN信息的帧

最后

以上就是清爽大神为你收集整理的数据链路层知识梳理的全部内容,希望文章能够帮你解决数据链路层知识梳理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部