【网络编程】第十一章 数据链路层 - 以太网(MAC+MTU+ARP+MSS+RARP)


文章目录

  • 重点
  • 链路层
    • 以太网MAC帧格式
    • 碰撞域
    • MAC地址
      • MAC地址和IP地址
    • MTU-最大传输单元
      • MTU 对 IP 的影响
      • MTU 对 UDP 的影响
      • MTU 对 TCP 的影响-MSS
    • ARP协议
      • ARP协议的工作流程
        • ARP请求的过程
        • ARP应答的过程
      • ARP 缓存
      • 中间人攻击
    • RARP协议


重点

  • 数据链路层的作用:两个设备 (同一种数据链路节点) 之间进行传递数据;
  • 以太网是一种技术标准;既包含了数据链路层的内容, 也包含了一些物理层的内容。 例如:规定了网络拓扑结构,访问控制方式,传输速率等;
  • 以太网帧格式
  • 理解 mac 地址
  • 理解 arp 协议
  • 理解 MTU

链路层

数据链路层:提供将数据在局域网中传输的能力,传输方式主要是以太网

  • 数据在发送之前会给数据封装上对应的局域网的报头。
  • 数据要进行跨网络传输,需要经过路由器转发。
  • 数据在路由器进行向上交付时,会将该数据对应的局域网报头去掉。
  • 而当路由器该数据转发给下一跳之前,又会给该数据封装上下一跳网络所对应的局域网报头。

以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据

以太网MAC帧格式

image-20240821080959978

  • 目的地址(6B):48 位的 MAC 地址

  • 源地址(6B):48 位的 MAC 地址

  • 类型(2B):网络层使用的协议,帧协议类型有三种值,分别对应 IP、ARP、RARP,所以只需要 2 个字节

    • TCP/IPv4:0x0800

    • ARP 请求或响应:0x0806

    • RARP:0x8035

    • Novell 网络层 IPX 协议:0x8137

  • 数据载荷:46B-1500B

  • CRC(4B):校验码

碰撞域

通过交换机来划分碰撞域,在同一个碰撞域当中,目的地址不会传输到外面去,减少碰撞的概率发生,同时MAC 帧不要太大,否则会大大增加碰撞的概率

MAC地址

mac地址也是物理地址,不是指物理层的概念

  • MAC地址用来识别数据链路层中相连的节点
  • 长度为48位,及6个字节,例如:08:00:27:03:fb:19
  • 网卡出厂时就确定,MAC地址通常是唯一的

ifconfig命令来查看我们的MAC地址

MAC地址和IP地址

  • IP是路途总体的起点和终点。
  • MAC是路途上的每一个区间的起点和终点。

MTU-最大传输单元

以太网对应MTU的值一般是1500字节,最小长度为46字节,为了满足数据链路层中最大帧/最小帧的要求

MTU 对 IP 的影响

  • 因为 MTU 的存在,网络层 IP 协议中需要对较大的数据包进行分片
  • 如果 IP 分片后出现丢包导致数据丢失,那么传输层就必须得重传

MTU 对 UDP 的影响

IP报头的长度是20字节,UDP报头的长度是8字节,只要 UDP 携带的数据超过 1472字节 (1500 - 20 IP首部 - 8 UDP首部),那么就会在网络层分片

一旦数据报中有一个 IP 报文丢失了,那么整个 UDP 报文就会丢失。再加上 UDP 并没有超时重传机制,UDP 的报文在 IP 层中被分片后丢包的概率远大于 TCP

MTU 对 TCP 的影响-MSS

  • TCP发送的数据报该受制于MTU,TCP的单个数据报的最大报文长度,称为MSS,在TCP首部选项当中
  • TCP 在建立连接的过程中,通信双方会进行 MSS 协商。最理想的情况, 最终选取双方支持的MSS值当中的较小值作为最终MSS

image-20240821164045163

ARP协议

地址解析协议协议,根据IP地址获取MAC地址的一个TCP协议,是 MAC 帧协议的 “上层”,因为同一个局域网中发消息需要知道对方mac地址,而我们一般只知道ip地址,所以需要arp协议将ip地址转换为mac地址

image-20240821171434993

  • 硬件类型指链路层的网络类型,1为以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节,因为MAC地址是48位的
  • 协议地址长度对于IP地址为4字节,因为IP地址是32位的
  • op字段为1表示ARP请求,op字段为2表示ARP应答

ARP协议的工作流程

ARP请求的过程

主机 A 需要给主机 B 发送数据,但是不知道主机 B 的 MAC 地址,它就需要发起一个 ARP 请求

  • 以太网目的地址填为全 F,代表广播
  • 源地址填主机 A 自己的 MAC 地址
  • 帧类型填 0806 代表 ARP 协议
  • 硬件类型字段设置为1
  • 协议类型设置为0800
  • 硬件地址长度为6
  • 协议地址长度为4
  • ARP 中的 OP 填为 1,代表是 ARP 请求
  • 发送端以太网地址填为主机 A 的 MAC 地址
  • IP 地址填主机 A的 IP 地址
  • 目的以太网地址填为全 F,表示广播
  • 目的IP 地址填为主机 B的 IP 地址

