Linux数据链路层通信原理及报文格式

发布时间:2026/7/12 0:38:58

Linux数据链路层通信原理及报文格式 数据链路层局域网通信原理网络层解决的是数据应该送往哪一个主机/路由器的问题数据链路层主要解决的是直接相连的主机之间数据交付的问题。每一台主机都有网卡网卡有一个Mac地址Mac地址只需要保证在局域网里的唯一性即可每台主机只有一个Mac地址。每一个机器其实都可以接收到报文在数据链路层的这一层可以解包出这个报文的目标主机和源主机然后对报文里的ip信息对比看看是不是自己的主机ip如果是就处理不是就丢弃报文而在数据链路层丢弃的数据上层是不知道的。任何一个时刻可以由多个主机接受局域网里发生的消息但一个时刻只能允许一个主机发送消息可以把局域网看成多台主机共享的临界资源。在以太网通信的时候由于是光电信号就会发生数据碰撞问题所以发送数据的主机要执行避免碰撞的算法错峰发送。碰撞域表示在以太网里有可能发生数据碰撞的区域。在通信的时候其实有一个设备称为交换机它工作在数据链路层如果判断两太通信的主机都在交换机的一侧无论是正常传输还是数据发生碰撞交换机都不会把数据继续传输到另外一侧就不会让数据在更大的局域网里传输通过这样划分碰撞域就可以减少数据碰撞的概率。但这里存在安全问题网卡分为普通模式和混杂模式混杂模式下的网卡会把数据上传给上层所以我们的数据需要加密。令牌环网和局域网一样每一个时刻都只能有一个主机往令牌环网发送消息只有具有令牌的主机才能往令牌环网发送消息这个令牌类似于系统编程里面的锁的概念Mac帧报头MAC源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的。类型帧协议类型字段有三种值,分别对应IP,ARP,RARP。CRC:帧末尾是CRC校验码是一种用于检测数据传输或存储过程中可能出现的错误的信道编码技术。它通过对数据进行除法运算并生成一个简短的固定位数校验码来实现错误检测。Mac帧是定长报文所以可以轻松的解包和封装通过类型我们可以确定不同类型的Mac帧报文应该交给哪一个上层从而做到分用。由于数据碰撞和效率平衡的问题传输层有MSS限制发送的数据的大小而在数据链路层有MTU来限制发送的包的大小在tcp三次握手的时候双方也会协商交互用于减少分片和组装的次数。RARP如果我们只知道目标主机的MAC地址需要知道目标主机的IP就可以使用RARP报文。ARP协议ARP协议是用来把目的主机的ip地址转化为MAC地址因为报文从路由器经过的时候是需要重新制定报头的把源MAC地址和目的MAC地址修改了。ARP协议是属于MAC帧上层原理数据发送到局域网里路由器先收到数据路由器就会以广播的形式询问ip为xx.xx.xx.xx目的主机IP的MAC地址是什么当目标主机收到消息的时候就会发送一个ARP响应包包含主机A的MAC地址然后再定向返回回去。报头硬件类型指的是数据链路层的网络类型如果设置为1表示以太网。协议类型指的是要转换的地址类型一般设置为0x0800标识把IP地址转化为MAC地址。硬件地址长度对于以太网来说硬件地址长度为6表示MAC地址的长度是6个字节。协议地址长度一般写4表示IP地址来说是4字节。OPOP字段为1表示ARP请求字段为2表示ARP应答。发送端以太网地址发送ARP请求的主机的以太网地址。发送端的IP地址发送APR请求的主机的IP地址。目的以太网地址如果是发送ARP报文的那一端一般填全F表示广播。目的IP地址接收ARP报文的主机的IP地址。过程当一个局域网的路由器收到报文却不知道目的IP对应的MAC地址的时候就需要广播发送一个ARP报文首先是在ARP协议层也就是MAC帧的上层先制作一个ARP报文请求然后送到数据链路层里的MAC层添加报头这样我们就构建出来了一个MAC帧这样这个MAC帧就流向局域网这个局域网里的每台主机都会收到这个MAC帧而且dest MAC是广播地址所以这个局域网里的主机都要对此进行处理在MAC层先对MAC帧的报头进行分离然后就把分离完报头的数据交往上一层ARP层当ARP层发现op是1也就是报文种类是请求ARP的时候就会比对IP如果IP是自己的IP的话就要定向的进行ARP应答如果不是就直接丢弃。当我们要定向应答的时候要把op字段改为2目的MAC地址目的IP地址源IP地址源MAC地址这些都要修改传输到下一层MAC层后要把MAC帧报文的目的MAC地址和源MAC地址修改了不再使用广播类型。当路由器收到应答ARP报文之后可以看到0806这个字段可以知道这个报文是属于ARP的就把报文传输到上层的ARP层进行解析就会发现op是2就可以解析报文就可以拿到目标MAC地址了。其实无论是ARP请求还是ARP应答都会被局域网里的主机收到对于不相关的主机来说ARP请求是在ARP层丢弃的因为ARP请求的MAC帧报头的目的MAC地址是全F表示广播而ARP应答是在MAC层丢弃的因为MAC帧报头的目的MAC地址是具体的。在经过arp请求之后主机收到的MAC地址和IP地址的映射关系都会被临时缓存起来所以arp并不是每次都需要重新做的而是在缓存失效的时候才需要重新进行ARP。所以我们可以通过IP地址和子网掩码按位与获得网络号然后拼接上从1-254的IP地址并且全部都ping一下就可以获得这个网段里所有主机的IP和MAC地址的映射关系。ARP欺骗当A主机收到了很多的arp应答那么A主机会以最新的arp应答为准但这样就会有一个问题如果有一台B主机伪造自己的IP地址向A主机发送很多虚假IP和MAC地址映射关系的报文就会导致主机A的缓存映射被修改如果这台B主机也对其他主机这样做了那么这台主机能够变成这些主机里的中间人。arp-a#可以用来查看缓存在主机里的MAC地址和IP地址

相关新闻