1. 粘包问题与解决方案
TCP 发送多包数据时,数据会发生粘连,一起发送给接收端。解决粘包问题的方法包括:
- 加延时
- 设置数据边界(文件名\r\n)
- 定长发送
2. TCP通信:20字节固定头
TCP 通信使用 20 字节固定头,其中各标志位含义如下:

- 当 ACK 置 1 时,32 位确认序号才能正常使用
- FIN:结束通信
- SYN:请求应答
- RST:重新建立连接
- PSH:发送数据
- ACK:确认应答
- URG:数据加急
3. 三次握手
通信之前使用三次握手建立连接:
- 发送端:SYN
- 接收方:ACK + SYN
- 发送端:ACK
4. 四次挥手
为保证通信完整,使用四次挥手结束连接:
- 主动关闭一端:FIN
- 被动关闭一端:ACK(该端是否数据发送完毕,如果发送完毕会发送ACK+FIN)
- 被动关闭一端:FIN
- 主动关闭一端:ACK
如果双方通信结束(不传输数据),此时四次挥手也可能变成三次挥手。TCP 在四次挥手之前,默认保持 TCP 通信连接的状态。
5. 发送过程中保证数据传输
TCP 通过序号和确认号保证数据传输的完整性:
- 序号:该包数据起始字节的编号(本次发送的序号一般为上次接收到的确认号)
- 确认序号:接收方希望发送方下次发送数据首字节的序号(本次发送的确认序号一般为上次接收到的序号 + 实际接收的长度)
6. 滑动窗口机制
滑动窗口机制保证传输过程中对流量进行控制。通过调节 TCP 包头中的窗口大小来设置发送窗口和接收窗口大小,完成对流量及发送速率的控制。
7. 拥塞控制机制
如果网络拥堵,带宽占用较大,TCP 自带拥塞控制机制来实现数据可靠通信。
8. 掉线检测机制
TCP 三次握手建立后,四次挥手结束前,整个过程通信双方保持连接,可以通过掉线检测机制检测 TCP 连接是否保持。
9. TCP和UDP的区别
UDP特点:
- UDP实现机制简单
- UDP资源开销小
- UDP不安全不可靠
- UDP是无连接的
TCP特点:
- TCP实现机制复杂
- TCP资源开销大
- TCP安全可靠
- TCP是有连接的
11. HTTP协议
HTTP(HyperText Transfer Protocol,超文本传输协议)是基于 TCP 的一种应用层协议,用于规定超文本在网络中传输的流程。HTTP 采用请求/响应模型,客户端发起请求,服务器返回响应。
11.1 HTTP的特点
- 应用层协议:HTTP 建立在 TCP 之上,由 TCP 保证数据传输的可靠性
- 请求/响应模型:客户端发送请求,服务器返回响应
- 无状态:HTTP 本身不保存客户端的状态信息,每次请求相互独立
- 灵活:支持传输任意类型的数据对象,通过 Content-Type 标识数据类型
11.2 C/S模型:客户端/服务器模型
优点:
- 资源在本地,加载速度快
- 无需连接服务器,本地也能工作
缺点:
- 占据本地空间
- 不同的平台,客户端需要单独编写一份代码
- 资源增加时,需要本地升级版本,或打补丁
11.3 B/S模型:浏览器/服务器模型
特点:
- 资源在服务器上
- 新增资源时,无需更新本地的内容
- 每次查看资源,都是从服务器上下载最新资源到本地来查看
- 任何平台都有浏览器,代码可以通用,避免重复开发客户端
11.4 URL:统一资源定位符
URL(Uniform Resource Locator)用于唯一标识互联网上的资源,其基本格式为:协议://主机:端口/路径。各部分含义如下:
- 协议:通过协议从服务器获取该资源,常见为 http 或 https
- 主机:服务器的 IP 地址,通常以域名形式展示,通过 DNS 服务器,将域名转换为其对应的 IP 地址
- 端口:服务器上的应用程序端口号,HTTP 常见端口为 80 或 8080,HTTPS 端口 443
- 路径:资源在服务器中存放的位置
11.5 HTTP传输的过程
- 在浏览器中输入URL
- 浏览器向URL中对应的IP地址和端口发送TCP连接
- 发送HTTP请求报文
- 回复HTTP响应报文
- 断开TCP连接
11.6 HTTP请求报文格式
请求报文由请求行、首部行和实体主体三部分组成。
请求行:方法 + URL + 版本

- GET方法:获取服务器资源
- POST方法:向服务器提交资源(如表单数据)
- PUT方法:向服务器上传资源,用于更新或替换
- DELETE方法:删除服务器上的指定资源
- URL:请求获取/提交资源的路径
- 版本:HTTP/1.1
首部行:根据不同的场景使用不同的首部字段,格式为:首部字段: 值。常见首部字段包括:
- Host:请求的主机名和端口号
- Content-Type:请求体的数据类型(如 application/json)
- Content-Length:请求体的长度
- User-Agent:客户端类型和版本信息
- Cookie:携带的会话标识信息
11.7 HTTP响应报文格式
响应报文由状态行、首部行和实体主体三部分组成。
状态行:版本号 + 状态码 + 状态码描述

- 版本号:HTTP/1.1
- 状态码:响应该次请求的结果
常见状态码分类:
- 1xx:信息提示,表示请求已接收,继续处理
- 2xx:成功,请求已成功处理。如 200 OK 表示请求成功
- 3xx:重定向,需要进一步操作完成请求。如 302 Found 表示资源临时移动
- 4xx:客户端错误,请求有误。如 404 Not Found 表示资源不存在
- 5xx:服务器错误,服务器无法完成请求。如 500 Internal Server Error 表示服务器内部错误
12. 练习:获取实时天气信息
从nowapi网站获取用户配置城市的实时天气信息及未来一周的天气信息,并将其显示在终端屏幕上。
- 使用自己的账号对应的APPKey和Sign标识(必须提前开通天气预报功能)
- 不要使用教室wifi访问nowapi网站,使用手机热点访问,电脑连入手机热点(连入手机热点后,Ubuntu需要重启才能获得手机热点提供的IP地址,需要注意有的手机只允许1个设备连入,咱们现在电脑连入需要2个IP地址,所以需要主机手机可能要修改允许多个设备连入)
- 消化示例代码
- 通过AI或者CSDN学习JSON数据格式,并利用提供的cJSON.c和cJSON.h实现对JSON数据的解析