数据链路层协议
创始人
2025-05-30 21:56:18

目录

背景

MTU

MTU对IP协议的影响:

MTU对UDP协议的影响:

MTU对TCP协议的影响:

以太网(mac帧协议)

MTU为何存在? 

ARP协议

RARP协议介绍:


背景

        前面提到网络层解决了数据在主机之间传输的问题,传输层解决了数据传输的可靠性问题,而链路层则解决的是两台相连的主机之间的通信问题。         以太网是一种局域网的技术标准,既包含了数据链路层的内容,也包含了一些物理层的内容。例如: 规定了网络拓扑结构,访问控制方式, 传输速率等;以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等。         以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网,无线LAN等。
那么使用不同局域网技术的主机是如何通信的?
1.链路层给数据添加上自己的局域网的报头 2.数据在跨网络传输的过程要经过路由器 3.路由器工作在网络层,数据在交付给路由器的时候,路由器会去掉数据的局域网报头 4.当数据发往下一跳时就会添加对应局域网协议的报头,所以数据可以在不同局域网之间传输。

看图理解:

MTU

        数据链路层有最大传送数据的规定:以太网帧中的数据长度规定最小46字节,最大1500字节,1500就是MTU,MTU是Maximum Transmission Unit的缩写,意为最大传输单元,不同的网络类型有不同的MTU,也就是不同的数据链路层标准的MTU是不同的。如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation),这个分片的工作是网络层的IP协议完成的。

MTU对IP协议的影响:

        较大的数据包,网络层的IP协议会进行分片,分片的报文的16位标识是相同的,它们的3位标志字段第二位置为0表示允许分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",除了最后一个分片置一表示分片结束,其他分片为0。还有它们IP报文的13位片偏移会标记它们相对于起始报文的位置,方便重新排序报文重组,这些分片中,任意一个分片丢包了就意味着整个包丢了,IP层不负责丢包重发。如图IP报文中标识分片的字段:

 

MTU对UDP协议的影响:

        一旦UDP报文长度超过了1500字节,就会在网络层分成多个数据包,一旦丢失了一个数据包,就代表整个数据包丢失,因此当发生MTU限制导致的分片丢失或重组错误时,TCP会进行重传以保证数据的完整性和正确性。而UDP则没有这种机制,分片丢失或重组错误时整个数据包都会被丢弃。因此,在选择传输协议时需要根据实际需求对可靠性和传输效率做出权衡。

MTU对TCP协议的影响:

        在建立TCP连接时,两端会通过MSS协商来确定发送方发送的数据包大小,MSS(Maximum Segment Size)选项是指TCP数据段的最大长度,基本上等同于TCP一个数据包的最大长度,且要小于MTU值。看图理解,可知TCP不会发生:

        最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)。双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。然后双方得知对方的MSS值之后,选择较小的作为最终MSS。MSS的值就是在TCP首部的40字节变长选项中。

以太网(mac帧协议)

目的地址,源地址:网卡的硬件地址即6字节MAC地址,长度是48位,是在网卡出厂时固化的。 

类型:帧类型,表示有效载荷应该交给上层哪一层协议,帧协议类型字段有三种值,分别对应IP、ARP、RARP

CRC:帧末尾校验码

对于数据帧,不考虑物理层,每个主机的数据链路层协议先获取 ,每个主机用数据链路层协议解析报文,对比目的mac地址和自己的mac地址,不相等就丢弃,相等就向上分用

在网络中,数据包是通过各种协议进行传输的,不同的协议有不同的格式和结构。抓包工具可以捕获网络数据包,并以混杂模式显示,即将所有经过网络接口的数据包都显示出来,无论这些数据包是不是针对本机的。在混杂模式下,抓包工具可以捕获和分析所有经过网络接口的数据包,包括发送和接收的数据包,从而帮助网络管理员进行网络安全监控、故障排除、性能优化等工作。

MTU为何存在? 

介绍碰撞域:

碰撞域(Collision Domain)是指在一个网络中,由于各个设备共享同一物理媒介(如同一根网线),因此在同一时刻只能有一个设备发送数据的区域。这意味着,如果两个或多个设备同时发送数据,它们的数据包就会发生碰撞,导致数据包丢失或损坏,从而影响网络的正常运行。

碰撞域通常是以物理层(如Ethernet)为基础的概念,而在更高层的网络协议中(如TCP/IP),通常会采用其他技术(如CSMA/CD)来避免碰撞的发生,从而提高网络的性能和可靠性。对于大型网络,为了避免碰撞域过大,通常会采用交换机等设备来隔离不同的碰撞域,从而提高网络的可靠性和性能。

所以同一个局域网主机同时发消息,主机少更好,因为减少碰撞的发送,数据链路层使用交换机来划分碰撞域以减少碰撞域的体积。碰撞也与mac帧体积有关,mac帧体积过大更容易碰撞,所以数据链路层规定了有效载荷不超过1500字节,即MTU。

IP层提供数据包从A主机跨网络送到B主机的能力,那么数据链路层是如何确定同一局域网的mac地址?这就需要一个介于数据链路层和网络层之间的协议,它就是ARP协议。

ARP协议

ARP是一个地址解析协议,作用是将IP转成MAC地址。它是如何工作的?

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

