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

embedded/2024/9/24 4:14:22/

文章目录

  • 重点
  • 链路层
    • 以太网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.ppmy.cn/embedded/101816.html

相关文章

【ORACLE】decode() 函数

在Oracle数据库中,DECODE 函数是一个非常有用的条件表达式,它类似于其他编程语言中的 switch-case 或 if-else 语句。DECODE 函数可以简化查询中的条件逻辑,使得SQL语句更加简洁和易于理解。 基本语法 DECODE 函数的基本语法如下&#xff1…

Java将数据导出为Excel文件

使用Apache POI生成基本Excel Apache POI是一个强大的Java库,用来处理Microsoft Office文件。对于Excel文件(.xls和.xlsx)处理,提供有HSSF(.xls)和XSSF(.xlsx)等API。 import org.…

一起搭WPF之列表数据绑定

一起搭WPF之列表数据绑定 1 前言2 数据绑定2.1 前端2.2 后端实现2.2.1 界面后台2.2.2 模型与逻辑 3 问题3.2 解决 总结 1 前言 之前已经简单介绍了列表的大致设计,在设计完列表界面后,我们可以开展列表的数据绑定,在前端显示我们的数据&…

基于x86 平台opencv的图像采集和seetaface6的静默活体功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的静默活体功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的静默活体模块从而实现…

xss-labs靶场通关详解(11-15关)

第11关 referer 进行抓包 添加referer:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第12关 进行抓包 修改User Agent:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第13关 抓包 修改C…

Shader 透明相关

1、设置深度写入与渲染队列 深度写入 深度写入默认是开启,需要通过渲染状态中的 ZWrite off 指令主动关闭深度写入 当我们把它写在Pass渲染通道中时,它只会影响该Pass 若我们把它写在SubShader语句块中,它将影响其中的所有Pass …

Redis中的缓存穿透、缓存击穿、缓存雪崩(面试版)

缓存穿透 缓存穿透:查询一个不存在的数据,在mysql数据库中查询不到数据也不会写入缓存,导致每次请求都查询数据库,增加数据库负载。 解决办法: 1、缓存空值:将数据库中不存在的结果(例如空值)也缓存起来&#xff0c…

免费批量自动校正图片、PDF文档方向工具

功能介绍:批量自动识别图片和PDF文档页面方向,并校正为正确阅读方向(非倾斜纠偏) jpg校正演示 #修复exif信息导致的jpg图像显示和实际旋转不一致问题 #增加图像DPI选项,优先原图或者固定DPI,但这些只会对产生旋转的图…