数据链路层( 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

谈谈网络协议 - 数据链路层( Data Link)的更多相关文章

  1. 网络体系结构的概念 - 网络协议TCP - 红黑联盟

    https://i.cnblogs.com/EditPosts.aspx?opt=1 网络体系结构的概念  计算机网络就是一组通过一定形式连接起来的计算机系统,它需要四个要素的支持,即通信线路和通信设 ...

  2. Fixed-Length Frames 谈谈网络编程中应用层(基于TCP/UDP)的协议设计

    http://blog.sina.com.cn/s/blog_48d4cf2d0101859x.html 谈谈网络编程中应用层(基于TCP/UDP)的协议设计 (2013-04-27 19:11:00 ...

  3. Java 面试知识点解析(五)——网络协议篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  4. 网络协议OSI模型-TCP/IP-三次握手

    OSI模型 在制定计算机网络标准方面,起着重大作用的两大国际组织是:国际电信联盟电信标准化部门,与国际 标准组织(ISO),虽然它们工作领域不同,但随着科学技术的发展,通信与信息处理之间的界限开始 变 ...

  5. web网络协议

    一.OSI七层模型   OSI参考模型是国际标准化组织ISO(International Standards Organization )制定的模型,把计算机与计算机之间的通信分成七个互相连接的协议层 ...

  6. 网络协议,socket模块

    """网络通讯要素:1.物理介质2.通讯协议 osi五层模型 应用层 传输层 网络层 数据链路层 物理层 物理层能传输010101二进制单纯的二进制是没有意义的,必须得知 ...

  7. day28 网络协议OSI 及socket模块

    反射都是操作对象中的__dict__的内容 class Student: def study(self): print("正在学习....") stu = Student() if ...

  8. TCPIP网络协议层对应的RFC文档

    原文地址:TCPIP网络协议层对应的RFC文档作者:西木 RFC - Request For Comments 请求注解 TCP/IP层 网络协议 RFC文档 Physical Layer Data ...

  9. [转] TCPIP 网络协议层对应的RFC文档

    TCPIP网络协议层对应的RFC文档 RFC - Request For Comments 请求注解 TCP/IP层 网络协议 RFC文档 Physical Layer Data Link Layer ...

随机推荐

  1. 限流神器Sentinel,不了解一下吗?

    概述 书接上回:你来说说什么是限流? ,限流的整体概述中,描述了 限流是什么,限流方式和限流的实现.在文章尾部的 分布式限流,没有做过多的介绍,选择了放到这篇文章中.给大伙细细讲解一下 Sentine ...

  2. 闲聊,Python中的turtle

    写在前面 其实我也不知道为什么我会写这个,本文涉及信号与传递,Python 正题 近期看到一个3年前的视频,1000个圆一笔画出一个Miku 在观看完源码了以后,我发现这是这调用的是基本的goto,用 ...

  3. 多元统计之因子分析模型及Python分析示例

    1. 简介 因子分析是一种研究观测变量变动的共同原因和特殊原因, 从而达到简化变量结构目的的多元统计方法. 因子分析模型是主成分分析的推广, 也是利用降维的思想, 将复杂的原始变量归结为少数几个综合因 ...

  4. 一千个不用 Null 的理由!

    港真,Null 貌似在哪里都是个头疼的问题,比如 Java 里让人头疼的 NullPointerException,为了避免猝不及防的空指针异常,千百年来程序猿们不得不在代码里小心翼翼的各种 if 判 ...

  5. Jquery Validate动态添加和删除校验规则

    以下面文本框为例, <input type="text"name="username" id="username"/> 我们要让 ...

  6. Neural Approaches to Conversational AI

    Neural Approaches to Conversational AI 学姐介绍的一篇综述阅读笔记 SIGIR 2018 主要贡献: 提出一个综合的调查关于最近几年的应用在QA,任务导向和闲聊对 ...

  7. STM32F103学习进程

    软硬件下载程序和程序运行的相关问题和解决方案,以我自身买的STM32F103C8T6为例 (1) 硬件需要 1. 购买一个STM32F103XXX的板子.这是一个操作实践性非常强的一个学习过程,如果没 ...

  8. 安装GLPI

    Centos7安装GLPI资产管理软件 系统信息 环境说明 下面的命令可以查看系统的版本信息,本次使用的是centos7 cat /etc/redhat-release uname -a IP地址信息 ...

  9. ZSH主题

    All the current themes can be found in the themes/ directory in the oh-my-zsh distribution. See list ...

  10. WIN10 网卡驱动异常代码56的问题及解决方法

    故障描述: 原来使用正常的一个微机室,突然一天控制端主机网络连接异常,平时的网络控制软件无法使用.检查网络配置正常,网络诊断.修复.将网卡禁用也没有效果:后来删除网卡想重装,则恶运开始,无法安装驱动: ...