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

Linux网络编程:数据链路层

目录

一. 数据链路层概述

二. 以太网

2.1 以太网的概念

2.2 以太网数据帧

2.3 对于MAC地址的认识

2.4 数据碰撞问题

三. MTU和MSS

3.1 什么是MTU

3.2 MTU对UDP的影响

3.3 MTU对TCP的影响(MSS的概念)

四. ARP协议

4.1 ARP协议的作用

4.2 ARP数据报

4.3 ARP协议工作流程

五. 总结


一. 数据链路层概述

数据链路层在是计算机网络通信中,TCP/IP五层模型的倒数第二层,TCP/IP五层模型从上层到下层分别为:应用层、传输层、网络层、数据链路层和物理层

数据链路层的基本功能为:负责设备之间数据帧的交换和识别,进行数据帧同步、冲突检测、数据校验等工作,遵循以太网、令牌环网、无线LAN等标准。工作在数据链路层的典型设备是交换机。数据链路层通过交换报文,实现将数据发送和接收到特定得网络设备中去。

图1.1 TCP/IP五层模型与计算机体系结构的对应关系

二. 以太网

2.1 以太网的概念

  • 以太网不是一种具体的网络,而是一种技术标准,涉及数据链路层和物理层。其规定了网络拓扑结构、访问方式和传输速率等。
  • 以太网必须用到双绞线,也就是我们常说的网线。
  • 以太网是应用最广泛的网络标准,与之并列的还有令牌环网、无线LAN等。

2.2 以太网数据帧

以太网数据帧包含三部分内容:报头、有效数据、CRC校验码。其中数据是指的网络层封装的IP报文数据(IP报头+数据),而以太网帧报头中的源地址和目的地址是数据链路层的MAC地址(以太网地址),这是个6字节数据,区别于4字节IP地址。

  • 以太网数据帧报头位14bytes定长报头,进行解包时,直接拿掉头部的14bytes即可。
  • 报头中的目的地址和源地址为MAC地址,用于在数据链路层标识主机的唯一性,与网络层的IP地址并不相同。这样做的目的,是为了在数据链路层和网络层实现解耦。
  • 两位类型有3种:0800表示IP数据、0806表示ARP请求或应答、0835表示RARP请求或应答。
图2.1 以太网数据帧格式

2.3 对于MAC地址的认识

IP地址用于在网络中表示主机的唯一性,MAC地址用于在数据链路层标识网络设备的唯一性。

如图2.2所示,假设在局域网中有 主机A ~ 主机E,假设主机A要给主机D发送数据,那么主机A会将数据封装好以太网帧报头后,放到当前所处的局域网中,当前局域网中的主机A~E都可以看到刚才主机A发送的数据

当主机从网络中接收到一个MAC帧报文时,会从报头中提取出目的MAC地址,并在数据链路层与自身的MAC地址进行比较,如果相同就向网络层交付,不同就直接丢弃。以图2.2为例,假设 主机A~主机E 的MAC地址为 MAC_A ~ MAC_E ,那么主机A向主机E发送数据时,以太网帧报头中的源地址和目的地址分别为MAC_A和MAC_D,这样虽然主机B、C、D能够看到数据帧,但是对比MAC地址不匹配后直接丢弃数据。

图2.2 数据转发

2.4 数据碰撞问题

在同一个局域网中,如果两台主机同时发送数据,那么它们发送的数据可能会在局域网中发生碰撞,而如果数据之间发生了碰撞,那么数据就无效了,需要被丢弃重发。发送数据的主机是能够识别到碰撞的,如果识别到了碰撞,就要执行碰撞避免算法

  • 碰撞避免算法:发送数据的主机休眠随机时间后重发数据。

一个局域网中,如果主机数量过多,那么有两台主机同时发送数据的可能性就会大大增加,这样会导致发送数据碰撞、重新发送数据的可能性大增,从而导致网络拥塞。

为了让一个局域网中能够容纳更多的主机,并且能够保证网络不过度拥塞,交换机作为一种将局域网划分为多个子网的设备,被引入进来。

如图2.3所示,交换机将路由器组成的局域网划分为两个子网,其中主机A、B、C位于一个子网,主机D、E位于另一个子网,假设主机A要给主机D发送数据,同时主机B也向局域网中发送了数据,那么数据就会在AB所在的子网内生碰撞,交换机能够检查出碰撞,就不会将数据再向主机D、E发送了,这样就大大降低了数据发生碰撞所带来的影响。

