Linux--数据链路层--ARP协议--0319-21

news/2024/6/1 22:37:08 标签: linux, 服务器, 网络

目录

1. 认识以太网

1.1 以太网帧格式

1.2 基于以太网帧简单模拟局域网通信

问题一:如果有多台主机都在发送数据呢?

问题二:发送方知不知道自己的数据被影响了呢?

1.3 MTU

1.3.1 MTU对IP协议的影响

1.3.2 MTU对UDP协议的影响

1.3.3 MTU对于TCP协议的影响

1.3.4 查看硬件地址和MTU

2. 抛出问题

网络转发过程中,MAC报头会发生变化吗?

 数据要想发送给目标主机需要MAC地址,MAC地址如何得知?

 3.ARP协议

3.1 ARP协议的工作流程

3.1.1 具象工作流程

3.1.2 认识ARP协议

3.1.3 模拟一次真实的工作流程

3.2 查看IP地址和MAC地址关系映射的缓存表

 3.3 简单理解什么是ARP欺骗


1. 认识以太网

以太网不是一种具体的网络,而是一种技术标准。

拿介质举个例子,声音的传播需要介质,这些介质可以是气体、液体、固体。那以太网就是一种在链路层传输的介质!

1.1 以太网帧格式

 先回答两个问题:

以太网如何解包和分装?

解包:以太网的报头是定长的,6+6+2。而且CRC(校验和)也是固定长度。解包时只需要将这两个长度减去,得到的就是数据。(注:这里的数据可是整个IP报文)

如何交付?
两个字节的类型字段,决定了交付给谁的问题。


目的地址:目的主机的MAC地址。

源地址:发送方主机的MAC地址

类型:如果为0800,则代表有效载荷放的是IP报文,进而向上交付时就交付给了IP层。

如果为0806 或者 0805 会交给ARP层。这个我们后面一些再讲。

MAC地址: MAC地址是标识主机唯一性的方案。

1.2 基于以太网帧简单模拟局域网通信

假设主机1,要向主机4发送消息,那他的报文就应该如图所示进行填写。这条消息相当于是广播出去的,即每个主机都会得到这个报文,但是经过报文的解包对比发现目的地址并不是自己,于是就会将报文丢弃。

就像在课堂上老师指明一个同学回答问题。

问题一:如果有多台主机都在发送数据呢?

数据间会发生碰撞问题,从而导致数据无法使用。

在更底层,这些数据源于光电信号,如果同时有多个主机在发送数据,那全部的数据势必会收到干扰。结果就是这些报文数据都不能正常使用。

问题二:发送方知不知道自己的数据被影响了呢?

知道。自己发出的消息,自己也会接收到。

就像可以自己听见自己说话一样。

如果发现了自己的数据不对(CRC验证不通过了),那么发送方就会根据“避免碰撞”的算法,休息随机时间,然后重新发送。


1.3 MTU

首先回答两个问题,

局域网中主机越多越好呢还是越少越好?

越少越好,可以减少数据碰撞。但是事实情况不能要求连接局域网的主机变少,所以就有了交换机

交换机的作用就相当于是把局域网在划分成两块区域。如果通信的双方在划分的区域的同一侧,那么交换机就不会再将这个报文发送到区域的另一侧。从而减少数据碰撞。

局域网数据发送时,数据越长越好还是越短越好?

越短越好,越短发的越快。数据碰撞的可能性就小。


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

以太网帧中数据长度规定最小46字节,最大1500字节。ARP数据包的长度不够46字节,要在后面补填充位。

最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU。不同的数据链路层标准的MTU是不同的。

1.3.1 MTU对IP协议的影响

超过1500字节会发生分片,具体已经在上篇博文中详细提及了。

Linux--IP协议--0316-19_Gosolo!的博客-CSDN博客

1.3.2 MTU对UDP协议的影响

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

1.3.3 MTU对于TCP协议的影响

