HTTP之一:通识

July 22, 2021

HTTP

Hyper Text Transfer Protocol - 超文本传输协议

应用层协议, 构建在 TCP/IP 协议之上.

  • 请求方: User Agent, 如浏览器、爬虫等
  • 应答方: 服务器, 如 Apache、Nginx 等

CDN

Content Delivery Network - 内容分发网络

应用了 HTTP 协议中的缓存和代理技术, 通过缓存快速响应客户端的请求.

处于请求方(浏览器)和应答方(服务器)之间.

TCP/IP

IP

Internate Protocol, 网络层, 主要目的是解决寻址和路由问题.

通过 IP 地址定位网络节点.

IP 协议:

  • v4: 4 组 8 位地址, 总共 2**32(约42亿) 个可分配地址
  • v6: 8 组 16 位地址, 共 2**128 个可分配地址

TCP

Transmission Control Protocol, 传输控制协议, 传输层.

位于 IP 协议之上, 基于 IP 协议提供可靠的、字节流形式的通信.

传统的互联网: HTTP over TCP/IP

DNS

Domain Name System, 域名系统, 将域名转换成真实 IP.

在 DNS 中, Domain Name/域名 = Host/主机名

核心 DNS, 三层的树状分布式服务:

  • 根域名服务器(Root DNS Server), 管理顶级域名服务器, 返回 com net 等顶级域名服务器的 IP 地址;

    • 全世界共 13 组, 它必须是众所周知的.
  • 顶级域名服务器(Top-level DNS Server), 管理各自顶级域名下的权威域名服务器, 如 com 顶级域名服务器可以返回 [xx.com](http://xx.com) 域名服务器的 IP 地址;
  • 权威域名服务器(Authoritative DNS Server), 管理自己域名下主机的 IP 地址, 如权威域名服务器 [xxx.com](http://xxx.com) 可以返回 [www.xxx.com](http://www.xxx.com) 的 IP 地址.

核心 DNS 系统之外的两个缓存系统:

  • 非权威域名服务器: 大公司、网络运营商的 DNS 服务器, 代理用户访问核心 DNS 并缓存, 如 Google 的“8.8.8.8”
  • 操作系统缓存

    • DNS 缓存
    • hosts 文件

URI/URL

IP 地址可以定位到主机, URI/URL 定位主机里的特定资源.

  • URI: Uniform Resource Identifier, 统一资源标识符
  • URL: Uniform Resource Locator, 统一资源定位符, 俗称的网址

URL 是 URI 的子集, 但二者差异不大, 不用严格区分.

一般的 URI 构成: {协议名}://{主机名}{路径}

HTTPS

HTTP over SSL/TLS , 即运行在 SSL/TLS 之上的 HTTP.

SSL/TLS 是负责加密通信的安全协议, 处于 TCP/IP 之上、HTTP 之下, 也是可靠的传输协议.

HTTPS = HTTP + SSL/TLS + TCP/IP

SSL

Secure Socket Layer, SSL3.0 时改名为 TLS 即 Transport Layer Security, 历史原因习惯称为 SSL/TLS 或 SSL.

SSL 使用了许多密码学成果, 综合了对称加密、非对称加密、摘要研发、数字签名、数字证书等技术, 在不安全的环境中为通信双方创建出一个秘密、安全的传输通道.

Proxy

即代理, 处于 HTTP 的请求方和应答方之间, 可以转发客户端的请求, 也可以转发服务器的应答.

分类:

  • 匿名代理: 完全隐匿被代理的及其
  • 透明代理: 透明开放
  • 正向代理: 靠近客户端, 代表客户端向服务器发送请求
  • 反向代理: 靠近服务端, 代表服务器响应客户端

CDN 就是一种代理, 属于透明代理和反向代理.

代理处于中间层的可以做什么?

  • 负载均衡(集群化)
  • 健康检查(心跳监控服务器)
  • 内容缓存
  • 安全防护(隐匿 IP、限制 IP 或流量)
  • 加密卸载(对外网使用 SSL/TLS 加密, 内网消除加密)
  • 数据过滤(修改请求或响应)

网络分层模型

TCP/IP 四层模型

  • 应用层: HTTP
  • 传输层: TCP/UDP
  • 网络层: IP
  • 链路层: MAC

OSI 七层模型

  • L7: 应用层
  • L6: 表示层
  • L5: 会话层
  • L4: 传输层
  • L3: 网络层
  • L2: 数据链路层
  • L1: 物理层

两种分层模型对比

TCP/IP 是纯软件的栈, 没有最根基的电缆、网卡等物理设备; OSI 在理论层面上描述网络更加详细、完整.

TCP/IP 与 OSI 网络分层模型映射关系

输入网址、按下回车

通过 Wireshark 抓包可验证, 当输入 [localhost](http://localhost) 后:

  1. 浏览器从地址栏(或 DNS 多级缓存)取得服务器的 IP 地址和端口号
  2. 浏览器用 TCP 的三次握手与服务器建立连接
  3. 浏览器向服务器发送 HTTP 请求报文
  4. 服务器向浏览器发送确认(ACK); 处理完后向浏览器返回 HTTP 响应报文
  5. 浏览器接收到之后向服务器发送确认(ACK), 并根据 HTTP 响应渲染页面
  6. 浏览器通过 TCP 四次挥手与服务器断开连接

真实的更复杂的网络:

  • 根据上网方式或网络配置的不同, IP 可能是动态或静态的
  • DNS 除了层层解析给出服务器 IP 之外, 对于静态资源还可能直接给出 CDN 服务器的 IP
  • 目标网站的服务器为了扛住高并发, 内部也极其复杂, 如

    • 入口是负载均衡设备, 如四层 LVS、七层 Nginx
    • 之后是服务器集群: Memory 级缓存(Redis) → Disk 级缓存(Varnish) → 应用服务器(Tomcat、Nodejs、Django) → 数据库

Profile picture

佚树 的个人博客

关于前端、音乐与生活