【计算机网络】数据链路层(一):数据帧和物理寻址

2023-10-31

数据链路层是物理层的上层,物理层是把电脑连接起来的物理手段,它主要规定了网络的一些电气属性,其作用是负责传送0和1的电信号。数据链路层位于物理层的上层,简单的阐述它的作用就是确定0和1的分组方式。

下面我们就详细的介绍数据链路层。

                                                       

                                     

上面是TCP/IP协议族中不同层次的协议,这个系列我们将从下往上来介绍这个TCP/IP协议。

从上可以看出,链路层主要有三个目的

  1. 为IP模块发送和接收IP数据报;
  2. 为ARP模块发送ARP请求和接收ARP应答;
  3. 为RARP发送RARP请求和接收RARP应答。
从上面协议可知,两个主机,其用户之间的通信是发送者主机从上至下,接收者主机从下往上。发送者用户(应用层)的数据经由传输层、网络层、链路层,然后通过物理层(媒介)连接到接收者的物理层,然后从下往上经链路层、网络层、传输层再到应用层的接收者用户。来回通信的话就是彼此交换发送者,接收者。需要注意的是,从下往上,数据报是越来越大,因为包含的地址信息越来越多,有效载荷(数据包)是不变的。链路层首部包含双方的MAC地址,网络层添加了双方的网络地址,传输层则添加了双方的端地址,层层添加,反过来,从上至下则是层层过滤。如下图(from RFC,page-18)

                                                    

更形象的表示:

    

接收方中的物理层接受信息单元并将其传送至数据链路层,然后其链路层读取包含在发送方的数据链路层预先添加在协议头中的控制信息,接下来去除协议头和协议尾,剩余部分被传送至网络层,协议栈向上层层过滤,去除对应该层的首部后,最后到达应用层,发送方的数据就被传输到接收方的应用程序。

无论在多么复杂的网络中,从逻辑意义上讲,真正的数据传输通道就是数据链路层中所定义的数据链路。

数据链路层肩负着上接网络层,下连物理层的中介作用,还需要处理其间的数据传输故障等。事实上,数据链路层在不可靠的物理介质上提供可靠的传输,该层的作用包括:物理地址寻址、数据的成帧、流量控制,数据的检错,重发等。


物理地址寻址:

通信当然得知道发送者的地址和接受者的地址,这是最基础的。以太网规定,所有连入网络的设备,都必须具有“网卡”接口。然后数据包是从一块网卡,传输到另一块网卡的。网卡的地址,就是数据包的发送地址和接收地址,叫做MAC地址,也叫物理地址,这是最底层的地址。每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。有了这个地址,我们可以定位网卡和数据包的路径了。


那么在实际通信时,我们怎么知道对方的MAC地址呢?这里我们是通过ARP协议(地址解析协议),就是根据IP地址(网络层)获取MAC地址的一个TCP/IP协议。上面有说到,发送者从上至下,就需要在已知IP地址的情况下,获取MAC地址发送给接收者,自然地,接收方从下往上时,需要逐步添加对方的地址信息,需要已知MAC地址的情况下,RARP协议(逆地址解析协议)获得对方的IP地址。

那么知道了对方的MAC地址,连接是如何建立的呢?

这里简单的说下广播方式(目的端为给定网络上的所有主机),系统将数据包(包含MAC地址)向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。

                                        

上图,1号计算机向2号机算机发送一个数据包,同一个子网络的计算机都会收到这个包。它们读取这个包的首部,找到接受方的MAC地址,同自身的MAC地址相比较,如果两者相同,就接收这个包,作进一步处理,否则就丢弃。

事实上还有其余方式如单播和多播这里就不说明了。


数据帧封装:

封装简单说就是事先对数据包进行拆分和打包,在所发送的数据包上附加上目标地址,本地地址,以及一些用于纠错的字节等。对数据包进行处理时通信双方所遵循和协商好的规则就是协议。

先说说当今TCP/IP采用的主要的局域网技术——以太网。
网络层传输的包(packet),在数据链路层中传输的是“帧”(frame)。数据包到达数据链路层后加上数据链路层的协议头和协议尾就构成了一个数据帧。前面说到,数据部分也就是有效载荷,其各个层都是一样的
以太网(Ethernet)规定:一组电信号构成一个数据包,叫做“帧”(Frame),每个帧分为两个部分:首部(Head)和数据(Data)。
                                                           
