探索互联网寻址机制 | 揭秘互联网技术的核心,解析网络寻址

揭秘互联网技术的核心,解析网络寻址题

  • 前提介绍
  • 局域网地址
    • IP地址的分配方式
      • 动态IP分配机制
      • 内部网(intranet)
      • ICANN负责IP分配
        • DHCP协议获取IP地址
  • 域名系统
    • 域名是什么
    • 域名工作方式
      • hosts文件存储域名映射关系
      • DNS分布式数据库
      • DNS域名解析
  • Java进行Internet寻址
    • java.net.InetAddress类
      • equals方法
      • getAddress方法
      • getHostAddress方法
      • getAllByName
      • getByName
      • getLocalHost


前提介绍

Internet与局域网(LAN)在规模和特性上存在显著区别,Internet不仅跨越国界,更是一个由全球范围内数以亿计(预计将达到数十亿级别)的设备与机器交织而成的庞大互联网络。
在这里插入图片描述
随着这些接入设备的数量呈指数级增长,一个亟待解决的核心问题日益凸显:如何在如此错综复杂的网络海洋中精准地识别和定位某一特定的设备或机器。
在这里插入图片描述
网络地址,作为网络通信的基石,其重要性不言而喻。它就像是我们在网络世界中的身份证,是识别与定位每一个网络参与者的关键标识。没有网络地址,就如同在浩瀚无垠的宇宙中迷失了方向,我们既无法识别数据包的来源,也无法确定其最终的目的地。


局域网地址

局域网(LAN)中的设备均配备有独一无二的物理或硬件地址,确保网络中的数据包能准确送达,此地址仅局域有效,无法跨网络定位设备,尤其考虑到如笔记本及掌上设备的移动性。

开发者而言,无需深入了解LAN数据路由细节,也无法直接触及数据链路层协议,因支持各类协议及其各异的地址格式与特性是一项复杂工程。Java选择专注于支持TCP/IP协议,这一广泛适用的网络通信标准,它充当不同网络间的桥梁。

IP地址的分配方式

设备要能够直接访问互联网,都必须配备一个独一无二的标识符,我们称之为IP地址。IP地址分为静态和动态两种类型。静态IP地址是永久性地分配给特定机器或设备的,意味着这些地址不会随时间或网络条件的变化而更改。而动态IP地址则不同,它们是在某个时间段内临时分配给某台特定的机器或设备的。

动态IP分配机制

在这里插入图片描述举例来说,许多互联网服务供应商(ISP)为了提供拨号连接服务,会采用动态IP地址分配方式,这种方式下,IP地址是从一个地址池中临时租用的,一旦连接断开,该地址可能会被分配给其他用户。

当大量设备需要在短时间内访问互联网时,动态IP地址分配方式尤为适用。这是因为动态IP地址允许从预先配置好的地址池中快速、灵活地分配和回收IP地址,从而确保网络资源的有效利用和访问的便捷性。

注意,只可以把IP地址绑定到单台机器,不可以并发地共亨IP地址,IP协议利用这个地址,把IP数据报路由到正确的位置。没有地址,就不能联系机器,因而,所有机器都应该拥有不相同的IP地址

内部网(intranet)

在探讨网络地址配置的复杂性时,我们需特别关注一种特殊情况——TCP/IP局域网(LAN),通常也被业内称作内部网(intranet)。在内部网的环境中,存在着一个特殊的地址使用方式,即采用一系列共享地址范围。这些地址是专门为内部网络设计的,目的在于避免与公共互联网上的地址发生冲突。由于这些地址并不直接暴露于公共Internet,因此,用户可以将自己的设备绑定到这些地址上,无需担心与外部网络设备的地址冲突问题。

ICANN负责IP分配

在IP地址分配与管理的领域中,核心机构非ICANN(Internet Corporation for Assigned Names and Numbers)莫属,它肩负着分配和协调全球互联网命名和编号的重任。

