在上一篇博客中我们对网络层的典型协议--IP进行了介绍,那么本篇博客作为网络方面的最后一片博客,我们对网络中最后内容--链路层协议进行讲解。
目录
1.链路层协议
1.1MAC地址
1.1.1类型
1.1.2作用
1.2以太网协议
1.2.1协议格式
1.2.2ARP协议
1.2.3获取指定硬件地址
1.2.4MTU
1.链路层协议
链路层是负责相邻设备之间的数据传输,在网络层中的IP地址描述的是数据从一台主机到另一台主机,是数据收发的起点和终点。但是在数据传输过程中并不是由起点直接传达到终点,这中间过程中需要经历层层转发才可以,链路层便是为这一部分内容服务的。
1.1MAC地址
MAC地址是网卡的物理硬件地址,是网卡出山时所设定的固定地址。它是为上述转发过程中所经过的中间设备进行标识,通过MAC地址,我们可以很好的清楚数据传输过程所经过的中间转发设备。
1.1.1类型
MAC地址的数据类型是:uint8_t mac[6],是一个无符号的48位数字。
1.1.2作用
MAC地址的作用也正是设计它的初衷,即作为相邻设备之间的标识。
1.2以太网协议
1.2.1协议格式
其中,6字节对端&6字节源端MAC地址:用于描述通信相邻的两个硬件设备;2字节协议类型:所封装的报文data所使用的协议类型;4字节位校验和:进行差错校验。
1.2.2ARP协议
ARP协议是介于链路层和网络层之间的协议,既包含了MAC地址也包含了IP地址。
笔者引用《TCP-IP详解》一书中的结构说明,在上图中进行展示。
其中,2字节硬件类型:描述链路层网络协议--以太网;2字节协议类型:要进行地址转换的地址类型;1字节硬件地址长度:存储硬件地址长度;1字节协议地址长度:存储转换使用的协议地址长度; 2字节op:1--标识ARP请求,2--标识ARP应答。
6字节源端MAC地址,4字节源端IP地址,6字节对端MAC地址,4字节对端IP地址。
1.2.3获取指定硬件地址
- 当前主机封装一个ARP请求,在请求中填充源端MAC地址和IP地址,并将以太网帧中头中的目标MAC地址填充为:0XFFFFFFFFFFFF -- 广播地址;
- 将ARP请求广播给所有相邻设备;
- 收到ARP请求的主机,对数据帧进行解析,如果目标IP地址匹配则填充自己的MAC地址和IP地址进行相应,如果不匹配则直接丢弃;
- 当前主机收到相应之后,便知道了指定设备的MAC地址;
- 当前主机将MAC-IP映射关系缓存起来,并保存一段时间(非永久)。
了解完如何过去指定硬件地址的操作内容之后,我们可以来简单讲解一种网络攻击--ARP欺骗攻击,也叫做局域网攻击。
它的攻击方式便是:恶意主机伪造IP地址不断的给网关设备发送ARP响应,告知网关自己是子网中的某个主机;与此同时,该恶意主机还会给子网中的其他主机不断发送ARP响应,告知其他主机自己是网关设备。
于是这两种角色的设备会被不断得到的ARP响应覆盖掉自己原有的ARP映射表,普通主机认为恶意主机是网关设备,将数据发送给恶意主机;网关设备认为恶意主机是指定设备,将响应发送给恶意主机。这样,该恶意主机便达成了网络攻击的目的--窃取数据。
1.2.4MTU
以太网中的链路层对数据帧长度存在一个限制,其最大值的默认值是1500字节,链路层将这个特性称作MTU,即最大传输单元。
顺便罗列出几种常见的最大传输单元(MTU):
接下来我们来看一看MTU的存在对传输层协议的影响:
对于TCP协议,我们在三次握手建立连接阶段便会协商MSS(根据MTU计算得到的传输最大数据),然后在后续的数据传输过程中,每次从缓冲区中取出合适大小的数据进行头部封装后传输。TCP在传输层会自动将数据进行分段,因此不会在网络层出现数据分片。
对于UDP协议,并不存在协商MSS(无连接),只要传输的数据大小最大小于64k-8就可以传输,但是有可能会因为网络层传输中,因为数据大小大于MTU而导致数据分片。但是,数据分片之后的重组是有可能失败的(分片越多,越容易失败),重组失败便会导致数据重传,传输效率低下。因此,我们在使用UDP进行数据传输过程中,可以在应用层的程序中设计MSS,即在传输时便将数据分割完成,尽量减少数据在网络层的分片。