网络通信协议全解析:HTTP/UDP/TCP核心要点
网络通信协议知识笔记
一、HTTP协议基础
- HTTP(超文本传输协议):属于应用层协议,用于客户端与服务器之间传递文件和数据。
- 超链接与URL:URL(统一资源定位符)本质上通过 socket 通信实现资源访问。
- IP与域名:域名映射到唯一的 IP 地址,用于资源定位。
- 端口号:HTTP 默认端口为 80,HTTPS 为 443,端口固定且协议成熟。
- 资源路径:在 Linux 系统中,资源即文件,路径指向服务器上的具体文件。
- URL 编码与解码:浏览器端采用 urlencode,服务器端使用 urldecode 进行处理。
二、HTTP请求与响应流程
- B/S模式:浏览器(客户端)与服务器进行通信。
- 请求结构:
- 后续:请求报头(属性字段)
- 空行分隔报头与有效载荷
- 数据部分:请求正文
- 状态行
- 响应报头
- 响应正文
- content-Length:响应正文长度
三、HTTP请求方式
- GET:参数通过 URI 提交,长度有限,参数会回显,不适合传递大量或敏感数据。
- POST:参数通过请求正文提交,适合长数据,更加私密,但同样不绝对安全。
- 安全性:HTTP 本身不安全,需结合其他安全机制使用。
四、会话与安全机制
- Cookie:实现免密登录、免密跳转。
- Session:提升安全性,主流方案为 Cookie + Session。
- HTTP微服务接口:采用 RESTful 风格设计。
- HTTP协议特性:无状态、无连接。
五、UDP协议要点
- UDP端口号:采用五元组标识,报头定长,端口号为 16 位。
- 数据报边界:报文间有明确边界,长度确定,面向用户数据报。
六、TCP协议详解
1. 报文结构与序号
- 报文大小:20~60 字节(5~15 个 4 字节块)
- 序号与确认序号:用于乱序处理和去重
2. 标志位功能
- SYN:建立连接
- ACK:确认应答
- FIN:断开连接
- PSH:提示应用程序读取数据
- RST:复位连接
- URG:紧急指针有效
3. 连接建立与断开
- 三次握手:SYN → SYN+ACK → ACK,确保全双工通信及双方意愿
- 四次挥手:双方均发送断开请求和应答,关闭两条信道,实现全双工断开
4. 连接管理与异常处理
- 主动断开方进入 TIME_WAIT,等待残留报文消散
- setsockopt() 可设置 SO_REUSEADDR,允许端口复用
- 半连接:关闭读/写实现单双工通信
七、TCP数据传输与控制
1. 丢包与重传
- 丢包类型:数据包丢失、应答丢失
- 超时重传与快重传机制,序号去重
- 滑动窗口:流量控制,窗口大小决定一次可发送数据量
2. 滑动窗口机制
- start=确认序号,end=start+win
- 窗口调整灵活,可为0但不能向左移动
- 自动重传与快重传配合提升效率
3. 流量与拥塞控制
- 16位窗口大小,窗口扩大因子
- 拥塞窗口算法:慢启动(指数增长)、线性增长(加法增大),临界值 ssthresh 初始值为16
- 滑动窗口=min(对方win, 拥塞窗口),动态调整发送速率
4. 延迟应答与粘包问题
- 延迟应答提升效率
- TCP面向字节流,需协议+序列化/反序列化解决粘包
八、总结与补充
- HTTP、UDP、TCP三大协议各有特点
- TCP通过三次握手和四次挥手保障连接可靠性
- 滑动窗口与拥塞控制提升数据传输效率与安全
- 会话机制(Cookie + Session)用于管理身份和安全
九、HTTPS加密与安全机制
- HTTPS(TLS/SSL):是经过加密和解密的 HTTP。
- 对称加密:加密与解密密钥相同,加密速度快。
- 非对称加密:有两个密钥(公钥和私钥),算法复杂,加密速度慢。使用公钥加密,只能用私钥解密。
- 数据摘要与指纹:形成的数据具有唯一性。
- 只使用对称加密:双方无法同步密钥。
- 一方使用非对称加密:只能解决单向通信安全,运算速度慢。
- 双方都使用非对称加密:先交换公钥,用对方公钥加密,用自己私钥解密,速度慢。
- 非对称加密 + 对称加密:先用非对称加密协商密钥,再用对称加密通信,存在公钥合法性验证问题。
- 非对称加密 + 对称加密 + CA认证:三组密钥,双非一对,提升安全性。
- 签名:数据散列摘要加密后形成签名,与数据一起附加。
- 验证:拆开数据,再散列成摘要,与解密后的摘要对比,判断数据完整性。
- 只有签名者(如 CA 机构)才拥有签名权力。
- 证书:一份明文数据,携带签名信息。