计算机网络 (五) 数据链路层 :ARP协议、以太网协议、MTU

数据链路层与网络层的关联


数据链路层的主要功能就是负责相邻设备之间的数据传输 。

在网络层那篇博客中也说过,网络层是点对点之间的通信。主要通过IP协议描述起点到终点。而链路层则是对网络层的补充,负责在起点到终点的路径中,每一个相邻节点的数据传输。

网络层主要关心的是从起点到终点
在这里插入图片描述
链路层则关心的是其中路径上的每一个相邻节点的通信
在这里插入图片描述
举个例子,比如我们要去旅游,我们顶下目标,从北京前往北海道。这即是我们所描述的起点与终点。
而光有起点和终点不行,还需要描述途中的行程,如先从北京坐车到某某机场,然后再从某某机场转机到地点A,再从地点A,再从地点A坐船来到北海道,这边是途中所规划的路径。

这个从起点到终点的整个行程表就相当于我们的网络层。而这一个一个的地点的移动,也就是具体的行程方式与途径,就相当于数据链路层。
如果没有了行程表,即使知道出行方式和途径也不知道具体的路径。而只知道行程表,不通过具体的通行也只能停留在原地。这就是网络层与数据链路层之间的关系。


以太网协议

什么是以太网

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

以太网帧格式

在这里插入图片描述

  • 32位源MAC地址/目的MAC地址:表示发送端/接收端的MAC地址,用于描述识别相邻的设备。
  • 16位上层协议:记录了上层网络层的协议,用于数据分用时选择上层解析的协议
  • 32位FCS:帧尾,包含校验和在内。

MAC地址

MAC地址即相邻设备定位的地址,也就是物理网卡的硬件地址,标识每一块网卡,在两块网卡之间的数据传输起到作用。

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

MAC地址与IP地址

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

MTU

MTU即Maximum Transmission Unit, 最大传输单元。它其实就是以太网协议帧的长度限制,用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小,默认为1500。

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

在这里插入图片描述
因为MTU限制了数据帧的大小,所以其对上层也有影响。例如而在网络层中,IP数据报中的UDP报文,虽然没有超过数据报长度,但如果其大小大于MTU,其就得在网络层进行数据分片,然后传送到对端后再在网络层组织数据。所以MTU对传输层有着一定的影响。

MTU对TCP的影响

因为TCP协议在进行三次握手的时候,双方就约定好了一个MSS(最大数据段协商,取通信双方最小的那一个)。因为TCP是面向字节流的传输,所以每次发送数据时,其就从发送缓冲区中取出不大于MSS的数据进行发送,也就是说, TCP在传输层会自动进行数据的分片, 所以其在网络层不会分片。

MSS = MTU - 最小IP报头长度 - 最小TCP报头长度。
因为MTU默认为1500,所以MSS默认为1460,即1500 - 20 - 20。

MTU对UDP的影响

因为UDP中不存在MSS,所以其数据只要小于最大数据报大小就可以传输。但是在其封装到网络层IP协议数据报时,虽然大小不超过最大数据报大小,但是如果超过MTU,即数据无法一次性在链路层发送,所以此时就会在网络层进行数据分片。
而问题来了,UDP是不可靠的,他不能保证数据能够安全到达对端,所以在传输过程中,一旦有任何一个分片出问题,那么整个UDP报文都会被丢弃。这也就以为着,如果UDP传输中,分片越多,在传输的时候出现问题的几率也就越大。所以这时候就需要我们在应用层使用UDP协议的时候就需要考虑到MSS的问题,将UDP数据报按照计算的MSS进行分包处理。
默认的UDP MSS 为 1500 - 20 - 8 = 1472


ARP协议

什么是ARP协议

在进行网络通信时,网络层只给出了起点与终点的IP地址,那么数据链路层又是怎么通过IP地址来获取路径中每一个相邻设备的MAC地址呢?答案就是使用了ARP协议。

ARP协议:
是一个介于网络层和数据链路层之间的一个协议,其主要作用就是通过IP地址来获取MAC地址。


ARP数据报格式

这里是引用

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

ARP协议的工作流程

ARP协议如何获取相邻设备的MAC地址呢?
首先,按照上面的协议格式,封装ARP请求。然后将ARP请求广播到整个局域网中,然后相邻设备收到这个ARP请求时,就会查看其中的目的IP地址是否与自己相同,如果相同,则组织ARP响应,将自己的MAC地址回复回去,源端收到后,就会对ip地址和MAC地址的关系进行映射缓存,缓存时间一般是20分钟。而如果不符合,则直接丢弃,什么都不做。

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

ARP缓存为什么只存在一段时间后就会失效?
这个主要涉及到MAC地址与IP地址的映射原理。因为现在的IP地址基本都是DHCP动态分配的,主机发送DHCP请求给路由器,路由器收到后给主机动态分配IP地址。而IP地址改变后,原来的映射关系就会发生变化,所以ARP缓存不能存在太长时间,需要及时更新。


ARP局域网欺骗攻击

从上面ARP协议的工作流程可以看出,ARP请求广播是具有风险的。如果在相邻设备中有恶意的主机,如果其收到了我们的ARP广播请求,他此时就可以伪装成我们的目标主机IP地址,将他的MAC地址响应给我们,这是我们就会将数据发送给他,导致数据被截获。

解决的方法也很简单,在防火墙中设置一个MAC白名单即可,只将数据发送给局域网中信任的设备即可。

猜你喜欢

转载自blog.csdn.net/qq_35423154/article/details/107116263