tcp 和 http 的联系
详细介绍 tcp 和 http 协议的区别和联系
开放系统互联(OSI)
开放系统互联(Open System Interconnection)是国际计算机通信标准, 其中将网络分为 7 层
- 物理层 -> 2. 数据链路层 -> 3. 网络层 -> 4. 传输层 -> 5. 会话层 -> 6. 表示层 -> 7. 应用层
层级 | 协议 | 描述 |
---|---|---|
7 | 应用层 | 主要协议有: http, ftp, dns, ssh 等 |
6 | 表示层 | 将数据转为可理解的语法和语义 |
5 | 会话层 | 维护网络连接状态, 保持会话同步, 有 ssl 协议 |
4 | 传输层 | 提供进程间数据传输服务, 主要有 tcp 和 udp |
3 | 网络层 | 负责将数据独立地从信源发送到信宿, 主要是 IP |
2 | 数据链路层 | 负责将数据封装成适合在网络上传播的帧格式并传输 |
1 | 物理层 | 负责在节点间传播比特流, 即物理传输 |
传输层协议
传输层主要有 tcp 和 udp 两个传输协议
TCP
- 面向连接
- 每一个 tcp 都是一对一的
- 提供可靠交付服务
- 提供全双工通信
- 面向字节流
使用 tcp 协议时, 客户端和服务端之间要先建立一个连接, 在进行实际读写操作, 读写完成后双方不再需要这个连接时, 就会释放这个连接, 建立连接需要三次握手, 释放连接需要四次挥手
UDP
- 无连接
- 尽最大努力交付
- 面向报文
- 无拥塞控制
- 支持一对一, 一对多, 多对一, 多对多
- 首部开销小
三次握手
- 第一次握手, 客户端向服务端发送建立连接的请求报文, 发送后则进入 SYN_SENT 状态
- 第二次握手, 服务端收到请求报文后如果同意连接, 则发送一个确认应答, 随后进入 SYN_RCVD 状态
- 第三次握手, 客户端收到应答报文后, 再向服务端发送一个确认报文, 随后进入 ESTABLISHED 状态, 服务端收到确认报文后也进入 ESTABLISHED 状态
四次挥手
- 第一次挥手, 客户端认为数据发送完成, 则需要向服务端发送释放连接请求
- 第二次挥手, 服务端收到请求后, 会发送一个 ACK 包, 并确认数据是否已传输完毕, 同时进入 CLOSE_WAIT 状态
- 第三次挥手, 服务端确认数据传输完毕, 向客户端发送释放连接请求, 同时进入 LAST_ACK 状态
- 第四次挥手, 客户端收到释放请求后, 向服务端发送一个确认应答并进入 CLOSED 状态, 服务端收到应答后也进入 CLOSED 状态
应用层协议
HTTP
http 是建立在 tcp 之上的应用层协议, 超文本传输协议
http 连接最显著的特点是客户端发送的每次请求都需要服务器回送响应, 在请求结束后, 会主动释放连接.从建立连接到关闭连接的过程称为一次连接.
http1.0 :客户端的每次请求都要求建立一次单独的连接, 在处理完本次请求后, 就自动释放连接.
http1.1 :可以在一次连接中处理多个请求, 并且多个请求可以重叠进行, 不需要等待一个请求结束后就可以再发送一个新的请求
http2.0 :支持多路复用, 一个 TCP 可同时传输多个 http 请求, 头部数据还做了压缩
http3.0 :使用了 QUIC, 开启多个 TCP 连接, 在出现丢包的情况下, 只有丢包的 TCP 等待重传, 剩余的 TCP 连接还可以正常传输数据
HTTP 特性
- 无状态, 不能记忆数据
- 无连接
- 基于请求和响应
- 明文通信
HTTP 的组成
- 请求行: url, method, http 协议和版本
- 请求头: 请求信息组成的键值对
- 空行: 表示请求头结束, 之后的内容是请求体
- 请求体: 数据部分