数据链路层协议

文章目录

  • 数据链路层协议
    • 0. 数据链路层解决的问题
    • 1. 以太网协议
      • (1) 认识以太网
      • (2) 以太网帧格式
        • <1> 两个核心问题
      • (3) 认识MAC地址
      • (4) 局域网通信原理
      • (5) MTU
        • <1> 认识MTU
        • <2> MTU对IP协议的影响
        • <3> MTU对UDP协议的影响
        • <4> MTU对TCP协议的影响
        • <5>查看硬件地址和MTU
    • 2. ARP协议
      • (1) ARP数据报的格式
      • (2) ARP协议的作用
      • (3) ARP协议的工作流程
        • <1> 故事版
        • <2> 整个流程
      • (4) ARP欺骗

数据链路层协议

0. 数据链路层解决的问题

现在要把数据从主机B发送到主机C。数据报文在进行转发时是要一跳一跳的从一台主机跳到另一台主机,最终才能将数据转发到目标主机。IP解决的并不是把数据从B传到C的问题,而是帮我们提供路径选择。

在这里插入图片描述

  • 把数据从主机B发送到主机C,我们知道了为什么要从路由器F到G(IP路由选择);那怎么把数据从B发送到F,这就是数据链路层要解决的问题。
  • 数据从B送到F,同一个子网内两台主机可以直接通信,所以当前主机B一定和下一条路由器F属于同一个子网 ,路由器F一定和它下一条路由器G属于同一个子网。把数据从B送到F的本质就是:在同一个子网内,数据是如何发送的
  • 所以所谓跨网络的本质:就是经历很多子网或者局域网;跨网络传输:在很多局域网内进行路由选择和转发
  • 将数据从A主机跨网络送到B主机的能力:传输层TCP保证了数据发送时的可靠性;网络层IP提供了数据发送时路径选择的能力,数据链路层解决了一个局域网内两台主机如何通信的问题。

1. 以太网协议

(1) 认识以太网

  • “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容。例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  • 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
  • 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

(2) 以太网帧格式

以太网的帧格式如下所示:

在这里插入图片描述

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
  • 帧末尾是CRC校验码。
<1> 两个核心问题
  1. 报头和有效载荷如何分离(解包)

    以太网MAC帧的帧头和帧尾都是固定长度,当底层收到一个MAC帧后,直接提取出MAC帧当中固定长度的帧头和帧尾,此时剩下的就是有效载荷了。

  2. 如何决定将有效载荷交付给上层的哪一个协议?

    根据MAC帧的帧头中2字节帧协议类型来向上交付

(3) 认识MAC地址

详细请看博客:网络基础1-CSDN博客

  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位, 及6个字节。一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改。 mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)。

对比MAC地址和IP地址

  • IP地址描述的是路途总体的 起点 和 终点;
  • MAC地址描述的是路途上的每一个区间的起点和终点;

(4) 局域网通信原理

故事版:网络基础1-CSDN博客

局域网通信的一般过程:主机A和主机D通信过程

在这里插入图片描述

A主机构建MAC帧,A主机把数据发到局域网中,其他主机收到了吗?

  • 收到了,B R C D 包括A自己都收到了,这里的收到指的是在他们各自的数据链路层收到了。

  • 以B为例,收到此数据帧后会进行报头和有效载荷的分离,分离后发现此数据帧报头是macD不是macB,就直接把此报文丢弃了。那么此报文有向上交付吗?没有,主机B从IP层往上并不知道曾经收到过这个报文,上层不知道,就相当于主机B从未收到过这个数据帧。同理R,C也直接把此报文丢弃了。

  • 即主机A与主机D发送数据时,B R C 在底层都收到了,只是B R C把报文丢弃了。整个过程就好像主机A与主机D单独通信。主机D收到主机A的报文后,会给A进行响应,过程就如同A给D请求时相同。

  • 大部分局域网抓包软件的原理:网卡中设置成混杂模式(不对数据过滤),不对报文的目标MAC地址进行认证,直接进行向上交付