ICANN的职能建立在IANA(Internet Assigned Numbers Authority)的历史积淀之上,后者作为早期的互联网编号分配管理机构,为ICANN的成立和运作奠定了坚实的基础。对于私有网络的建立与配置,管理者可以根据实际需求分配A类、B类或C类IP地址块。一旦获得了相应的地址块,管理员便可以为该网络内的每一台机器分配特定的主机地址。这两个机构的网址分别是:http://www.icann.org 和 http://www.iana.org。

DHCP协议获取IP地址

在获取IP地址的过程中,最常见的做法是由网络管理员、服务提供商(ISP)或其他网络服务实体来为您分配。特别是在建立拨号连接时,您通常会从服务提供商提供的可用地址池中动态地获取一个IP地址。这种动态分配方式意味着,每次您重新连接时,都有可能会获得一个与前次不同的IP地址。

而在内部网络环境中,网络管理员可能会为您的设备指定一个固定的、特定的IP地址。另一种常见的做法是通过DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)服务器来获取IP地址。DHCP服务器能够根据网络内设备的需求动态地分配IP地址,这尤其适用于那些频繁上线和离线的设备。通过使用DHCP,网络管理员可以更有效地管理IP地址资源,即使在网络中设备数量众多、IP地址资源相对紧张的情况下,也能通过更小的地址池来满足需求。


域名系统

尽管IP地址为网络管理员提供了强大的系统支持,但许多人发现,要记住这些由点分十进制数构成的地址是一项极其艰巨的任务。实际上,人们普遍发现,与这种纯数字格式的IP地址相比,文字形式的标识更加易于记忆。

比如,相比一组用于标识IP地址的点分十进制数,像“Amazon”或“Sun”这样的名字更容易被大脑所捕捉和回忆。因此,为了提升用户体验和便捷性,人们倾向于使用更具描述性和记忆性的名称来替代或标识IP地址。

域名是什么

域名系统(DNS)是互联网的核心组成部分,它通过将易于记忆的文本域名与复杂的IP地址相对应,极大地提升了用户体验,使得互联网变得更为用户友好。无论是商业机构、政府机构还是个人,都可以申请注册域名,这些域名随后便成为在浩瀚的网络世界中定位特定单位或个人的独特标识。

域名工作方式

当众多机器接入互联网时,处理域名到IP地址的映射数量变得异常庞大。即便有足够的系统来存储这些映射,也很快就会因请求过载而陷入困境。此外,在系统崩溃的情况下,将问题局限在互联网的一小部分范围内,相较于降低整个系统的响应速度,显然更为可取。

hosts文件存储域名映射关系

互联网最初的设想是将域名到IP地址的映射存储在名为hosts.txt的文件中,这个文件会在互联网中被广泛下载和镜像。如今,尽管许多操作系统中仍保留了这个文件,但其用途已发生转变。它更多地被用作覆盖DNS映射或隐藏已丢失的、或本地DNS服务器无法解析的映射。

DNS分布式数据库

DNS是一个高度复杂且强健的系统,其设计巧妙地将自身打造成一个分布式数据库。在这个数据库中,新注册的接收和已有注册地址的查询响应任务被巧妙地分散至多个独立的主机之上。各类实体,如商业机构或教育机构,其域名注册事务由专门的注册服务器进行处理,确保高效且专业的服务。

下更为关键的是,国际注册机构负责维护其特定的映射(即country-code顶级域),并有权进一步将这些映射细分为更具体的子分类。这种结构构建了一个层次分明的体系,如xi图所示,尽管由于地址分类范围的快速变化,图中仅展示了该体系的一小部分子集。
在这里插入图片描述
DNS的分层设计不仅确保了系统的灵活性和可扩展性,也为其在面对海量注册和查询请求时提供了卓越的应对能力,确保互联网的稳定运行。

DNS域名解析