“首部”自然是包含数据包的一些说明项,如发送者、接收者、数据类型等等,“数据”则是数据包的具体内容。不论是以太网帧还是后面网络层的IP数据报都是这么个格式类型。

前面说到,数据链路层位于物理层和网络层之间。在发送端,数据链路层是接收来自网络层的数据分组,而在接收端它是接受来自物理层的比特流,所以数据链路层的成帧功能就包含两层含义:一是将来自物理层的一个个比特流组装成数据帧(成为帧同步),二是将来自网络层的数据分组封装成数据帧。

在发送端数据链路层中的帧到达物理层后就会以比特位为单位进行传输,而不是以帧为单位进行传输,在物理线路上数据的传输单位是比特位。发送端以比特位方式一位位地传输到接收端的物理层,然后接收端的物理层把比特流向数据链路层传输,达到后又要将比特流封装成数据帧,添加的首部信息是通过读取对方这就是数据链路层的帧组装方式。

帧同步的目的就是要使接收端的数据链路层对从物理层传输而来的一串串比特流以帧为单位进行区分,根据帧头和帧尾来区分一个完整帧。


以太网和IEEE 802封装

    

            

         

各个字段的详细说明:

目的地址(Destination Address,DA)和源地址(Source Address,SA):两种帧都采用6字节的目的地址和源地址(802.3允许16bit),也就是MAC地址,只有网络接口才能识别。

长度(Length)或类型(Type):从网络层来的数据包,大小可以在46—1500字节之间变化。

校验序列(Frame Check Sequence,FCS):FCS是位于帧尾的字段,它用来存放循环冗余校验(CRC)。


数据链路层除了数据的封装成帧之外,还需要保证数据在该层的“透明”传输,即使在数据链路层上所传输的数据在内容、格式及编码上都没有限制,也要保证数据从发送端无差错地在数据链路上传输到目的接收端。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【计算机网络】数据链路层(一):数据帧和物理寻址 的相关文章

  • Linux内存buffer和cache的区别(转)

    内存使用说明 Free 命令相对于top 提供了更简洁的查看系统内存使用情况 root rac1 free total used free shared buffers cached Mem 1035108100898426124 0 12
  • ERP系统介绍

    ERP简介 企业资源计划或称企业资源规划简称ERP Enterprise Resource Planning 由美国著名管理咨询公司Gartner Group Inc 于1990年提出来的 最初被定义为应用软件 但迅速为全世界商业企业所接受

