0%

tcp 和 http 的联系

tcp 和 http 的联系

详细介绍 tcp 和 http 协议的区别和联系

开放系统互联(OSI)

开放系统互联(Open System Interconnection)是国际计算机通信标准, 其中将网络分为 7 层

  1. 物理层 -> 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

  • 无连接
  • 尽最大努力交付
  • 面向报文
  • 无拥塞控制
  • 支持一对一, 一对多, 多对一, 多对多
  • 首部开销小

三次握手

  1. 第一次握手, 客户端向服务端发送建立连接的请求报文, 发送后则进入 SYN_SENT 状态
  2. 第二次握手, 服务端收到请求报文后如果同意连接, 则发送一个确认应答, 随后进入 SYN_RCVD 状态
  3. 第三次握手, 客户端收到应答报文后, 再向服务端发送一个确认报文, 随后进入 ESTABLISHED 状态, 服务端收到确认报文后也进入 ESTABLISHED 状态

四次挥手

  1. 第一次挥手, 客户端认为数据发送完成, 则需要向服务端发送释放连接请求
  2. 第二次挥手, 服务端收到请求后, 会发送一个 ACK 包, 并确认数据是否已传输完毕, 同时进入 CLOSE_WAIT 状态
  3. 第三次挥手, 服务端确认数据传输完毕, 向客户端发送释放连接请求, 同时进入 LAST_ACK 状态
  4. 第四次挥手, 客户端收到释放请求后, 向服务端发送一个确认应答并进入 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 协议和版本
  • 请求头: 请求信息组成的键值对
  • 空行: 表示请求头结束, 之后的内容是请求体
  • 请求体: 数据部分