当软件应用程序需要查找主机名(例如www.xxx.com),它们并不直接联系.com注册机构。网络管理员或ISP会配置你的系统,使其能够访问应用程序指定的DNS服务器,这些服务器负责处理查找过程。

然而,通常情况下,DNS服务器会尽量避免向外部发送请求,特别是当请求是针对同一个站点(由多个或单个用户请求)时。这种方式类似于Web浏览器缓存网页,有效地减少了对网络的不必要的重复请求,从而提高了性能和效率。
在这里插入图片描述局域网内的DNS服务器具备缓存功能,能够自动存储近期被频繁请求的域名解析地址。这一设计不仅有效减轻了根域名服务器(TLD服务器)的负担,防止其因过量请求而超载,同时也显著提升了网络的整体性能。通过减少域名请求与响应之间的时间间隔,缓存机制大幅降低了网络延迟,为用户带来了更为流畅和高效的上网体验。


Java进行Internet寻址

到目前为止,关于Internet上主机的标识,我们已经明确了两种方式:一种是使用点分十进制形式的IP地址,另一种则是通过主机名来标识,例如www.xxx.com。在Java编程语言中,为了处理这两种形式的地址,我们有一个专门的类——java.net.InetAddress。这个类不仅具有解析IP地址的功能,还能够执行诸如查找主机等多样化的任务。

java.net.InetAddress类

在Java网络编程中,InetAddress类用于表示IP地址,它在处理网络通信时扮演着关键角色。与其他许多类不同,InetAddress类并未提供公有的构造函数供直接实例化,这是出于封装和安全的考虑。

equals方法

  • boolean equals(Object obj):比较两个IP地址,如果它们匹配就返回“true”。

注意,某些机器可以通过多个IP地址标识,所以对于相等测试不是绝对的:被测试的只是两个地址是否相同,而并不是说它们是否是同一台机器。

getAddress方法

  • byte[] getAddress()InetAddress类中,getBytes()方法被用于以字节格式返回IP地址,通过底层调用getBytes()方法,开发人员可以获取IP地址的原始字节表示,这在某些网络编程场景中可能非常有用,特别是当需要处理底层网络通信或执行特定的二进制操作时。

注意,字节序列与常见的点分十进制(IPv4)或冒分十六进制(IPv6)表示法相对应。这些字节是以网络字节顺序(big-endian)返回的,其中最高有效位字节(即最左侧的字节)位于数组的第一个位置bytearray[0])。

getHostAddress方法

String getHostAddress ():getHostAddress()方法特别用于返回该InetAddress实例所代表的IP地址的字符串表示形式,通常是以点分十进制数(IPv4)或冒分十六进制(IPv6)格式呈现。对于IPv4地址,getHostAddress()方法将返回一个形如“xxx.xxx.xxx.xxx”的字符串,其中每个“xxx”代表一个介于0到255之间的整数,这四个整数之间用点号(.)分隔。这种格式是IPv4地址的标准表示方式,易于人类阅读和理解。

除了以上的方法之外,它还提供了两个静态方法来返回InetAddress的实例,这些静态方法允许我们以不同的方式获取IP地址的InetAddress表示。

getAllByName

static InetAddress[]getAllByName (String hostname) 是一个静态方法,旨在将给定的主机名映射为InetAddress实例的数组。此方法适用于现代网络环境,其中一台主机可能拥有多个IP地址。它尝试解析主机名,并返回一个包含所有匹配IP地址的数组。

如果在解析过程中出现任何无法识别主机名的情况,或者解析操作违反了安全管理器的策略,该方法将分别抛出 java.net.UnknownHostException 和 java.lang.SecurityException 异常。

  • UnknownHostException异常通常会在无法解析给定的主机名时抛出。这可能是因为主机名不存在、DNS服务无法访问或DNS查询超时等原因导致的。
  • java.lang.SecurityException异常可能会在解析主机名的操作与Java的安全策略发生冲突时抛出。例如,如果安全管理器(SecurityManager)配置了特定的安全策略,限制了某些主机名的解析,那么在尝试解析这些受限主机名时就会抛出此异常。

