当前位置: 首页 > news >正文

【Linux网络编程十一】网络原理之数据链路层

数据链路层

  • 1.工作原理
  • 2.MAC帧
  • 3.ARP协议

1.工作原理

数据链路层解决的是,直接相连主机(主机和路由器)之间数据交付的问题。
在网络中真正的发送数据的是在数据链路层,在数据链路层根据MAC地址来进行发送。
MAC地址是用于在同一子网内部确认双方身份的。

网络层的IP协议是用来决策路径的,可以找到目的网络在哪里,但在该目的网络中具体的主机还需要数据链路层的MAC地址来唯一标识。

网络协议当中,每一层都有它自己的作用,IP解决的是跨网络传送到主机的问题,但你再怎么跨网络你得先找到下一跳(路由器),然后自下向上交付到路由器的网络层再进行决策,再重新交到下层再找到下一跳,找到后再进行自下向上交付到网络层,直到跳到目的主机上。

在这里插入图片描述
要注意MAC帧只工作在数据链路层,IP工作在网络层,所以在网络层的路径决策转发跟MAC一点关系都没有。网络层的路由转发是根据IP地址的。

2.MAC帧

在这里插入图片描述
【如何分离报头和有效载荷】

MAC帧采用定长报头,将定长的报头拿下来就是有效载荷了

【如何交给上层,如何分用】

MAC帧报头里面有个类型,不同的类型表示交给上层的协议不一样
类型为0800表示上层使用的是IP协议
类型为0806表示上层使用的是ARP协议

【MAC地址】

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

【MAC地址与IP地址】

IP地址描述的是路途总体的起点和终点。
MAC地址描述的是路途的各种路段的起点和终端。

3.ARP协议

我们已经知道在网络中真正发送数据的是在数据链路层,根据MAC地址进行发送。那么进行转发时,路由器是如何知道MAC地址的呢?
在这里插入图片描述
路由器是根据ARP协议找到目标主机的MAC地址的。
而ARP协议准确来说不是网络层的协议,,而是一个介于数据链路层和网络层之间的协议;
在这里插入图片描述

【原理】
路由器其实一开始并不知道目的主机的MAC地址的,而是通过发送ARP请求报文,目的主机接收到ARP请求后,就会发送ARP应答,这个应答里就保存了目的主机的MAC地址,这时候路由器接收到ARP应答后,就能知道目的主机的MAC地址了。而ARP报文中报头的目的地址一开始不知道就填为FFFFFF表示广播地址。根据局域网的通信原理,我们知道这个报文是会向局域网中所有的主机都发送一次。
【实践】
ARP请求
在这里插入图片描述
ARP应答
在这里插入图片描述

每台主机它不区分是请求还是应答,只要收到ARP报文,就先看op,是二这个主机才识别到这是一个arp的应答,它立马意识到,一定是我曾经发起过请求所以我的主机收到了应答。op提取完,路由器就直接提取发送端的mac地址和发送端的ip地址,这样路由器就知道了目标主机MAC地址和它对应的IP地址所对应的映射关系。

所以在ARP的过程中,收到任何的ARP报文,都是先看OP字段。
根据op字段决定ARP的类型。
请求时看有效载荷中的目的地址
应答时看的是有效载荷中的发送方地址

http://www.xdnf.cn/news/304057.html

相关文章:

  • 【HTML5】显示-隐藏法 实现网页轮播图效果
  • 【LDM】视觉自回归建模:通过Next-Scale预测生成可扩展图像(NeurIPS2024最佳论文阅读笔记与吃瓜)
  • 第七节:图像基本操作-图像属性获取 (尺寸、通道数、数据类型)
  • C++【STL】(1)string
  • 基于STM32、HAL库的W25X40CLSNIG NOR FLASH存储器驱动应用程序设计
  • 【Linux系统】线程安全
  • unix 详解
  • cuda多维线程的实例
  • 纷析云开源财务软件:重新定义企业财务自主权
  • 《Python星球日记》第35天:全栈开发(综合项目)
  • 基于 Flask的深度学习模型部署服务端详解
  • Linux 工具
  • docker + K3S + Jenkins + Harbor自动化部署
  • Opentack基础架构平台运维
  • iPhone或iPad想要远程投屏到Linux系统电脑,要怎么办?
  • react-12父子组件间的数据传递(子传父)(父传子)- props实现
  • Axure :列表详情、列表总数
  • Spring Boot 3.x集成SaToken使用swagger3+knife4j 4.X生成接口文档
  • 开源与商业:图形化编程工具的博弈与共生
  • ExtraMAME:复古游戏的快乐“时光机”
  • 信息论01:从通信到理论的飞跃
  • 第七章,VLAN技术
  • Github 2025-05-06Python开源项目日报 Top10
  • Kotlin与Java在Android生态中的竞争与互补关系
  • RT-Thread自用记录(暂定)
  • 第四章-初始化Direct3D
  • 餐饮部绩效考核管理制度与综合评估方法
  • 【java】程序设计基础 八股文版
  • 开放的力量:新零售生态的共赢密码
  • 每日算法-250506