【JavaEE】数据链路层协议和DNS

  🔥个人主页: 中草药

🔥专栏:【Java】登神长阶 史诗般的Java成神之路


👜一.以太网

        以太网(Ethernet)是一种局域网技术,它定义了开放系统互连(OSI)模型中的物理层和数据链路层的规范。以太网是目前最广泛使用的有线网络技术之一,支持不同类型的计算机和其他设备之间的通信。

工作原理

  • CSMA/CD(载波侦听多路访问/冲突检测):这是原始以太网的核心机制,允许所有设备共享同一物理媒介。当一个设备想要发送数据时,它会先监听信道是否空闲;如果空闲,则开始发送。如果有两个或更多设备同时尝试发送,就会发生碰撞,这些设备随后会在随机等待一段时间后重新尝试发送。
  • 帧结构:数据是以帧的形式进行封装的,每个帧包含源地址、目的地址、类型/长度字段、实际数据以及校验序列(如CRC)来确保数据完整性。

帧格式

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

👔二.MAC地址

        MAC地址(Media Access Control Address)是一种用于标识网络设备硬件的唯一地址。它在数据链路层(OSI模型中的第二层)上工作,主要用于局域网通信。每个网络接口卡(NIC)或任何其他具有网络功能的设备都有一个唯一的MAC地址。

结构

        一个标准的MAC地址由6个字节(48位)组成,通常以十六进制表示,(IP地址4个字节)并用冒号或连字符分隔每两个十六进制数字。例如:00:1A:2B:3C:4D:5E00-1A-2B-3C-4D-5E。MAC地址还可以作为设备的身份标识

  • 前24位(OUI, Organizationally Unique Identifier):这部分是组织唯一标识符,由IEEE分配给各个制造商。这使得可以根据MAC地址的前三个字节识别出设备是由哪家公司生产的。
  • 后24位:这部分由设备制造商自行分配,确保了即使是同一制造商生产的所有设备之间,MAC地址也是唯一的。

作用

  • 寻址:在局域网中,MAC地址用于直接寻址和识别通信双方。
  • 过滤:网络设备如交换机可以利用MAC地址进行流量控制和安全过滤,比如基于MAC地址的访问控制列表(ACL)。
  • 转发:在交换式网络中,交换机会学习每个端口上连接设备的MAC地址,并据此构建转发表来决定如何转发数据帧。

静态与动态MAC地址

  • 静态MAC地址:大多数情况下,MAC地址是在制造过程中烧录到设备中的ROM里,不可更改,被称为静态MAC地址。
  • 动态MAC地址:某些高级网络设备支持配置临时的、可更改的MAC地址,这类地址通常存储在RAM中,重启后会丢失。

总之,MAC地址对于保证网络通信的有效性和安全性至关重要,它是网络基础设施的一个基本组成部分。

MAC地址使用在数据链路层,用来实现两个相邻设备的数据转发---微观

IP地址使用在网络层,立足于整个转发流程,进行路径规划---宏观

👕三.MTU

        MTU(Maximum Transmission Unit,最大传输单元)是指网络中可以传输的最大数据包大小,单位通常是字节。MTU的概念主要应用于网络层和数据链路层,特别是在IP网络中,它影响着数据如何被分割成更小的部分以适应不同网络路径的限制。

MTU直接和硬件相关,不同的硬件设备,对应了不同的数据链路层协议,对应了不同的MTU 

作用

  1. 避免分片:当一个较大的数据包需要通过具有较小MTU值的网络时,该数据包会被分割成几个较小的数据包(称为分片)。接收端必须重新组装这些分片才能得到原始数据。这个过程会增加处理开销并可能导致性能下降。因此,设置合适的MTU有助于减少不必要的分片。

  2. 提高效率:适当调整MTU可以优化网络性能。如果MTU太小,会导致过多的小数据包在网络上传输,增加了头部信息的比例,从而降低了有效载荷的比例。而如果MTU太大,则可能会导致频繁的分片,同样影响性能。

  3. 兼容性:不同的网络技术有不同的默认MTU值。例如,传统的以太网MTU为1500字节,但某些特殊的网络环境如PPPoe、GRE隧道或MPLS可能有更小的MTU。

常见的MTU值

  • 以太网:通常情况下,标准以太网接口的MTU是1500字节。(1.5KB 算是非常小)
  • PPP (Point-to-Point Protocol):在使用PPP进行拨号连接时,常见的MTU值为576字节。
  • PPPoE (Point-to-Point Protocol over Ethernet):由于额外的封装,实际可用的MTU通常是1492字节。
  • Jumbo Frames:为了提高网络吞吐量,在一些高性能网络环境中,可以配置更大的MTU,如9000字节,这种帧被称为“巨型帧”(Jumbo Frames)。