如图2.4所示,假设主机A要给主机C发送数据,这就相当于是局域网内部通信,当交换机发现数据已经被主机C读走了,就不会继续向主机D、E发送了,这样就有效降低了局域网的负载。

图2.3 交换机降低数据碰撞影响的原理
图2.4 交换机降低网络负载的原理

三. MTU和MSS

3.1 什么是MTU

MTU就是数据链路层单次传输数据大小的限制,这是由数据链路层的硬件条件所限制的。不同的数据链路层,MTU的大小不同,在以太网中,MTU大小为1500bytes。

MTU数据数据链路层,如果上层的IP报文过大,那么就需要进行分片,这样数据链路层才可以对报文进行转发。如果IP报文太小(小于46bytes),那么就需要对报文进行填充,这样才可以转发。

图3.1 IP报文分片

对于MTU,我们有以下几点理解:

  • 在以太网中,MTU为1500bytes,以太网一次可以发送的报文数据大小位于46bytes~1500bytes之间,对于ARP和PARP报文,由于其长度不足46bytes,因此要进行填充。
  • 如果网络层IP报文过长(超过MTU),那么就要对IP报文进行分片处理,但这会大大增加丢包的概率,因此分片是一种不推荐的行为。
  • 在不同的数据链路层中,MTU的长度是不同的。

3.2 MTU对UDP的影响

MTU的大小会限制单条报文最大的长度,UDP协议全程用户数据报协议,面向数据报,一条报文不能被拆分为多个,即:发送与接收是一一对应的。

UDP协议没有可靠性保证机制,如果数据在网络传输的过程中发生了丢包,那么对端主机就永远不会接收到这条报文了。那么,如果一个UDP报文携带了太多的数据(超过1472bytes:1500 - 20字节IP报头 + 8字节UDP报头),那么这条UDP报文中的数据就要在网络层被分片,这样就增加了丢包的概率,从而进一步降低UDP协议的可靠性。因此,使用UDP协议进行数据传输时,要额外注意控制单条报文的大小,尽可能的避免分片情况。

3.3 MTU对TCP的影响(MSS的概念)

  • 单个TCP报文可以传输的有效数据大小受制于MTU,而TCP报文中能够传输的有效数据的最大值称为MSS,我们可以认为:MSS = MTU - IP报头长度 - TCP报头长度。
  • 在通信双方三次握手建立链接时,通信双方会协商MSS,会取通信双方设备中较小的MSS为通信所使用的MSS,MSS会被写入到TCP报头中,位于TCP报头的选项字段中。
  • 最理想情况下,MSS是IP报文不会被分片的、TCP报文中可以携带有效数据的最大长度。
图3.2 MTU和MSS的关系

通过ifconfig指令,可以查看当前设备的MAC地址和MTU(见图3.3)。

通过ifconfig指令查看设备的MAC地址和MTU

四. ARP协议

4.1 ARP协议的作用

当我们希望与另一台主机进行通信时,我们可以知道对端的IP地址,但是难以得知其MAC地址,ARP请求/响应,就是用于获取并缓存目的主机的MAC地址的。

ARP协议,可用于在主机内部建立IP地址与MAC地址的映射关系。当主机ARP请求/应答获取某台主机的MAC地址后,会缓存 IP地址<->MAC地址 的映射关系,并维持一段时间,之后一段时间再向这台主机发送消息就不用ARP获取MAC地址了。

  • 指令arp -a:获取当前主机内部缓存的IP和MAC地址之间的映射关系。
图4.1 arp -a查看当前主机中缓存的IP地址与MAC地址映射关系

4.2 ARP数据报

在ARP应答/请求报文格式如图4.2所示,其中每部分的含义为:

报头:

  • 源MAC地址:发送报文的主机MAC地址。
  • 目的MAC地址:接收报文的主机MAC地址(ARP请求填FF...FFF,表示广播地址)。
  • 帧类型:该MAC帧携带的数据时IP报文、ARP请求或ARPA请求。

数据:

  • 硬件类型:指数据链路层网络类型,表明是以太网、令牌环网还是无线WAN,1表示以太网。
  • 协议类型:指明要转换的类型,一般设置为0x0800表示IP地址。
  • 硬件地址长度:一般为MAC地址的长度,填6字节。
  • 协议地址长度:一般为IP地址的长度,填4字节。
  • op:操作方式,1表示ARP请求,2表示ARP应答。
图4.2 ARP协议报文格式

4.3 ARP协议工作流程

