【数据链路层】网络基础 -- MAC帧协议与ARP协议

  • 数据链路层
  • 认识以太网
  • 以太网帧格式(MAC帧)
    • 认识MAC地址
    • 对比理解MAC地址和IP地址
    • 认识MTU
    • MTU对IP协议的影响
    • MTU对UDP协议的影响
    • MTU对于TCP协议的影响
  • 再谈局域网转发原理(基于协议)
  • ARP协议
    • ARP协议的作用
    • ARP协议的工作流程
    • ARP数据报的格式

数据链路层

用于两个设备(同一种数据链路节点)之间进行传递

在这里插入图片描述

在同一个局域网的主机,能不能直接通信?可以的,比如:
假如你正在上课,你的老师在课堂上问小明你昨天的作业怎么没做?这时候小明回答说他做了只不过交过去比较晚老师可能没看到。老师和小明交流的过程班级里面的其他同学都能听得见,而老师叫的是小明,他们提取出来的信息与他们无关,所以不做响应。局域网通信也是如此,每个主机都能接受到信息,但是与它们无关的信息不做响应。

每一台主机都要有唯一的标识符
每张网卡都要有唯一的一个sn,该网卡的mac地址,全球范围内具有唯一性


认识以太网

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

以太网帧格式(MAC帧)

在这里插入图片描述

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP
  • 帧末尾是CRC校验码
  • 报头如何分离?
    MAC采用定长报头,向上交付只需要将前14字节与后4字节分开即可

认识MAC地址

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

对比理解MAC地址和IP地址

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

认识MTU

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

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)
  • 不同的数据链路层标准的MTU是不同的

MTU对IP协议的影响

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

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

在这里插入图片描述
在这里插入图片描述

MTU对UDP协议的影响

让我们回顾一下UDP协议:
一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报.
这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在
网络层被分片, 整个数据被丢失的概率就大大增加了.

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)

MTU与MSS关系:
在这里插入图片描述

查看硬件地址和MTU:
使用ifconfig命令,即可查看ip地址,mac地址,和MTU
在这里插入图片描述

再谈局域网转发原理(基于协议)

.
结论:

  • 局域网中所有的主机其实都能收到对应的MAC帧,只不过大部分主机在自己的数据链路层通过对比数据帧中的目标MAC地址和自己的MAC地址是否相等,来决策要不要在进行后续处理!
  • 在局域网中,网卡有一种模式:混杂模式,不放弃任何数据帧,直接向上交付,这也是局域网抓包工具的原理!

在局域网中,任何时刻,只能有一个主机发送消息(如何做到:令牌环、以太网)。如果多个消息被同时发送,会导致局域网中的数据发生碰撞,无效数据。一个局域网,一个碰撞域

系统视角重新看待局域网 – 临界资源
碰撞检测+碰撞避免,任何一个时刻只有一台主机能够向临界资源中写入数据 – 临界区

交换机:
在这里插入图片描述
交换机就是分割碰撞域:

  • 比如M1发给M6时有发生碰撞,那么经过交换机的时候,交换机就会将报文不做转发,也就是阻挡传递了。
  • M1给M4发,在同一碰撞域的数据,经过交换机,交换机也会阻挡
  • 只有局域网中没有碰撞,且数据是需要跨过交换机分割开的碰撞域的时候,才可以跨国交换机
    在这里插入图片描述

ARP协议

ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议;

在这里插入图片描述
比如:你上大学,虽然说学号可以管理每个人,但是老师在上课的时候还是希望通过你的名字来叫你,但是老师只知道一个学号区间,所以就通过这个学号来问大家,比如10号是谁,这个10号肯定有且只标识一个人。

ARP协议的作用

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

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

ARP协议的工作流程

在这里插入图片描述

  • 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)
  • 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中
  • 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

ARP数据报的格式

在这里插入图片描述

  • 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
  • 硬件类型指链路层网络类型,1为以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节
  • 协议地址长度对于和IP地址为4字节
  • op字段为1表示ARP请求,op字段为2表示ARP应答

MAC帧、IP与ARP的关系:
在这里插入图片描述

模拟ARP请求:
在这里插入图片描述

我们发送协议报文时,我们不知道目标的MAC地址就填为全F(我们本来就是因为不知道目标主机的MAC地址才发送ARP请求的)

ARP层在收到报文后,要先看OP字段,而不是直接看目标IP地址。因为:我们可能是收到ARP请求,也可能是曾经向别人发送的ARP请求的ARP应答。

ARP的结果是会被暂时缓存起来的

ARP欺骗:

在这里插入图片描述

RARP协议就是知道MAC地址,用来得到IP地址的协议。


如有错误或者不清楚的地方欢迎私信或者评论指出🚀🚀

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

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

相关文章

《DevOps实践指南》- 读书笔记(九)

DevOps实践指南 25. 附录附录 1 DevOps 的大融合精益运动敏捷运动Velocity 大会运动敏捷基础设施运动持续交付运动丰田套路运动精益创业运动精益用户体验运动Rugged Computing 运动 附录 2 约束理论和核心的长期冲突附录 3 恶性循环列表附录 4 交接和队列的危害附录 5 工业安全…

【Java 基础篇】Java并发包详解

多线程编程是Java开发中一个重要的方面,它能够提高程序的性能和响应能力。然而,多线程编程也伴随着一系列的挑战,如线程安全、死锁、性能问题等。为了解决这些问题,Java提供了一套强大的并发包。本文将详细介绍Java并发包的各个组…

