一、TCP 协议(传输控制协议)
1. 特性
- 面向连接:通信双方必须经过 "建立连接→数据传输→释放连接" 三个阶段
- 可靠传输机制:
- 无丢失:通过确认应答和超时重传保证
- 无失序:通过序列号机制保证数据按序到达
- 无差错:通过校验和验证数据完整性
- 无重复:通过序列号去重机制实现
2. 连接建立:“三次握手”
- 具体过程:
- 客户端发送 SYN 报文(SYN=1,seq=x),请求建立连接
- 服务器回复 SYN+ACK 报文(SYN=1,ACK=1,seq=y,ack=x+1),确认请求并同意建立连接
- 客户端发送 ACK 报文(ACK=1,seq=x+1,ack=y+1),确认收到服务器响应,连接正式建立
- 目的:确保双方的发送和接收能力都正常,同步双方的初始序列号
3. 连接终止:“四次挥手”
- 具体过程:
- 客户端发送 FIN 报文(FIN=1,seq=u),请求关闭连接
- 服务器回复 ACK 报文(ACK=1,seq=v,ack=u+1),确认收到关闭请求
- 服务器发送 FIN 报文(FIN=1,ACK=1,seq=w,ack=u+1),表示准备关闭
- 客户端回复 ACK 报文(ACK=1,seq=u+1,ack=w+1),确认关闭,连接终止
- 特点:服务器通常需要先处理完数据再发送 FIN,因此需要四次交互
4. TCP报文

标志位 | 英文全称 | 含义 |
---|
URG | Urgent Pointer | 紧急指针有效,指示报文包含紧急数据,应优先处理 |
ACK | Acknowledgment | 确认标志,为 1 时表示确认号字段有效 |
PSH | Push | 推送标志,接收方应立即将数据提交给应用层,而非缓存 |
RST | Reset | 重置连接,用于强制关闭异常连接 |
SYN | Synchronize | 同步序列号,用于建立连接时同步双方序列号 |
FIN | Finish | 结束标志,表示发送方已完成数据发送,请求关闭连接 |
5. 滑动窗口机制
- 定义:接收方通过窗口大小字段告知发送方自己的接收缓冲区大小
- 作用:实现流量控制,防止发送方发送速度过快导致接收方缓冲区溢出
- 窗口大小:16 位字段,最大可表示 65535 字节
- 工作原理:发送方可连续发送窗口大小范围内的数据,无需等待每个数据包的确认,大幅提高传输效率
6. 超时重传机制
- 基本原理:发送方为每个数据包设置超时计时器,若超时未收到确认则重传该数据包
- 超时时间:动态调整,通常为估算的往返时间 (RTT) 的 1.5~2 倍
- 快速重传:当收到 3 个重复的 ACK 时,无需等待超时即重传对应数据包
7. 应用场景
- 要求数据完整性的场景:文件传输(FTP)、电子邮件(SMTP)
- 重要数据交换:银行交易、账户登录(QQ / 微信登录)
- 大量数据传输:网页内容传输(HTTP 基于 TCP)
二、UDP 协议(用户数据报协议)
1. 核心特性
- 无连接:通信前无需建立连接,发送数据后也无需释放连接,类似现实中的邮件投递
- 不可靠传输:
- 不保证数据送达:无确认机制
- 不保证按序到达:无序列号机制
- 可能出现重复:无去重机制
- 数据报传输:以独立的数据报为单位传输,每个数据报包含完整的源和目的地址
2. 首部结构共 8 字节)
字段 | 长度 | 详细说明 |
---|
源端口 | 16 位 | 发送端应用程序的端口号,可选,为 0 时表示不需要回应 |
目的端口 | 16 位 | 接收端应用程序的端口号,必须填写 |
数据长度 | 16 位 | 整个 UDP 数据报的长度(首部 + 数据),最小值为 8(仅首部) |
校验和 | 16 位 | 用于检测 UDP 数据报在传输过程中是否发生错误,覆盖首部和数据部分 |
3. 与 TCP 的对比
特性 | TCP | UDP |
---|
连接性 | 面向连接 | 无连接 |
可靠性 | 可靠传输 | 不可靠传输 |
传输单位 | 字节流 | 数据报 |
首部开销 | 20-60 字节 | 固定 8 字节 |
速度 | 较慢(因可靠性机制) | 较快(无额外开销) |
拥塞控制 | 有 | 无 |
适用场景 | 可靠性优先 | 实时性优先 |
4. 应用场景详解
- 实时通信:QQ / 微信即时消息、语音通话、视频会议(允许偶尔丢失,追求实时性)
- 广播 / 组播:
- 广播:如局域网内的 ARP 协议
- 组播:如视频会议中向多个参与者发送数据
- 实时流媒体:IPTV、在线直播(延迟敏感,可容忍少量数据丢失)
- 简单请求响应:DNS 查询(数据量小,对速度要求高)
- 无线网络:在丢包率较高的无线环境中,重传机制效率低,UDP 更适合
三、HTTP 协议(超文本传输协议)
1. 基本特性
- 应用层协议:基于 TCP 协议实现,属于请求 - 响应式协议
- 无状态:服务器不保留客户端的任何信息,每次请求都是独立的
- 面向文本:所有字段均由 ASCII 码构成,便于人类阅读和调试
- 可扩展:通过头部字段支持扩展功能
2. 实现流程
- 建立 TCP 连接:客户端通过三次握手与服务器建立 TCP 连接
- 发送请求报文:客户端向服务器发送 HTTP 请求
- 处理请求:服务器解析请求,处理业务逻辑
- 返回响应报文:服务器将处理结果封装为响应报文返回
- 关闭连接:根据连接模式决定是否关闭 TCP 连接
- 非持久连接:一次请求 - 响应后关闭连接
- 持久连接:多个请求 - 响应复用同一连接(HTTP/1.1 默认)
3. 请求报文结构

