Linux网络编程:TCP/UDP与HTTP协议核心笔记
目录
一、TCP粘包问题
TCP是流式传输,发送多包数据时会发生粘包,多条数据合并一起发给接收端。 解决粘包三种方案:
- 加延时;
- 设置数据边界,例如用
\r\n作为数据结束标记; - 定长发送,每次发送固定长度数据包。
二、TCP通信原理
TCP头部20字节固定头部,包含源端口、目的端口、序号、确认序号、标志位、窗口大小、校验和等字段。 标志位含义:
ACK:确认应答,ACK=1时确认序号生效FIN:结束通信SYN:连接请求RST:重置重建连接PSH:推送发送数据URG:紧急加急数据
1.三次握手(建立连接)
通信前建立TCP连接
- 发送端发送
SYN; - 接收端回复
SYN+ACK; - 发送端回复
ACK,连接建立完成。
2.四次挥手(断开连接)
完成通信后释放连接,无数据传输时可简化为三次挥手。
- 主动关闭方发送
FIN; - 被动关闭方回复
ACK; - 被动关闭方数据发送完毕,发送
FIN; - 主动关闭方回复
ACK,连接断开。
3.TCP核心保障机制
- 序号&确认序号:保证数据完整传输。序号为本包数据起始字节编号;确认序号代表接收方期待收到的下一字节序号 = 收到的序号 + 接收数据实际长度。
- 滑动窗口:流量控制,修改头部窗口大小字段,控制发送速率。
- 拥塞控制:网络带宽紧张时,自动调节发包,保障可靠通信。
- 掉线检测:检测长连接是否存活。
三、TCP与UDP对比
UDP(无连接)
- 实现简单,资源开销小
- 无连接,不可靠不安全,不保证数据送达
TCP(面向连接)
- 实现复杂,资源开销大
- 三次握手建立连接、四次挥手断开,安全可靠,保障数据完整有序传输。
四、HTTP协议(基于TCP的应用层协议)
1.两种模型
- C/S客户端/服务器模型 优点:本地资源加载快,断网本地可运行 缺点:占用本地存储空间;不同平台要单独开发客户端;更新需要本地升级。
- B/S浏览器/服务器模型 资源全部放在服务器;新增内容不用更新本地;只要有浏览器就可以访问,跨平台通用。
2.URL统一资源定位符
格式:协议://主机:端口/路径
- 协议:http / https
- 主机:域名/IP,DNS将域名解析成IP地址
- 端口:http默认80、8080;https默认443
- 路径:服务器资源存放位置
3.HTTP完整传输流程
1.浏览器输入URL 2.浏览器和服务器建立TCP连接 3.浏览器发送HTTP请求报文 4.服务器返回HTTP响应报文 5.断开TCP连接
4.HTTP请求报文
- 请求行:请求方法 + URL + HTTP版本
GET:获取服务器资源POST/PUT:向服务器提交数据
- 首部行:
字段名:值格式,多个请求头; CRLF空行分割头部与实体主体;- 实体主体:POST请求存放提交数据,GET一般为空。

5.HTTP响应报文

- 状态行:版本 + 状态码 + 描述短语
- 1xx:通知信息
- 2xx:请求成功
- 3xx:重定向
- 4xx:客户端错误
- 5xx:服务器内部错误
- 响应首部行;
- 实体主体:返回给浏览器的数据内容。