Roxy's Library

Back

本文内容基于 2025 秋季《计算机网络》课程讲述,如有差错,欢迎指正

域名系统DNS#

域名系统概述#

DNS 是互联网的基础设施,负责将人类可读的主机名转换为机器可读的 IP 地址

虽然DNS提供的是网络层相关的功能,但是以应用层技术方式实现

多个域名可以映射到同一个IP地址,反之同一域名可以由多个IP地址提供服务(负载均衡)

架构:分布式、层次化的数据库系统

  • 为什么不使用中心化的系统?
    • 可以靠近用户,减少查询延迟
    • 可靠性高,避免单点故障
    • DNS 查询量大,中心化系统压力大
    • DNS 读数量大于写,适合分布式

使用的传输层协议:通常使用 UDP,端口号 53

域名结构

Internet的域名结构也采用了层次树状结构的命名方法,该树状结构又称域树(domain tree)

域名从后往前读,最右边的是最高级域(顶级域名)

domain_tree

域名服务器#

域名服务器负责保存域名与IP地址的映射关系,并处理域名查询请求;域名服务器之间互相知道对方的地 址,以便进行域名查询;域名解析的过程对用户是透明的

域名服务器的层次结构

dns_hierarchy

DNS 服务器分为以下几层 :

  • 根域名服务器 (Root DNS Servers):最高层级。全球有 13 套(a-m),知道所有 TLD 服务器的地址,但不能提供具体主机名的映射
  • 顶级域名服务器 (TLD Servers):负责管理在该顶级域名服务器注册的所有二级域名,当收到DNS查询请求时就给出相应的回答,可能是最后的结果,也可能是下一步应当找的二级域名字服务器的 IP 地址
  • 权威域名服务器 (Authoritative DNS Servers):负责具体的主机名映射。各个二级域名单位根据自己的具体情况把所属域名划为若干个管辖区进行管理,每个区设置相应的权威名字服务器
  • 本地域名服务器 (Local DNS / Recursive Resolver):ISP提供,距离用户最近,主机的 DNS 查询请求首先发给它

域名解析#

DNS解析有两种方式:递归查询和迭代查询

主机向本地DNS服务器的查询一般采用递归查询;本地DNS服务器向更上层域名服务器可以采用递归查询,但一般优先采用迭代查询

递归查询(热心的服务器)

当收到查询请求报文的域名服务器不知被查询域名的IP地址时,该域名服务器替请求者继续查询,请求者无需额外操作

recursive_query

迭代查询

当收到查询请求报文的域名服务器不知道被查询域名的IP地址时,就把自己知道的下一步应查询 的域名服务器IP地址告诉查询者,由请求者自己继续向该域名服务器查询

iterative_query

典型查询示例

  • 主机向本地DNS 发起递归查询 -> 本地 DNS 不知道答案,发起迭代查询
  • 本地 DNS 向 根服务器 发起迭代查询 -> 获得 TLD 服务器 IP
  • 本地 DNS 向 TLD 服务器 发起迭代查询 -> 获得权威服务器 IP
  • 本地 DNS 向 权威服务器 发起迭代查询 -> 获得最终 IP
  • 本地 DNS 将结果返回给主机

DNS 协议#

DNS 报文由三部分组成:基础结构(报文首部)、问题、资源记录(RR, Resource Record)

dns_message_format