局域网中的数据碰撞问题

  • 局域网是一份共享的资源,两台主机之间通信时若有其他主机之间也在通信,这些数据就会发生干扰碰撞。即局域网中,任何时刻,只能有一台主机在给另一台主机发送数据帧,否则可能会发生数据碰撞的问题
  • 我们平时也把局域网称为碰撞域。一旦发生数据碰撞怎么解决呢?mac帧协议的CRC校验码会进行碰撞检测,当检测到发生了碰撞时会进行碰撞避免。所谓的碰撞避免就是“等一会”(sleep(随机数)),错开发送时间,然后再重新发送mac帧。
  • 局域网中任何一台主机都使用以太网,任何一台主机发出数据时都要做碰撞检测和碰撞避免,一旦发生碰撞可不是一台主机在碰撞检测和碰撞避免,而是多台主机。主机随机休息的时间不同会在较大概率上错开发送数据时间,大家都休息时曾经不休息的主机就可以发送数据。那么在局域网中的碰撞会很严重吗,有可能但并不影响不要忽略光速传播的速率。
  • 在系统角度:局域网就是一种临界资源,碰撞检测和碰撞避免是保证临界资源的安全性的策略;局域网中的各个主机就是进程,他们就想访问临界资源。
  • 基于局域网通信原理,可以通过向局域网中不断发送大量的垃圾数据,此时就不断尝试与局域网中的数据发生碰撞,发送方会认为自己丢包进行重传,就能黑掉这个局域网。

交换机

局域网中主机越多,碰撞概率越高。我们平时在学校里可能中午时间校园网比较卡,大家都在连接碰撞概率高,容易丢包,拉匀时间线就是带宽比较低;而半夜两三点网速很快。

在这里插入图片描述

为了解决上面主机越多,碰撞概率越高的问题。可以在局域网中使用交换机。交换机能够对局域网进行碰撞域划分,在一定概率上大大较少数据碰撞的概率。例如图中主机A、C之间的数据转发将不会被交换机转发至另一侧;同时交换机能够识别局部性的碰撞,如果交换机一侧发生了碰撞,那么就不会对这个碰撞数据进行转发,该次碰撞将不会影响另一侧的数据转发。

(5) MTU

<1> 认识MTU

MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层, 产生的限制。

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
    最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;

  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片 (fragmentation);

  • 不同的数据链路层标准的MTU是不同的;

<2> MTU对IP协议的影响

由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包。

  • 将较大的IP包分成多个小包, 并给每个小包打上标签;
  • 每个小包IP协议头的 16位标识(id) 都是相同的;
  • 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最
    后一个小包, 是的话置为1, 否则置为0);
  • 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
  • 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败。但是IP层不会负责重新传输数据
<3> MTU对UDP协议的影响

让我们回顾一下UDP协议:

  • 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报。
  • 这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败。那么这就意味着, 如果UDP数据报在
    网络层被分片, 整个数据被丢失的概率就大大增加了。
<4> MTU对TCP协议的影响

让我们再回顾一下TCP协议:

  • TCP的一个数据报也不能无限大, 还是受制于MTU。TCP的单个数据报的最大消息长度, 称为MSS(Max
    Segment Size);
  • TCP在建立连接的过程中, 通信双方会进行MSS协商。
  • 最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍是受制于数据链路层的MTU)。
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。
  • 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS。
  • MSS的值就是在TCP首部的40字节变长选项中(kind=2);

MSS和MTU的关系

在这里插入图片描述

<5>查看硬件地址和MTU

使用ifconfig命令, 即可查看ip地址, mac地址, 和MTU;

在这里插入图片描述

2. ARP协议

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;

(1) ARP数据报的格式

在这里插入图片描述

  • 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
  • 以太网目的地址,不知道时,填成FFFFFF代表局域网广播地址
  • 帧类型,如果是ARP封装MAC帧时,填成0806代表ARP的请求或应答
  • 硬件类型指链路层网络类型,1为以太网;
  • 协议类型指要转换的地址类型,0x0800为IP地址;
  • 硬件地址长度对于以太网地址为6字节;
  • 协议地址长度对于和IP地址为4字节;
  • op字段为1表示ARP请求,op字段为2表示ARP应答
  • 目的以太网地址,不知道时,也填成FFFFFF,用作占位符

(2) ARP协议的作用

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系。

  • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
  • 因此在通讯前必须获得目的主机的硬件地址;

(3) ARP协议的工作流程

<1> 故事版
  • 今天老师在教室里给学生上课。正常上课前,教务处会提前给老师一份学生名单便于老师的提问点名;可是今天由于疏忽给老师了一份学生学号的列表。老师本人比较负责,点名提问时会先问:学号是20010的学生是谁,此动作就是在教室里广播;所有同学都收到了,此时大家会与自己学号作对比,发现不是自己就丢弃;此时学号为20010的学生站起来,说:老师,我叫张三。你可以提问我。老师就此得到了这位同学的姓名,在此过程中老师并没有提问而是做了学号转姓名的工作。

  • 老师在此过程中做的就是ARP工作;学生学号就等同于IP地址,学生姓名就等同于MAC地址