getByName

static InetAddress getByName(String hostname):处理主机名与IP地址之间的转换时,我们常常会使用InetAddress类。此类提供了将文本形式的主机名(如"xxx.com")或点分十进制格式的IP地址(如"192.168.1.1")转换为InetAddress实例的方法。

getLocalHost

static InetAddress getLocalHost ():通过InetAddress类的静态方法getLocalHost(),我们可以尝试获取表示本地主机的InetAddress实例。可以使用getHostAddress()方法获取并返回该主机的IP地址。

InetAddress类在Java中扮演着关键角色,用于封装IP地址信息,但它并非直接实例化的对象。相反,InetAddress类提供了一系列静态方法,这些方法允许开发者在不直接实例化该类的情况下,获取特定IP地址或主机名所对应的InetAddress实例。

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

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

相关文章

搭建知识付费APP平台教学:在线教育系统源码详解

如何搭建一个高效的知识付费APP平台呢?今天,笔者将详细解析在线教育系统的源码,帮助您快速搭建自己的知识付费APP平台。 一、平台的核心功能 一个完整的知识付费APP平台通常需要具备以下核心功能: 用户管理 内容管理 支付 课…

【秋招突围】2024届秋招笔试-小红书笔试题-第一套-三语言题解(Java/Cpp/Python)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系计划跟新各公司春秋招的笔试题 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📧 清隆这边…

CrossOver 2024软件安装包下载

CrossOver不像Parallels或VMware的模拟器,而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏,而不需虚拟机。它为Windows软件提供所需的资源,以达到在Mac OS X系统上运行Windows程序的目的。 安 装…

模型 WOOP

说明:系列文章 分享 模型,了解更多👉 模型_思维模型目录。不再拖延和懒惰,让梦想照进现实。 1 WOOP模型的应用 1.1 WOOP模型提高自己健身习惯 如果你想要养成健身的习惯,那么使用WOOP模型来提高自己健身习惯&#xf…

【第9章】Vue之Element Plus快速入门

文章目录 前言一、安装1. 兼容性2. 安装 二、按需导入1.自动导入2.Vite 三、全局配置四、官方案例五、效果总结 前言 基于 Vue 3,面向设计师和开发者的组件库。 一、安装 1. 兼容性 Element Plus 目前还处于快速开发迭代中。 由于 Vue 3 不再支持 IE11&#xff0c…

vite-plugin-mock前端自行模拟接口返回数据的插件