比如主机A要给主机B发送数据包,却不知道主机B的MAC地址,那么主机A就先发送ARP请求包,主机B收到请求包,发送ARP响应包给主机A,告诉主机A主机B的MAC地址。 

ARP协议字段如下: 

 各字段含义:

注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次(两份),对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。 硬件类型指链路层网络类型,1为以太网。 协议类型指要转换的地址类型,0x0800为IP地址。 硬件地址长度对于以太网地址为6字节。 协议地址长度对于和IP地址为4字节。 op字段为1表示ARP请求,op字段为2表示ARP应答。

ARP请求流程: 

1.源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)。 2.目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。 3.每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

 比如使用命令查看IP与MAC的映射表(ARP缓存表)。

注意:RARP协议的作用是将MAC地址转换为IP地址,与ARP协议类似

RARP协议介绍:

        RARP协议工作在数据链路层,主要用于在没有磁盘和其他存储设备的情况下,启动时让主机通过网络获取自己的IP地址。当一个主机启动时,它会发送一个RARP请求,在网络上广播自己的MAC地址,请求网络上的RARP服务器返回自己的IP地址。RARP服务器收到请求后,会查询自己的映射表,将MAC地址与IP地址进行匹配,并将IP地址返回给主机。主机收到IP地址后,就可以配置自己的网络参数,并开始正常的网络通信。

        由于RARP协议只能在同一物理网络中进行通信,因此在跨越不同物理网络的情况下,需要使用BOOTP或DHCP等协议来获取IP地址。另外,由于RARP协议的安全性较差,容易受到欺骗攻击,因此现在很少使用RARP协议,而更多地使用BOOTP或DHCP协议。

相关内容

热门资讯

第十三届蓝桥杯省赛 pytho... 文章目录前言主要内容🦞试题 A:排列字母思路代码🦞试题...
阿里春招-2023.3.15-... 极差三元组计数 Problem Description 给定一个数组,请你计算有多少个...
电压放大器在钢筋剥离损伤识别试...   实验名称:钢筋剥离损伤识别试验  研究方向:无损检测  测试目的&#...
MOCO论文前几段精读 MoCo MoCo是CVPR 2020的最佳论文提名,算是视觉领域里,使...
【lua初级篇】基础知识和开发... 文章介绍 文章介绍 简述 工具安装配置和下载 快速看基础知识 一些常用的关键字一览 数据类型 tab...
Yuv422、Nv12转C#B... 1.1、Nv12转Bitmapint w = 1920;int h = 1080;i...
Linux互斥量和信号量的区别... 互斥量和信号量的区别 1.互斥量用于线程的互斥: 互斥:加锁解锁,是指某...
Git 和 GitHub 超入... 1.解决行结束符问题 需要在你的仓库中添加一个.gitattributes文件,标记正...
基于C++的AI五子棋游戏项目... 项目资源下载 基于C++的AI五子棋游戏项目源码压缩包下载地址基于C+...
#浅聊 webSocket (... 如果可以实现记得点赞分享,谢谢老铁~ 一,什么是webso...
Java SE API kno... Java SE API know how 字符串 紧凑字符串 java8 无论字符串的编码ÿ...
常用的VB函数 数学函数函数说明示例Sin(N)返回自变量N的正弦值Sin(0)=0 N为弧度Cos(N)返...
C++ 机房预约系统(五):管... 7.3 显示功能 功能描述: 显示学生信息或教师信息 功能实现: voi...
PIC单片机的一些问题 error 1347 can't find 0x16 words (0x16 withtotal) ...
完美日记母公司再度携手中国妇基... 撰稿 | 多客 来源 | 贝多财经 当春时节,梦想花开。和煦的三月暖阳,...
GDPU C语言 天码行空3 1. 分段函数 #includeint main(){double x,y;scanf("%lf",...
【瑞萨 MCU】开发环境搭建之... e2 studio e2 studio(简称为 e2 或 e2s)是瑞萨...
C语言内联汇编 之前我们介绍了一种C语言与汇编代码混合编程方式,就是两个文件分开编写,分...
Linux 网络编程学习笔记—... 一、TCP 服务的特点 传输层协议主要有 TCP 协议和 UDP 协议,前者相对于后者...
KubeSphere All ... KubeSphere All in one安装配置手册 1. 初始化 1.1 配置apt源 # vi...
学习软件测试怎么能缺少练手的软... 你好,我是凡哥。 最近收到许多自学自动化测试的小伙伴私信,学习了理论知识...
【面试题】浅谈css加载是否会... 大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:...
直播带货系统开发的关键点、代码... 时下,直播的热度依然不减,而它的产物之一:直播带货系统&#...
一文读懂强化学习! 一.了解强化学习1.1基本概念强化学习是考虑智能体(Agent)与环境&...
Spring Cloud之一:... 目录 环境 Eureka工程的创建步骤 系列目录(持续更新。。。) S...
golang实现守护进程(2) 前言golang实现守护进程,包含功能:1. 守护进程只创建一次2. 平...
url 格式详解 统一资源定位系统(uniform resource locator; url ...
elasticsearch7.... elasticsearch版本:7.17.3 目标:实现对类型为text...
SpringBoot 加载系统... 开发环境: IDEA 2022.1.4+ MyBatis         代码参考:spri...
交换机概念和知识和命令 目录 一、华为交换机基础学习的一些重要概念和知识 二、交换机常用命令大全 三、不常用的交换机命令 ...