<2> 整个流程

共识:

  • 在局域网中,任何一台主机都有可能向别人发起ARP请求或者收到别人发的ARP请求;即任何一台主机都会收到别人的ARP应答或者收到别人发的ARP请求

  • 任何主机收到ARP后,优先看OP

以A和F通信为例:

在这里插入图片描述

  • A给F发送数据帧时,B,C,D,E,F所有主机都会收到这个数据帧,会不会处理呢?以C为例,对比目的MAC地址是全F,报头和有效载荷分离后会交给自己的ARP层(由于帧类型是0806),同理其他的所有主机全都会向上交付。主机C收到ARP请求后,先看OP再看目的IP地址。发现不是请求自己就直接在ARP层丢弃掉对应报文。

  • 主机F收到后,发现是在请求自己,就会构建ARP应答发送给A,此时局域网内的其他主机也收到了,它们会处理吗?以D为例,对比目的MAC地址是MACA,直接丢弃,同理对于B,C,D,E同样丢弃。A收到后发现目的MAC地址是自己,再看帧类型是0806代表ARP,向上交付,先看OP是2后提取ARP中的源MAC和源IP,就拿到了主机F的MAC地址。

ARP缓存表

实际不是每次要获取对方的MAC地址时都需要发起ARP请求,每次发起ARP请求后都会建立对应主机IP地址和MAC地址的映射关系,每台主机都维护了一个ARP缓存表,我们可以用arp -a命令进行查看。

在这里插入图片描述

需要注意的是,缓存表中的表项有过期时间,这个时间一般为20分钟,如果20分钟内没有再次使用某个表项,那么该表项就会失效,下次使用时就需要重新发起ARP请求来获得目的主机的硬件地址。

(4) ARP欺骗

在这里插入图片描述

局域网中间人分别向通信双方构建假的ARP应答,欺骗窃取报文,这就叫做ARP欺骗。但是如果报文通过HTTPS协议加密后,即便中间人拿到报文,没有秘钥也解不开报文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/141900.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Unity之Hololens开发如何实现UI交互

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…

PWN基础:从源文件到可执行文件

目录 编译原理 GCC编译过程 Preprocess阶段 File命令 Compile阶段 Assemble阶段 Link阶段 高级语言编写的程序想在操作系统运行&#xff0c;需要被翻译为机器指令&#xff0c;在按照可执行目标文件格式打包并以二进制形式存储在文件中 编译原理 编译器作用&#xff1a;…

蓝桥杯每日一题2023.9.25

