数据链路层以太网技术与DNS、ICMP协议

news2024/11/23 14:57:03

我们前面学习到的传输层、网络层。传输层是保证数据可靠传输。而网络层是实现在复杂的网络环境中确定一个合适的路径。我们接下来所说的数据链路层其实就是用于两个设备(同一种数据链路节点)之间进行传递。其实也就是如数次的局域网中设备之间的转发过程。

认识以太网 

"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;


认识以太网帧格式

以太网帧(也称为Mac帧)是数据链路层的一种协议数据单元,它包含了帧头、数据部分和帧尾。在以太网帧的帧头中,有两个关键的地址字段:目的地址和源地址,这两个字段都是48位的MAC地址。此外,帧头还包含了一个类型字段,用于指示数据部分所使用的协议类型(如IP、ARP等)。


认识Mac地址

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


对比Mac地址和IP地址

ip地址是网络层的一个报头字段数据,而Mac地址是数据链路层的报头数据。通过开篇我们知道网络层是确定网络数据的传输路径的也就是起始点和终止点以及途径的各个点。而数据链路层是实现各个局域网间的设备数据传递的,也就是从当前到下一跳的的位置。

所以说明数据在网络传输的过程中源、目标Mac地址是始终发生改变的,而源IP地址可能会随着NAT技术而发生改变,但是目标IP地址是不变的也就是根据IP进行路径选择,根据Mac进行吓一跳发送。


局域网如何进行通信

当我们局域网下的一个主机如果想要发送数据给另一个主机时。

首先会进行判断,用当前主机IP按位与子网掩码得到网络号,然后用目标IP按位与子网掩码得到网络号。然后将两个网络号进行对比。如果网络号相同的话则表明两主机是在同一局域网下;如果不相等的话就会将报文数据转发到路由器当中。

而且还有一点,主机在局域网间的通信时会将数据发送给同局域网下的所以主机(包括自己这台主机器),只不过所有收到Mac帧的主机会将报文进行解包,查看报头的目的Mac地址是否等于当前自己主机的Mac地址,如果相等则会接收数据,否则就会直接在数据链路层丢弃。而接下来会根据报头类型字段来判断是IP报文还是其他报文,从而将有效载荷交给上一层网络层。


局域网数据碰撞

局域网中,任何时刻都只允许一台主机向局域网中发送数据,如果同时发送就会发生局域网数据碰撞的问题。而我们的局域网可以看作是碰撞域。

碰撞检测与处理:因为我们局域网中的主句发送数据时,自己同样也会收到,所以如果当前主机收到的数据和发送的数据对比以后不一致的话就证明发生了数据碰撞。所以接下来发生碰撞的主机会进行休眠一段时间(不影响其他主机的正常数据发送),然后过一定时间再次发送数据(重传)。


认识交换机

交换机是运用在局域网当中的,而且交换机主要是有效的降低了局域网中的数据碰撞概率,功能就是划分局域网的碰撞域。

也就是起初局域网中的主机在发送数据时,交换机同样也会收到,各个发送数据的主机,从而得到并保存各个主句的Mac地址。所以也就相当于可以知道局域网中哪些主机是在交换机的左侧,哪些主机是在交换机的右侧。那么交换机左侧的主机在进行数据通信时,也就不会传到交换机的右侧;同理交换机的右侧主机进行数据通信时也不会传到交换机的左侧中。所以此时交换机的左右两侧的主机们各自就可以同时进行通信且不造成数据碰撞。


ARP协议(地址解析协议)

我们在进行局域网通信时有一个问题:发送端是如何得到接收端的Mac地址的????

我们知道发送端是知道接收端的IP地址和端口号的,而当发送端的数据封装到数据链路层时,是需要封装Mac帧的,也就需要知道局域网中接收端主机的Mac地址。


ARP协议的作用

ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议。可以说ARP是在Mac协议之上的数据链路层协议。ARP协议是一个在局域网(LAN)中用于将网络层地址(如IPv4地址)解析为链路层地址(如以太网MAC地址)的网络协议。其主要作用在于实现IP地址到物理地址(MAC地址)的映射,从而确保数据能够在局域网内正确地从一台设备传输到另一台设备。


ARP协议工作流程

 局域网中主机通信时,发送数据的主机会重新构建一个新的封装ARP协议的Mac帧(属于广播信息,目标Mac地址是全F)发送的数据含义是:询问该局域网下的所有主机,谁的IP是我要发送的目标IP,请返回你的Mac地址给我。一旦得到目标主机的Mac地址以后就会将结果缓存一定时间。


ARP数据报的格式

 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型如的网络则有可能是必要的。(这里的以太网首部的帧类型应该填的就是0806,以太网首部的目的地址同样也是全F)

ARP协议字段认识:

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


