• 谈谈网络协议


    数据链路层( 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个基本问题

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

    封装成帧

    image-20210315131543075

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

    透明传输

    image-20210315131830865

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

    image-20210315132118656

    差错检验

    image-20210315132539689

    • 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帧的格式

    image-20210315133956084

    • 首部:目标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)

    网卡

    image-20210315141151452

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

    PPP协议(Point to Point Protocol)

    • 点到点协议

    image-20210315141633456

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

    PPP协议 - 字节填充

    image-20210315142110592

    • 当数据中含有7D或7E时,为了解决数据冲突的问题,将对应数据进行转义
      • 0x7E 替换成 0x7D5E
      • 0x7D 替换成 0x7D5D


    作者:悠悠清风
    出处:https://www.ywgao.cn/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    我的联系方式:

  • 相关阅读:
    Vasya and Endless Credits CodeForces
    Dreamoon and Strings CodeForces
    Online Meeting CodeForces
    数塔取数 基础dp
    1001 数组中和等于K的数对 1090 3个数和为0
    1091 线段的重叠
    51nod 最小周长
    走格子 51nod
    1289 大鱼吃小鱼
    POJ 1979 Red and Black
  • 原文地址:https://www.cnblogs.com/xgao/p/15137064.html
Copyright © 2020-2023  润新知