之后将封装好的MAC帧以广播的方式发送到局域网当中,直接判断arp协议

  • ARP 层先通过 OP 为 1 判断是 ARP 的请求
  • 取出请求中的目的 IP 地址,判断是否为本机 IP 地址,不是则丢弃
  • 是本机的 IP 地址,代表这个报文是发给自己的 ARP 请求,需要构造 ARP 响应
ARP应答的过程
  • 以太网目的地址填为 ARP 请求中的主机 A MAC 地址
  • 以太网源地址填主机 B的MAC 地址
  • 帧类型填 0806 代表 ARP 协议
  • 硬件类型字段设置为1
  • 协议类型设置为0800
  • 硬件地址长度为6
  • 协议地址长度为4
  • ARP 中的 OP 填 2,代表 ARP 响应
  • 发送端以太网地址填为主机 B 的 MAC 地址
  • IP 地址填主机 B的 IP 地址
  • 目的以太网地址填 A 的 MAC 地址
  • IP 地址填为目的主机 A 的 IP 地址

之后将封装好的MAC帧以广播的方式发送到局域网当中,先判断mac协议,再判断arp协议

  • 通过 MAC 地址来判断是否是发给自己的 MAC 帧。如果不是就直接丢弃
  • 判断 ARP 中的 OP 为 2,代表是 ARP 响应
  • 直接取出发送端主机 MAC 和主机 IP,就能得到主机 B 的 IP 和 MAC 地址的映射关系

ARP 缓存

  • 任何一台主机发出的一定是 ARP 的请求
  • 接收到的 ARP 可能是对方向往发送的 ARP 请求,也可能是我发送的 ARP 请求的响应

当我们发送了一个 ARP 请求后,应该需要将 ARP 响应给暂时缓存到本机上,过段时间一起发

中间人攻击

  • 主机 A 想获取主机 B 的 MAC,发送 ARP 请求并获取到了响应
  • 主机 D 把自己的 IP 伪装成主机 B 的 IP,又给主机 A 发送了 ARP 响应
  • 此时主机 A 更新了 ARP 缓存表,将主机 B 的 IP B 映射给了 MAC D
  • 主机 D 用同样的办法,将主机 B 的 ARP 缓存表中的 IP A 映射给了 MAC D
  • 此时主机 A 给 B 发送消息,填的是 MAC D;B 给 A 发消息,填的也是 MAC D;
  • 主机 D 在收到 A 和 B 双方通信的报文后,先交付给自己的上层,再转发给对方;

RARP协议

根据MAC地址获取IP地址的一个TCP/IP协议,因为既然我们已经知道一台主机的MAC地址了,那么我们就已经可以直接向给主机发送消息了,因此我们可以直接发消息询问对方的IP地址就行了


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

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

相关文章

如何解决大数据背景下的数据治理挑战

在大数据背景下,数据治理面临着诸多挑战,这些挑战涵盖了数据的复杂性、安全性、合规性、技术选择、文化和组织变革等多个方面。为了有效解决这些挑战,可以从以下几个方面入手: 一、明确数据治理目标和策略 与业务战略紧密结合&a…

虚幻5|AI视力系统,听力系统,预测系统(2)听力系统

虚幻5|AI视力系统,听力系统,预测系统(1)视力系统-CSDN博客 一,把之前的听力系统,折叠成函数,复制粘贴一份改名为听力系统 1.小个体修改如下,把之前的视力系统改成听力系统 2.整体修…

解决Jasper Studio预览无数据源的问题:在Dataset and Query里面预览数据为空,但是浏览器访问接口,是存在数据的。

目录 1.1、错误描述 1.2、解决方案 1.1、错误描述 最近接触Jasper Studio报表开发比较多一些,遇到了很多的问题,其中有一个问题就是:在Jasper Studio中的Dataset and query里面预览数据,发现是空的,如下图所示&…

数据仓库ETL开发

在企业数字化转型的过程中,数据仓库已经成为了企业管理和决策的重要工具。数据仓库ETL开发是构建数据仓库的关键步骤之一,它可以帮助企业从源系统中抽取、清洗、转换和整合数据,方便企业进行管理和分析。本文将介绍如何高效实现数据仓库ETL开…

媒体服务zlmediakit系统架构图

