前言
Linux网络通信环境中的链路层主要负责相邻设备之间的数据帧传输,典型协议是以太网协议,典型设备是交换机。
网络层主要偏向数据的传输方向,也就是数据的起点到终点,而链路层更加偏向相邻主机间数据如何传输,也就是数据在从起点到中的过程中数据的传输流程。
一:以太网协议
以太网协议:以太网协议是链路层的典型协议,用于在链路层组织数据,主导相邻主机之间的数据帧传输。
1.1 以太网协议格式
MAC地址: MAC地址其实就是网卡的硬件地址,标识每一块网卡,描述识别链路层的相邻设备。
对端MAC地址:标志接收端的MAC地址
源端MAC地址:标志发送端的MAC地址
Proto:上层协议类型,进行数据分用时选择上层的解析协议
帧尾:包含CRC校验和
- 如何获取对端MAC地址?
ARP协议是一个介于网络层与链路层之间的协议,通过IP地址获取MAC地址。
封装ARP请求后广播到局域网当中(请求中描述了源端的IP地址、MAC地址、对端的IP地址),相邻设备收到ARP请求后,检测其中对端IP地址是否与自己相符合,若符合则组织ARP响应,填充自己的MAC地址返回,若不符合则丢弃。
获取到对端MAC地址后,会缓存默认20~30分钟,IP地址分配基本都是用DHCP动态分配,若主机下机后再重新登录,则IP地址有可能改变,原有的IP地址和MAC地址的映射关系可能会发生改变,所以ARP缓存不能存在太长时间,需要及时更新。
- 解决ARP局域网欺骗攻击
网络中不乏存在恶意主机,当恶意主机收到ARP请求后,将自己伪装成目标主机,将自己的MAC地址填充进行回应。
解决办法:防火墙白名单,将相连主机的MAC地址放入白名单,不在白名单范围里的都将被识别为恶意主机。
二:MTU
MTU(Maximum Transmission Unit):最大传输单元,其实就是链路层限制的数据帧大小。
2.1 MTU对TCP协议的影响
TCP在传输层三次握手建立连接时,进行MSS(最大数据段)大小协商,通信双方取MSS较小的作为最大传输数据段大小,每次从发送缓冲区中取出不大于MSS大小的数据进行传输,因此也说TCP在传输层会自动进行数据分段,MSS = MTU - IP报头最小长度 - TCP报头最小长度,TCP在网络层基本不会出现数据分片,因为MSS就是根据MTU的大小计算的。
2.2 MTU对UDP协议的影响
对于UDP不存在MSS的概念,只要数据段大小小于UDP数据报最大限制即可,但是如果超过MTU,即数据无法一次性在链路层发送,所以此时就会在网络层进行数据分片。但UDP不保证数据的可靠传输,若其中一个分片出问题则整个UDP报文都会被丢弃,这也就意味着UDP传输过程中,分片越多,在传输时出现问题的几率就越大。
解决办法:程序员在应用层使用UDP协议的时候就要考虑到MSS的问题,将UDP数据段按照计算的MSS进行分包处理。