【linux网络(七)】数据链路层详解

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:Linux从入门到精通⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学更多操作系统知识
  🔝🔝


Linux网络

  • 1. 前言
  • 2. 认识MAC地址
  • 3. 认识以太网
  • 4. ARP协议详解
  • 5. DNS技术
  • 6. 总结以及拓展

1. 前言

如果说网络层解决的是数据从A主机发到B主机的问题, 那么数据链路层解决的就是数据从当前路由器转发给下一台路由器的问题.

本章重点:

本篇文章会讲解以太网协议, MTU对上层协议的影响, ARP协议, DNS技术等. 本篇文章结束, 标志着对整个Linux网络的认知学习就结束了


2. 认识MAC地址

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

通俗来讲, 拿唐僧西天取经的例子来说, IP地址代表, 唐僧从东土大唐要到西天去, 东土大唐和西天就是两个IP地址, 而从东土大唐到西天, 途中会经过火焰山, 狮驼岭, 女儿国, 盘丝洞等地方, 从火焰山到狮驼岭, 这其中火焰山和狮驼岭可以理解为MAC地址, 是真实路由时需要经过的地点(网络中对应路由器)

下面的以太网的目的地址, 其实就是下一跳的MAC地址


3. 认识以太网

“以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

宏观上, 网络的本质就是一个一个局域网构成的

以太网的格式:

在这里插入图片描述

我们注意到, 数据的大小最大只能是1500字节, 是不是很熟悉? 没错, 在网络层讲解IP协议时说过, 数据链路层一次性最大只能带1500字节的数据, 所以上层会有分片操作, 首尾呼应

局域网通信原理:

在这里插入图片描述

在局域网通信中, H1主机向H6主机发送信息时, 会直接将数据扔在局域网中(可以理解为上图的横线), 也就是说在这个局域网中, 不仅仅H6会收到H1发来的数据, H2,3,4,5,甚至是H1自己也会收到, 但是在数据链路层解包后, 发现目的MAC地址并不是本机, 这些机器会自动丢弃这些数据, 所以说最后只有H6的数据会被交付到上层. 不仅如此, 局域网中若多态主机都在发送数据, 数据之间就会发送碰撞, 一旦发送碰撞, 数据就不能再使用了

数据链路层转发过程::

在这里插入图片描述

一旦一份数据的MAC地址不在本局域网, 它会通过路由器被转发到其他局域网, 一直如此, 直到找到目标IP地址机器才会停下. 所以说, 在网络转发中, 目的IP地址不变, 但是每一次转发时的mac帧报头会发送改变, 因为你的下一跳的MAC地址是会一直变化的. 但是任意一台主机都暂时无法得知下一跳的MAC地址, 如果不知道下一跳的MAC地址也就无法封装mac帧(由ARP协议解决)


4. ARP协议详解

先明确一点:
ARP协议建立的主机IP地址和MAC地址的映射关系, 在同一网段中, 需要通过目的IP, 得知对方的MAC地址

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

ARP协议工作图:

在这里插入图片描述

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

广播就是在局域网中扔一个数据, 只有特定的机器才会解析此数据, 并且对这个广播做出回应

ARP数据报的格式

在这里插入图片描述

其实聪明的你一定发现了, 当数据从主机A进入到主机B所在的局域网时, 由于局域网通信只看MAC地址, 所以你只知道对方的IP地址是没用的! 所以在通信前, 主机A会先发送一个广播, 得知对方的MAC地址, 之后再进行通信时, 只要数据传输到主机B所在的局域网, 就能直接将数据发给B. 除此之外, ARP协议分为请求和应答, 这个也很好理解, 当一台主机收到一个广播时, 一定会先查看是对方返回的应答(里面存放对方MAC地址),还是有其他机器给你发的请求(代表其他主机想给你发数据)


5. DNS技术

你好不好奇, 为什么在搜索栏输入QQ会跳转到QQ官网? 你并没有输入URL, 怎么做到的?答案是: DNS(Domain Name System),是一整套从域名映射到IP的系统

在这里插入图片描述

  • 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系.
  • 如果新计算机接入网络, 将这个信息注册到数据库中;
  • 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址.\

计算机上仍然保留了hosts文件. 域名解析过程会优先查找hosts文件的内容.

cat /etc/hosts

在这里插入图片描述


6. 总结以及拓展

其实作为学习后端开发的在校生, 数据链路层的内容了解到这种程度已经很不错了, 对于Linux网络的宏观学习就到此为止了, 其实你要细究网络的细节, 还是有很多值得学习的东西的, 比如说NAT,NAPT技术, 代理服务器, ICMP协议等. 这里就交给大家自己探索了.

还有一点, 面试时经常会问: 浏览器中输入url后, 发生的事情, 这里大家可以自己总结总结. 详情可以参考这篇文章: 浏览器输入URL后发生的事


🔎 下期预告:高级IO讲解 🔍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/763802.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android --- 新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死,鼠标和键盘都操作不了

新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死,鼠标和键盘都操作不了 大概原因就是,初始化默认Google的安卓模拟器占用的RAM内存是2048,如果电脑的性能和内存一般的话就可能卡死,解决方案是手动修改安卓模拟器的config文件&…

