当前位置: 首页 > news >正文

计算机网络——DNS,ARP,RARP,DHCP,ICMP

目录

DNS

为什么需要域名解析?

域名解析的工作流程

面试时精简介绍DNS

ARP

RARP(被DHCP取代了)

DHCP

DHCP的基本过程(DORA流程)

租约续订过程

ICMP

Ping和Traceroute

ICMP 报文类型(差错报文 和 查询报文)

1. 差错报文(Error Messages)

2. 查询报文(Query Messages)


DNS

为什么需要域名解析?

我们在上网的时候,通常使用的方式是域名,而不是 IP 地址,因为域名方便人类记忆。 那么实现这一技术的就是 DNS 域名解析,DNS 可以将域名网址自动转换为具体的 IP 地址

DNS 中的域名都是用句点来分隔的,比如 www.server.com ,这里的句点代表了不同层次之间的界限。 在域名中,越靠右的位置表示其层级越高。 毕竟域名是外国人发明,所以思维和中国人相反,比如说一个城市地点的时候,外国喜欢从小到大的方 式顺序说起(如 XX 街道 XX 区 XX 市 XX 省),而中国则喜欢从大到小的顺序(如 XX 省 XX 市 XX 区XX 街道)。

根域是在最顶层,它的下一层就是 com 顶级域,再下面是 server.com。

所以域名的层级关系类似一个树状结构: 根 DNS 服务器 顶级域 DNS 服务器(com) 权威 DNS 服务器(server.com)

域名解析的工作流程

浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析 文件 hosts ,如果还是没有,就会 DNS 服务器进行查询,查询的过程如下:

1. 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。

2. 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。

3. 根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归.com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”

4. 本地 DNS 收到顶级域名服务器的地址后,发起请求问“老二, 你能告诉我 www.server.com 的 IP地址吗?”

5. 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该 能问到”。

6. 本地 DNS 于是转向问权威 DNS 服务器:“老三,www.server.com对应的IP是啥呀?” server.com的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。

7. 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。

8. 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。 至此,我们完成了 DNS 的解析过程。现在总结一下,整个过程我画成了一个图。

面试时精简介绍DNS

“DNS,即域名系统,其核心作用是将人类易于记忆的域名(如 www.google.com)转换为机器能够识别的IP地址。

一个完整的解析流程如下:

  1. 本地多级缓存查询:客户端首先会依次查询浏览器缓存操作系统缓存和本地 Hosts 文件,如果命中则直接返回结果。
     

  2. 发起递归查询:若本地无缓存,客户端的解析器(Resolver)会向配置的本地DNS服务器(通常由ISP提供或为公共DNS)发起一个递归查询
     

  3. 执行迭代查询:本地DNS服务器收到请求后,会代替客户端进行一系列的迭代查询。它会先询问根域名服务器,根服务器会引导它去找对应的顶级域名(TLD)服务器;TLD服务器再引导它去找负责该域名的权威域名服务器
     

  4. 获取并缓存结果:最终,本地DNS服务器从权威服务器处获得域名与IP地址的映射关系,然后将这个结果返回给客户端,并将结果缓存起来以备后续使用。
     

  5. 协议选择:在协议层面,DNS查询为了追求速度,主要使用 UDP/53 端口。但当响应报文大于512字节,或在进行主备DNS服务器间的区域传输时,会切换到 TCP/53 端口以保证数据的完整性和可靠性。”

关于递归查询和迭代查询的解释

客户端向 本地DNS服务器(也就是递归DNS) 发出的请求,是一个 递归查询 。意思是:“我把域名给你,你必须给我最终的IP地址,中间过程我不管。”

本地DNS服务器 为了完成任务,向外(根、顶级、权威)发出的一系列请求,是 迭代查询 。意思是:“请告诉我下一步该问谁。”

ARP

在传输一个 IP 数据报的时候,确定了源 IP 地址和目标 IP 地址后,就会通过主机「路由表」确定 IP 数 据包下一跳。然而,网络层的下一层是数据链路层,数据链路层数据的传输必须依赖MAC地址,所以我们还要知道「下一跳」的 MAC 地址。

由于主机的路由表中可以找到下一跳的 IP 地址,所以可以通过 ARP 协议,求得下一跳的 MAC 地址。

那么 ARP 又是如何知道对方 MAC 地址的呢?

简单地说,ARP 是借助 ARP 请求 ARP 响应两种类型的包确定 MAC 地址的。

ARP解析过程是广播和单播相结合的。

  • ARP请求:ARP请求报文是一个广播报文。这意味着局域网内的所有设备都会收到这个请求。
     
  • ARP响应:只有IP地址与请求匹配的设备会发送一个单播报文作为响应,将自己的MAC地址回复给发起请求的设备。

广播发出,单播返回!!!

RARP(被DHCP取代了)

ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址

