文章目录
重点
- 数据链路层的作用:两个设备 (同一种数据链路节点) 之间进行传递数据;
- 以太网是一种技术标准;既包含了数据链路层的内容, 也包含了一些物理层的内容。 例如:规定了网络拓扑结构,访问控制方式,传输速率等;
- 以太网帧格式
- 理解 mac 地址
- 理解 arp 协议
- 理解 MTU
链路层
数据链路层:提供将数据在局域网中传输的能力,传输方式主要是以太网
- 数据在发送之前会给数据封装上对应的局域网的报头。
- 数据要进行跨网络传输,需要经过路由器转发。
- 数据在路由器进行向上交付时,会将该数据对应的局域网报头去掉。
- 而当路由器该数据转发给下一跳之前,又会给该数据封装上下一跳网络所对应的局域网报头。
以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据
以太网MAC帧格式
-
目的地址(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
ARP协议
地址解析协议协议,根据IP地址获取MAC地址的一个TCP协议,是 MAC 帧协议的 “上层”,因为同一个局域网中发消息需要知道对方mac地址,而我们一般只知道ip地址,所以需要arp协议将ip地址转换为mac地址
- 硬件类型指链路层的网络类型,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地址就行了