- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
在与 IP 协议相关的技术中,有一些重要且常见的技术,其中包括 DNS 域名解析、ARP 协议、DHCP 动态获取 IP 地址以及NAT 网络地址转换。这些技术在网络通信中起着关键的作用.
首先,DNS 域名解析是将人类可读的域名转换为 IP 地址的过程。当我们在浏览器中输入一个网址时,浏览器会向 DNS 服务器发送查询请求,以获取与该域名对应的 IP 地址。这个过程涉及到域名服务器的层级查询和缓存,以实现高效的域名解析.
其次,ARP(地址解析协议)是在局域网中解析 IP 地址与 MAC 地址之间对应关系的协议。当一台主机需要与另一台主机通信时,它会发送一个 ARP 请求广播,其中包含了想要知道的目标主机的 IP 地址。同一局域网中的其他设备会解析该 ARP 请求包,如果目标 IP 地址与自身 IP 地址一致,就会将自己的 MAC 地址添加到 ARP 响应包中,返回给发送方。操作系统通常会将第一次获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址,提高通信效率.
我们在上网时通常使用域名而不是IP地址,因为域名更容易记忆。这种技术的实现是通过DNS域名解析,DNS可以将域名自动转换为具体的IP地址.
在DNS中,域名使用句点进行分隔,例如www.server.com, 句点表示不同层次之间的界限。在域名中,靠右的位置表示层级越高.
由于域名是由外国人发明的,所以思维方式与中国人不同。例如,在表示一个城市地点时,外国人喜欢按从小到大的顺序(例如XX街道 XX区 XX市 XX省),而中国人喜欢按从大到小的顺序(例如XX省 XX市 XX区 XX街道)。根域位于最顶层,下一层是顶级域com,再下面是server.com.
因此,域名的层级关系类似于树状结构:
在互联网中,根域的 DNS 服务器信息被广泛保存在所有 DNS 服务器中,这样任何一个 DNS 服务器都能够轻松地找到并访问根域 DNS 服务器。客户端只需连接到任意一台可用的 DNS 服务器,就能够通过这台服务器找到根域 DNS 服务器,并通过一系列的查询和响应,逐步找到位于下层的目标 DNS 服务器。这种分层的 DNS 服务器体系极大地提高了域名解析的效率和可靠性.
域名解析的工作流程可以描述如下:
首先,浏览器会检查自己的缓存中是否存有所请求域名的IP地址,如果存在则直接使用。如果缓存中没有,则浏览器会向操作系统的缓存请求,如果操作系统的缓存中存在,则返回给浏览器。如果操作系统的缓存中也没有,则浏览器会检查本机的域名解析文件 hosts,如果 hosts 文件中有对应的域名和IP映射关系,则返回给浏览器.
如果以上步骤都没有返回结果,浏览器会通过网络发送DNS请求到本地DNS服务器(也就是在TCP/IP设置中配置的DNS服务器地址).
至此,经过详细的解析过程,我们成功完成了 DNS 的解析过程。现在,让我来对整个过程进行总结,并将其以图示的方式呈现出来.
DNS(Domain Name System)域名解析的过程非常有趣,它与我们在日常生活中询问路线的过程非常相似,它只是为我们指引方向,而不是亲自带路.
需要注意的是,当我们申请域名时,并没有带上"www"前缀。这个前缀是在域名服务商的后台进行配置的。如果你不进行配置,域名是不会指向你自己的服务器的。此外,你还可以配置多种不同的前缀,以访问不同的服务。并不是更改前缀就需要再次申请一个新的域名。一旦在域名平台购买了域名,通常需要自行进行配置,具体步骤如下:
在传输一个 IP 数据报的时候,一旦源 IP 地址和目标 IP 地址确定,主机会通过查询「路由表」来确定 IP 数据包的下一跳。然而,网络层的下一层是数据链路层,因此我们还需要知道下一跳的 MAC 地址。主机的路由表中可以找到下一跳的 IP 地址,因此我们可以利用 ARP 协议来获取下一跳的 MAC 地址.
那么,ARP 是如何获取对方的 MAC 地址呢?
简言之,ARP 使用 ARP 请求和 ARP 响应这两种类型的数据包来获取对方的 MAC 地址.
在网络中,当主机需要与其他设备通信时,它会发送一个ARP请求。这个请求包含了主机想要知道的目标设备的MAC地址和对应的IP地址。当同一链路上的设备收到ARP请求后,会检查请求包中的目标IP地址是否与自己的IP地址匹配。如果匹配,该设备将自己的MAC地址放入ARP响应包中返回给主机.
为了提高效率,操作系统通常会将第一次获取到的MAC地址缓存起来,以便下次直接从缓存中获取对应IP地址的MAC地址。这样就不需要再发送ARP请求来获取MAC地址,从而节省了网络资源和时间.
在与IP协议相关的技术中,存在一些非常重要且常见的技术。在本章节中,我们将主要讨论DNS域名解析以及ARP协议,这些技术在网络通信中扮演着关键的角色.
首先,DNS域名解析是将人类可读的域名转换为IP地址的过程。它采用了分层的域名服务器体系,以实现高效的域名解析.
其次,ARP(地址解析协议)用于在局域网中解析IP地址与MAC地址之间的对应关系,以获取下一跳的MAC地址.
在接下来的章节中,我们将详细讲解DHCP动态获取IP地址以及NAT网络地址转换技术。这些技术对于网络通信的顺利进行也具有重要的意义.
最后此篇关于解密网络通信的关键技术(上):DNS、ARP、DHCP和NAT,你了解多少?的文章就讲到这里了,如果你想了解更多关于解密网络通信的关键技术(上):DNS、ARP、DHCP和NAT,你了解多少?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我需要为一系列 Linux 容器运行本地 BIND DNS 服务器。假设区域是 example.com 我的基础架构中已经有一个 example.com 域,我想使用我的本地 DNS 服务器覆盖一些记
当“Google Public DNS”免费时,为什么要使用“Google Cloud DNS”? 如何设置 DNS/名称服务器以指向计算引擎: 1. 将您的域注册器(在我的情况下为 GoDaddy.
我有一些主机在 EC2 中按需出现,当它们执行启动它们的服务时,它们会在现有区域下的 Route53 中创建一条 A 记录。 A 记录的格式为:randomid.example.com。所以它不是现有
我目前拥有自己的域名和专用服务器,并且为我的客户提供不同的软件包。我希望能够做的是让他们在我的网站上注册并自动创建一个包,他们可以通过他们的用户名作为子域进行访问,例如 http://youruser
我想知道如何只为一级子域设置通配符 DNS,示例: user.example.com // valid www.user.example.com // invalid 我的 BIND 区域域配
我正在努力将我的域的名称服务器切换到新的 DNS 服务。 将新设置与现有 DNS 设置进行比较的最佳工具是什么。 我尝试使用带有和不带有 @nameserver 的 dig 来确保 DNS 记录在新旧
我是一名长期开发人员,但对 DNS 的经验并不丰富。这是我的问题: 我们的应用程序在 Amazon EC2 上为客户启动服务器。一个客户希望为每台启动的服务器使用自定义 DNS,而不是 AWS 提供的
Closed. This question is off-topic。它当前不接受答案。 想改善这个问题吗? Update the question,所以它是用于堆栈溢出的on-topic。 9年前关
我看到几个提到 DNS 名称(域名)的最大字符串长度为 253 个字符。维基百科似乎指的是这篇旧博文: https://en.wikipedia.org/wiki/Hostname http://bl
这可能是完全不可能实现的,但在我尝试之前,我想我可能会从一位极客那里得到一些建议。 Squid 也会代理 DNS 查询吗?我想转发DNS查询以通过squid并使用squid的DNS错误页面,当然是通过
在我的 Rails 应用程序中,我使用 ruby 库 resolv 进行 nslookup。如果输入像 dgdfgdfgdfg.com 这样的网站,则说明时间太长而无法解决。在某些情况下,例如 2
我正在研究一个带有每 5 秒刷新一次(轮询)的实时仪表板(Angular Web 应用程序)的场景。 API 位于 Azure 流量管理器之后,如果主要区域发生故障,它将故障转移到第二个区域。请记住,
我正在使用 fortify,它显示了攻击者可以在我尝试在 java 应用程序中获取主机名时进行 DNS 欺骗的漏洞。我有一个解决方案,通过匹配正向 DNS 和反向 DNS 条目可以避免这种情况。但它有
我正在尝试使用 cert-manager 为我的 istio-ingress-gateway 订购证书。为此,我在 AKS 上的 kubernetes 集群 (1.13.7) 上安装了 istio (
我正在尝试创建一个家庭自动化系统,它可以在我工作的白天照看我的狗。我在这个项目中的目标是学习一些关于 DNS、文件服务和 RaspberryPi 的知识。 我的硬件设置是这样的: 1 个 Raspbe
我想在一台服务器上创建一个 Web 界面,以管理另一台服务器上的几个 dns 服务器。 如何以编程方式远程管理绑定(bind) dns 服务器? 我想添加/编辑/删除区域。 我看到有 rndc,但它只
我对 TTL 和传播时间的概念有点困惑,我想澄清一些我没有设法在网上找到具体答案的事情。 AFAIK,TTL(生存时间)表示世界各地的服务器更新特定 DNS 的缓存值所需的(最高)时间。 所以...
我正在尝试学习 kubernetes,并且我已成功在裸机上设置集群(1 节点)、部署服务并通过入口公开它。 我尝试实现 traefik,以获取 Lets 加密证书,但我无法使其工作,并且在调试时我注意
我想以编程方式自动更新我的 DNS 多个域。我在 GoDaddy 上运行 BIND 服务器(在 FreeBSD 上)以及主机域和 DNS。我找不到供 GoDaddy 访问和更新他们托管的 DNS 的
我正在尝试记录 DNS“泄漏”,换句话说,我网站的访问者使用的 DNS 服务器。 如何确定网络请求来自哪个 DNS 服务器到我的服务器(即获取 DNS 泄漏)。本站 dnsleaktest.com是吗
我是一名优秀的程序员,十分优秀!