RARP协议的工作方式也是广播发出,单播返回

RARP协议的设计初衷与ARP正好相反。

  • ARP:已知设备的IP地址,请求其对应的MAC地址

  • RARP:已知设备的MAC地址,请求其对应的IP地址

这个协议主要用于那些没有硬盘存储IP地址的无盘工作站。当这些工作站启动时,它们只知道自己的MAC地址,但不知道自己的IP地址。为了能够连接到网络,它需要向网络中的RARP服务器请求分配一个IP地址。

  1. RARP请求(广播):无盘工作站会向网络发送一个广播请求,内容大致是:“我的MAC地址是AA:BB:CC:DD:EE:FF,请告诉我我的IP地址是多少?”

  2. RARP响应(单播):网络中的RARP服务器收到这个广播后,会查询其配置表中与该MAC地址对应的IP地址,然后发送一个单播响应,告诉无盘工作站:“你的IP地址是192.168.1.10。”

无盘工作站收到这个单播响应后,就会配置自己的IP地址,从而能够正常地接入网络。

RARP协议的局限性

虽然RARP在过去发挥了重要作用,但它有几个明显的局限性:

  • 需要专门的服务器:网络中必须有一台RARP服务器来响应请求。

  • 只能获取IP地址:RARP只能提供IP地址,无法提供子网掩码、网关IP等其他网络配置信息。

正是因为这些局限性,RARP协议在今天已经被更强大、更全面的协议所取代,主要是DHCP(动态主机配置协议)。DHCP不仅能够动态分配IP地址,还能同时提供子网掩码、默认网关、DNS服务器地址等所有必要的网络配置信息,并且可以跨子网工作,因此成为了现代网络中主流的动态IP分配协议。

DHCP

DHCP主要用来为局域网中的主机动态分配IP地址和其他网络参数(如网关、DNS服务器)避免人工配置,DHCP在我们日常生活中使用的很多。

DHCP的基本过程(DORA流程)

DHCP的核心过程一般被总结为 DORA 四个阶段:

Discover – Offer – Request – Acknowledge

记住这四个字母!!!DORA!!!

  • Discovery(发现)

    • 当一台主机(客户端)刚接入网络,没有IP地址时,会发送一个 DHCP Discover 广播包(目的地址 255.255.255.255,源地址 0.0.0.0)。

    • 作用:向局域网内寻找DHCP服务器,请求网络配置信息。

  • Offer(提供)

    • 网络中的DHCP服务器收到Discover后,会从其地址池中挑选一个可用IP地址,并返回 DHCP Offer 报文给客户端(通常仍然是广播)。

    • 其中包含:

      • 提议的IP地址

      • 子网掩码

      • 默认网关

      • DNS服务器地址

      • 租约期限(lease time)

  • Request(请求)

    • 客户端收到多个DHCP Offer时,会选择其中一个(一般是第一个响应的),然后向网络发送一个 DHCP Request 报文,表示接受该服务器提供的配置,并拒绝其他服务器。

    • 这个报文同样是广播的,目的是让所有DHCP服务器都知道该客户端选择了哪一个。

  • Acknowledge(确认)

    • 被选中的DHCP服务器收到Request后,会返回一个 DHCP ACK 报文,正式确认租约并提供完整的配置信息。

    • 客户端收到ACK后,就可以配置自己的IP地址、网关和DNS,开始正常通信。

客户端: DHCP Discover  ---> 广播 ---> 服务器
服务器: DHCP Offer     ---> 广播 ---> 客户端
客户端: DHCP Request   ---> 广播 ---> 服务器
服务器: DHCP ACK       ---> 广播 ---> 客户端

可以看到就是有些步骤可以是单播,有些必须是广播,不过四个步骤全部都是广播是一定可行的。至于为什么有几步可以是单播,是因为DHCP报文中的broadcast这个字段设置的值不同罢了。

租约续订过程

DHCP分配的IP不是永久的,而是有 租约期(lease time)。在租约期到期前,客户端需要向DHCP服务器请求续约:

  1. T1 定时器(通常为租约时间的 50%)

    • 客户端会向原DHCP服务器发送 DHCP Request,请求续约。

    • 如果服务器回应 DHCP ACK,则续约成功。

  2. T2 定时器(通常为租约时间的 87.5%)

    • 如果T1未能成功,客户端会广播发送续约请求,向任意DHCP服务器申请续约。

  3. 租约到期

    • 如果没有任何服务器响应,客户端必须放弃当前IP,并重新进入DORA流程。

ICMP

ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议。

ICMP 是 IP 协议族的一部分,主要用于在 IP 主机、路由器之间传递控制信息和错误报告。它运行在 网络层(严格来说是 IP 的附属协议)。不用于传输用户数据,而是用于 网络诊断、错误提示、状态反馈。