请求行(Method Request-URI HTTP-Version CRLF)
请求头部(Header-Name: Header-Value CRLF)
...(多个头部字段)
空行(CRLF)
请求正文(可选)
- 请求行示例:
GET /index.html HTTP/1.1
4. 响应报文结构
状态行(HTTP-Version Status-Code Reason-Phrase CRLF)
响应头部(Header-Name: Header-Value CRLF)
...(多个头部字段)
空行(CRLF)
响应正文(可选)

5. 常用请求方法
方法 | 功能描述 | 特点 |
---|
GET | 请求获取指定资源 | 参数在 URL 中,长度有限制,不安全 |
POST | 向指定资源提交数据 | 参数在请求体中,长度无限制,相对安全 |
HEAD | 类似 GET,但只返回响应头 | 用于获取资源元信息,不传输正文 |
PUT | 向指定资源上传数据 | 用于创建或替换资源 |
DELETE | 请求删除指定资源 | 永久删除服务器上的资源 |
OPTIONS | 询问服务器支持的方法 | 跨域资源共享 (CORS) 中常用 |
6. 状态码完整分类
类别 | 范围 | 含义 | 典型状态码 |
---|
信息性 | 100-199 | 请求已接收,继续处理 | 100 Continue(继续发送请求体) |
成功 | 200-299 | 请求被成功处理 | 200 OK(成功)、201 Created(创建成功) |
重定向 | 300-399 | 需要进一步操作完成请求 | 301 Moved Permanently(永久重定向)、302 Found(临时重定向) |
客户端错误 | 400-499 | 请求有错误或无法完成 | 400(语法错误)、401(未授权)、403(禁止访问)、404(资源不存在) |
服务器错误 | 500-599 | 服务器未能完成合法请求 | 500(服务器内部错误)、503(服务不可用) |
四、Wireshark 抓包工具
1. 安装与启动
- 安装命令:
sudo apt-get install wireshark
- 启动命令:
sudo wireshark
(需要 root 权限捕获所有数据包)<在终端进行该软件的启动> - 首次启动:会提示是否允许非 root 用户捕获数据包,可根据需要配置
2. 界面组成
- 捕获接口列表:显示可用的网络接口,如 eth0(以太网)、wlan0(无线)、any(所有接口)
- 过滤栏:用于设置捕获或显示过滤条件
- 数据包列表:显示捕获的数据包摘要信息(编号、时间、源地址、目的地址、协议、长度、信息)
- 数据包详情:显示选中数据包的分层详细信息(物理层、数据链路层、网络层、传输层、应用层)
- 数据包原始数据:以十六进制和 ASCII 码显示数据包的原始字节
3. 常用过滤条件
- 按协议过滤:
tcp
:只显示 TCP 数据包udp
:只显示 UDP 数据包http
:只显示 HTTP 数据包
- 按端口过滤:
tcp.port == 80
:显示 TCP 80 端口的数据包udp.port == 53
:显示 UDP 53 端口(DNS)的数据包
- 按 IP 地址过滤:
ip.src == 192.168.1.1
:显示源 IP 为 192.168.1.1 的数据包ip.dst == 192.168.1.1
:显示目的 IP 为 192.168.1.1 的数据包
- 组合过滤:
tcp && ip.src == 192.168.1.100
:源 IP 为 192.168.1.100 的 TCP 数据包http || dns
:显示 HTTP 或 DNS 数据包