基于SpringBoot的在线商城系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 商品分类管理 商品信息管理 轮播图管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储&#xff…

http的网站进行访问时候自动跳转至https

通常情况下我们是用的都是http的路径,对于https的使用也很少,但是随着https的普及越来越多的域名访问需要用到https的,这个我们就演示怎么设置在我们对一个http的网站进行访问时候自动跳转至https下。 用到的工具及软件: 系统:wi…

构建自动化测试环境:使用Docker和Selenium!

随着软件开发的日益复杂和迭代速度的加快,自动化测试被越来越广泛地应用于软件开发流程中。它能够提高测试效率、减少测试成本,并保证软件质量的稳定性。在构建自动化测试环境方面,Docker 和 Selenium 是两个非常有用的工具。下面将介绍如何使…

asp.net网站的建立及运行

点击创建新项目 在输入框中输入asp.net,并选择图中的 点击下一步 点击创建 然后,右键,添加,新建项 选择web窗体 点击添加 点击视图,工具箱 选择一个label,记住这个id 空白处右键,查看代码 添…

CIIS 2023丨聚焦文档图像处理前沿领域,合合信息AI助力图像处理与内容安全保障

近日,2023第十二届中国智能产业高峰论坛(CIIS 2023)在江西南昌顺利举行。大会由中国人工智能学会、江西省科学技术厅、南昌市人民政府主办,南昌市科学技术局、中国工程科技发展战略江西研究院承办。本次大会重点关注AI大模型、生成…

第七天:gec6818开发板QT和Ubuntu中QT安装连接sqlite3数据库驱动环境保姆教程

sqlite3数据库简介 帮助文档 SQL Programming 大多数关系型数的操作步骤:1)连接数据库 多数关系型数据库都是C/S模型 (Client/Server)sqlite3是一个本地的单文件关系型数据库,同样也有“连接”的过程 2)操作数据库 作为程序员&am…

大数据(九):数据可视化(一)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教…

Vue之vue-cli搭建SPA项目

目录 ​编辑 前言 一、vue-cli简介 1. 什么是vue-cli 2. vue-cli的重要性 3. vue-cli的应用场景 二、Vue-cli搭建SPA项目 1. 构建前提(node.js安装完成) 2. 安装vue-cli 3. 使用脚手架vue-cli(2.X版)来构建项目 4. 分析创建spa项目的八个问题 …

Android:创建jniLibs的步骤

一、前言: android libs,jniLibs库的基本使用 libs,jniLibs用来存放各种.so库文件。如果没有jniLibs目录需要自己手动创建,并且库名称也不能随便更改。 二、解决方案: 我之前弄了好久也弄不出来,之前有说…

学习记忆——宫殿篇——记忆宫殿——记忆桩——工人宿舍

脸盆铁盒白色泡沫绳子电热炉 6. 椅子 7. 门帘 8. 塑料 9. 书 10.安全帽 11. 凳子 暖壶烟灰缸计算器水杯刷子

selenium+python实现基本自动化测试

安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回…

会C++还需要再去学Python吗?

提到的C、数据结构与算法、操作系统、计算机网络和数据库技术等确实是计算机科学中非常重要的基础知识领域,对于软件开发和计算机工程师来说,它们是必备的核心知识。掌握这些知识对于开发高性能、可靠和安全的应用程序非常重要。Python作为一种脚本语言&…

【每日一题】74. 搜索二维矩阵

74. 搜索二维矩阵 - 力扣(LeetCode) 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返…

格式工厂多个图片合并成一个PDF的报错

使用图片合并PDF功能时 当图片数量超过50会报错 找到imgconv.py文件,将50改为500,保存 现在可以支持100张图合并成一个PDF文件了! 但是超过150张程序会直接闪退,正在解决中。。 【补充说明】 1.如何设置PDF压缩比?…

macos (M2芯片)搭建flutter环境

安装的版本3.13.4、电脑上没有安装过android studio、安装过brew 1.在终端运行sudo softwareupdate --install-rosetta --agree-to-license,下图展示安装成功的效果 2.下载以下安装包来获取最新的 stable Flutter SDK 3.解压,⚠️注意下载安装sdk的包名…

坚鹏:浙江农商联合银行同业核心产品解读与差异化分析培训第7期

浙江农商联合银行同业核心产品解读与差异化分析培训第7期 1952年,浙江第一家农村信用社成立。2004年4月18日,浙江省农信联社成立,承担对全省农信社的管理、指导、协调和服务职能。2021年10月,经国务院批准同意、银保监会批复&…

Python 计算机二级知识点整理 模拟考试2

1. 2. 一个进程正在等待某一事件的发生而暂时停止执行时,在这种状态下,即使把CPU等资源分配给它,该进程也不能运行,即处于等待状态,又称为阻塞状态或封锁状态。 3. 4, 成功将一个元素退队就证明是之前循环…

【【萌新的FPGA学习之Vivado下的仿真入门-2】】

萌新的FPGA学习之Vivado下的仿真入门-2 我们上一章大概了解了 我们所需要进行各项操作的基本框架 对于内部实现其实一知半解 我们先从基本的出发 但从FPGA 了解一下 vivado下的仿真入门 正好帮我把自己的riscV 波形拉一下 行为级仿真 step1: 进入仿真界面:SIMULAT…