1. 整体系统架构图 (Overall System Architecture Diagram) 描述: 整体系统架构图展示了ZLMediaKit的主要组件及其交互方式,包含流媒体接入、处理、存储和分发等主要流程。 样例图: ------------------------------------------ | 客户端 (Clients…

【功能自动化】WebTours:使用unittest编写注册测试用例

环境搭建: 需要配置WebTours网站 代码实现: # 导入包 from selenium import webdriver from selenium.webdriver.support.select import Select from time import sleep import unittestdriver None class Reg(unittest.TestCase):classmethoddef se…

Spring底层机制环境搭建

文章目录 1.模块创建和依赖引入1.聚合模块,下面有一个myspring2.查看父模块是否管理了子模块3.myspring模块引入基本包 2.进行环境搭建1.目录概览2.UserController.java3.UserService.java4.UserDao.java5.AppMain.java6.beans.xml7.测试8.配置UserController.java为…

掌握电子邮件的艺术:使用 Mailbird 统一管理您的数字生活

在数字时代,电子邮件已成为我们沟通的骨干。无论是商务交流、家庭联络,还是订阅更新,我们几乎每天都在使用电子邮件。但随着账户数量的增加,管理这些账户变得日益复杂。如何有效地整合和优化您的电子邮件体验?Mailbird…

SQL——建表时是否需要设置外键?从哪些方面考虑?

1. 设置外键&不设置外键区别和影响 在数据库设计中,是否设置外键会对数据的完整性、安全性、性能等多个方面产生影响。以下是设置外键与不设置外键的区别和影响: 1. 数据完整性 设置外键: 强制数据完整性: 外键约束确保引用关系中的数据保持一致性…

Ubuntu上安装任意版本Nodejs

Ubuntu系统上安装Node.js可以通过多种方法来实现,包括利用Ubuntu仓库、NodeSource仓库,或者通过nvm(Node Version Manager)来进行。此处将重点介绍如何通过nvm这一流行方法来安装任意版本的Node.js,因为这种方式提供了…

【PaperInFive-时间序列预测】TSMixer:用于时间序列预测的全MLP架构(谷歌)

全文总结:本文研究了线性模型用于时间序列预测的能力,提出了时间序列混合器(TSMixer),一种通过堆叠多层感知器(mlp)设计的新架构。TSMixer在时间和特征维度上交替应用mlp,在概念上对应于时间混合和特征混合操作,有效地…

AI开发者大赛 | 6道算法赛题上新

2024 AI开发者大赛正在如火如荼地进行着,本届比赛吸引了全球范围内的众多优秀开发者参与其中,用代码书写未来,用算法改变世界。 如今,算法赛新一批赛题上线,无论是初学者还是资深开发者,你都可以在2024 AI…

ClickHouse集群的安装

目录 1.clickhouse中文文档地址 2.centos安装部署 2.1采用tgz的方式安装 2.2修改配置文件 2.3修改数据目录 2.4创建角色和目录 3 集群安装 3.1配置文件修改 3.2启动zookeeper 3.3启动clickhouse-server 3.4任意节点连接clickhouse 3.5查看集群 3.6建库 3.7查看数…

【Kotlin】在Kotlin项目中使用AspectJ

前言 AOP编程在Java开发中是一个非常火热的话题,最著名的库为AspectJ Kotlin项目中,通过Gradle插件,也能够使用该库,这是我们下面讲解的重点 由于AspectJ的原理是在预编译阶段,通过插件修改代码,生成代理…

了解住宅代理和移动代理的工作原理:从基础到高级应用

在当今时代,代理技术已经成为了优化网络连接、提升数据安全和增强用户体验的重要工具。特别是住宅代理和移动代理,这两种代理类型在网络服务中扮演着越来越重要的角色。本文将从详细的为您介绍这两种代理服务的工作原理,帮助你更好地理解并应…

如何对 GitLab 中文版进行升级?

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

ArcGIS空间自相关 (Global Moran‘s I)——探究人口空间格局的20年变迁

先了解什么是莫兰指数? 莫兰指数(Morans I)是一种用于衡量空间自相关性的统计量,即它可以帮助我们了解一个地理区域内的观测值是否彼此相关以及这种相关性的强度和方向。 白话版:一句话就是判断数据在空间上有没有自…

Prometheus 和 Grafana 通过nginx-exporter监控nginx

在生产环境下,您已经部署了 Prometheus 和 Grafana,并希望通过它们来监控另一台 Ubuntu 20.04 上的 Nginx 服务。以下是配置步骤: 1. 安装和配置 nginx-exporter (Nginx 的 Prometheus 导出器) nginx-exporter 是 Prometheus 用来从 Nginx …

【机器学习-监督学习】逻辑斯谛回归

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…

matlab实现模拟退火算法

模拟退火算法(Simulated Annealing, SA)是一种通用概率优化算法,用于在给定的大搜索空间内寻找问题的近似全局最优解。该算法灵感来源于物理学中固体物质的退火过程,其中温度逐渐降低,粒子逐渐趋于能量最低状态。 在M…