数据链路层协议

文章目录

  • 数据链路层协议
    • 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.rhkb.cn/news/141416.html

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

相关文章

Vue3 动态组件 component:is= 失效

错误代码 用Vue3&#xff0c;组件无需注册&#xff0c;所以就会提示“注册了不不使用”的报错&#xff0c; 于是用了异步注册&#xff0c;甚至直接为了不报错就在下面使用3个组件&#xff0c;有异步加载&#xff0c;但还是实现不了预期效果 <script setup> import { re…

如何设计一个 JVM 语言下的 LLM 应用开发框架?以 Chocolate Factory 为例

本文将介绍 Chocolate Factory 框架背后的一系列想法和思路。在我们探索和设计框架的过程中&#xff0c;受到了&#xff1a;LangChain4j、LangChain、LlamaIndex、Spring AI、Semantic Kernel、PromptFlow 的大量启发。 欢迎一起来探索&#xff1a;https://github.com/unit-mes…

历史高频行情数据存储最佳实践:DolphinDB Array Vector 使用指南

越来越多的机构使用 L1/L2 的快照行情数据进行量化金融的研究。作为一个高性能时序数据库&#xff0c;DolphinDB 非常适合存储和处理海量的历史高频行情数据。针对快照数据包含多档位信息的特点&#xff0c;DolphinDB 研发了一种方便、灵活且高效的数据结构——Array Vector&am…

[AI Agent学习] MetaGPT源码浅析

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

博客系统的自动化测试

本次自动化实战内容&#xff1a;本次测试根据博客管理系统这个项目&#xff0c;首先设计UI自动化测试用例&#xff0c;然后使用Selenium4自动化测试工具和JUnit5单元测试框架&#xff0c;实现web端的自动化测试。 本次项目总体实现思路&#xff1a;目录下有一个common包&#…

机器学习(19)---神经网络详解

神经网络 一、神经网络概述1.1 神经元模型1.2 激活函数 二、感知机2.1 概述2.2 实现逻辑运算2.3 多层感知机 三、神经网络3.1 工作原理3.2 前向传播3.3 Tensorflow实战演示3.3.1 导入数据集查看3.3.2 数据预处理3.3.3 建立模型3.3.4 评估模型 四、反向传播五、例题5.1 题15.2 题…

Day1-DeepWalk

论文《DeepWalk: Online Learning of Social Representations》 2014年发表在数据挖掘顶会ACM SIGKDD&#xff08;KDD&#xff09;上的论文 目的&#xff1a;学习节点表示 推动&#xff1a;将自然语言处理里面的无监督学习方法迁移至此 思路&#xff1a;将图结构序列化&#x…

ajax method to retrieve images as a blob

go 服务端&#xff1a; 就是先把这个图片读出来 然后返回二进制的数据 byteFile, err : ioutil.ReadFile("." "/processed/" uuidStr"processed.png")if err ! nil {fmt.Println(err)}c.Header("Content-Disposition", "att…

MYSQL不常用但好用写法

ORDER BY FIELD() 自定义排序逻辑 MySql 中的排序 ORDER BY 除了可以用 ASC 和 DESC&#xff0c;还可以通过 「ORDER BY FIELD(str,str1,…)」 自定义字符串/数字来实现排序。这里用 order_diy 表举例&#xff0c;结构以及表数据展示&#xff1a; ORDER BY FIELD(str,str1,…) …

Android 滑动事件消费监控,Debug 环境下通用思路

Android Debug 环境下滑动事件消费监控通用思路 背景 Android 开发中&#xff0c;经常会遇到滑动事件冲突。在一些简单的场景下&#xff0c;我们如果能够知道是那个 View 拦截了事件&#xff0c;那我们能够很容易得解决。解决方法通常就是内部拦截法或者外部拦截法。ViewPage…

SWC 流程

一个arxml 存储SWC &#xff08;可以存多个&#xff0c;也可以一个arxml存一个SWC&#xff09;一个arxml 存储 composition &#xff08;只能存一个&#xff09;一个arxml 存储 system description (通过import dbc自动生成system) 存储SWC和composition的arxml文件分开&#…

注入之SQLMAP(工具注入)

i sqlmap是一个自动化的SQL注入工具&#xff0c;其主要功能是扫描&#xff0c;发现并利用给定的URL和SQL注入漏洞&#xff0c;其广泛的功能和选项包括数据库指纹&#xff0c;枚举&#xff0c;数据库提权&#xff0c;访问目标文件系统&#xff0c;并在获取操作权限时执行任…

Java学习星球,十月集训,五大赛道(文末送书)

目录 什么是知识星球&#xff1f;我的知识星球能为你提供什么&#xff1f;专属专栏《Java基础教程系列》内容概览&#xff1a;《Java高并发编程实战》、《MySQL 基础教程系列》内容概览&#xff1a;《微服务》、《Redis中间件》、《Dubbo高手之路》、《华为OD机试》内容概览&am…

北工大汇编——综合题(1)

题目要求 统计字符数。从键盘输入一行字符&#xff0c;统计字母、空格、数字、其他宇符的个数&#xff0c;并显示。要求&#xff1a;提示输入一行宇符串&#xff1b;键盘输入宇符串&#xff0c;Enter 键结束输入&#xff0c;并换行显示结果。 题目代码 DATAS SEGMENT;此处输…

JSP ssm 零配件管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm 零配件管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用…

一文了解什么SEO

搜索引擎优化 (SEO) 是一门让页面在 Google 等搜索引擎中排名更高的艺术和科学。 一、搜索引擎优化的好处 搜索引擎优化是在线营销的关键部分&#xff0c;因为搜索是用户浏览网络的主要方式之一。 搜索结果以有序列表的形式呈现&#xff0c;网站在该列表中的排名越高&#x…

Android开发MVP架构记录

Android开发MVP架构记录 安卓的MVP&#xff08;Model-View-Presenter&#xff09;架构是一种常见的软件设计模式&#xff0c;用于帮助开发者组织和分离应用程序的不同组成部分。MVP架构的目标是将应用程序的业务逻辑&#xff08;Presenter&#xff09;、用户界面&#xff08;V…

Selenium自动化测试框架常见异常分析及解决方法

01 pycharm中导入selenium报错 现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium, 解决方法: 在pycharm中通过设置或terminal面板重新安装selenium 原因2: 当前项目下有selenium.py,和系统包名冲突导致, …

Linux学习第19天:Linux并发与竞争实例: 没有规矩不成方圆

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 先说点题外话&#xff0c;上周参加行业年会&#xff0c;停更了一周。接下来的周五就要开启国庆中秋双节模式&#xff0c;所以有的时候&#xff0c;尤其是工作以后…

JAVA学习-全网最详细

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