在两台主机正式进行通信之前,发送数据的主机,要通过ARP请求,获取目的主机的MAC地址,并缓存目的主机的IP地址和MAC地址之间的映射关系:

  • 发送端主机向局域网中发送ARP请求,其中目的MAC地址填写FF...FFF表示广播地址,目的IP地址就是接收数据的主机的IP地址。
  • 由于目的MAC地址是广播地址,所有的主机都会收到ARP请求报文并向上交付到ARP层,对比目的IP和当前主机的IP,如果不匹配,那么就直接丢弃报文,如果匹配,那就向局域网中发送ARP响应报文。
  • ARP请求报文中会携带发送端主机的MAC地址,因此接收端主机在发送ARP响应报文的时候,会将目的MAC地址填写为发送端主机的MAC地址,这样发送端主机在收到响应报文后,就可以得知目的主机的ARP地址。
  • 发送端主机会将目的主机的 IP地址与MAC地址的映射关系缓存起来,以避免每次通信之前都进行ARP请求和响应,提高通信效率。
图4.3 ARP协议的工作流程

五. 总结

  • 数据链路层,负责设备之间数据帧的交换和识别,进行数据帧同步、冲突检测、数据校验等工作,遵循以太网、令牌环网、无线LAN等标准。
  • 以太网不是一种具体的网络,而是一种网络技术标准。
  • MAC地址是在数据链路层用于标识主机唯一性的地址,区别于网络层的IP地址。
  • 在局域网中如果有多台主机同时发送数据则有可能发生数据碰撞,通过交换机可以降低数据碰撞所带来的影响。
  • MTU是数据链路层一次转发数据量的最大值,MSS是TCP协议在不被分片的情况下一次最多发送的数据量。UDP协议,不保证传输的可靠性,分片会大大提高丢包的概率。
  • ARP协议是在两台主机正式通信之前,确定对端MAC地址的协议。

相关文章:

Linux网络编程:数据链路层

目录 一. 数据链路层概述 二. 以太网 2.1 以太网的概念 2.2 以太网数据帧 2.3 对于MAC地址的认识 2.4 数据碰撞问题 三. MTU和MSS 3.1 什么是MTU 3.2 MTU对UDP的影响 3.3 MTU对TCP的影响&#xff08;MSS的概念&#xff09; 四. ARP协议 4.1 ARP协议的作用 4.2 ARP数…...

python 线程 超时时间

python 线程 超时时间_mob649e815f0f18的技术博客_51CTO博客...

LeetCode:274. H 指数、275. H 指数 II(C++)

目录 274. H 指数 题目描述&#xff1a; 实现代码与解析&#xff1a; 排序暴力 275. H 指数 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 二分 比较简单&#xff0c;不再写解析&#xff0c;注意二分的时候&#xff0c;r指针为n&#xff0c;含义为个数&#xf…...

多线程及锁

1.lock锁和synchronized锁的区别。 1&#xff1a;Synchronized 是Java的一个关键字&#xff0c;而Lock是java.util.concurrent.Locks 包下的一个接口&#xff1b; 2&#xff1a;Synchronized 使用过后&#xff0c;会自动释放锁&#xff0c;而Lock需要手动上锁、手动释放锁&am…...

C++ 写一个Data类的注意问题

Data类 声明和定义分离的一些问题 声明里面我们不带缺省参数&#xff0c;定义我们给缺省参数&#xff0c;如下面两段代码&#xff1a; Data.h#pragma once #include<iostream> using namespace std; class Data { public:Data(int year,int month,int day);private:in…...

postman做接口测试

之前搞自动化接口测试&#xff0c;由于接口的特性&#xff0c;要验证接口返回xml中的数据&#xff0c;所以没找到合适的轮子&#xff0c;就自己用requests造了个轮子&#xff0c;用着也还行&#xff0c;不过就是case管理有些麻烦&#xff0c;近几天又回头看了看postman也可以玩…...

hdlbits系列verilog解答(always块)-29

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 由于数字电路由用网线连接的逻辑门组成,因此任何电路都可以表示为模块和赋值语句的某种组合。然而,有时这不是描述电路的最方便方式。过程procedure(其中 always 的块就是一个示例)提供了描述电路的替代语法…...

uniapp实现瀑布流

首先我们要先了解什么是瀑布流&#xff1a; 瀑布流&#xff08;Waterfall Flow&#xff09;是一种常见的网页布局方式&#xff0c;也被称为瀑布式布局或砌砖式布局。它通常用于展示图片、博客文章、商品等多个不同大小和高度的元素。 瀑布流布局的特点是每个元素按照从上到下…...

15. 机器学习 - 支持向量机

