应用层
一、应用层核心作用与架构
1. 核心定位
- 用户接口层:直接为应用程序(如浏览器、邮件客户端)提供网络服务接口。
- 通信规则定义:规定应用程序间通信的报文格式(如HTTP请求头)和交互流程(如DNS解析步骤)。
2. 典型架构模式
客户端-服务器(C/S)
- 特点:服务器长期运行,客户端按需请求(如Web服务器与浏览器)。
- 优势:集中管理资源,安全性高;缺点:服务器可能成为性能瓶颈。
对等网络(P2P)
- 特点:节点既是客户端又是服务器(如BitTorrent文件共享)。
- 优势:高扩展性,降低服务器压力;缺点:管理复杂,安全性低。
- 混合架构:C/S用于登录验证,P2P用于数据传输(如Zoom会议)。
二、核心协议详解
1. HTTP/HTTPS
- HTTP基础特性
- 无状态协议:每次请求独立(依赖Cookie/Session维持状态)。
- 无连接(早期)→ 持久连接(HTTP/1.1 Keep-Alive):复用TCP连接减少延迟。
- 请求方法:
- `GET`(获取资源)、`POST`(提交数据)、`PUT`(更新资源)、`DELETE`(删除资源)。
- 状态码分类:
- `2xx`:成功(如200 OK);`3xx`:重定向(如301永久重定向);
- `4xx`:客户端错误(如404未找到);`5xx`:服务器错误(如500内部错误)。
- HTTPS安全机制
- 加密流程:
1. 非对称加密协商对称密钥(TLS握手)。
2. 对称加密传输数据(如AES)。
- 核心功能:数据加密、身份验证(CA证书)、完整性校验(哈希算法)。
- HTTP版本演进
- HTTP/1.1:管线化(Pipelining,但队头阻塞未解决)。
- HTTP/2:二进制分帧、多路复用、头部压缩、服务器推送。
- HTTP/3:基于QUIC协议(UDP实现可靠传输),解决TCP队头阻塞。
2. DNS域名系统
- 核心功能:将域名(如`www.example.com`)解析为IP地址。
- 解析流程(以访问`www.example.com`为例):
1. 浏览器缓存 → 本地Host文件 → 本地DNS服务器(递归查询)。
2. 本地DNS依次迭代查询:根DNS → 顶级域(`.com`)→ 权威DNS(`example.com`)。
- 记录类型:
- `A`记录(IPv4地址)、`AAAA`记录(IPv6地址)。
- `CNAME`记录(别名,如将`blog.example.com`指向`cdn.example.net`)。
- `MX`记录(邮件服务器地址,优先级控制)。
- 优化技术:
- DNS缓存:各级DNS服务器缓存结果(TTL控制过期时间)。
- 负载均衡:通过DNS轮询或地理就近解析(如CDN)。
3. 电子邮件协议
SMTP(简单邮件传输协议)
- 功能:发送邮件(客户端→服务器、服务器间传输)。
- 端口:25(明文)、465(SMTPS加密)。
- 限制:仅支持7位ASCII文本(依赖MIME协议编码附件)。
POP3(邮局协议第3版)
- 功能:从服务器下载邮件到本地后删除服务器副本。
- 端口:110(明文)、995(POP3S加密)。
- 缺点:无法多设备同步(邮件被下载后删除)。
- IMAP(互联网消息访问协议)
- 功能:在服务器管理邮件(创建文件夹、标记已读等)。
- 端口:143(明文)、993(IMAPS加密)。
- 优势:支持多设备同步,适合长期存储。
4. FTP文件传输协议
- 双连接模式:
- 控制连接:TCP 21端口(传输命令,如`USER`、`PASS`)。
- 数据连接:
- 主动模式:服务器主动从20端口连接客户端(可能被防火墙阻止)。
- 被动模式:客户端连接服务器的随机端口(更安全)。
- 传输模式:
- ASCII模式:文本文件(自动转换换行符)。
- 二进制模式:图像、压缩文件等(原样传输)。
5. P2P与CDN
- P2P技术(如BitTorrent):
- Tracker服务器:协调节点,记录文件分布信息。
- 分片传输:文件被分割为多个块,节点间相互交换。
- CDN(内容分发网络):
- 原理:将静态资源(如图片、视频)缓存到边缘节点。
- 工作流程:通过DNS解析将用户请求导向最近的CDN节点。
三、高级技术与安全
1. 实时通信协议
- WebSocket:基于HTTP Upgrade头建立全双工连接(如在线聊天室)。
- MQTT:轻量级发布/订阅模型(物联网场景)。
2. 身份验证与授权
- OAuth 2.0:第三方应用授权(如“用微信登录”)。
- JWT(JSON Web Token):自包含Token,避免Session存储。
3. Web安全威胁与防护
- XSS(跨站脚本攻击):过滤用户输入,启用Content-Security-Policy。
- CSRF(跨站请求伪造):使用Token验证请求来源。
- 中间人攻击:强制HTTPS,HSTS头部防止降级。
4. 缓存优化策略
- 浏览器缓存:`Cache-Control`(max-age)、`ETag`(资源指纹)。
- CDN缓存:缓存静态资源,减少源站压力。
四、协议选择与设计原则
1. 关键性能指标
- 带宽:影响传输速率(如视频流需要高带宽)。
- 延迟:实时应用(如在线游戏)要求低延迟。
- 抖动:数据包到达时间波动(影响语音通话质量)。
2. 协议选择场景
- 可靠性优先:选择TCP(如HTTP、SMTP)。
- 实时性优先:选择UDP(如DNS、QUIC)。
- 穿透防火墙:基于HTTP的隧道技术(如WebSocket)。
五、学习工具与实验建议
1. 抓包分析:使用Wireshark观察HTTP请求、DNS查询报文。
2. 动手实验:
- 搭建HTTP服务器(如Nginx),配置缓存策略。
- 编写简单的SMTP客户端发送邮件。
3. 在线工具:
- DNS查询:`dig`命令或在线DNS工具(如https://dnschecker.org)。
- HTTPS证书检查:SSL Labs(https://ssllabs.com)。
传输层
一、传输层核心功能
核心作用
端到端通信:为不同主机上的应用进程提供逻辑通信(区别于网络层的“主机到主机”通信)。
多路复用与分解:通过端口号(Port)区分同一主机上的不同应用进程。
可靠性保障(仅TCP):确保数据无差错、不丢失、不重复、按序到达。
核心协议
TCP(传输控制协议):面向连接、可靠传输、流量控制、拥塞控制。
UDP(用户数据报协议):无连接、不可靠传输、低延迟、无拥塞控制。
二、TCP协议详解
1. TCP核心特性
面向连接:通信前需通过三次握手建立连接,通信后通过四次挥手释放连接。
可靠传输:通过确认应答(ACK)、超时重传、滑动窗口等机制实现。
全双工通信:双方均可同时发送和接收数据。
面向字节流:数据被视为无结构的字节序列(需应用层处理消息边界)。
2. TCP报文格式
3. TCP连接管理
三次握手建立连接:
客户端 → 服务器: SYN=1, seq=x
服务器 → 客户端: SYN=1, ACK=1, seq=y, ack=x+1
客户端 → 服务器: ACK=1, seq=x+1, ack=y+1
目的:协商初始序列号,防止历史连接干扰。
四次挥手释放连接:
主动关闭方 → 被动关闭方: FIN=1, seq=u
被动关闭方 → 主动关闭方: ACK=1, ack=u+1
被动关闭方 → 主动关闭方: FIN=1, seq=v, ACK=1, ack=u+1
主动关闭方 → 被动关闭方: ACK=1, seq=u+1, ack=v+1
TIME_WAIT状态:主动关闭方等待2MSL(最大报文段生存时间),确保对方收到ACK。
4. TCP可靠性机制
确认应答(ACK):接收方每收到一个报文段,必须返回ACK(可累积确认)。
超时重传:发送方未收到ACK时,重传数据(动态计算超时时间RTO)。
滑动窗口协议:
发送窗口:允许未确认的连续字节范围。
接收窗口:根据缓冲区剩余空间动态调整(流量控制)。
5. TCP流量控制
机制:通过接收方的 窗口大小 字段动态调整发送速率。
零窗口探测:当接收方窗口为0时,发送方定期发送探测报文。
6. TCP拥塞控制
核心目标:避免网络过载,实现公平性。
四大算法:
慢启动(Slow Start):窗口大小从1 MSS(最大报文段)开始指数增长。
拥塞避免(Congestion Avoidance):窗口线性增长(每RTT增加1 MSS)。
快重传(Fast Retransmit):收到3个重复ACK时立即重传,无需等待超时。
快恢复(Fast Recovery):重传后窗口减半,直接进入拥塞避免阶段。
拥塞窗口(cwnd):动态调整发送速率,实际窗口取 min(cwnd, 接收方窗口) 。
三、UDP协议详解
1. UDP核心特性
无连接:无需建立连接,直接发送数据。
不可靠传输:不保证数据到达、不保证顺序、无重传机制。
简单高效:头部仅8字节(TCP头部至少20字节),无连接管理开销。
2. UDP报文格式
3. UDP适用场景
实时性要求高:如音视频传输(容忍部分丢失,但要求低延迟)。
简单查询/响应:如DNS查询(一次往返即可完成)。
广播/多播:如DHCP、流媒体直播。
四、TCP vs UDP对比
五、端口与套接字
端口号(Port)
范围:16位整数(0~65535)。
分类:
周知端口(0~1023):如HTTP(80)、HTTPS(443)、FTP(21)。
注册端口(1024~49151):由IANA分配给应用服务(如MySQL默认3306)。
动态端口(49152~65535):客户端临时使用。
套接字(Socket)
定义:IP地址 + 端口号(如 192.168.1.100:8080 ),唯一标识网络中的一个端点。
编程接口:如Linux的 sys/socket.h ,支持TCP/UDP通信。
六、高级主题
QUIC协议
基于UDP:在应用层实现可靠传输,解决TCP队头阻塞问题(HTTP/3底层协议)。
特性:0-RTT连接、连接迁移(IP变化时保持连接)。
NAT穿透
问题:内网主机通过NAT访问外网时端口映射问题。
解决方案:STUN协议、TURN中继服务器、ICE框架。
TCP粘包与拆包
原因:TCP面向字节流,不维护消息边界。
解决方案:固定长度、分隔符、长度字段(如HTTP头部 Content-Length )。
七、常见问题
为什么TCP需要三次握手?
防止已失效的连接请求报文突然传送到服务器,导致资源浪费(防止“历史连接”)。
TIME_WAIT状态的作用是什么?
确保最后一个ACK到达对方;等待期间让网络中残余报文失效,避免新旧连接混淆。
UDP如何实现可靠传输?
在应用层添加确认和重传机制(如QUIC、TFTP协议)。