计算机网络应用层协议全解析:DNS、FTP、DHCP、电子邮件与 Web 页面请求过程(CS-Notes) 计算机网络应用层协议全解析DNS、FTP、DHCP、电子邮件与 Web 页面请求过程CS-Notes【免费下载链接】CS-Notes:books: 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计项目地址: https://gitcode.com/GitHub_Trending/cs/CS-Notes本篇技术指南以 CS-Notes 网络系列中的应用层笔记为核心系统梳理五大应用层协议DNS、FTP、DHCP、TELNET 与电子邮件协议簇的原理、工作机制与常用端口并用一条完整的“从零联网到浏览器渲染出页面”的主线把各协议串成整体流程。读完本文你不仅能掌握每个协议为什么这样设计、底层如何封装还能对照本仓库网络层与传输层笔记打通自下而上的完整协议栈认知为面试与排障打下扎实基础。关联文档notes/计算机网络 - 应用层.md配套知识可继续阅读 传输层、网络层 与 HTTP。域名系统DNS分布式数据库与域名层次结构DNSDomain Name System是一个分布式数据库提供主机名与 IP 地址之间的相互转换服务。所谓“分布式”是指没有任何一台服务器保存全互联网的域名数据每个站点只保留属于它自己的那部分数据查询由各级域名服务器协作完成。域名具有严格的层次结构从上到下依次为根域名如根 DNS 服务器所管辖的顶级区域顶级域名如com、org、cn二级域名如example.com中的example。传输方式UDP 为主两种场景改用 TCPDNS 既可以使用 UDP 也可以使用 TCP 进行传输使用的端口号都是 53。绝大多数情况下 DNS 使用 UDP这就要求域名解析器和域名服务器双方都必须自己处理超时与重传以保证在不可靠的 UDP 之上获得可靠性。以下两种场景下会改用 TCP 传输响应数据超过 512 字节UDP 最大只支持 512 字节的数据载荷超出后不得不改用 TCP 分块可靠传输区域传送zone transfer即主域名服务器向辅助域名服务器传送发生变化的那部分数据数据量往往较大且要求可靠、有序地送达因此使用 TCP。理解延伸DNS 依赖 UDP 的 53 端口这一事实也解释了为何防火墙/NAT 场景中通常只需放行 DNS 的 UDP 53而在部署辅助域名服务器做区域传送时则需要 TCP 53 可用。文件传送协议FTPFTPFile Transfer Protocol用于在客户端与服务器之间传送文件。它基于TCP建立连接并且传送一个文件需要两条连接控制连接服务器在端口 21 上等待客户端的连接。客户端主动建立连接后通过该连接把命令如登录、切换目录、取文件传送给服务器并接收服务器的应答。控制连接贯穿整个会话负责“指挥”。数据连接专门用来传送一个文件的真实数据每次传输文件都可能新建数据连接。根据数据连接由哪一端主动建立FTP 分为主动模式与被动模式两种主动模式Active Mode服务器端主动发起数据连接。数据连接中服务器端使用端口20客户端端口随机且必须大于 1024因为 0~1023 是熟知端口号客户端无法随意占用。被动模式Passive Mode客户端主动发起数据连接。此时客户端端口由自己指定服务器端的端口则是随机的由服务器在控制连接中告知客户端。两种模式在防火墙与安全性上的权衡很关键主动模式要求客户端开放端口给服务器端连接因此往往需要修改客户端所在防火墙的配置被动模式只需服务器端开放相应端口客户端无需额外配置防火墙更适合客户端位于 NAT 或严格防火墙之后的场景但被动模式的代价是服务器端会开放较多随机端口安全性相应减弱需要服务器管理员做好端口范围管控。补充说明无论主动还是被动两条连接都跑在 TCP 之上这与本文 常用端口 一节中“FTP 控制连接 21、数据连接 20”的条目相互印证。动态主机配置协议DHCPDHCPDynamic Host Configuration Protocol提供即插即用plug-and-play的连网方式让主机接入网络后无需人工配置即可获得网络参数。需要注意DHCP 分配的内容不只是 IP 地址还包括子网掩码与网关 IP 地址在完整流程中还会下发 DNS 服务器地址见 Web 页面请求过程。DHCP 采用经典的DORA四步交互Discover → Offer → Request → AckDiscover客户端广播“发现”报文。该报文的目的地址为255.255.255.255:67、源地址为0.0.0.0:68被封装进 UDP 报文段中并广播到同一个子网的所有主机。如果客户端与 DHCP 服务器不在同一子网则必须借助**中继代理relay agent**把请求转发给服务器。OfferDHCP 服务器收到 Discover 后回应 Offer 报文其中携带客户端所需的配置信息。由于子网中可能存在多个 DHCP 服务器客户端可能收到多份 Offer因此需要客户端自行选择采用哪一份。Request客户端选中某一台 DHCP 服务器提供的配置后向该服务器发送 Request 报文正式提出请求。Ack服务器回送 Ack 报文表示客户端此时可以使用其所提供的配置信息。理解延伸DHCP 全程以广播起步Discover 目标255.255.255.255是因为此时客户端既不知道服务器 IP、也没有自己的 IP只能先“喊话”Ack 之后主机才正式启用被分配的 IP/掩码/网关/DNS。这段“无 IP 时的引导”过程正是下文 Web 页面请求过程 第一步的协议基础。远程登录协议TELNETTELNET 用于登录到远程主机上执行操作远程主机上的输出也会实时返回到本地终端实现类似“坐在远程机器前”的交互体验。TELNET 一个突出的设计目标是适应不同计算机与操作系统的差异。例如不同操作系统对“换行符”的定义各不相同Unix 使用 LF、Windows 使用 CRLF、老式 Mac 使用 CRTELNET 通过网络虚拟终端NVT等机制对这些差异做统一与转换使异构系统之间也能正常进行远程会话。安全提示TELNET 本身以明文传输这也是当前生产环境普遍改用 SSH 的原因但作为理解远程终端协议的经典模型其“连接远程主机并回显输出”的会话语义仍然值得掌握。电子邮件协议一个完整的电子邮件系统由三部分组成用户代理User Agent即用户读写邮件的客户端软件邮件服务器Mail Server负责存储与转发邮件邮件协议Mail Protocol定义邮件如何在用户代理与服务器、服务器与服务器之间传输。邮件协议按职责分为发送协议与读取协议两类发送协议常用SMTP读取协议常用POP3与IMAP。1. 发送协议 SMTP 与 MIMESMTPSimple Mail Transfer Protocol只能发送 ASCII 码文本。为了让邮件能携带图片、附件等二进制内容出现了互联网邮件扩充MIMEMultipurpose Internet Mail Extensions。MIME并没有改动或取代 SMTP而是在 SMTP 之上增加邮件主体的结构例如区分正文与多个附件支持多种类型定义非 ASCII 码内容的编码规则将二进制数据编码为 ASCII 形式后再交给 SMTP 传输。因此可以把 MIME 理解为“扩展信封与内容规范”真正的搬运仍由 SMTP 完成。2. 读取协议 POP3POP3Post Office Protocol version 3的经典特点是用户一旦从服务器读取了邮件服务器就把该邮件删除相当于“取走即清空”。这种模型把邮件集中下载到本地管理适合单机使用最新版本的 POP3 也提供了读取后不删除的选项供用户按需选择。3. 读取协议 IMAPIMAPInternet Message Access Protocol则采取“服务器为中心、多端同步”的模型客户端与服务器上的邮件保持同步只要用户不手动删除服务器上的邮件就不会被删除。用户删除/移动/标记邮件的操作会同步到服务器。IMAP 的这一设计让用户能够随时随地通过不同设备访问同一份服务器上的邮件数据。对比维度POP3IMAP邮件存储位置下载到本地为主保留在服务器多端共享默认删除行为读取后删除新版可配置不删手动删除前始终保留适合场景单机离线阅读多设备随时访问同一邮箱常用端口应用层协议与底层端口、传输层协议的对应关系是面试与排障中的高频考点这里汇总如下源自原文档全部端口均基于当前仓库整理应用应用层协议端口号传输层协议备注域名解析DNS53UDP/TCP长度超过 512 字节时使用 TCP动态主机配置协议DHCP67/68UDP服务器 67客户端 68简单网络管理协议SNMP161/162UDP文件传送协议FTP20/21TCP控制连接 21数据连接 20远程终端协议TELNET23TCP超文本传送协议HTTP80TCP简单邮件传送协议SMTP25TCP发送邮件邮件读取协议POP3110TCP读取邮件取走即删网际报文存取协议IMAP143TCP读取邮件多端同步记忆要点凡是需要“可靠、有序、面向连接”的FTP/HTTP/SMTP/POP3/IMAP/TELNET都走 TCP只有DNS 与 DHCP 使用 UDP 承载高频小请求DNS 在超大响应与区域传送时切回 TCP端口号上0~1023 为熟知端口这也是 FTP 主动模式要求客户端数据端口“必须大于 1024”的原因。Web 页面请求过程把上面的协议放到一个完整场景中最能看清它们如何协同。假设一台新主机接入一个局域网用户打开浏览器访问某个网站页面全过程可分为四步。以下每一步都对应着一次“逐层封装、再逐层解封装”的过程。1. DHCP 配置主机信息主机一开始没有 IP 地址及其他网络信息必须先通过 DHCP 引导联网主机生成 DHCP 请求报文装入目的端口 67、源端口 68的 UDP 报文段该 UDP 报文段再装入广播 IP 目的地址255.255.255.255、源 IP 地址0.0.0.0的 IP 数据报该数据报再放入目的地址为FF:FF:FF:FF:FF:FF的 MAC 帧中广播到与交换机连接的所有设备连接在交换机上的 DHCP 服务器收到广播帧后逐层向上分解得到 IP 数据报、UDP 报文段、DHCP 请求报文随后生成DHCP ACK 报文其中包含IP 地址、DNS 服务器的 IP 地址、默认网关路由器的 IP 地址、子网掩码并同样经 UDP 报文段 → IP 数据报 → MAC 帧逐层封装后发回该响应帧的目的地址是请求主机的 MAC 地址。由于交换机具备自学习能力此前主机发送广播帧时交换机已记录下“该 MAC 地址对应哪个转发接口”的交换表项因此现在能精确地把帧转发到对应接口主机收到帧并解封装得到 DHCP 报文后配置自己的 IP 地址、子网掩码与 DNS 服务器地址并在IP 转发表中安装默认网关路由后续所有出网流量都默认交给该网关。这一步充分体现了协议栈“应用层数据逐层向下封装、对端逐层向上解封装”的工作方式相关链路层细节可参考本仓库的计算机网络 - 链路层笔记。2. ARP 解析 MAC 地址有了 IP 与默认网关主机可以开始访问网站但要发出第一帧还需要网关的 MAC 地址主机通过浏览器生成 TCP 套接字向 HTTP 服务器发起请求。为此主机必须先知道网站域名对应的 IP 地址主机生成DNS 查询报文目的端口为53DNS 服务器端口DNS 查询报文装入目的地址为 DNS 服务器 IP 地址的 IP 数据报该 IP 数据报放入以太网帧中此帧将发送给网关路由器因为目标不在本地子网需经网关转发但 DHCP 阶段只告诉主机网关路由器的IP 地址并未告知其 MAC 地址。要获得网关的 MAC 地址需要使用ARP 协议主机生成包含“网关路由器 IP 地址”的 ARP 查询报文封装进目的地址为FF:FF:FF:FF:FF:FF的广播以太网帧发送给交换机交换机把它转发给所有连接设备包括网关路由器网关路由器解封装得到 ARP 报文发现其中的 IP 地址与自身接口 IP 匹配于是回应一个ARP 回答报文把自己的 MAC 地址发回主机。ARP 的“由 IP 地址求 MAC 地址”原理及 ARP 高速缓存机制详见计算机网络 - 网络层的“地址解析协议 ARP”小节。3. DNS 解析域名拿到网关 MAC 地址后DNS 查询得以真正跨网段送出网关路由器收到含 DNS 查询报文的以太网帧抽出 IP 数据报依据转发表决定转发给下一个路由器路由器同时运行**内部网关协议RIP、OSPF与外部网关协议BGP**这两类路由选择协议因此路由表中早已存在从网关路由器到达 DNS 服务器的路由表项DNS 查询逐跳转发到达 DNS 服务器后服务器抽出 DNS 查询报文在DNS 数据库中查找待解析的域名命中 DNS 记录后服务器发送 DNS 回答报文封装进 UDP 报文段、再封装进 IP 数据报沿路由器反向逐跳转发回网关路由器最终经以太网交换机到达主机主机由此获得目标网站的 IP 地址。关于 RIP/OSPF/BGP 为何能提前“铺好路”可对照计算机网络 - 网络层的“路由选择协议”小节RIP 基于距离向量、最多 15 跳OSPF 使用洪泛法交换链路状态并基于 SPF 算法收敛BGP 则在自治系统间寻找“较好”的路由。4. HTTP 请求页面有了 HTTP 服务器的 IP 地址主机便可以建立真正的应用连接主机生成 TCP 套接字用于向 Web 服务器发送HTTP GET报文在发送请求前必须先完成 TCP 三次握手主机生成目的端口为80的 TCP SYN 报文段发送给 HTTP 服务器HTTP 服务器收到 SYN 后回应 SYN ACK 报文段主机再确认一次连接建立三次握手的意义在于防止失效连接请求导致服务器误开连接详见计算机网络 - 传输层连接建立后浏览器生成 HTTP GET 报文并交付给 HTTP 服务器HTTP 服务器从 TCP 套接字读取 GET 报文生成 HTTP 响应报文把Web 页面内容放入报文主体发回主机浏览器收到响应报文后抽取出页面内容进行渲染最终把 Web 页面显示给用户。HTTP 请求方法、状态码与报文结构的完整语义见本仓库的 HTTP 笔记。小结一张图看懂“上网全过程”的协议协同把四个阶段连起来看一次页面访问恰好经历了“DHCP 拿网络身份 → ARP 找网关 → DNS 查域名 → TCP/HTTP 取页面”四重接力阶段核心协议关键端口解决的核心问题配置主机DHCPUDP 67/68主机无 IP 时获取 IP/掩码/网关/DNS定位网关ARP—以太网帧内由网关 IP 求其 MAC 地址域名解析DNSUDP/TCP 53由域名解析出网站 IP获取页面TCP HTTPTCP 80建立可靠连接并传输页面内容这也正是理解应用层的最佳方式应用层协议定义“数据长什么样、给谁看”而传输层、网络层、链路层负责把这些数据安全、准确地送达。掌握本文的协议职责、端口分配与完整请求链路即可在面试问答与真实网络排障中快速定位问题所在层。关联阅读仓库内继续深入计算机网络 - 目录网络系列总目录含概述、物理层、链路层、网络层、传输层、应用层六篇计算机网络 - 网络层IP 编址、ARP、ICMP、路由选择协议 RIP/OSPF/BGP 详解计算机网络 - 传输层UDP/TCP 特点、三次握手、可靠传输与拥塞控制HTTPHTTP 方法、状态码、首部与 HTTPS 专项详解。【免费下载链接】CS-Notes:books: 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计项目地址: https://gitcode.com/GitHub_Trending/cs/CS-Notes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考