ARP请求与应答

  1. ARP的请求会先在数据链路层封装ARP协议字段,也就是上面的内容,然后接着封装Mac帧,所以如果两台主机没建立联系之前(未知mac地址),发送端会先发送ARP协议请求(属于广播信息),因此该局域网中的所有主机都会收到想同的ARP请求,会先进行解包Mac帧协议(因为Mac帧协议的目的Mac地址是全F),然后将解包之后的报文交给上一层ARP层,在ARP层继续解包,首先观察op字段,判断是请求还是应答,再看目的IP地址,当前局域网下的主机将解包的目的IP与自己的IP地址进行比对,比对成功则响应,比对失败则丢弃。
  2. ARP应答同样是先在相同在ARP层将目的以太网地址填充进去,然后将其他字段一个个填充并且op字段改成2,交给下一层的Mac帧,然后填充字段并发送出去(依旧是局域网下的每个主机都能收到,但是在Mac帧这一层就能够判断是否要进行丢弃)。
  3. 最后收到应答以后虽然可以在Mac层拿到Mac地址,但是依旧要向上传递到ARP层,其目的就是为了得到是op字段,判断是请求还是应答。

所以说对于非目标主机收到ARP的请求是在ARP层丢弃,收到ARP应答是在Mac层丢弃的。

如果同时收到很多的ARP应答时,会将最新收到的ARP记录缓存下了。

RARP协议

RARP协议,全称Reverse Address Resolution Protocol(反向地址解析协议),是一种在局域网内将物理地址(如MAC地址)转换为IP地址的协议。


DNS协议

DNS(Domain Name System,域名系统)协议是互联网上的一个分布式数据库系统,用于将人们易于记忆的主机名(如www.example.com)转换成机器可以直接识别的IP地址(如192.0.2.1)。DNS协议使得互联网上的通信变得简单而高效,因为它允许用户通过简单的域名来访问网站,而不是需要记住复杂的IP地址。

域名简介

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称,如:www.baidu.com

  • com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
  • baidu: 二级域名, 公司名.
  • www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议.

域名解析过程

客户端向当地的的DNS域名服务器发送UDP报文的查询请求,并等待服务器返回最终的IP地址。如果DNS服务器不知道答案,它会自己向其他DNS服务器或者上一级的DNS服务器查询,直到找到答案或确定无法找到。


ICMP协议

ICMP协议是一个网络层协议。一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因。

而且用户在检测网络健康状态时,会直接通过特定的套接字接口绕过传输层直接访问网络层提供的ICMP,然后由ICMP调用IP,向对方发送的报文称为ICMP报文,也就说明IP报文的有效载荷不是tcp/udp报文,而是ICMP报文(与ARP报文类似,是绕过网络层,Mac帧的有效载荷是ARP报文)


ICMP工作过程

 ICMP功能

  • 确认IP包是否成功到达目标地址。
  • 通知在发送过程中IP包被丢弃的原因(通过报文类型字段标识)
  • ICMP也是基于IP协议工作的。但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议;
  • ICMP只能搭配IPv4使用。如果是IPv6的情况下,需要是用ICMPv6;

 

ICMP报文格式认识

 

 认识ping命令

  • ping 的是域名,而不是url!一个域名可以通过DNS解析成IP地址。
  • ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期)
  • ping命令会先发送一个 ICMP Echo Request给对端;
  • 对端接收到之后, 会返回一个ICMP Echo Reply;

ping命令其实就是应用层的一个程序,是应用层的套接字绕过传输层tcp调用ICMP协议构建的命令。所以说明ping命令是没有端口号的(绕过传输层)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

Pr:首选项 - 音频硬件

Pr菜单:编辑/首选项 Edit/Preferences Premiere Pro 首选项中的“音频硬件” Audio Hardware选项卡可以指定计算机的音频设备和设置,还可以指定 Pr 用于音频回放和录制的 ASIO 和 MME 设置(仅限 Windows)或 CoreAudio 设置&#x…

C#使用GDI+实现生成验证码

目录 下面是代码的详细解释: 类声明和成员变量 构造函数 窗体加载事件 生成验证码方法 pictureBox1 点击事件 按钮点击事件 完整代码: 总结 这段代码是一个C# Windows Forms应用程序的一部分,用于生成和验证验证码。 下面是代码的详细解…

C# Windows Forms实现绘制画板

目录 C# Windows Forms上绘制画板: 详细解释: TempData临时数据,用来保存画笔相关的信息,如:颜色,大小,坐标等 类声明和成员变量 构造函数 文件菜单项点击事件 保存菜单项点击事件 画笔大…

浙大数据结构:03-树2 List Leaves

这道题我借用了一点上一题的代码思路,这题考察的主要是层序遍历,即用队列来实现,当然此处我依然采用数组模拟队列来实现。 机翻 1、条件准备 map的键存下标,后面值分别存左右子树的下标,没有子树就存-1. head数组只…

python脚本源码如何使用PyOxidizer编译Windows可执行文件

