数据链路层协议

文章目录

  • 数据链路层协议
    • 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.mzph.cn/news/87745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python开发与应用实验2 | Python基础语法应用

*本文是博主对学校专业课Python各种实验的再整理与详解&#xff0c;除了代码部分和解析部分&#xff0c;一些题目还增加了拓展部分&#xff08;⭐&#xff09;。拓展部分不是实验报告中原有的内容&#xff0c;而是博主本人自己的补充&#xff0c;以方便大家额外学习、参考。 &a…

安装Python3.x--Windows

1 下载安装包 确定安装是干什么&#xff0c;要下哪个版本&#xff08;如果是配置项目环境&#xff0c;最好按项目需求的版本来装&#xff09; 1.1 官网链接 https://www.python.org 最新版本 指定版本 2 安装说明 点击下载exe&#xff0c;运行自定义安装路径&#xff0c;下…

TS编译选项——不允许使用隐式any类型、不明确类型的this、严格检查空值、编译后文件自动设置严格模式

一、不允许使用隐式any类型 在tsconfig.js文件中配置noImplicitAny属性 {"compilerOptions": {// 不允许使用隐式any类型"noImplicitAny": true} } 开启后即可禁止使用隐式的any类型 注意&#xff1a;显式的any类型并不会被禁止 二、不允许使用不明确类…

腾讯mini项目-【指标监控服务重构】2023-08-26

今日已办 Venus 的 Trace 无感化 定义 handler 函数 fiber.Handler 的主要处理逻辑返回处理中出现的 error返回处理中响应 json 的函数 // handler // Description: // Author xzx 2023-08-26 18:00:03 // Param c // Return error // Return func() error : function for …

和 Node.js 说拜拜,Deno零配置解决方案

不知道大家注意没有&#xff0c;在我们启动各种类型的 Node repo 时&#xff0c;root 目录很快就会被配置文件塞满。例如&#xff0c;在最新版本的 Next.js 中&#xff0c;我们就有 next.config.js、eslintrc.json、tsconfig.json 和 package.json。而在样式那边&#xff0c;还…

Spring面试题9:Spring的BeanFactory和FactoryBean的区别和联系

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的BeanFactory和FactoryBean的区别和联系 区别:BeanFactory是一个工厂接口,主要负责管理和创建Bean实例。它是Spring提供的最底层的…

优维产品最佳实践:主机合规性检查

我们常常会感到这样的困惑&#xff0c;为什么这么多的无效主机记录&#xff0c;为什么这些主机很多信息空白&#xff0c;当许多人一起维护主机信息时&#xff0c;常常会出现信息错漏的情况。主机是运维最重要最基本的CMDB信息&#xff0c;而「合规性检查」为我们提供了更高效便…

Spring Cloud Alibaba Gateway 简单使用

文章目录 Spring Cloud Alibaba Gateway1.Gateway简介2. 流量网关和服务网关的区别3. Spring Cloud Gateway 网关的搭建3.1 Spring Cloud Gateway 配置项的说明3.2 依赖导入3.3 配置文件 Spring Cloud Alibaba Gateway 1.Gateway简介 Spring Cloud Gateway是一个基于Spring F…

混合Rollup:探秘 Metis、Fraxchain、Aztec、Miden和Ola

1. 引言 混合Rollup为新的以太坊L2扩容方案&#xff0c;其分为2大类&#xff1a; 将乐观与ZK技术结合的混合Rollup同时支持公开智能合约 和 私人智能合约 的混合Rollup 本文将重点关注Metis、Fraxchain、Aztec、Miden和Ola这五大项目。 2. 何为混合Rollup&#xff1f; 混合…

MySQL-树型结构数据查询

表结构 进行树形结构查询&#xff0c;利用特殊语法进行操作 with recursive t as(select parent_id , business_namefrom business_line where id 21union allselect a.parent_id, a.business_namefrom business_line a join t on a.id t.parent_id) select business_name f…

[AI Agent学习] MetaGPT源码浅析

前言 工作上&#xff0c;需要使用AI Agent&#xff0c;所以需要深入学习一下AI Agent&#xff0c;光阅读各种文章&#xff0c;总觉无法深入细节&#xff0c;所以开看各类AI Agent相关的开源项目&#xff0c;此为第一篇&#xff0c;学习一下MetaGPT的源码。 基本目标 MetaGPT是一…

【深度学习实验】前馈神经网络(八):模型评价(自定义支持分批进行评价的Accuracy类)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. __init__(构造函数) 2. update函数(更新评价指标) 5. accumulate(计算准确率) 4. reset(重置评价指标) 5. 构造数据进行测试 6. 代码整合 一、实验介绍 本文将实…

进行 XSS 攻击 和 如何防御

跨站脚本攻击&#xff08;XSS 攻击&#xff09;是 Web 开发中最危险的攻击之一。以下是它们的工作原理以及防御方法。 XSS 攻击 跨站脚本攻击就是在另一个用户的计算机上运行带有恶意的 JS 代码。假如我们的程序没有对这些恶意的脚本进行防御的话&#xff0c;他们就会由我们的…

李宏毅hw-10 ——adversarial attack

一、查漏补缺&#xff1a; 1.关于glob.glob的用法&#xff0c;返回一个文件路径的 列表&#xff1a; 当然&#xff0c;再套用1个sort&#xff0c;就是将所有的文件路径按照字母进行排序了 2.relpath relative_path返回相对于基准路径的相对路径的函数 二、代码剖析&#xff…

STM32单片机入门学习(四)-蜂鸣器

蜂鸣器接线 低平蜂鸣器&#xff0c;低电平发声&#xff0c;高电平不发声&#xff0c; 三个排针&#xff0c;VCC接3.3v&#xff0c;GND接地&#xff0c;I/O接A0口&#xff0c;如图&#xff1a; 蜂鸣器代码&#xff1a;响一秒停半秒 #include "stm32f10x.h" #includ…

LRU、LFU 内存淘汰算法的设计与实现

1、背景介绍 LRU、LFU都是内存管理淘汰算法&#xff0c;内存管理是计算机技术中重要的一环&#xff0c;也是多数操作系统中必备的模块。应用场景&#xff1a;假设 给定你一定内存空间&#xff0c;需要你维护一些缓存数据&#xff0c;LRU、LFU就是在内存已经满了的情况下&#…

2023-2024年最新大数据学习路线

文章目录 2023-2024年最新大数据学习路线大数据开发入门*01*阶段案例实战 大数据核心基础*02*阶段案例实战 千亿级数仓技术*03*阶段项目实战 PB级内存计算04阶段项目实战 亚秒级实时计算*05*阶段项目实战 大厂面试*06* 2023-2024年最新大数据学习路线 新路线图在Spark一章不再…

Android跨进程通信:Binder机制原理

目录 1. Binder到底是什么&#xff1f; 2. 知识储备 2.1 进程空间划分 2.2 进程隔离 & 跨进程通信&#xff08; IPC &#xff09; 2.3 内存映射 2.3.1 作用 2.3.2 实现过程 2.3.3 特点 2.3.4 应用场景 2.3.5 实例讲解 ① 文件读 / 写操作 ② 跨进程通信 3. Bi…

Cron表达式_用于定时调度任务

一、Cron表达式简介 Cron表达式是一个用于设置计划任务的字符串&#xff0c;该字符串以5或6个空格分隔&#xff0c;分为6或7个域&#xff0c;每一个域代表任务在相应时间、日期或时间间隔执行的规则【Cron表达式最初是在类Unix操作中系统中使用的&#xff0c;但现在已经广泛应用…

人机融合需要在事实与价值之间构建新型的拓扑关系

人机融合&#xff0c;这是指将人类智慧&#xff08;含艺术&#xff09;与计算机科技相结合&#xff0c;共同解决复杂问题的一种新方式。在人机融合中&#xff0c;我们需要构建事实与价值之间的新型拓扑关系&#xff0c;以实现更有效的知识管理和决策支持。 事实是指客观存在的、…