TCP的一个数据报也不能无限大, 还是受制于MTU。TCP的单个数据报的最大消息长度, 称为MSS
TCP在建立连接的过程中, 通信双方会进行MSS协商。理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(受制于数据链路层的MTU).
双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。然后双方得知对方的MSS值之后, 选择较小的作为最终MSS。

MSS的值就是在TCP首部的40字节变长选项中(kind=2);

1.3.4 查看硬件地址和MTU

bash: ifconfig

2. 抛出问题

网络转发过程中,MAC报头会发生变化吗?

答案是,会变。这里涉及到路由器的一个功能。

 数据要想发送给目标主机需要MAC地址,MAC地址如何得知?

 ARP协议!

 3.ARP协议

首先,但发送端想要发送数据时,它会知道接收端的IP,也就得知了目标网络+目标主机。但在数据链路层,我们的报头文件中有目的MAC地址这一字段,如何通过目的IP得知目的MAC地址呢?

ARP协议建立了主机IP地址和MAC地址的映射关系。ARP协议是一个局域网协议。

ARP协议和以太网帧协议的关系

二者同在数据链路层。但属于上下层关系,也就是说以太网帧协议的上层协议,要么是所以也就解释了以太网帧报头的类型字段!

3.1 ARP协议的工作流程

3.1.1 具象工作流程

假设在局域网中有多台主机,A、B、C、D。其中主机A要给主机D发送消息。

A会在局域网中以“广播”的形式,发送一个报文“IP地址是IP_D的主机,请告诉我你的MAC地址”。局域网中的所有主机都会拿着这条报文跟自己做对比,发现叫的不是自己,于是丢弃报文不管。

当主机D接收到这份报文后,确认叫的就是自己,于是会将自己的MAC地址填入报文,然后定向的发给主机A,因为此时主机D已经通过A发送的报文得知了A的MAC地址。

结论:

任何主机可能之前向目标主机发起过ARP请求,注定了未来会收到对应的ARP应答。

任何一台主机,也可能被别人发起ARP请求。

在局域网中,任何一台受到ARP的时候,可能是一个应答,也可能是一个请求。

3.1.2 认识ARP协议

 相关字段:

硬件类型

指链路层网络类型

1为以太网。

协议类型

指要转换的地址类型

0x0800为IP地址。

硬件地址长度

对于以太网为6,

表示6字节。

协议地址长度

对IP地址为4,

表示4字节。

发送端以太网地址

发送端IP地址

目的IP地址

都是已知的,

直接填写即可

目的以太网地址

一般全部设为1,表示广播。

有目的主机的MAC地址,

就直接填写MAC地址。

op字段

op为1表示ARP请求

op为2表示ARP应答

3.1.3 模拟一次真实的工作流程

主机A广播一条报文,报文内容如下图

 以太网帧层,相当于是ARP层将报文向下交给他后,该层对他再次进行封装报头!


B、C主机也收到该报文,那他们需不要对报文进行进行解包向上交付给ARP层协议呢?

需要。因为以太网帧报头中的目的MAC地址是全1,为广播。每个主机都要接收这个报文。递交给ARP层后,先区分是ARP请求还是ARP应答,如果是请求,接着查看目的IP地址。如果IP地址不匹配。会在ARP层将该报文丢弃!


D主机接收报文,回应一个ARP应答。


主机B、C同样接收到这个ARP应答报文,需不要解包向上交付给ARP层协议呢?

不用,目标以太网地址为MAC_A,BC主机接收到这个报文,在以太网帧协议这一层就会将报文丢弃掉。

经过这样的过程,主机A就拿到了目的主机的MAC地址。从而可以将历史上收到的报文向下交付,封装完整以太网帧。

问题:

ARP看起来至少进行一个请求和一个应答,是不是每一次发送数据都要这么干呢?

ARP请求成功之后,请求方会暂时的将IP:MAC的映射关系保存进入缓存表。并有其他的方案确定时间更新该缓冲表。