运营商如何通过PCDN技术提高用户服务?

着互联网的快速发展,用户对网络速度和质量的要求越来越高。为了满足这些需求,内容分发网络(CDN)成为了关键的基础设施。而在CDN技术中,PCDN(PersonalCDN)作为一种新兴的技术,为运营商和用户提供了新的解决方案。本文将重点介绍PCD…

RuoYi-Vue项目后端增加自己的模块,要注意的点,只看我这一片就够了。

若依版本: RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 背景: 后端想自己增加一个模块,但是包路径…

聊聊 golang 的 map

1、哈希表 哈希表是一个很常见的数据结构,用来存储无序的 key/value 对,给定的 key 可以在 O(1) 时间复杂度内查找、更新或删除对应的 value。 设计一个好的哈希表,需要着重关注两个关键点:哈希函数、冲突处理。 1.1 哈希函数 …

文件上传漏洞---Pyload

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 本文重点从靶场案例分析文件上传漏洞常见的Pylod,本文演示靶场upload-labs 一.文件类型---Pyload 不同的文件对应不同的文件类型,后端代码通过限制特定的文件类型…

【C++】C++指针在线程中调用与受保护内存空间读取方法

引言 在C的多线程编程中,正确地管理内存和同步访问是确保程序稳定性和安全性的关键。特别是当涉及到指针在线程中的调用时,对受保护内存空间的访问必须谨慎处理,以防止数据竞争、死锁和内存损坏等问题。本文将详细探讨C指针在线程中调用时如何…

提升入住率|智慧酒店解决方案,打造有温度的居住体验!

近年来,智慧酒店被越来越多的人关注,由生物识别、物联网技术和互联网技术融合产生的智慧酒店解决方案,不仅可以提升顾客在酒店的入住体验,还可以帮助酒店降低运营成本,这也让越来越的酒店选择了智慧酒店的赛道&#xf…

c++读取文件时出现中文乱码

原因:UTF-8格式不支持汉字编码 解决:改成ANSI,因为ANSI编码支持汉字编码

新款奔驰GLE350升级原厂空气悬挂系统有哪些功能

奔驰 GLE350 升级原厂空气悬挂带来了一系列显著的优势和功能: 1. 舒适性提升 • 能够根据不同的路况和驾驶模式自动调节悬挂硬度和高度,有效过滤路面颠簸,为驾乘者提供更加平稳、舒适的行驶体验。 2. 行驶高度调节 • 驾驶者可以手动或自…

明日周刊-第14期

不好意思又拖更了哈哈哈。不过赶在7月的第一天,打算更新一下。建党节,值得纪念的一天。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 国内科技新闻 深中通道建成通车 时间:2024年6月30日 内容:深圳至中山跨江通道正式建成开…

【06】SpringBoot与Web开发

1、基于Restful风格的接口 RestController RequestMapping("/demo") public class DemoController {GetMapping("/hello")public String getHello(){return "SpringBoot HelloWorld! 123";}GetMapping("/{id}")public User getUser(P…

【支撑文档】系统安全保证措施(word原件)

软件安全保证措施word 软件所有全套资料获取进主页或者本文末个人名片直接。

图形的搭建

例一: 输入描述: 多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。 输出描述: 针对每行输入,输出用“*”组成的X形图案。 示例一&…

【C语言】19.预处理详解

文章目录 1.预定义符号2.#define定义常量3.#define定义宏4.带有副作用的宏参数5.宏替换的规则6.宏函数的对比7.#和##7.1 #运算符7.2 ## 运算符 8.命名约定9.#undef10.命令行定义11.条件编译12.头文件的包含12.1 头⽂件被包含的⽅式12.1.1 本地⽂件包含12.1.2 库⽂件包含 12.2 嵌…

基于协同过滤的航空票务推荐系统的设计与实现(飞机票推荐系统)

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

鸿蒙OS开发者高级学习第2课:自由流转(含习题答案)

自由流转两种形态:相继使用(跨端迁移);同时使用( 多端协同) 习题:

【云原生】服务网格(Istio)如何简化微服务通信

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、微服务架构的兴起 2、Istio:服务网格的佼…

《昇思25天学习打卡营第27天 | 昇思MindSporeShuffleNet图像分类》

27天 本节学习了ShuffleNet图像分类 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一样主要应用在移动端,模型的设计目标就是利用有限的计算资源来达到最好的模型精度。设计核心是引入了两种操作:Pointwis…

Fanuc DPRNT宏程序串口采集

此种方式可用于设备没有网口的情形 该方式的核心原理是利用设备串口的输出能力,进行串口输出。但这里有一点需要注意,这种方式串口输出不具备实时性。因为串口输出是设备主动输出,采集程序只是被动接收而已,所以没有办法做到实时…

网络爬虫(二) 哔哩哔哩热榜高频词按照图片形状排列

我们有时候需要爬取结果生成为自定义的词云图 生成自定义的词云图通常需要以下步骤: 1. 爬取数据:使用爬虫工具或库,如requests、BeautifulSoup等,可以爬取网页、论坛、社交媒体等平台上的文本数据。 2. 数据预处理&#xff1a…