计算机网络:应用层
应用层概述
客户端/服务器架构
- 服务器:一直开机并在线,IP地址是固定的,一般都位于数据中心
- 客户端:发起联系,客户端之间不直接通信
P2P架构
点对点,网络里每个节点(peer)既可以当客户端也可以当服务器,节点之间直接交换数据/提供服务,而不是全部依赖中心服务器。
进程通信(IPC)
进程:拥有独立内存的一个正在运行的程序 进程通信:就是不同进程之间交换数据与同步的机制
Socket
应用通过它把数据发给另一端进程/从另一端收数据 IP + 端口 标识服务端进程 包括TCP和UDP
TCP和UDP
- TCP:需要连接,可靠,有序,适合http网站
- UDP:不需要连接,可能丢包,不可靠,适合游戏,DNS 为什么DNS用UDP:快,可换服务器重试来应对丢包,服务器不用维护大量TCP连接
TCP三次握手
- 第一次:客户端->服务端
- 第二次:服务端->客户端
- 第三次:客户端->服务端
为什么是三次:
- 第一次:服务端知道此客户端
- 第二次:客户端知道服务端能收到,但是服务端不知道客户端能否收到
- 第三次:服务端知道客户端能收到,至此双方都能开始正常收发
Web 和 HTTP
Web服务三件套:浏览器,web服务器,HTTP
Web页面上的对象
包括HTML文件,图片,JavaScript,CSS文件,视频等
- HTML:超文本标记语言,作用:描述页面结构与语义(标题
<h1>、段落<p>、链接<a>、图片<img>等) - CSS:网页的“样式表”,用来控制页面长什么样。,作用:定义颜色、字体、大小、间距、布局等。
- JavaScript:网页的“脚本/逻辑”,用来控制页面怎么动、怎么交互、怎么请求数据。
URL
一个资源地址(协议://主机/对象路径)
例如:https://www.szu.edu.cn/images/logo.png
https://yaoyablog.xyz/2026/03/28/GGJ%E9%A1%B9%E7%9B%AE%E5%A4%8D%E7%9B%98/#%E7%BB%AA%E8%AE%BA //这里这样显示是因为是中文
HTTP
超文本传输协议,通常在 TCP 上,客户端发 Request(方法+URL+头+可选 body),服务器回 Response(状态码+头+可选 body)。
方法:
请求的“动作/意图”,
- GET 获取资源
- POST 提交数据/创建
- PUT 整体替换更新
- PATCH 局部更新
- DELETE 删除
- HEAD 只要响应头
- OPTIONS 询问服务器支持哪些能力
头(请求头/响应头):一组“键:值”的元数据,用来描述这次请求/响应的条件、格式、身份、缓存等
请求头例子:
- Host: 访问哪个域名(同一 IP 上区分不同网站)
- User-Agent: 客户端信息(浏览器/版本)
- Accept: 期望返回的数据类型(如 text/html, application/json)
- Content-Type: 你发出去的 body 是什么格式(如 application/json)
- Authorization: 身份认证信息(如 Bearer token)
- Cookie: 携带会话/登录态 响应头例子:
- Content-Type: 返回内容类型
- Content-Length: 内容长度
- Set-Cookie: 让客户端保存 cookie
- Cache-Control: 缓存策略
- Location: 重定向地址(配合 301/302)
状态码:
- 200 OK
- 400 Bad Request 无法解析
- 301 Moved Permanently 对象转移
- 404 Not Found
- 505 HTTP Version Not Supported 服务器不支持你当前使用的 HTTP 协议版本
HTTP vs HTTPS:HTTPS = HTTP + TLS 加密(防窃听/篡改/伪装),默认端口 443;HTTP 默认 80。
HTTP传输速度相关概念
持续 HTTP vs 非持续 HTTP
- 非持续HTTP:每个对象都要重新进行TCP连接
- 持续HTTP: 同一个 TCP 连接上可以连续发送多个 HTTP 请求/响应,用完才关闭连接。
传输时延 vs 传播时延
- 传输时延:把整份数据“推”到链路上需要的时间。即从数据的第一个包上链路到最后一个包上链路的时间 跟链路带宽、数据长度有关,和两点距离无关。
- 传播时延:第一个信号从 A 端“跑”到 B 端 所要的时间。 跟物理距离、介质(光纤/铜线)有关,和数据大小无关。
RTT(往返时延)
RTT 包含:一次去程传播时延 + 一次回程传播时延 + 双端的排队 / 处理时间。也包含传输时延,但是相对小,常被近似忽略。 一轮TCP三次握手建立连接花一个RTT,发请求+回应花一个RTT
流水线工作方式
在一个 TCP 连接上,不等前一个响应回来,就把多个请求连续发出去。 好处:多个请求共享一次RTT,减少等待时间。
用户->(HTTP,SMTP)->邮件服务器->(SMTP)->邮件服务器->(IMAP,POP3,HTTP)->用户 使用TCP
DNS
把人类好记的域名(如 www.qq.com)解析成网络通信需要的IP 地址
www.szu.edu.cn ——> 210.39.4.1
域名的层级结构:
最右边第一级,点间隔级,向左递增,最多有128个层级。
区分域名,网址,URL
- 域名(Domain name):主机的“名字”,用于标识一台/一组服务器,比如 qq.com、
www.qq.com。它本身不包含协议、路径,需要 DNS 把它解析成 IP。 - URL:资源的“完整定位符”,描述用什么协议到哪个主机访问哪个资源,如
https://www.qq.com/news?id=1。URL 里通常包含域名(在 host 位置)。 - 网址:日常口语里一般指“网站地址”,多数情况下就是指一个 URL(很多人把“网址=URL”用)。有时也会被用来泛指“域名”,但不严谨。
IP地址
32位,4字节 点分十进制计法 11011111 00000001 00000001 00000001 223 . 1 . 1 . 1
DNS分层分布式系统
分层:根域、顶级域、权威 DNS
分布:根服务器不是一台,TLD/权威服务器也不是一台,同ip,不同mac
DNS 域名解析
迭代查询
被询问的服务器返回下一步询问的服务器地址

递归查询
被询问的服务器去查询

DNS记录
分布式数据库中的记录,四个字段:name, value, type, ttl
记录类型:
- A记录:name:主机名(如
www.example.com),value:IPv4 地址(如 93.184.216.34),作用:把“主机名 → IPv4” - NS记录:name:某个域(zone)的域名(如
example.com)value:这个域的权威 DNS 服务器的主机名(如ns1.example-dns.com) 作用:告诉别人“要问example.com这片域名,去找哪台权威服务器”(用于分层“指路”) - CNAME记录:name:别名(如
cdn.example.com)value:规范名/真名(如example.cdnprovider.net) 作用:把一个名字映射到另一个名字(再继续解析目标名字的 A/AAAA 等) - MX记录:name:域名(如
example.com)value:负责该域邮件投递的邮件服务器主机名(如mail.example.com) 作用:别人给 @example.com 发邮件时,先查 MX 决定“投递到哪台邮件服务器”