是不是只会在目的最终的子网中进行ARP,其他地方会不会也发生ARP呢?

会,在路由器一层一层的往外部的局域网发送时,下级的路由器就不知道上机路由器的MAC地址,所以也需要进行ARP。ARP的过程会在网络路径中随时发生。

3.2 查看IP地址和MAC地址关系映射的缓存表

 linux

 windos下

 

 3.3 简单理解什么是ARP欺骗

由于缓存表是存新不存旧的,如果主机A和路由器B已经建立好了映射关系。此时在该局域网中,有一台C主机,疯狂的向路由器B发送构建ARP报文“我是主机A,MAC_C,IP_A”,那么此时就会更新缓存表。主机C继续向主机A疯狂的发送ARP应答,“我是路由器B,MAC_C,IP_B”。

这样主机A和路由器B之间的通信,在双方都不知情的情况下,被C截获了。称为ARP欺骗。


http://www.niftyadmin.cn/n/177592.html

相关文章

《计算机网络-自顶向下》02. 应用层

文章目录应用层协议原理应用程序体系结构进程通信客户和服务器进程进程与计算网络之间的接口进程寻址可供应用使用的运输层服务可靠数据传输吞吐量定时安全性因特网提供的运输服务TCP安全的 TCPUDP因特网运输协议所不提供的服务一些因特网应用所使用的运输层协议网络应用 —— …

用于电力电子器件的栅极驱动器

栅极驱动器是一种功率放大器,它接受来自控制器IC的低功耗输入,并为功率器件产生适当的高电流栅极驱动。随着对电力电子器件的要求不断提高,栅极驱动器电路的设计和性能变得越来越重要。 功率半导体器件是现代电力电子系统的核心。这些系统利…

【C#】给容器里控件批量初始化

系列文章 【C#】单号生成器(定义编号规则、流水号、产生业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成(构建本周开始、结束日期) 本文链接:https…

CentOS 7 安装 mysql 8.0

官方文档 2.5.1 Installing MySQL on Linux Using the MySQL Yum Repository 官网查找最新版本 MySQL Product Archives 复制这个链接地址,并下载 wget https://repo.mysql.com//mysql80-community-release-el7-7.noarch.rpm 接下来,按照官方文档步…

天梯赛练习集--L1-001到L1-010--python - java

python L1-001 Hello World print("Hello World!")L1-002 打印沙漏 a input().split() n int(a[0]) c 1 while(2*c**2-1<n):c1 c-1 b 2*c - 1 for i in range(c):print(" "*ia[1]*(b-2*i)) for i in range(1,c):print(" "*(c-i-1)a[1]…

动态规划专题(明天继续)

动态规划求最大值&#xff1a; 题目描述 小蓝在一个 nn 行 mm 列的方格图中玩一个游戏。 开始时&#xff0c;小蓝站在方格图的左上角&#xff0c;即第 11 行第 11 列。 小蓝可以在方格图上走动&#xff0c;走动时&#xff0c;如果当前在第 rr 行第 cc 列&#xff0c;他不能…

干货 | 开关电源的PCB布线设计技巧—如何降低EMI?

开关电源PCB排版是开发电源产品中的一个重要过程。许多情况下&#xff0c;一个在纸上设计得非常完美的电源可能在初次调试时无法正常工作&#xff0c;原因是该电源的PCB排版存在着许多问题。为了适应电子产品飞快的更新换代节奏&#xff0c;产品设计工程师更倾向于选择在市场上…

数字中国建设进行时:吉林大学党委常务副书记冯正玉一行调研实在智能

两会前夕&#xff0c;中共中央、国务院印发了《数字中国建设整体布局规划》&#xff0c;明确了加快数字中国建设的重点任务。《规划》强调&#xff0c;要加强整体谋划、统筹推进&#xff0c;把各项任务落到实处。在强化人才支撑的第四要点上&#xff0c;指出统筹布局一批数字领…