报文具体内容很复杂,这里按照ppt内容列出来,应该不需要背下来吧(逃

基础结构部分

  • 事务 ID (Transaction ID):用于匹配请求和响应,请求和对应的响应报文 ID 必须相同
  • 标志 (Flags):控制字段,包含以下位 :
    • QR (Query/Response):0 表示查询,1 表示响应
    • Opcode:操作码。0=标准查询,1=反向查询,2=服务器状态查询
    • AA (Authoritative Answer):授权应答(仅在响应中有效)。1 表示该服务器是所查询域名的权威服务器
    • TC (Truncated):截断标志。1 表示报文超过 512 字节被截断(UDP 限制)
    • RD (Recursion Desired):期望递归。客户端设置 1 表示希望服务器进行递归查询
    • RA (Recursion Available):可用递归(仅在响应中出现)。服务器设置 1 表示它支持递归查询
    • Z:保留字段,必须为 0
    • Rcode (Reply Code):返回码,表示响应的差错状态,例如:0=无错误,3=域名不存在 (NXDomain),5=拒绝应答等
  • 问题计数 (Questions):DNS查询请求的数目
  • 回答资源记录数 (Answer RRs):DNS响应的数目
  • 权威资源记录数 (Authority RRs):权威资源记录的数目
  • 附加资源记录数 (Additional RRs):额外的记录数目(如:权威名字服务器对应IP地址的数目)

问题部分

该部分用来显示DNS查询请求的问题,通常只有一个,内容包含查询名(被查询主机名字)、查询类型、查询类

  • 查询名(name):一般为要查询的域名,但有时是IP地址(用于反向查询)
  • 查询类型(type):DNS查询请求的资源类型
    • 如A类型表示由域名获取对应的IP地址
    • MX 表示查邮件服务器
  • 查询类(class):通常为 1 (IN),表示互联网地址

资源部分

该部分只在DNS响应报文中出现,由3个字段构成,包括:回答问题区域字段、权威名字服务器区域字段、附加信息区域字段。这些字段都采用资源记录(RR)的格式

RR 的通用格式:

  • 域名 (NAME):DNS请求的域名
  • 类型 (TYPE):资源的类型,与问题部分的查询类型对应
  • 类 (CLASS):地址类型,与问题部分的查询类对应
  • 生存时间 (TTL):Time to Live,表示该记录在缓存中可以保存多久
  • 资源数据长度 (RDLENGTH):资源数据的长度
  • 资源数据 (RDATA):具体的查询结果(如 IP 地址)

dns_rr_format

DNS 缓存与安全性#

为了提高 DNS查询效率,减轻服务器的负荷,减少网络流量,DNS 服务器广泛使用高速缓存

缓存方式:

  • 缓存 “域名 -> IP” 映射
  • 缓存顶级域名字服务器信息

为保持时效性,每条缓存都有一个有效期 TTL,到期后删除

DNS 本身不做任何的认证和加密措施,用户的信息容易泄露。

相关的一些安全机制:DNSSEC安全机制……

电子邮件服务#

系统架构#

电子邮件是互联网出现以来最广泛的应用,该系统采用客户端/服务器模式,由三部分组成:

  • 用户代理 (User Agent):邮件客户端(如 Outlook),用于写信、读信
  • 传输代理 (Message Transfer Agent):邮件服务器,负责邮件的传输和存储(邮箱)
  • 邮件服务器之间的协议:SMTP(发送)、POP3/IMAP(接收)。

相关协议#

SMTP协议

SMTP工作在应用层,使用 TCP 端口 25,负责电子邮件的发送(推协议,需要目标在线)

实际实现是以一种命令行交互的方式,客户端通过连接向服务器发送一系列命令,服务器一一响应

  • 命令: ASCII字符串
  • 响应: 状态码+短语

smtp_interaction

其中 C 表示客户端,S 表示服务器

不足:

  • 没有认证过程,可以声称任何发件人
  • 使用ASCII传输,传输效率低下
  • 无加密导致隐私泄露

SMTP已经实现了从用户代理到邮件服务器、邮件服务器之间的传输,只剩下最后一步:邮件服务器到用户代理的传输。 但SMTP无法胜任该任务,因为用户代理不一定在线,SMTP是推协议,需要目标在线才能发送邮件

需要引入专门的协议来解决这个问题

POP3 协议和 IMAP 协议

POP3 和 IMAP 都是用于邮件服务器到用户代理的传输协议

POP3和 SMTP 类似,都是采用命令/响应的交互方式;使用 TCP 端口 110,采用客户端/服务器工作方式,有三个阶段:

  • 认证(Authorization):处理用户登录的过程
  • 事务处理(Trnsactions):用户收取电子邮件,并将邮件标记为删除
  • 更新(Update):将标为删除的电子邮件删除

POP3 协议会直接将邮件从服务器上删掉,但是现在我们访问邮件服务器时,邮件一般还在服务器上。

现在使用更广泛的是 IMAP 协议,采用 TCP 端口 143,支持更多功能:

IMAP允许用户在不同的地方使用不同的计算机随时上网阅读和处理自己的邮件,允许用户进行文件夹管理。因此它维护了 大量的用户信息,每次查询邮件都需要访问邮件系统

WebMail 协议

基于HTTP的邮件传输,使用浏览器作为用户代理,用户代理与服务器之间通过HTTP协议进行通信

DNS与电子邮件
https://astro-pure.js.org/blog/csnet_app_chap2
Author GreyRat
Published at December 6, 2025
Comment seems to stuck. Try to refresh?✨