当遇到问题的时候,总不能死个不明不白,没头没脑的作风不是计算机网络的风格。所以需要传出消 息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局面。

ICMP 主要的功能包括:

  • 确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改 善网络设置等。
     
  • 在 IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责 通知。

Ping和Traceroute

常见的网络工具 ping、traceroute 就依赖 ICMP 报文。

Ping 的作用是测试主机的连通性。它通过发送一个特殊的网络数据包(ICMP Echo Request)到目标主机,并等待对方的响应(ICMP Echo Reply)。

  • 工作原理:它像是在问“你在吗?”。如果收到回复,就表示网络通畅。

  • 主要功能

    • 连通性测试:确认你的设备与目标主机之间是否能够互相通信。

    • 丢包率检测:统计发送和接收的数据包数量,计算丢包率。高丢包率通常意味着网络不稳定或拥堵。

    • 延迟测量:计算数据包往返所需的时间(RTT,Round-trip Time),以此评估网络延迟。延迟越低,网络速度越快。

Traceroute 的作用是追踪数据包的路径。它能显示数据包从你的设备到目标主机所经过的所有中间路由器,并记录每一跳的延迟。

  • 工作原理:它像是在问“你是第几站?”。通过发送一系列特殊的数据包,并利用 TTL(生存时间)机制,它能逐一发现数据包经过的所有路由器。

  • 主要功能

    • 路径追踪:显示数据包在网络中的完整传输路径。

    • 故障定位:当你访问某个网站很慢时,Traceroute 可以帮助你找出是哪一跳(哪个路由器)出现了问题,是延迟高还是丢包严重。

IP 数据包传输时,一旦发生错误(如目标不可达、超时、路由失败等),相关设备会向源主机发送 ICMP 报文。报文包含错误类型和相关的 IP 数据包信息,方便源主机定位问题。

ICMP 报文类型(差错报文查询报文

1. 差错报文(Error Messages)

用于报告传输中出现的异常:

  • 目标不可达(Destination Unreachable,Type 3)
    例如网络不可达、主机不可达、端口不可达等。

  • 超时(Time Exceeded,Type 11)
    IP 数据包 TTL 减为 0 时触发,traceroute 就是利用这一机制。

  • 参数问题(Parameter Problem,Type 12)
    报文头字段有错误。

  • 源抑制(Source Quench,Type 4,已弃用)
    早期用于拥塞控制,现代网络中已废弃。

2. 查询报文(Query Messages)

用于网络诊断和信息请求:

  • 回显请求与应答(Echo Request / Echo Reply,Type 8/0)
    ping 使用,用来测试主机是否可达。

  • 时间戳请求与应答(Timestamp Request / Reply,Type 13/14)
    用于测量时延和同步时间。

  • 路由器通告与请求(Router Advertisement / Solicitation,Type 9/10)
    路由器发现机制。


 

本文很多内容来自:小林coding

http://www.dtcms.com/a/353494.html

相关文章:

  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘websockets’问题
  • 时序数据库全景指南:从场景选型到内核拆解
  • Linux(十九)——CPU、I/O、网络与内核参数调优指南
  • 字库原理 GB2312-80
  • rk3588开发板最新kernel6.1下载(RK3588SDK源码下载)和环境搭建
  • 基于结构化码本的分层DNN框架用于高效语音增强
  • 第18章|变量:把数据装进“盒子”的正确方式
  • 【STM32】将 FreeRTOS移植到STM32F103RCT6 详细流程
  • 【开发配置】GitLab CR(Code Review)规则配置清单
  • 论文翻译:BRILLM: BRAIN-INSPIRED LARGE LANGUAGE MODEL
  • 在Excel和WPS表格中通过查找替换对单元格批量强制换行
  • 【C++】map 容器的使用
  • 论文阅读:Gorilla: Large Language Model Connected with Massive APIs
  • Python基础:PyMySQL
  • 音视频开发学习路线梳理(附 GitHub 仓库)
  • 达梦数据库-控制文件 (二)
  • FPGA开发流程
  • 一键搭建开发环境:制作bash shell脚本
  • Apple Silicon Mac 上解决 Docker 平台不匹配和 QEMU 段错误问题
  • 腾讯云服务器重启卡住:原因分析与底层原理详解
  • AI-调查研究-62-机器人 机械臂五大应用场景详解:从焊接到手术,从农田到太空
  • Knife4j 文档展示异常的小坑
  • GBDT(Gradient Boosting Decision Tree,梯度提升决策树)总结梳理
  • 如何设置 Lustre 文件系统并在其上运行 PostgreSQL
  • 设计模式9-责任链模式
  • UDC否定响应码学习
  • 未成功:使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)
  • 《StarRocks、Doris、ClickHouse 深度对比:三大 OLAP 引擎的优劣与应用场景》
  • go的实现arp客户端
  • 《方法论》--笛卡尔