
- 粘包现象描述
TCP发送多包数据时,由于TCP是流式传输协议,多包数据可能在接收端粘连在一起,无法区分包边界。
- 粘包解决方法
· 加延时:在每包数据发送后加入适当延时,等待接收端处理完毕再发送下一包
· 设置数据边界:在数据包中添加特殊分隔符作为包与包之间的边界标识
· 定长发送:规定每个数据包固定长度,不足时补位,接收端按固定长度截取
第二部分:TCP报文头部结构
- TCP固定头部(20字节)组成
· 16位源端口号:发送端应用程序的端口号
· 16位目的端口号:接收端应用程序的端口号
· 32位序号:标识该数据包数据起始字节的编号
· 32位确认序号:接收方期望下次收到的数据首字节序号
· 4位首部长度:标识TCP头部的长度
· 6位保留字段:预留未使用
· 6个控制标志位
· 16位校验和:校验数据完整性
· 16位紧急指针:配合URG标志使用
- 控制标志位含义
· SYN:请求建立连接,用于三次握手
· ACK:确认应答标志,置1时确认序号字段有效
· FIN:结束通信标志,用于四次挥手
· RST:重置连接标志,用于异常时重新建立连接
· PSH:推送标志,指示接收端尽快将数据交给应用层
· URG:紧急标志,指示紧急指针有效
第三部分:TCP三次握手与四次挥手
- 三次握手建立连接
· 主动端发送SYN请求,进入同步已发送状态
· 被动端收到后回复ACK并发送自己的SYN,进入同步已接收状态
· 主动端收到后回复ACK,双方进入连接已建立状态
- 四次挥手断开连接
· 主动关闭端发送FIN请求,进入FIN等待1状态
· 被动关闭端回复ACK确认,进入关闭等待状态,主动端进入FIN等待2状态
· 被动关闭端数据发送完毕后发送FIN请求,进入最后确认状态
· 主动关闭端回复ACK确认,进入时间等待状态,定时结束后连接彻底关闭
- 特殊情况说明
· 若被动关闭端在收到FIN时已无数据待发送,可同时回复ACK+FIN,四次挥手可能变为三次
· TCP连接保持期间默认维持连接状态,直到挥手结束
第四部分:TCP可靠传输机制
- 序号与确认号机制
· 序号标识本包数据的起始字节编号,保证数据顺序
· 确认号指示期望下次收到的数据首字节序号
· 通过序号和确认号配合,确保数据不重不漏
- 滑动窗口机制
· 用于控制传输流量和发送速率
· 通过窗口大小字段动态调整发送端和接收端的缓冲区大小
· 实现流量控制,防止接收端处理不过来导致丢包
- 拥塞控制机制
· 当网络拥堵、带宽占用较大时自动触发
· 控制发送速率,避免网络过载导致数据丢失
· 保证数据在恶劣网络条件下的可靠通信
- 掉线检测机制
· TCP在连接建立后至断开前持续检测连接状态
· 及时发现对端是否已掉线或不可达
第五部分:TCP与UDP对比总结
UDP特点
· 实现机制简单,头部开销小
· 资源占用少
· 不安全不可靠,无重传和确认机制
· 无连接,无需预先建立通信链路
· 适合实时通信、广播、音视频流等容忍丢包的场景
TCP特点
· 实现机制复杂,头部开销大
· 资源占用多
· 安全可靠,具备确认重传机制
· 面向连接,需三次握手建立连接
· 适合文件传输、Web访问、邮件等对数据完整性要求高的场景
第六部分:HTTP协议概述
- HTTP定义
超文本传输协议,是基于TCP的一种应用层协议,用于规定超文本(网页)在网络中传输的流程和格式。
- C/S模型(客户端/服务器)
· 资源存储在本地客户端
· 加载速度快,无需联网即可工作
· 缺点:占用本地存储空间,不同平台需单独开发客户端,资源更新需升级版本或打补丁
- B/S模型(浏览器/服务器)
· 资源存储在服务器端
· 新增资源无需更新本地内容
· 每次查看从服务器下载最新资源
· 各平台均有浏览器,代码通用,无需重复开发客户端
第七部分:URL统一资源定位符
URL格式组成
· 协议:指定获取资源的协议(http或https)
· 主机:服务器IP地址,通常以域名形式呈现,通过DNS解析为IP地址
· 端口:服务器应用程序端口号(HTTP默认80或8080,HTTPS默认443)
· 路径:资源在服务器中的存放位置
第八部分:HTTP传输过程
· 用户在浏览器中输入URL
· 浏览器向URL对应IP和端口发起TCP连接
· 建立连接后发送HTTP请求报文
· 服务器回复HTTP响应报文
· 响应完毕后断开TCP连接
第九部分:HTTP请求报文格式
- 请求行
· 方法:GET(获取资源)或POST/PUT(提交资源)
· URL:请求资源的路径
· 版本:HTTP/1.1
- 首部行
· 格式为"首部字段名: 值"
· 根据场景使用不同首部字段(如Host、User-Agent、Content-Type等)
- 实体主体
· 通常不使用,POST等方法提交数据时携带
第十部分:HTTP响应报文格式
- 状态行
· 版本号:HTTP/1.1
· 状态码:响应该次请求的结果
· 短语:对状态码的简短文字说明
- 状态码分类
· 1xx:通知信息类,请求已收到或正在处理
· 2xx:成功类,请求被接受并处理完成
· 3xx:重定向类,需进一步操作完成请求
· 4xx:客户端错误类,请求语法错误或无法完成
· 5xx:服务器错误类,服务器处理请求时失效
- 首部行与实体主体
· 首部行包含响应头信息(如Content-Type、Content-Length、Set-Cookie等)
· 实体主体包含实际请求的资源内容(HTML、JSON、图片等)