数据链路层( Data Link)

  • 链路:从1个节点到相邻节点的一段物理线路(有线或无线),中间没有其他交换节点

    案例

    上图可以看出,总共由5条链路组成:

    • 第1条:计算机0 => 路由器0,使用CSMA/CD协议,中间虽然有经过集线器,但集线器没有任何功能,就相当于一条网线
    • 第2条:路由器0 => 路由器1,使用PPP协议
    • 第3条:路由器1 => 路由器2,使用PPP协议,与上一条的数据有区别就是目标MAC与源MAC地址都会发生变化
    • 第4条:**路由器2 ** => 交换机0,使用CSMA/CD协议
    • 第5条:**交换机0 ** => 计算机1,使用CSMA/CD协议,与第4条的数据完全一样,交换机只做判断转换发哪台设备
  • 数据链路:在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输

    • 不同类型的数据链路,所用的通信协议可能是不同的

      • 广播信道:CSMA/CD协议(比如同轴电缆、集线器等组成的网络)
      • 点对点信道:PPP协议(比如2个路由器之间的信道)
  • 数据链路层的3个基本问题

    • 封装成帧
    • 透明传输
    • 差错检验

封装成帧

  • 帧(Frame)的数据部分

    • 就是网络层传递下来的数据包(IP数据包,Packet)
  • 最大传输单元MTU(Maximum Transfer Unit)
    • 每一种数据链路层协议都规定了所能够传送的帧的数据长度上限
    • 以太网的MTU为1500个字节

透明传输

  • 使用SOH(Start Of Header)作为帧开始符
  • 使用EOT(End Of Transmission)作为帧结束符
  • 数据部分一旦出现了SOH、EOT,就需要进行转义
    • 对中间出现了SOH、EOT的数据后面添加 ESC 标识,有了这个标识就知道前面的数据是不是开始或结束符了
    • 到了接收端拆包的时候会先去掉转义字符,还原数据,这个过程被称为:透明传输

差错检验

  • FCS 是根据数据部分 + 首部计算得出的,主要用于数据完整性校验

    • 在发送端生成 FCS
    • 在接收端再通过同样的算法生成 FCS,再去判断是现有的 FCS 是否一至,一至数据则是完整的
  • 注:Ethernet(以太网) V2的版本是没有 帧开始符和 帧结束符的,后面会讲

CSMA/CD 协议

  • CSMA/CD(Carrier Sense Multiple Access with Collision Detectio)

    • 载波侦听多路访问/冲突检测 (多路访问:广播)
  • 使用了CSMA/CD的网络可以称为是以太网(Ethernet),它传输的是以太网帧
    • 以太网帧的格式有:Ethernet V2标准、IEEE的802.3标准
    • 使用最多的是:Ethernet V2标准
  • 为了能够检测正在发送的帧是否产生了冲突,以太网的帧至少要64字节
    • 如果小于 64字节,那样就监听不到冲突了,冲突监听如下:

      • 当两边都在发送数据,数据在链路中间相撞的时候如何判断数据是从哪里发过来的,再重发呢?
      • 如果两段数据都很短,那在中间碰撞肯定是不知道数据是从哪里发过来的
      • 如果数据很长,在中间碰撞的时候,这边还有数据没发送完还在继续传,这个时候就能知道数据当前是从哪里发出的,并且能中断并重发
  • 用交换机组建的网络,已经支持全双工通信,不需要再使用CSMA/CD,但它传输的帧依然是以太网帧
    • 所以,用交换机组建的网络,依然可以叫做以太网

Ethernet(以太网) V2帧的格式

  • 首部:目标MAC(6字节)+源MAC(6字节) + 网络类型 (2字节)(IPV4/IPV6,用二进制表式 4 / 6)
  • 尾部:FCS (4字节)(差错检验值)
  • 以太网帧:首部 + 数据 + FCS(尾部)
  • 帧 最小为 64 字节
  • 数据的长度至少是:64 – 6 – 6 – 2 – 4 = 46字节,最多 1500
  • 注:V2版本是没有 帧开始符 和 帧结束符的
    • 使用的曼彻斯特编码,接收端接收帧过程,只要发现没有信号跳变,就认为是帧结束
    • 将以太网帧传到物理层后,会在前面再加上8字节的头部数据,前7字节为前同步码(处理时钟同步之类的),后1字节为 帧开始定界符

Ethernet (以太网) V2标准

  • 当数据部分的长度小于46字节时

    • 数据链路层会在数据的后面加入一些字节填充,填充至46字节
    • 接收端会将添加的字节去掉

  • 长度总结

    • 以太网帧的数据长度:46~1500字节
    • 以太网帧的长度:64~1518字节(目标MAC +源MAC + 网络类型 + 数据 + FCS)

网卡

  • 网卡是具有 物理层和数据链路层的功能

    • 物理层:物理连接和数据信号同步、数据的编码与解码
    • 数据链路层:帧的封装与拆封、帧的差错校验、介质访问控制(CSMA/CD)
  • 网卡接收到一个帧,首先会进行差错校验,如果校验通过则接收,否则丢弃
  • Wireshark抓到的帧没有FCS ,因为它抓到的是差错校验通过的帧(帧尾的FCS会被硬件去掉)
    • Wireshark抓不到差错校验失败的帧

PPP协议(Point to Point Protocol)

  • 点到点协议

  • Address字段:图中的值是0xFF,形同虚设,点到点信道不需要源MAC、目标MAC地址
  • Control字段:图中的值是0x03,目前没有什么作用
  • Protocol字段:内部用到的协议类型
  • 帧开始符、帧结束符:0x7E

PPP协议 - 字节填充

  • 当数据中含有7D或7E时,为了解决数据冲突的问题,将对应数据进行转义

    • 0x7E 替换成 0x7D5E
    • 0x7D 替换成 0x7D5D

最新文章

  1. SharePoint 2013 工作流之Visual Studio开发示例篇
  2. netbean快捷键
  3. TSQL的连乘
  4. 简单shell脚本
  5. JS图标插件
  6. python的二维数组操作
  7. JSON 分析数据格式
  8. USACO Section 1.2 Milking Cows 解题报告
  9. WPF: WpfWindowToolkit 一个窗口操作库的介绍
  10. Android Widget工作原理详解(一) 最全介绍
  11. GridView 事件出发后 内容滚动条 实时定位
  12. Lua 哑变量
  13. PHP中生产不重复随机数的方法
  14. OPC_Data Access Automation Interface Standard V2.02
  15. Amazon RDS 上的 Microsoft SQL Server » 导入和导出 SQL Server 数据库
  16. 判断B是不是A的子结构
  17. 利用jQuery扩展接口为jQuery框架定义了两个自定义函数,然后调用这两个函数
  18. LeetCode题解之N-ary Tree Postorder Traversal
  19. ZOJ Problem Set - 1004-Anagrams by Stack
  20. log4j显示hibernate sql参数的配置

热门文章

  1. 27、Tomcat服务的安装与配置
  2. xf浅谈_最短路
  3. C# 实现复制Excel内容到DataGridview中
  4. 解决WebStorm开发vue提示Module is not installed、Unresolved variable or type
  5. docker安装redis主从以及哨兵
  6. IDEA中Springboot启动热部署
  7. Spring 依赖注入(DI) 的三种方式 和 对集合类型的注入
  8. APP-SECURITY-404 组件导出漏洞复现
  9. Jmeter使用笔记001
  10. 基于Ryu的流量采集代码实现