Linux网络通信:链路层的典型协议以太网协议

前言

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进行分包处理。

你可能感兴趣的:(Linux网络编程)