路径MTU发现

        路径MTU发现(Path MTU Discovery, PMTUD)是一种机制,用于确定从源到目的地之间的路径上最小的MTU值。这可以帮助发送方正确地设置其数据包大小,避免因中间路由器强制分片而导致的问题。PMTUD通过ICMP(Internet Control Message Protocol)消息来实现,当某个中间路由器发现数据包大于它的出接口MTU时,它会向源主机发送一个ICMP“Packet Too Big”消息,并附带自己的MTU值。

MTU对IP协议的影响

数据包分片

  1. 分片必要性

    • 当一个IP数据包从一个具有较大MTU的网络发送到另一个具有较小MTU的网络时,如果数据包的大小超过了目标网络的MTU,那么该数据包必须被分割成更小的数据包,以便能够通过这个网络。
    • 这个过程称为分片(fragmentation),每个分片都是原始数据包的一个部分,并且每个分片都有自己的IP头部。
  2. 分片过程

    • 在IP头部中,有几个字段用于处理分片:标识符(Identification)、标志(Flags)和片段偏移量(Fragment Offset)。
    • 标识符字段是一个16位的数字,它对于所有分片是相同的,这样接收端就可以识别出哪些分片属于同一个原始数据包。
    • 标志字段包含三个比特,其中一个比特表示是否还有更多的分片(More Fragments, MF),另外两个比特通常不使用。
    • 片段偏移量字段指出了当前分片在原始数据包中的位置,单位是8字节。
  3. 分片的影响

    • 分片会增加网络开销,因为每个分片都需要额外的IP头部信息。
    • 如果任何一个分片丢失,整个数据包需要重新发送。
    • 分片后的数据包可能在网络中经历不同的路径,这可能导致到达顺序混乱,接收端需要进行排序和重组。

重组过程

  • 接收方收到所有分片后,会根据标识符、标志和片段偏移量字段将这些分片重新组合成原始数据包。
  • 重组发生在最终目的地或中间路由器上,但通常是目的地设备执行重组以减少中间路由器的负担。

设置MTU

对于大多数用户来说,不需要手动更改MTU值,因为操作系统和网络设备通常已经设置了合理的默认值。但在特定情况下,比如遇到网络性能问题或是配置特殊类型的网络时,可能需要调整MTU:

  • 在Windows系统中,可以通过命令行工具netsh来修改MTU。
  • 在Linux系统中,可以使用ifconfigip命令来设置接口的MTU。
  • 对于网络设备如路由器或交换机,一般可以在设备的管理界面中找到相应的配置选项。

调整MTU时应当谨慎,因为它会影响到整个网络的表现。在进行任何更改之前,最好先进行测试以确保不会引起其他问题。

🧣四.ARP协议

        ARP(Address Resolution Protocol,地址解析协议)是一个在TCP/IP网络中使用的链路层协议,用于将已知的IP地址映射到相应的物理地址(如以太网中的MAC地址)。它可以视为,让当前设备,获取到周围设备 IP 地址和 MAC 地址之间的映射关系

工作原理

  1. 请求过程

    • 当主机A想要向主机B发送数据,但只知道主机B的IP地址而不知道其MAC地址时,主机A会广播一个ARP请求报文。
    • 这个ARP请求包含主机A的MAC地址和IP地址,以及主机B的IP地址,并询问“谁拥有这个IP地址?请告诉我你的MAC地址”。
  2. 响应过程

    • 所有接收到ARP请求的设备都会检查自己的IP地址是否与请求中的目标IP地址匹配。
    • 如果匹配,那么该设备(假设是主机B)就会单播回应一个ARP响应报文给主机A,其中包含了主机B的MAC地址。
    • 如果不匹配,则这些设备不会做出任何响应。
  3. 更新ARP缓存

    • 主机A收到ARP响应后,会将主机B的IP地址和MAC地址对存储在本地的ARP缓存表中,这样下次再发送数据给主机B时就可以直接使用缓存中的信息,而不需要再次发起ARP请求。
  4. ARP缓存超时

    • 为了保持ARP缓存表的时效性,每个条目都有一个生存时间。一旦超过这个时间,对应的条目会被删除或标记为过期,下一次发送数据时又需要重新执行ARP请求。

总的来说,ARP协议虽然简单,但它在网络通信中扮演着至关重要的角色,确保了不同层次之间的正确映射。同时,了解ARP的安全风险并采取适当的保护措施也是网络管理的重要组成部分。

🎒五.DNS协议(应用层协议)

        DNS(Domain Name System,域名系统)是一种分布式数据库系统,用于将人类易于记忆的域名转换为计算机可识别的IP地址。它解决了互联网上主机名和IP地址之间的映射问题,使得用户无需记住复杂的IP地址即可访问网站和其他服务。以下是对DNS协议的简要介绍:

