课程名称:计算机网络应用 核心摘要:本节课讲解 HTTP/HTTPS 协议分层结构、TCP 协议的作用与特性、TCB(传输控制块)的概念,以及 TCP 三次握手的完整建立过程,涵盖各阶段的状态变迁与报文字段含义。
- HTTP 协议:应用层协议,正常工作依托于传输层 TCP 协议
- HTTPS 协议:HTTP + 安全层(TLS/SSL),仅比 HTTP 多一层安全层,传输层仍为 TCP
- TLS(Transport Layer Security,传输层安全协议):早期称为 SSL(安全套接字),经迭代升级后更名为 TLS,但业界仍习惯称 SSL
- TCP 协议:传输层、面向连接、安全可靠的协议,保证数据在两端准确且连续地流动
- UDP 协议:传输层、面向无连接、非安全协议,HTTP 未采用
- TCB(Transmission Control Block,传输控制块):封装发给不同设备的数据结构,用于隔离不同连接的数据,避免"串台"
- Socket 三要素:IP 地址、端口号、协议(如 TCP)
| 层级 | HTTP | HTTPS |
|---|
| 应用层 | HTTP | HTTP |
| 安全层 | 无 | TLS / SSL |
| 传输层 | TCP | TCP |
| 特性 | 说明 |
|---|
| 准确性 | 数据不丢包、不遗漏,准确到达对端 |
| 连续性 | 数据拆分为多个包发送,按序号到达后重新组装,保证有序 |
| 组成部分 | 说明 |
|---|
| 双方 Socket 信息 | 包含客户端与服务端的 IP 地址、端口号、协议 |
| 数据缓冲区 | 用于装载待发送/接收的数据 |
TCB 必须在建立连接之前创建完成(分配内存),是三次握手前的准备工作。
| 角色 | 初始状态 | 动作 | 目标状态 |
|---|
| 服务端 | CLOSED | 被动打开,创建 TCB,监听端口 | LISTEN |
| 客户端 | CLOSED | 主动打开,准备发起连接请求 | 准备发送 SYN |
| 步骤 | 方向 | 报文内容 | 发送方状态变化 | 说明 |
|---|
| 第一次握手 | Client → Server | SYN=1, SEQ=x | CLOSED → SYN_SENT | 客户端发起同步请求,初始化序列号 x |
| 第二次握手 | Server → Client | SYN=1, ACK=1, ack=x+1, SEQ=y | LISTEN → SYN_RCVD | 服务端确认客户端请求(ack=x+1),同时发起自己的同步(SEQ=y) |
| 第三次握手 | Client → Server | ACK=1, ack=y+1, SEQ=x+1 | SYN_SENT → ESTABLISHED | 客户端确认服务端的同步请求,连接建立完成 |
| 标志位 | 含义 | 取值说明 |
|---|
| SYN(大写) | 同步位/同步标识 | SYN=1 表示请求建立连接 |
| ACK(大写) | 确认位/确认标识 | ACK=1 表示确认号有效;ACK=0 表示报文不含确认信息 |
| SEQ | 序列号 | 标识本会话报文序号,每次递增 |
| ack(小写) | 确认号 | 值 = 对方上次 SEQ + 1,表示确认收到该序号之前的所有数据 |
- SYN=1 的报文段:不能携带数据,必须携带一个序列号(消耗一个序号)
- 确认号机制:
ack = 对方上次 SEQ + 1,体现"一问一答"的确认关系 - 序列号递增:同一方每次发送的序列号比上次 +1
本节为纯理论讲解,无配置命令操作。
- SYN=1 报文段不能携带数据,但必须消耗一个序列号——常见面试考点
- 大写 ACK vs 小写 ack:大写
ACK=1 是确认标志位,小写 ack=x+1 是确认号,二者含义不同 - TCB 必须在握手前创建:双方都需要做准备工作(分配内存、建立 TCB 数据块)
- 主动打开 vs 被动打开:客户端主动打开发起连接,服务端被动打开进入 LISTEN 状态
- HTTPS = HTTP + TLS:安全层仅多了一层 TLS/SSL,传输层仍依赖 TCP
- TCP 如何保证数据连续性的具体机制(老师提到后续有专门协议讲解)
- 报文头部结构的详细字段格式将在后续课程中讲解