随机推荐

  • 你说,PC做!实在智能推出行业首个基于大模型的TARS-RPA-Agent产品

    2023年初 火遍全球的ChatGPT揭开AIGC元年大幕 国内外各家科技公司纷纷发布大模型 一时间 百模大战 风起云涌 6月下旬 AI行业准独角兽实在智能 Intelligence Indeed 开启自研垂直大语言模型 塔斯 TARS 内
  • Arduino加速度计射频自动化系统

    该项目旨在设计基于加速度计的实验室自动化系统 该系统分为两部分 1 发送器部分和 2 接收器部分 对于该实验 考虑使用两个负载灯泡和风扇 图1给出了系统框图 物料清单 发送端 接收端 接线 发送端 接收端 原理图 代码 发送端代码 接收端代
  • Halcon 12.0下载

    Halcon 12 0 链接 https pan baidu com s 15JpLWsfzIIhQEU4jE 3AsQ 密码 l0wt
  • 华为OD C++机试面试题 02 字符串反转

    华为OD C 机试面试题 02 字符串反转 题目描述 接受一个只包含小写字母的字符串 然后输出该字符串反转后的字符串 字符串长度不超过1000 输入描述 输入一行 为一个只包含小写字母的字符串 输出描述 输出该字符串反转后的字符串 示例1
  • 整流桥-桥式整流工作原理

    整流桥 有多种方法可以用整流二极管将交流电转换为直流电 包括半波整流 全波整流以及桥式整流等 整流桥 就是将桥式整流的四个二极管封装在一起 只引出四个引脚 四个引脚中 两个直流输出端标有 或 两个交流输入端有 标记 应用整流桥到电路中 主要
  • PyQt(Python+Qt)学习随笔:什么是信号绑定(Unbound and Bound Signals)?

    老猿Python博文目录 专栏 使用PyQt开发图形界面Python应用 老猿Python博客地址 1 概述 信号的绑定是由在类的实例变量中第一次通过类实例的方式 即 self 信号 或 实例名 信号 引用时触发 PyQt5会自动将该实例绑
  • python3-元组常用操作和函数

    元组与列表类似 不同点为 格式不同 元组数据使用 小括号 列表数据使用 方括号 元组中的元素不允许修改 删除等操作 即 改变元组中元素的操作都不被允许 元组只存在一个元素时 需要使用 逗号结尾 否则结果默认为对应元素的类型而不是元组 但是列
  • Protrator自动化测试(针对Angular 应用的自动化测试)

    环境准备工作 1 Protrator 是在NodeJs 环境下运行的 所以第一步是安装NodeJS 2 测试本机是否安装了NodeJs 可以命令行下输入 node v 将会输出NodeJS 的版本号 在Window下没有什么好的命令行工具
  • Weblogic-SSRF漏洞复现

    SSRF漏洞存在于http your ip 7001 uddiexplorer SearchPublicRegistries jsp 我们在brupsuite下测试该漏洞 访问一个可以访问的IP PORT 如http 127 0 0 1 7
  • python接口自动化参数传递_2、Python接口自动化系列之unittest结合ddt的使用

    前面一篇我们已经把unittest的常用用法都已经讲过了 可能很多小伙伴有个疑问 unittest框架怎么做数据驱动呢 这节我们就来学习一下 1 unittest 没有自带数据驱动功能 所以如果使用unittest 同时又想使用数据驱动 那
  • vue 后端数据成功返回 页面不渲染_vue能获取到数据数据却渲染不到页面上,为什么?...

    问题描述 从后台可以拿到数据 并打印在控制台但是就是渲染不到页面 我也不知道是为什么 感觉都正常 问题出现的环境背景及自己尝试过哪些方法 尝试用let this this来代替this但是还是没用并且报出success是undefined的
  • 121-----JS基础-----滚轮事件(鼠标)

    一 代码 很简单
  • angularjs--------选择下拉框

    div class id div
  • The NVIDIA driver on your system is too old (found version 10000)

    问题 原因是因为CUDA版本与pytorch版本不匹配 解决办法 查看自己的CUDA版本 我的是CUDA 10 0 https pytorch org 把这行复制到Anaconda Prompt窗口就行了
  • CPU虚拟化

    CPU虚拟化 中央处理器 CPU 是计算机的主要设备之一 是计算机中的核心配件 在计算机体系结构中 CPU是对计算机的所有硬件资源 如存储器 输入输出单元 进行控制调配 执行通用运算的核心硬件单元 计算机系统中所有软件层的操作 最终都将通过
  • @ControllerAdvice 的介绍及三种用法

    学习下 ControllerAdvice 首先 ControllerAdvice本质上是一个 Component 因此也会被当成组建扫描 加了 ControllerAdvice的类为那些声明了 ExceptionHandler InitBi
  • IP地址分类(A类 B类 C类 D类 E类)

    IP地址由四段组成 每个字段是一个字节 8位 最大值是255 IP地址由两部分组成 即网络地址和主机地址 网络地址表示其属于互联网的哪一个网络 主机地址表示其属于该网络中的哪一台主机 二者是主从关系 IP地址的四大类型标识的是网络中的某台主
  • 如何完美解答面试问题——HashMap的扩容机制(JDK1.7)

    大家好 我是孤焰 今天要谈一谈在面试过程中几乎被每个面试官都会提到的一个问题 HashMap的扩容机制是什么 由于我也是刚刚学习编程的小白 所以此篇博文将参考了多篇博文 最后总结而成 此篇博文仅介绍JDK1 8版本之前的HashMap扩容机
  • Unity3D 动画操作

    导入模型 https blog csdn net shenqiankk article details 100064940 方式一 Animator animation SetBool 状态转换的参数 true false 在创建对象前 先
  • 【计算机网络】数据链路层(一):数据帧和物理寻址

    数据链路层是物理层的上层 物理层是把电脑连接起来的物理手段 它主要规定了网络的一些电气属性 其作用是负责传送0和1的电信号 数据链路层位于物理层的上层 简单的阐述它的作用就是确定0和1的分组方式 下面我们就详细的介绍数据链路层 上面是TCP