工作流程

  1. 查询过程

    • 用户输入一个域名(如www.example.com)后,浏览器或操作系统会向本地DNS客户端发送一个DNS查询请求。
    • 本地DNS客户端首先查找本地缓存,看是否有对应记录。如果有,就直接返回结果。
    • 如果没有,客户端会向DNS服务器发出查询请求。
  2. 递归查询

    • 如果本地DNS客户端没有找到答案,它会向DNS服务器发送一个递归查询,要求服务器提供完整的解答。
    • DNS服务器会尝试从根域名服务器开始,逐级向下查询,直到找到正确的权威名称服务器为止。
  3. 权威名称服务器

    • 权威名称服务器负责维护特定域名下的所有记录,如A记录(将域名映射到IP地址)、MX记录(邮件服务器)等。
    • 当查询到达权威名称服务器时,它会返回正确的IP地址或其他相关信息。
  4. 回答过程

    • DNS服务器将查询结果返回给本地客户端,然后本地客户端将其保存在缓存中,以备后续查询使用。

相关概念

  • DNS缓存:本地客户端和DNS服务器都可能有自己的缓存,以加速查询速度。
  • DNS轮询:多个DNS服务器可以同时提供服务,客户端可以随机选择一个进行查询。
  • DNS负载均衡:通过将域名映射到多个IP地址,可以实现流量分散和故障转移。

DNS服务器类型

  • 根域名服务器:顶级域名的权威服务器,如com、org等。
  • 顶级域名服务器:负责特定顶级域名的服务器,如.com服务器。
  • 权威名称服务器:负责特定域名的服务器,如example.com服务器。
  • 递归DNS服务器:为用户提供全面查询服务的服务器,常见于ISP或企业内部。

DNS缓存

  • 本地缓存:存在于客户端和DNS服务器中,用于加快查询速度。
  • 缓存污染:当缓存中的信息过期或被非法修改时,可能导致错误的结果。

        总的来说,DNS协议是互联网的关键组件之一,它使得用户可以方便地访问网络资源,同时也为网络管理员提供了管理和优化网络流量的方法。理解DNS的工作原理和相关安全问题对于保障网络稳定和安全非常重要。


成功的秘诀,在永不改变既定的目的。——卢梭 

🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀

以上,就是本期的全部内容啦,若有错误疏忽希望各位大佬及时指出💐

  制作不易,希望能对各位提供微小的帮助,可否留下你免费的赞呢🌸

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python网络爬虫获取Wallhaven壁纸图片(源码)

** 话不多说,直接附源码,可运行! ** import requests from lxml import etree from fake_useragent import UserAgent import timeclass wallhaven(object):def __init__(self):# yellow# self.url "https://wallhaven.cc/search?co…

K8S介绍---搭建集群

Kubernetes介绍 官网:https://kubernetes.io/ 一、应用部署方式演变 1、传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其他技术的参与 缺点:不能为应用程序定义资源使用边界&a…

Java中List、ArrayList与顺序表

List、ArrayList与顺序表 List什么是List常用方法介绍List的使用 ArrayList与顺序表线性表顺序表接口的实现 ArrayList简介ArrayList的使用ArrayList的构造ArrayList的常见操作ArrayList的遍历ArrayList的扩容机制 ArrayList的具体使用杨辉三角简单的洗牌算法 ArrayList的问题及…

双向链表的基本结构及功能实现

1.基本结构: 双向链表是一种链表数据结构,它由一系列节点组成,每个节点包含三个部分: (1).数据域:存储节点的数据 (2).前驱指针:指向前一个节点 (3).后驱指针:指向下一个节点 2.基本特性: 双向链接: 与单向链表…

【WPF】02 按钮控件圆角配置及状态切换

按钮圆角 先从工具箱里拖进来一个Button控件&#xff0c;然后对这个按钮进行美化。 首先在 xaml 里按钮控件部分 添加如下代码&#xff1a; <Button x:Name"btnLogin" Content"登录" HorizontalAlignment"Center" Margin"0,399,0,0&q…

C++20中头文件compare的使用

<compare>是C20中新增加的头文件&#xff0c;此头文件是language support库的一部分。它包括&#xff1a;concepts、classes、customization point objects、functions。 1.concepts&#xff1a;三向比较运算符<>&#xff0c;目的是简化比对对象的过程&#xff0c;…

微服务配置管理——动态路由

动态路由 网关的路由配置全部是在项目启动时由org.springframework.cloud.gateway.route.CompositeRouteDefinitionLocator在项目启动的时候加载&#xff0c;并且一经加载就会缓存到内存中的路由表内&#xff08;一个Map&#xff09;&#xff0c;不会改变。也不会监听路由变更新…

【PG备份恢复】基于时间点的恢复(踩坑指南)