4406. 积木画 - AcWing题库 题目描述 分析 在完成此问题前可以先引入一个新的问题 291. 蒙德里安的梦想 - AcWing题库 我们发现16的二进制是 10000 15的二进制是1111 故刚好我们可以从0枚举到1 << n(相当于二的n次方的二进制表示&#xff09; 注&#xff1a;奇数个0…

CMU15-213 课程笔记 04-Floating Point

文章目录 浮点数如何用二进制表示IEEE 浮点数标准IEEE 浮点数实现IEEE 浮点数在内存里 E exp - bias 计算指数M 1.xxx 尾数计算举例&#xff1a;对一个浮点数进行转换一些关于浮点数的计算等等 浮点数如何用二进制表示 计算机内部的浮点数不是这样存在内存里的&#xff08;至…

【Linux学习】03Linux用户和权限

Linux&#xff08;B站黑马&#xff09;学习笔记 01Linux初识与安装 02Linux基础命令 03Linux用户和权限 文章目录 Linux&#xff08;B站黑马&#xff09;学习笔记前言03Linux用户和权限认知root用户root用户&#xff08;超级管理员&#xff09;su和exit命令sudo命令 用户、用户…

Java面试被问了几个简单的问题,却回答的不是很好

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有需要我的支持&#xff0c;请私信或评论留言&#xff01; 前言 前几天参加了…

【2-SAT】【前缀和优化建图】【ICPC网络赛第二场】C. Covering

题目 思路 对于限制2&#xff0c;可以发现&#xff0c;如果 i i i 不选&#xff0c;那么 i − 1 i-1 i−1 和 i 1 i1 i1 就一定要选&#xff0c;2-SAT可以很好地解决 对于限制1&#xff0c;其实就是把 i i i 分成了若干个集合&#xff0c;每个集合只能选1个点。但如果用…

python九九乘法表

编写程序&#xff0c;输出九九乘法表。 源代码&#xff1a; for a in range(1, 10): for b in range(1, a1): print(f"{a}*{b}{a * b}", end" ") print() 列出测试数据和实验结果截图&#xff1a;

机器学习第十一课--K-Means聚类

一.聚类的概念 K-Means算法是最经典的聚类算法&#xff0c;几乎所有的聚类分析场景&#xff0c;你都可以使用K-Means&#xff0c;而且在营销场景上&#xff0c;它就是"King"&#xff0c;所以不管从事数据分析师甚至是AI工程师&#xff0c;不知道K-Means是”不可原谅…

Linux基本操作符(1)

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 目录 Linux的登录 Linux下基本指令 指令操作的理解 几个与用户操作符 ls 指令 pwd命令 cd 指令 touch指令 mkdir指令 rmdir指令 && rm 指令 什么叫操作系统&#xff0c;我相信如果是学计算机的都听说过&…

LeetCode每日一题:1993. 树上的操作(2023.9.23 C++)

目录 1993. 树上的操作 题目描述&#xff1a; 实现代码与解析&#xff1a; 模拟 dfs 原理思路&#xff1a; 1993. 树上的操作 题目描述&#xff1a; 给你一棵 n 个节点的树&#xff0c;编号从 0 到 n - 1 &#xff0c;以父节点数组 parent 的形式给出&#xff0c;其中 p…

Euro-NCAP-HWA测试流程中文版V1.1(2023发布)

定义 在本协议中,使用了以下术语: Vehicle undertest (VUT) – 指根据本规程测试的车辆,车上有碰撞前的碰撞缓解或避免系统 Global VehicleTarget (GVT) – 指本协议中使用的车辆目标,其定义见TB025—Euro-NCAP全球车辆目标规范v1.0 辅助其他车辆(SOV)--指最新的 AEB …

基于微信小程序的校园商铺系统,附源码、数据库

文章目录 第一章 简介第二章 技术栈第三章&#xff1a;总体设计第四章系统详细设计4.1 前台功能模块4.2后台功能模块4.2.1管理员功能模块 五 源码咨询 第一章 简介 今天&#xff0c;为大家带来的事基于微信小程序的校园商铺系统。本系统的主要意义在于&#xff0c;全力以赴为用…

JAVA学习-全网最详细

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

小程序中如何导出会员卡的档案信息

对于医院、美容院等特殊商家&#xff0c;可能需要在给会员添加一些档案。例如今天客户是什么情况&#xff0c;做了什么服务&#xff0c;解决了什么问题。添加这些档案后&#xff0c;系统会保存这些信息&#xff0c;供下次来的时候使用&#xff0c;或者为商家日后做营销提供依据…

社区团购美团和多多买菜小程序购物车

概述 微信小程序购物车列表demo 详细 需求 显示食物名称、价格、数量。 点击相应商品增加按钮,购买数量增加1,点击食物减少按钮,购买数量减一 显示购买总数和总金额 查看当前购买的商品 效果图(数据来自本地模拟) 目录结构 实现过程 主要wxml <view classfoods>…

实现爬虫加速的可实现办法

网络爬虫在数据采集和信息监测中发挥着重要作用。然而&#xff0c;由于网络环境复杂和大量数据需求&#xff0c;爬虫速度可能面临挑战。本文将为您分享一些实现爬虫加速的可行方法&#xff0c;帮助您让爬虫快如闪电&#xff01;让我们一起探索吧&#xff01; 一、多线程并发请…

第一百五十四回 如何实现滑动菜单

文章目录 概念介绍实现方法示例代码体验分享 我们在上一章回中介绍了滑动窗口相关的内容相关的内容&#xff0c;本章回中将介绍如何实现 滑动菜单.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的滑动菜单表示屏幕上向左或者向右滑动滑动时弹…

扩散模型:DDPM代码的学习(基于minist数据集)

文章目录 序言一参考资料①代码来源②相关概念理解③公式推导及训练流程讲解④搜索问题的网站⑤模型运行的环境 二代码解读①模型②训练③测试 三主要训练过程的解析 序言 本文主要对一个基于minist数据集搭建的DDPM模型代码中各个模块的含义进行解析&#xff0c;初步记录了自…

自拟实现消息队列(MQ)基于Rabbit MQ(含概念和源码)巨详细!!!!!含思维导图

MQ目录 MQ基本概念什么是MQ&#xff1f;MQ的应用场景 首先先明白需求持久化分析那么MQ如何设计持久化&#xff1f; 可靠性分析高效性分析MQ核心概念&#xff08;装配层&#xff09;实现MQ组件思维导图创建项目导入数据库下载SqLite。 创建组件实体类创建交换机&#xff08;要加…