首页 / 资讯中心 / 文章详情

计算机网络应用层复习:DNS与HTTP核心考点全解析

计算机网络应用层复习:DNS与HTTP核心考点全解析 ★ FEATURED ARTICLE
期末复习计算机网络走到第2章应用层这里很多人的状态其实很微妙既觉得它比前三章好懂——毕竟“HTTP、DNS、FTP”这些名字在日常生活中都听过又觉得它碎得离谱——协议一堆、端口一堆、状态码一堆真到做题时经常张冠李戴。这篇文章先把应用层里最核心、期末出题频率最高的两部分拆透DNS域名系统和HTTP及其演化。它们也是整个应用层“Part One”的重头戏把这部分啃下来后面FTP、电子邮件、DHCP再复习时会顺很多。我会尽量把知识点背后“为什么这样设计”的原因也讲清楚而不是单纯列背诵清单。期末复习最怕的就是背了一堆名词换个问法就不会了所以这篇会刻意把每类考点都落到“场景原理判断依据”上方便你对着真题套用。1. 应用层到底在复习什么先厘清边界再谈背协议1.1 应用层不是“最上层所以最简单”它是一切的终点学习计算机网络有两种典型切入角度一种是从物理层一路往上讲完数据链路层、网络层、传输层最后落到应用层另一种是自顶向下第一站就是应用层用HTTP、DNS这些看得见摸得着的例子反推底层设计逻辑。期末复习到第2章不管你用的是国内教材还是自顶向下的体系都会发现一个共同点应用层是所有网络服务的语义来源。底层协议负责把比特流从一个主机搬到另一个主机但“搬过去之后要表达什么意思”这个语义完全由应用层协议定义。应用层协议要定义的东西其实就是三件事报文类型是请求还是响应报文语法各字段怎么排字段的语义是什么以及进程如何根据收到的报文决定下一步动作。这听起来抽象你把它类比成网购就很直观快递网络只负责把一个包裹从卖家仓送到买家手上但包裹里是什么商品、签收单该怎么填、货不对板怎么办这是买卖双方约定的事。TCP/IP协议栈里传输层以下就是“快递网络”应用层就是那套买卖约定。期末常考的一个点是“应用进程与运输层之间通过什么接口交互”答案就是套接字socket。套接字可以粗糙地理解为应用层和运输层之间的一扇门进程把要发送的数据从这扇门丢出去运输层负责封装成报文段收到数据时也从这扇门递进来。单独讨论端口号意义不大但你在复习时必须能说清楚端口号是让运输层能把报文正确交付到对应进程的标识应用层协议则在这个基础上决定报文内容怎么组织。1.2 C/S结构与P2P结构判断一句话说的是哪种模式应用层的体系结构考试频率很高而且常常以“描述某个应用属于哪种结构”的方式出现。两种基础模式必须能一口报出来客户-服务器结构C/S服务器是始终在线、拥有固定IP和域名的中心节点客户与服务器直接通信客户之间不直接交换数据。Web服务、文件传输、电子邮件都属此类。它的特点是“中心权威、服务稳定”弱点是服务器容易成为瓶颈。对等结构P2P没有永远在线的中心服务器每个节点既是客户端又是服务器文件直接从其他节点下载比如BT下载。它天生有扩展性优势——越多节点参与总服务能力越强但管理和安全难度高。现在的实际应用中两者经常混用音视频软件可能用C/S做信令控制用P2P做内容分发。考试如果问“该应用使用什么体系结构”别看到点对点字样就写P2P要看具体内容分发路径。1.3 常用应用层协议与端口一张表解决基础送分题协议名称默认端口传输层协议典型场景DNS域名系统53UDP也支持TCP域名解析HTTP超文本传输协议80TCP网页访问HTTPS安全超文本传输协议443TCP加密网页访问FTP文件传输协议20/21TCP文件上传下载SMTP简单邮件传输协议25TCP邮件发送POP3邮局协议第3版110TCP邮件读取IMAP因特网邮件访问协议143TCP邮件同步管理DHCP动态主机配置协议67/68UDP自动分配IP配置这里有个很容易被绕进去的点为什么DNS用UDP为主因为域名解析请求经常是每次只问一个很小的记录开一条TCP连接的成本远高于直接用UDP发一个短请求。但DNS也保留TCP能力用来做区传输或应对响应过大的场景。期末如果考“DNS为什么能选UDP”必须答这几层意思短小、一次完成、不需要可靠有序的完整字节流超时重传交给应用层也能解决。还有一个热词现实案例值得注意页面提示“系统检测到您的计算机网络中存在异常流量请稍后重新发送请求”。很多同学会把它归类成“网络连接问题”其实从应用层视角看这是服务端或中间网关返回了一个业务层面的拦截响应浏览器把它展示成了页面。它恰恰说明应用层协议的定义不只有成功响应还包括“拒绝、拦截、要求验证”这类非预期响应。复习时别只记200和404后面讲HTTP状态码会专门展开。2. DNS的考点套路层级名字空间、递归迭代、缓存与TTL2.1 域名结构与记录类型看清这些才能谈解析过程DNS是为人类服务的“电话本”——记住IP地址从来不是人的强项一个名字分层的树状结构才是。从根开始域名由根根是没有写在常规网址里的那个点、顶级域名、二级域名、三级域名等构成。比如www.example.com完整写法是www.example.com.最后一个点就是根域的表示。顶级域名又分通用顶级域和国家级顶级域.com、.org、.net属于前者.cn、.hk这类属于后者。期末复习这里有个值得注意的方向**为什么域名要设计成层次结构而不是一个扁平的字符串**答案是为了分布式管理。如果只有一个权威机构维护全部域名记录那它既是性能单点也是管理单点。按层级划分后每个组织只要维护自己负责的那一部分比如「.com」下的注册局只管顶级层example.com的管理者只对自身域内的记录负责。这种“树状授权”的思想在后面学路由聚合时也会有类似感觉但应用层这里考察的更多是记录类型本身。记录类型作用举例A域名映射到IPv4地址www.example.com. A 93.184.216.34AAAA域名映射到IPv6地址www.example.com. AAAA 2606:2800:220:1:248:1893:25c8:1946CNAME别名指向另一个域名www.example.com. CNAME example.com.MX邮件交换记录指向邮件服务器example.com. MX 10 mail.example.com.NS指定该域名的权威DNS服务器example.com. NS ns1.example.com.SOA区域权威信息的起始记录记录区域主服务器、管理员邮箱等PTR反向记录IP映射到域名34.216.184.93.in-addr.arpa. PTR example.com.考试喜欢混淆的是A与AAAA、CNAME与NS。记法很简单A就是“Address”指IPv4AAAA是IPv6因为IPv6地址长度相当于4个A的规模CNAME回答的是“这个别名到底是谁”NS回答的是“这个区域由谁说了算”。后两者的区别最常考你看到一条记录写着“某个域名对应另一个域名”那是CNAME看到写着“某个域使用哪个域名服务器”那是NS。2.2 解析流程从浏览器输入域名到拿到IP到底经过几次查询完整解析过程是典型的期末大题我建议这样建模记忆第一站是浏览器缓存和操作系统hosts文件。浏览器先看自己有没有记录这条域名的近期解析结果没有再查操作系统的hosts文件与本地DNS缓存。这层都查不到才把请求发给本地DNS服务器也就是我们常说的“自动获取的DNS服务器”。第二站是本地DNS服务器开始替用户解析。它的典型做法是迭代查询——注意这里有一个最常考也最容易被弄反的点。流程是这样的本地DNS服务器先向根DNS服务器发问“我要解析www.example.com你知道它的IP吗”根DNS服务器通常不知道具体主机的记录但它知道.com顶级域的DNS服务器IP于是回复“你去问.com顶级域服务器”本地DNS服务器继续向.com顶级域服务器发问顶级域服务器回复“你去问example.com的权威DNS服务器”最后本地DNS服务器向example.com的权威DNS服务器发问权威服务器返回最终的A记录本地DNS把这个结果缓存下来并返回给用户。这里有个必背结论递归查询客户机把解析任务完全交给本地DNS服务器本地DNS服务器有义务返回最终答案查不到就一路替客户机继续问到底。迭代查询每台被询问的DNS服务器只返回“下一步该找谁”的部分答案具体继续追问的动作由发起方自己完成。画图题不要强行背“第几次是递归第几次是迭代”用这个判断口诀“谁负责把最终答案带给提问者谁就在替提问者递归其余中间环节凡是只指路不问结果都是迭代。”正常情况下主机到本地DNS服务器是递归本地DNS服务器到根、顶级、权威服务器是迭代。但也存在例外——如果本地DNS服务器本身配置了转发那么它和上游之间也会呈现链式递归。2.3 缓存、TTL与资源记录为什么一次解析后又快又省DNS报文一小时内重复解析会很常见但为什么第二次往往感觉不到延迟答案是缓存。浏览器有DNS缓存操作系统有DNS缓存本地DNS服务器也有缓存每一层都可能直接命中。TTL生存时间字段规定了这条记录在缓存里能活多久时间一到记录过期必须重新查询。TTL设计存在的意义是把“响应及时性”与“数据正确性”搓合起来TTL太短会让根服务器和顶级服务器流量暴涨TTL太长则会导致域名换IP后大量客户端仍然访问旧地址。期末可能会给一个场景题“某域名更换了服务器IP但用户访问仍然到了旧IP为什么”标准答案就是用户主机、递归服务器、甚至中间网络设备的DNS缓存里还保存着旧记录必须等TTL过期或者手动刷新缓存才能生效。做题时看到“TTL”这个关键词十有八九要答缓存过期机制。还有一类论述题喜欢问“DNS为什么不只用一个服务器”。答案包含三点单点故障风险、负载过重、距离过远导致延迟大。正是这些原因使得域名系统必须采用层次化、分布式的结构。理解这一点对后面学CDN和负载均衡会有帮助但期末层面能答出这三点就已经到位了。3. HTTP的核心考点状态码、连接模式、缓存机制一个都不能少3.1 报文结构请求行、首部行、实体主体HTTP报文分两种请求报文和响应报文。请求报文第一行是请求行包含方法、URL和版本号例如GET /index.html HTTP/1.1接着是首部行比如Host: www.example.com、Connection: keep-alive、User-Agent: ...再往下是可选实体主体。响应报文第一行是状态行例如HTTP/1.1 200 OK然后是若干首部行最后是实体主体也就是真正要展示的网页内容。填空题常把请求行和状态行搞混。区分其实很简单请求行以方法开头状态行以HTTP版本号开头。比如GET / HTTP/1.1一看就是请求HTTP/1.1 200 OK一看就是响应。注意响应行里的原因短语是可选的解释性文字浏览器真正依据的是前面的三位状态码。常见方法也要能说出区别这里用表格整理一份基本版方法主要作用请求体幂等性典型使用场景GET请求指定资源通常无幂等打开网页、加载图片POST提交数据给服务器处理有非幂等提交表单、上传内容HEAD只获取响应首部不返回本体无幂等检查资源是否存在、获取修改时间PUT上传资源语义是“放置”有幂等更新文件DELETE删除指定资源通常无幂等删除远端资源你一定要掌握GET与POST的区别因为几乎所有期末卷都会在这里设一道选择题。常规判据有三条GET参数拼在URL查询串里POST参数放在实体主体GET请求一般能被缓存POST通常不能被缓存GET是幂等的重复请求不改变资源状态POST重复提交可能产生多条记录。做题时看到“刷新页面后表单重复提交”多半就应该答POST的特性。3.2 非持续连接与持续连接、流水线RTT计算题的关键HTTP底层是TCP所以“一次Web页面请求用了几个RTT”这类计算题几乎是期末保留项目。这里需要先把两种连接模式吃透。非持续连接下每个对象都需要单独的TCP连接。第一次请求先花1个RTT建立TCP连接再花1个RTT发送HTTP请求并等待响应开头返回之后浏览器解析HTML又发现了其他引用对象比如CSS、JS、图片每个对象都要再经历“建立TCP连接发送请求响应”两个RTT。于是总时间约为2RTT N×2RTT。持续连接下同一个TCP连接可以顺序发送多个请求。第一个对象仍然需要2RTT但后续对象只需要1个RTT发送请求并等待响应。所以总时间约为2RTT N×RTT。流水线模式则是持续连接的进一步优化客户端可以在一个TCP连接内连续发送多个HTTP请求不需要等待前一个响应回来再发下一个。理想情况下所有小对象能在接近1~2个RTT内全部完成传输。HTTP/1.1虽然正式支持持久连接但流水线在实践中却因队头阻塞问题推广得并不好直到HTTP/2用多路复用才真正解决了并发请求的瓶颈。期末如果出计算题看清楚题干是“HTTP/1.0”还是“HTTP/1.1”是否允许流水线再套公式。建议动手演练一遍一个HTML文件引用了5张图片往返时延RTT为100ms不考虑TCP断开时间算HTTP/1.0非持续、HTTP/1.1持续、HTTP/1.1流水线三种情况分别耗时多少。非持续是2×1005×2×1001200ms持续是2×1005×100700ms流水线约等于2×100100300ms。这个数字一出来你就立刻明白为什么连接复用和并发对Web性能如此重要——传统网页的一半延迟几乎都花在“等请求变成响应”的空闲上。3.3 状态码记忆框架只记“大概分类”还不够热门状态码要精确状态码分类是基础分必须形成条件反射1xx是临时性信息2xx是成功3xx是重定向4xx是客户端错误5xx是服务器错误。这个框架帮助你在不认识具体码值时也能推断语义但考试真正刁钻之处往往在相近码值之间的区分状态码含义要记的细节200OK请求成功通常表示正常返回301永久重定向资源已永久移动到新地址浏览器会更新收藏302临时重定向资源临时换位置后续访问仍可能回到原地址304Not Modified未修改配合缓存使用服务器告诉客户端可用本地缓存400Bad Request请求语法错误服务器看不懂这个请求403Forbidden禁止访问服务端理解请求但拒绝常因权限不足404Not Found资源不存在最常见的“打不开”状态405Method Not Allowed方法不允许请求方法不被目标资源支持500Internal Server Error服务器内部错误服务器自己出问题了503Service Unavailable服务不可用服务器过载或维护中301、302、304这三个“3xx”最容易一起考。我的判断方法是从“是否永久改变地址”上区分301和302从“是否真的返回了资源内容”上区分304。304并不真的把资源传给客户端而是告诉客户端“你缓存的那份还能用”这样可以省流量也缩短响应时间。4xx和5xx的判断原则可以这样想4xx问题出在请求本身——格式写错、权限不够、资源不存在5xx问题出在服务器——代码崩溃、数据库连接不上、过载降级。如果看到500先别急着改前端那多半是后端服务的锅看到403优先检查认证和授权。3.4 Cookie、Session与Web缓存理解“HTTP无状态”才能理解这些机制HTTP是无状态协议服务器默认不保留“你上次跟我交互过什么”的记忆。但购物车、登录状态这类需求又必须记住用户于是Cookie和Session应运而生。Cookie机制的工作流是核心考点。第一次访问时服务器在响应报文里加入Set-Cookie头内容通常是一个唯一标识比如购物车编号浏览器收到后把Cookie保存在本地之后每次向该服务器发请求时自动在请求头里带上Cookie字段。服务器看到这个标识就能识别出“这个人就是之前那位”。这个过程不需要你写代码但你要能说出四个关键节点服务器下发Set-Cookie、浏览器保存、后续请求自动携带、服务器据此识别状态。这里有个理解上的坑Cookie是保存在客户端的Session是保存在服务器端的。服务器端用Session标识存储登录信息通常把Session ID放在Cookie里下发给客户端于是两者是一对配合关系而不是替换关系。考试问“为什么需要Session”答案不是因为HTTP想记录状态而是Cookie只能存放不大的标识真正的状态数据留在服务器内存或缓存中更安全。Web缓存是另一个常考点它也被称为代理服务器或内容分发缓存。当客户端请求一个对象时请求先到达缓存服务器如果缓存中有该对象且未过期直接返回如果过期了缓存服务器会向源服务器发一个条件GET请求用If-Modified-Since头带上本地缓存副本的最后修改时间。源服务器如果判断资源没变就返回304 Not Modified并不发送正文如果资源变了才返回200并带最新内容。注意这句话的表述条件GET成功的情况下服务器返回的是304而不是200。很多选择题在304和200之间设陷阱判据是“资源未修改”。3.5 HTTP版本演化1.0、1.1、2.0到3.0分别解决了什么问题期末复习频率最高的是HTTP/1.0到HTTP/2.0但3.0也偶有选择题作为拓展。按“解决什么问题”来记忆这条路会比硬背特性更牢。HTTP/1.0默认非持续连接每个对象都重新建TCP效率低。HTTP/1.1默认持续连接支持请求流水线、Host头大幅减少建连开销。这里的Host头也很重要它让一台服务器可以同时托管多个域名即虚拟主机。HTTP/2.0引入二进制分帧、多路复用、头部压缩、服务器推送。多路复用允许一个TCP连接上同时交叠多个请求/响应避免HTTP/1.1的队头阻塞。注意这里的“队头阻塞”指的是HTTP层一个个等响应而不是TCP层的丢包重排。HTTP/3.0把传输层从TCP换成了基于UDP的QUIC目的是解决TCP层队头阻塞和建连握手延迟问题。主要版本特征背下来就行。我个人复习时会把版本特征总结成一句话链条**1.0没有连接复用 → 1.1加了连接复用但请求还是要排队 → 2.0用多路复用让请求并行 → 但TCP底层丢包仍会堵住所有流 → 3.0干脆换UDP自己管可靠性。**这条因果链是论述题的通用答法比干背“二进制分帧”要有说服力得多。HTTPS的问题也会在这里出选择题核心就一句HTTPS不是与HTTP平行的一种新应用层协议而是HTTP运行在TLS/SSL之上TLS在传输层和应用层之间加了安全层默认端口443。它的握手过程涉及证书验证、协商对称密钥但期末考试如果只是选择你掌握“加密传输内容、防窃听防篡改、默认443端口”就够了。4. 期末高频“迷惑性”问题盘点看到这些热词心里要有数4.1 “检测到异常流量请稍后发送请求”这句话到底该归到哪一层这个现象的热度意外地高很多同学在搜索引擎里问“为什么会这样”。从通信链路角度复盘用户的请求已经到达了服务端的入口服务端或中间防护系统根据流量特征判断该行为异常于是返回一个HTTP响应浏览器将该响应渲染成提示页。看到这你应该明白了这其实是应用层的正常响应流程不是“没连上网”。它本质上体现了应用层协议的一个重要设计协议不仅要定义成功时的报文格式也要定义失败、拒绝时的响应形式。服务端可以选择返回4xx明确告诉客户端‘你的请求被拒’也可以返回200但响应正文是验证跳转页面。判断依据在你的题目中往往是看状态码和响应头而不是看网页内容是否友好。4.2 “应用层开发是不是嵌入式”这类疑问暴露了术语的混用搜索热词里有一个很有意思“应用层开发是不是嵌入式”。如果你把这句话放在计算机网络教材里看会觉得很怪但现实中确实很多人感到困惑。原因是“应用层”这个词在不同上下文里有不同含义。在计算机网络教材里应用层是协议栈顶层指的是HTTP、DNS这类网络应用协议的集合在软件工程里应用层指的是业务逻辑层是相对数据访问层、基础设施层而言的在嵌入式系统里应用层驱动之上那层也常被称为应用层和驱动开发对应。它们的共同点是都是“坐在下层API之上写业务功能”的那一层。不同点是通信协议、运行环境、性能约束差别巨大。期末复习时不需要掌握嵌开发的细节但如果在读研方向或职业选择上思考这个问题你要能分清写协议报文和写Linux用户态程序虽然都叫“应用层”但它们面对的标准与调试手段完全不同。4.3 CRC校验能不能通过报文观察到看图该看哪一层“计算机网络中的CRC校验如何通过报文观察”也是一个搜索热词但它其实属于数据链路层的范畴与应用层没有直接关系。CRC即循环冗余校验是数据链路层对帧进行差错检测的手段它在以太网帧尾部FCS字段体现。你如果用抓包软件打开一个以太网帧看到最后4字节的帧校验序列就是CRC结果。那“观察报文”在应用层该看什么应该看传输层端口号和应用层协议数据。比如看到一个UDP报文且目的端口是53那基本可确定为DNS查询看到一个TCP报文且目的端口是80或443里面载荷常常是HTTP/HTTPS请求或响应。做题时如果题干问“从捕获的报文中识别应用层协议”思路是先看传输层端口号再看负载中的文本特征HTTP报文里会有GET、POST、HTTP/1.1等关键词。4.4 一个完整的故事从输入网址到页面显示把DNS和HTTP串起来许多期末综合题会考“输入网址到页面显示发生了什么”。这里给你一个“话术模板”按顺序背下来基本不会漏分浏览器解析URL确定协议、主机名、端口和路径浏览器先查本地DNS缓存和hosts没有再向本地DNS服务器发起递归查询本地DNS服务器以迭代方式逐级查到权威DNS服务器返回目标IP浏览器获得IP后向目标服务器发起TCP连接建立也就是三次握手这一步通常需要1个RTTTCP连接建立后浏览器发送HTTP请求报文报文首部包含Host、Cookie等信息服务器处理请求返回HTTP响应报文状态码200且携带Set-Cookie等首部字段浏览器收到HTML文档后解析发现引用的图片、样式表、脚本再次发起相应HTTP请求如果连接是持续连接则复用原连接浏览器渲染页面期间可能会调用本地缓存。这道题的好处是把整个第2章的知识点都拧成一股绳。你甚至可以在草稿纸上把这个过程写成八行流程图式的清单考试时对着清单逐项展开即可。4.5 备考资料怎么选期末卷和408卷在“应用层”上的差别“湖科大教书匠计算机网络适合考408吗”“王道计算机网络”这类搜索热词说明大家复习时在资料选择上确实纠结。我的看法是如果目标是大学期末考教材上的例题、课后选择题、往年真题优先级最高。应用层期末题偏重概念和计算比如RTT题、DNS递归迭代判断题、状态码语义题这些在谢希仁教材和王道考研书里都有覆盖。如果目标是408考研王道系列对考点削藩得比较狠适合刷客观题湖科大教书匠的视频课则胜在把原理说得直观尤其适合自顶向下入门但不适合直接当唯一复习资料。推荐的做法是“教材打底、课程理解、真题检验”三件套。网课看完一节立刻去做对应章节真题尤其是主观题和计算题只看不练最容易产生“我都懂了”的错觉。5. 给期末复习的三条实战建议5.1 Part One之后第二部分该覆盖哪些点复习顺序怎么排这篇算应用层Part One讲了DNS和HTTP两大块。后面的Part Two大概率还要覆盖FTP的主动与被动模式、SMTP/POP3/IMAP邮件三协议、DHCP的报文交互过程。顺序上我建议按“和日常接触的紧密程度”排先HTTP再DNS再FTP再邮件最后DHCP。越靠前的内容出题越频繁也越值得多花时间。5.2 做题要练的是“判断题干关键词”而不是“背标准答案”复习应用层时最容易犯的错是背题目。换个马甲再来一次就不会了。我自己的经验是每做完一道题在题号旁边写下它对应的考点关键词比如“持久连接”“Cache-Control”“权威服务器”。平时抓题目向你投来的关键词考试抓题干里的关键词两边对上你的分就跑不掉。比如看到题干出现“不用再次发送请求”“304”“If-Modified-Since”立刻定位到Web缓存条件GET看到“递归”“迭代”“本地DNS服务器”立刻定位到DNS解析流程。5.3 善用抓包工具用一次真实报文解决十个抽象概念期末复习时间紧但如果能抽出半小时抓一次包回报率极高。打开任意网页打开Wireshark抓包按http过滤就能看到GET请求报文、响应报文、cookie字段按dns过滤能看到查询响应记录。对照本文讲的报文结构亲眼看到一次“请求行→首部行→实体”和“状态行→首部行”比你盯教材看十遍都牢。没有实验环境的同学也不慌很多真题里会直接给抓包截图你要做的就是把报文头里的关键字段反推成协议行为。我自己当年复习第2章时最吃亏的就是把DNS递归和迭代搞反。后来自己画了一张“谁在替谁跑腿”的草图——用户把域名丢给本地DNS本地DNS一路去各个服务器问路问完把答案带回来还给用户这个替用户跑腿的过程就是递归。后面再遇到类似的题我的第一反应不是背定义而是想那张图。希望你按自己的习惯也画一张类似的“心智地图”把今天讲的所有协议串进去它比任何现成笔记都好用。
阅读完成 · 觉得有帮助?
咨询建站