使用 PyOxidizer 将上述代码编译为 Windows 可执行文件,可以按照以下步骤进行: 一、准备工作 确保已经安装了 PyOxidizer 和 Rust 开发环境,如前文所述。 二、创建 PyOxidizer 配置文件 创建一个名为pyoxidizer.toml的配置文件,内…

go急速入门API开发

go急速入门 1、安装Go和对应编辑器2、编写helloWord3、项目目录开发4、编写一个http服务器5、 使用Gin框架基本使用使用部分中间件自定义中间件 6、部署 1、安装Go和对应编辑器 go官网,下载自己电脑对应版本即可。安装完成之后打开cmd输入go即可弹出对应提示。 对…

ffmpeg(各个系统版本安装- Windows11-Mac-Linux)

各个系统上的安装不建议使用编译安装,大佬的话可以 编译安装会各种环境问题,直接使用别人安装好的就行 1.Windows11上安装ffmpeg 1.官网下载ffmpeg 进入Download FFmpeg网址,点击下载windows版ffmpeg,使用别人编译好的版本即可 …

文法的例题

答案:B 知识点: 文法 一个形式文法是一个有序四元组G{V,T,S,P},其中: V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符 T:终结符。是语言的组成部分,是最…

自用NAS系列1-设备

拾光坞 拾光坞多账号绑定青龙面板SMBWebdav小雅alist下载到NASDocker安装迅雷功能利用qBittorrentEEJackett打造一站式下载工具安装jackett插件 外网访问内网拾光客户端拾光穿透公网ipv6路由器配置ipv6拾光坞公网验证拾光坞域名验证 拾光坞 多账号绑定 手机注册拾光坞账号&am…

Web Bluetooth 与点对点连接

前言 需求需要实现手持终端设备与 web 网页的点对点数据传输,不希望有服务器参与,想到了 web 的 USB 与 Bluetooth API,对 Web Bluetooth API 进行了研究。 蓝牙 GATT 基础知识 GATT(通用属性配置文件,蓝牙低功耗&a…

K8S 发布应用

前言 昨儿个用 unbuntu20.04 又装了一次K8S 用的 kubeadm containerd Cilium (CNI) 又重新撸了一遍 这里只记录 应用发布的笔记 正文 #创建deployment kubectl create deployment nginx --imagenginx #我这边大约30秒后显示为 ready kubectl get deployments kubectl desc…

4.7 Sensors -- useScroll

4.7 Sensors – useScroll https://vueuse.org/core/useScroll/ 作用 响应式的监听滚动位置和状态。 官方示例 <script setup lang"ts"> import { useScroll } from vueuse/coreconst el ref<HTMLElement | null>(null) const { x, y, isScrolling…

【Python系列】只更新非空的字段

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

数字电路专题:verilog 阻塞赋值和非阻塞赋值

verilog 阻塞赋值 和 非阻塞赋值 “”阻塞赋值&#xff0c; ”<”非阻塞赋值。阻塞赋值为执行完一条赋值语句&#xff0c;再执行下一条&#xff0c;可理解为顺序执行&#xff0c;而且赋值是立即执行&#xff1b; 非阻塞赋值可理解为并行执行&#xff0c;不考虑顺序&#x…

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索&#xff08;CBIR&#xff09;从文本挖掘中获取灵感——矢量空间模型&#xff08;BOW表示模型&#xff09;7.2 视觉单词**思想****特征提取**&#xff1a; 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加…

构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类

深度学习实践&#xff1a;构建并训练卷积神经网络&#xff08;CNN&#xff09;对CIFAR-10数据集进行分类 引言 在计算机视觉领域中&#xff0c;CIFAR-10数据集是一个经典的基准数据集&#xff0c;广泛用于图像分类任务。本文将介绍如何使用PyTorch框架构建一个简单的卷积神经…

微信小程序uniappvue3版本-控制tabbar某一个的显示与隐藏

1. 首先在pages.json中配置tabbar信息 2. 在代码根目录下添加 tabBar 代码文件 直接把微信小程序文档里面的四个文件复制到自己项目中就可以了 3. 根据自己的需求更改index.js文件 首先我这里需要判断什么时候隐藏某一个元素&#xff0c;需要引入接口 然后在切换tabbar时&#…

git:认识git和基本操作(1)

目录 一、版本控制器 1.安装git 2.创建git本地仓库 3.配置git 二、git操作&#xff08;1&#xff09; 1.工作区、暂存区、版本库 2.添加文件 3.查看.git 4.修改文件 一、版本控制器 所谓的版本控制器&#xff0c;就是能让你了解到每一个文件的修改历史。相应的&#x…

Maven的安装

一、安装 压缩包解压完的目录如下所示&#xff08;此处为绿色免安装版&#xff09;&#xff1a; &#xff08;其余三个文件是针对Maven版本&#xff0c;第三方软件等简要介绍&#xff09; 二、环境变量 前提&#xff1a; jdk最低版本为JAVA7&#xff08;即jdk17&#xff09…