数据链路层

数据链路层

用于两个设备(同一种数据链路节点)之间进行传递

认识以太网

"以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容

跨网络传输的本质是由无数个局域网转发的结果,理解跨网络传输的本质,首先需要理解局域网中报文的转发原理;上文中网络层的作用是路由选择,真正去实现路由的是数据链路层

以太网帧格式

以太网的帧格式如下所示:

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP
  • 帧末尾是CRC校验码

学习报文最重要的两个问题:

如何解包?

定长报头加上后面4字节校验码

如何分用?

报头中的类型决定交付的协议类型

理解局域网转发的原理

报文在数据链路层经过以太网的封装,形成数据帧;由主机1发送至局域网中,该报文会被局域网中所有的主机获取,在数据链路层先识别目的地址,如果不符合直接丢弃;如果符合,直接向上交付

如果大量主机同时发送数据,此时每个主机都会受到大量数据,进而导致数据传输效率低下,解决措施有:令牌环,以太网

在以太网中规定:在任何时刻,只能有一个主机发送消息,如果多个消息被同时发送,会导致局域网中的数据发生碰撞,从而变成无效数据;一个局域网,一个碰撞域

再后来交换机的引入,也大大降低了碰撞的概率

交换机划分了碰撞域,当识别局部性碰撞时,对碰撞数据不进行转发

重新看待局域网,可以将局域网当作临界资源;规定任何时刻只能有一台主机能够向临界资源中写入数据

认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示
  • 在网卡出厂时就确定了, 不能修改

对比理解MAC地址和IP地址

  • IP地址描述的是路途总体的 起点 和 终点
  • MAC地址描述的是路途上的每一个区间的起点和终点

认识MTU

由于碰撞域的存在,一台主机发送数据时,发送的数据是较长些好,还是较短些好,为什么呢?

较长或者较短都会影响传输效率,适中较好

MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)
  • 不同的数据链路层标准的MTU是不同的

MTU对上层协议的影响

在上文的网络层中已经介绍过分片,这里不加赘述

查看硬件地址和MTU

ARP协议

再回到数据帧中,再局域网中可通过目的IP和子网掩码确定目标网络,目标网络中存在着许多的主机,通过目标主机MAC地址便可确定目标主机,但是数据帧中需要填充的内容就是目标主机的MAC地址,所以在与目标主机传输数据之前,还存在一个过程:获取目标主机MAC地址,ARP协议便可完成这一任务

ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议

ARP协议的作用

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系

  • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
  • 因此在通讯前必须获得目的主机的硬件地址

简单来说,ARP协议,根据IP地址,得到对方主机的MAC,获取对方主机的MAC地址后,再发送MAC帧

ARP数据报的格式

  • 硬件类型指链路层网络类型,1为以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节
  • 协议地址长度对于和IP地址为4字节
  • op字段为1表示ARP请求,op字段为2表示ARP应答

ARP协议的工作流程

主机1调用ARP请求,填入字段,目的地址填入FFFFFF,进入数据链路层封装成MAC帧,发送至局域网中,被局域网中的每个主机收到,对比目的IP是否相等,进行丢弃;到达目的主机后,向上交付给ARP协议,读取op内容判断ARP的类型:请求或应答;填入MAC地址,返回数据链路层进行封装,再发送至局域网中,直接到达主机1(由于MAC已经获取,其他主机不再获取MAC帧),至此可以开始发送数据

相关推荐
一只栖枝2 小时前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
wuicer4 小时前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
快乐的划水a4 小时前
组合模式及优化
c++·设计模式·组合模式
玩转以太网5 小时前
基于W55MH32Q-EVB 实现 HTTP 服务器配置 OLED 滚动显示信息
服务器·网络协议·http
cui__OaO5 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
星星火柴9365 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头5 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
秃了也弱了。5 小时前
WireShark:非常好用的网络抓包工具
网络·测试工具·wireshark
小晶晶京京6 小时前
day34-LNMP详解
linux·运维·服务器
画个太阳作晴天6 小时前
A12预装app
linux·服务器·前端