vite-plugin-mock前端自行模拟接口返回数据的插件 安装导入、配置(vite.config.js)使用目录结构/mock/user.js具体在页面请求中的使用 注意事项 中文文档:[https://gitcode.com/vbenjs/vite-plugin-mock/blob/main/README.zh_CN.md) 参考其他…

紫光展锐5G处理器T750__国产手机芯片5G方案

展锐T750核心板采用6nm EUV制程工艺,CPU架构采用了八核设计,其中包括两个主频为2.0GHz的Arm Cortex-A76性能核心和六个主频为1.8GHz的A55小核。这种组合使得T750具备卓越的处理能力,并能在节能的同时提供出色的性能表现。该核心模块还搭载了M…

Java17 --- RabbitMQ之插件使用

目录 一、Federation插件 1.1、运行两个rabbitmq实例 1.2、启用插件 1.3、在下游端点添加上游端点 1.4、创建策略 1.6、测试 二、联邦队列 2.1、创建策略 2.2、创建交换机与队列 2.2.1、创建52000的队列与交换机 2.2.2、创建62000的队列 三、Shovel 3.1、启…

探索uni-app x:下一代跨平台应用开发引擎

摘要 随着移动互联网的快速发展,跨平台应用开发的需求日益旺盛。传统的原生开发虽然性能卓越,但开发周期长、维护成本高。而Web应用开发虽然开发效率高,但性能往往不尽如人意。在这样的背景下,uni-app x应运而生,作为…

Qt项目天气预报(2) - 重写事件函数

鼠标右键实现退出界面 知识点QMenu: QMenu 弹出对话框 --> 相对QMessageBox 更加轻量点 QMenu是Qt库中用于创建弹出式菜单的类,它通常出现在应用程序的顶部菜单栏、按钮的右键菜单或自定义上下文菜单中。以下是关于QMenu的详细介绍: 1. 类的基本特…

【多线程】如何使用jconsole工具查看Java线程的详细信息?

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 先运行java程序!2. 在jdk目录下的bin文件夹中找到jconsole.exe3. 新建连接4. 观察线程状态5. …

金融数据中心布线运维管理解决方案

金融行业的核心业务,如交易、支付、结算等,对网络的依赖程度极高。布线作为网络基础设施的重要组成部分,其稳定性和可靠性直接关系到业务的连续运行。因此,良好的布线管理能够确保网络系统的稳定运行,减少因网络故障导…

训练营第三十八天 | 309.最佳买卖股票时机含冷冻期动态规划系列七总结714.买卖股票的最佳时机含手续费股票问题总结篇!

309.最佳买卖股票时机含冷冻期 力扣题目链接(opens new window) 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票&#x…

Navicat和SQLynx产品功能比较一(整体比较)

Navicat和SQLynx都是数据库管理工具,在过去的二十年中,国内用户主要是使用Navicat偏多,一般是个人简单开发需要,数据量一般不大,开发相对简单。SQLynx是最近几年的数据库管理工具,Web开发,桌面版…

Ollama在MacOS、Linux本地部署千问大模型及实现WEB UI访问

一、前言 阿里通义千问发布了Qwen2,提供了0.5B~72B的量级模型,在​​Ollama官网​​可以搜索qwen2查看,本文提供了Ollama的下载(在线/离线安装)、Ollama运行模型、使用WebUI连接模型以及页面简单配置。 …

计算机网络(4) 最长前缀匹配(路由转发表)

一.路由转发 网络数据包IP段只包含源地址与目的地址,经过数据链路层包装与物理层信号形式转换,最终经由不同的链路节点到达目的地址。这个过程是一步一步(hop by hop)进行的,路过一个路由节点则称为一跳。每个路由节点…

Java中ArrayList(顺序表)的自我实现(如果想知道Java中怎么自我实现ArrayList,那么只看这一篇就足够了!)

前言:在 Java 编程中,ArrayList 是一种非常常用的数据结构,它提供了动态数组的实现方式,可以方便地存储和操作数据。相比于传统的数组,ArrayList 具有更多的灵活性和便利性,可以根据需要动态地调整大小&…

温泉镇旅游微信小程序的设计与实现(论文+源码)_kaic

摘要 旅游业随着经济的快速发展呈现出一派欣欣向荣的景象,尤其是近两年来,各个行业运用科技以及因特网来促进旅游迅速发展,逐渐都显示出了的问题,特别突出的是在线上推广,其缺点也是特别明显。尽管在新冠肺炎的冲击下&…

后端中缓存的作用以及基于Spring框架演示实现缓存

缓存的作用及演示 现在我们使用的程序都是通过去数据库里拿数据然后展示的 长期对数据库进行数据访问 这样数据库的压力会越来越大 数据库扛不住了 创建了一个新的区域 程序访问去缓存 缓存区数据库 缓存里放数据 有效降低数据访问的压力 我们首先进行一个演示 为了演示…

基于System-Verilog的FPGA设计与仿真

一、System-Verilog System Verilog的发展 SystemVerilog 的出现是为了因应日益复杂的数位电路设计和验证需求。虽然Verilog HDL 在早期的数位电路设计中得到了广泛应用,但随着技术的发展和电路复杂度的增加,Verilog HDL 在某些方面已经显得有些不足以满…