Hi, 你好。我是茶桁。 逻辑回归预测心脏病 在本节课开始呢&#xff0c;我给大家一份逻辑回归的练习&#xff0c;利用下面这个数据集做了一次逻辑回归预测心脏病的练习。 本次练习的代码在「茶桁的AI秘籍」在Github上的代码库内&#xff0c;数据集的获取在文末。这样做是因为我…...

如何根据进程号查询服务的端口号

ps -ef | grep nacos ps -ef | grep nacos 命令是用于查找系统中所有包含 "nacos" 关键字的进程。这个命令的含义如下&#xff1a; ps: 这是一个用于显示当前正在运行的进程的命令。 -ef: 这两个选项一起使用&#xff0c;表示显示所有进程的详细信息。 -e 选项表示显…...

2.10、自定义量化优化过程

introduction 如何自定义量化优化过程&#xff0c;以及如何手动调用优化过程 code from typing import Callable, Iterableimport torch import torchvision from ppq import QuantizationSettingFactory, TargetPlatform from ppq.api import (ENABLE_CUDA_KERNEL, Quantiz…...

MySQL如何添加自定义函数

深入MySQL&#xff1a;学习如何添加自定义函数 MySQL 是一种流行的开源关系型数据库管理系统&#xff0c;它支持很多内置函数来完成各种操作。不过有时候这些内置函数无法满足我们的需求&#xff0c;这时候就需要自定义函数了。在 MySQL 中&#xff0c;可以通过编写自定义函数…...

超融合数据库:解锁全场景数据价值的钥匙

前言 近日&#xff0c;四维纵横对外官宣已完成上亿元 B 轮融资。作为超融合数据库理念的提出者&#xff0c;三年来 YMatrix 持续在超融合数据库领域中保持精进与迭代&#xff0c;对于超融合数据库在行业、场景中的应用和理解也更为深刻。 本篇文章&#xff0c;我们将基于 YMa…...

Pap.er for Mac:高清壁纸应用打造你的专属视觉盛宴

在浩瀚的互联网海洋中&#xff0c;你是否曾为寻找一张心仪的高清壁纸而烦恼&#xff1f;或者是在大量的壁纸应用中感到困扰&#xff0c;不知道哪一个能满足你的需求&#xff1f;今天&#xff0c;我要向你介绍的&#xff0c;是一款独特的5K高清壁纸应用——Pap.er for Mac。 Pa…...

AI:46-基于深度学习的垃圾邮件识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…...

【骑行贝丘渔场】一场与海的邂逅,一段难忘的旅程

在这个渐凉的秋日&#xff0c;我们校长骑行队一行人骑着自行车&#xff0c;从大观公园门口出发&#xff0c;开始了一段别开生面的海滩之旅。沿途穿越草海隧道湿地公园、迎海路、海埂公园西门&#xff08;第二集合点&#xff09;、宝丰湿地公园、斗南湿地公园、蓝光城&#xff0…...

消息中间件——RabbitMQ(一)Windows/Linux环境搭建(完整版)

前言 最近在学习消息中间件——RabbitMQ&#xff0c;打算把这个学习过程记录下来。此章主要介绍环境搭建。此次主要是单机搭建&#xff08;条件有限&#xff09;&#xff0c;包括在Windows、Linux环境下的搭建&#xff0c;以及RabbitMQ的监控平台搭建。 环境准备 在搭建Rabb…...

Mysql 表读锁与表写锁

表读锁 加锁&#xff1a;lock table table_name read 释放锁&#xff1a;unlock tables 当事务一用表读锁锁住某张表后&#xff0c; 1.事务一必须释放表读锁才能访问其他表 2.期间事务2可以访问该表&#xff0c;但是修改事会遇到阻塞等待&#xff0c;只有等到事务一释放锁后…...

目标检测概述

1.是什么&#xff1f; 目标检测是计算机视觉领域的核心问题之一&#xff0c;其任务就是找出图像中所有感兴趣的目标&#xff0c;确定他们的类别和位置。由于各类不同物体有不同的外观&#xff0c;姿态&#xff0c;以及不同程度的遮挡&#xff0c;加上成像是光照等因素的干扰&a…...

10月31日星期二今日早报简报微语报早读

10月31日星期二&#xff0c;农历九月十七&#xff0c;早报微语早读分享。 1、广西官宣&#xff1a;做试管婴儿费用可报销&#xff1b; 2、港媒&#xff1a;4名港大学生承认“煽惑他人蓄意伤人罪”&#xff0c;被判监禁2年&#xff1b; 3、331名中国维和官兵全部获联合国勋章…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...