1 设置基于时间点恢复所需的配置 1.1 修改配置文件 postgresql.conf vim postgresql.conf archive_mode on archive_command cp %p /data1/backups/pg_wal_archive/%f wal_level replica 1.2 生效配置 2 进行一次全备 2.1 创建备份目录 mkdir -p /data/backup/pg_b…

C语言常见字符串函数模拟实现一:(strlen,strcpy,strcat,strcmp,strstr )

strlen模拟实现 重点&#xff1a;1.字符串已经\0作为结束标志&#xff0c;strlen返回的是字符串\0前面出现的字符个数&#xff08;不包含\0&#xff09; 2.参数指向的字符串必须要以\0结束。 3.注意函数的返回值是size_t&#xff0c;是无符号的&#xff0c;加减是无法对比的。…

thinkphp8 从入门到放弃(后面会完善用到哪里写到哪)

thinkphp8 从入门到放弃 引言 thinkphp* 大道至简一、 thinkphp8 安装安装Composerthinkphp 安装命令(tp-项目名称)多应用安装&#xff08;一个项目不会只有一个应用&#xff09;安装完文件目录如下本地部署配置伪静态好了项目可以run 二、架构服务&#xff08;Service&#xf…

大数据新视界 --大数据大厂之探索ES:大数据时代的高效搜索引擎实战攻略

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

app自动化前置准备环境搭建

编写脚本之前的一些前置准备工作。 1&#xff0c;安装appium server&#xff1a;官网地址&#xff1a;http://appium.io/ 安装教程&#xff1a;https://www.cnblogs.com/gancuimian/p/16536322.html 2&#xff0c;安装appium客户端&#xff1a; appium客户端安装相对较简单…

智谱清影 - CogVideoX-2b-部署与使用

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 体验地址&#xff1a;[丹摩DAMODEL官网](https://www.damodel.com/console/overview) CogVideoX 简介本篇将详细介绍使用丹摩服务器部…

OpenAI GPT o1技术报告阅读(2)- 关于模型安全性的测试案例

✨报告阅读&#xff1a;使用大模型来学习推理(Reason) 首先是原文链接&#xff1a;https://openai.com/index/learning-to-reason-with-llms/ 接下来我们看一个简单的关于模型安全性的测试&#xff0c;当模型被问到一个有风险的话题时&#xff0c;会如何思考并回答用户呢&…

CentOS中使用DockerCompose方式部署带postgis的postgresql(附kartoza/docker-postgis镜像下载)

场景 CentOS中使用Docker部署带postgis的postgresql&#xff1a; CentOS中使用Docker部署带postgis的postgresql_centos postgis插件在容器中如何安装-CSDN博客 上面使用Docker搜索和拉取kartoza/postgis时并没有任何限制。 当下如果不能科学上网时&#xff0c;大部分镜像源…

.Net Core 生成管理员权限的应用程序

创建一个ASP.NET Core Web API项目 给解决方案设置一个名称 选择一个目标框架&#xff0c;这里选择的是 .NET 8.0框架 在Porperties文件夹中添加一个app.manifest文件 设置app.manifest文件属性&#xff0c;生成操作设置为嵌入的资源 双击解决方案名称&#xff0c;编辑WebAppli…

【AI大模型】股票价格预测精度增强,基于变分模态分解、PatchTST和自适应尺度加权层

简介 股票价格指数是金融市场和经济健康的晴雨表&#xff0c;准确预测对投资决策至关重要。股票市场的高频交易和复杂行为使得预测具有挑战性&#xff0c;需开发稳定、准确的预测模型。研究表明&#xff0c;估值比率、数据驱动模型&#xff08;如支持向量机&#xff09;、股票…

Android平台使用VIA创建语音交互应用

Android平台使用VIA创建语音交互应用 概述 在 Android 平台上开发一款语音助手应用需要整合多种技术,包括语音识别(ASR)、文字转语音(TTS)、以及热词检测(Hotword Detection)。这些技术共同构成了语音助手应用的核心交互方式,使用户能够通过语音命令与设备进行无缝交…

RabbitMQ 快速入门

目录 什么是MQ 为什么要使用 MQ MQ 的分类 MQ 的选择 认识 RabbitMQ RabbitMQ 的核心部分 安装 脚本安装 docker 安装 启动 web 管理界面 创建用户 创建消息队列 基本概念 消息应答 持久化 预取值 发布确认 交换机 Exchange 概念 死信队列 死信的来源 延迟…

C++之 string(中)

C之 string string类对象的容量操作 resize 将有效字符的个数该成n个&#xff0c;多出的空间用字符c填充 虽然在string里用的不多&#xff0c;但是在vector里面常见 这里有三种情况&#xff1a; 1&#xff09;resize小于当前的size 2)resize大于当前的size,小于capacity …