目录

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欺骗。

Linux--数据链路层--ARP协议--0319-21相关推荐

  1. Linux上抓arp包,linux c arp协议分析一 - 捕捉局域网内的arp包

    一.实验步骤: 1.假设监听方IP为192.168.1.33 2.假设arp请求发起方的IP为192.168.250 3.在192.168.1.33中开启catcharppacket 4.在192.1 ...

  2. Linux:数据链路层——以太网协议、NAT协议、ARP协议和DNS协议

    Linux:数据链路层--以太网协议.NAT协议.ARP协议和DNS协议 以太网协议 以太网帧格式 MTU以及MTU对IP协议的影响 ARP协议 NAT协议 NAT IP转换过程 静态NAT 动态NA ...

  3. Linux网络-数据链路层,MAC帧解析,ARP协议

    目录 数据链路层VS网络层 以太网概念 以太网的帧格式(报文格式)(也可以称之为MAC帧) MAC地址的概念 MAC帧格式 局域网通信原理 MTU MTU说明 MTU对IP协议的影响 MTU对UDP协 ...

  4. TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记

    TCP/IP协议的体系结构: TCP/IP协议族四层模型和OSI七层模型 上层协议使用下层协议的服务,下层协议给上层协议提供一个接口. 四层模型中各个层次的作用和特点 上图说明: 最底层是数据链路层, ...

  5. 物理层(网线)、数据链路层(交换机)、网络层(IP协议、ARP协议、ICMP协议、路由器)、VLAN(虚拟局域网)、HSRP协议、ACL、NAT

    文章目录 物理层(Physic Layer) 数据链路层(2层 Data Link Layer) 1.帧结构: 2.帧格式: 3.工作在数据链路层的设备: 交换机/网卡 4.交换机基本的工作原理:MA ...

  6. Linux内核邻接子系统(arp协议)的工作原理

    主要参考了<深入linux内核架构>和<精通Linux内核网络>相关章节 文章目录 Linux内核邻接子系统(二层到三层) 邻接子系统的核心 struct neighbour ...

  7. tcp/ip 协议栈Linux内核源码分析11 邻居子系统分析二 arp协议的实现处理

    内核版本:3.4.39 内核邻居子系统定义了一个基本的框架,使得不同的邻居协议可以共用一套代码.比起其它的内核模块,邻居子系统框架代码还是比较简单易懂的.邻居子系统位于网络层和流量控制子系统中间,它提 ...

  8. 计算机网络 | 数据链路层 :ARP协议、以太网协议、MTU

    数据链路层 数据链路层与网络层的关联 以太网协议 什么是以太网 以太网帧格式 MAC地址 MAC地址与IP地址 MTU MTU对TCP的影响 MTU对UDP的影响 ARP协议 什么是ARP协议 ARP ...

  9. [Linux]ARP协议

    概念: 1. ARP协议(地址解析协议):由IP地址转换为MAC地址的协议.IP地址:网络号+主机号.MAC地址:数据链路层的物理地址(硬件地址).IP协议使用了ARP协议,因此被划归为网络层,但其用 ...

  10. 网络基础3-1(细谈IP协议头, 网络层,子网划分,路由选择,数据链路层,以太网帧格式,MAC地址,再谈ARP协议)

    IP协议 IP协议头格式 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4 4位头部长度(header length): IP头部的长度是多少个.32bit, 也就是 ...

最新文章

  1. Android客户端多线程实例分析
  2. Linux对用户态的动态内存管理
  3. PPT | Docker定义存储-让应用无痛运行
  4. java 格式匹配,java匹配电话格式的正则表达式
  5. (转)【超详细教程】使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结...
  6. HDU 2629 Identity Card
  7. 背景差分法android代码,【学术论文】基于背景差分法的尾气烟度检测系统设计...
  8. 初学web前端开发,你必要了解的基本概念与工具技术
  9. 使用Spark Shell开发运行Spark程序
  10. Linux(Ubuntu)使用日记------自定义命令的使用
  11. 轻松使用EasyRecovery恢复丢失照片
  12. php大小写转换,php中字母大小写转换函数
  13. matlab神经网络训练图解释,matlab实现神经网络算法
  14. 信息学奥赛一本通1374 铲雪车(snow)
  15. 超级简单的Python爬虫教程,python爬虫菜鸟教程官网
  16. C# 163邮箱自动登陆
  17. isbn书号权威查询,isbn图书查询,图书
  18. js vue 设置excel单元格样式_vue+elementui 项目纯前端Export2Excel导出excel,并利用xlsx-style设置单元格样式...
  19. 终于等到你,最强 IDE Visual Studio 2017 正式版发布(附详细介绍与下载地址)
  20. 2020中国上市公司品牌价值榜20强发布

热门文章

  1. 『房产观澜』 [经济杂谈]中国房地产泡末的四大根本原因、后果及对策
  2. L49.linux命令每日一练 -- 第八章 Linux磁盘与文件系统管理命令 -- fdisk和partprobe
  3. 前端开发常用代码片段
  4. c++ 构造函数 继承
  5. oracle这么导入,Oracle怎么导入数据
  6. 作为Android开发者,你真的熟悉Activity吗?
  7. Linux socket聊天室
  8. 微信新出“拍一拍”功能,快被大家玩坏了,你会吗?
  9. Jsoup爬虫入门实战
  10. 用c语言编写的求圆周率的程序,【C语言程序设计】C语言求圆周率π(三种方法)...