http 协议简介

我们在网上冲浪时, 大多时候使用的是https协议. 此处介绍的http协议与https协议的主要区别是: https中的 s 是secure, 即对数据进行安全加密后传输. 剥去安全的内裤, 裸露出来的就是http本体了.

http的中文名叫超文本传输协议, 为什么说是呢? 因为其可以传输除文本外的其他任何信息, 包括但不限于: 图像, 音频, 视频等.

http协议是应用层协议, 即用户可以自由控制协议的内容. 不像tcp/ip协议栈那样, 功能基本已经固定, 修改或扩展功能是比较困难的. 而http协议当然也有自己的规范, 但其扩展性很强. 用户可以自由地在协议上添加自定义的字段, 实现控制逻辑.

历史上, http有多个版本:

  • 0.9 版本只支持二进制的传输
  • 1.0 版本增加对MIME信息的支持
  • 1.1 版本增加: 多层代理, 缓存, 长连接
  • 2.0 版本增加: 多路复用, 压缩 http 头字段, 对请求优先级和服务器推送的支持

http特性:

  • 默认端口: 80
  • 无连接状态

参考

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

网络协议介绍

理解网络协议前, 因该先理解什么是协议? 协议是: 一系列规制, 标准和约定的集合. 协议有两个关键的要素: 语法和语义. 语法解决的是形式的问题; 语义解决的是含义的问题. 而网络协议就是建立在协议的基础上. 网络协议是用于数据传输的, 不仅要包含语法和语义两个要素, 还要解决时序问题. 如果一个数据包延迟到达, 需要合理的机制将数据进行合并. 在时间尺度上, 时序问题可以归结为语法问题, 即在时间上不合语义. 此处单独拿出来讨论. 总结以下, 网络协议包含三要素: 语法, 语义和时序.

网络协议不是一个单一的协议, 而是由多个不同的子协议构成的. 自底向上包括: 数据链路层协议, 网络层协议, 传输成协议, 应用层协议. 各层协议又包含不同的协议. 在编程上, 接触最多的是应用层协议, 如: http, ftp, tftp, rtsp, pop3等. 不同于其他各层协议, 应用层协议可以自定义. 用户可以自定义自己的应用层协议, 来实现很多有趣的功能.

发送一段信息在网络协议栈经过怎样的加工处理呢?

  • 添加应用层协议头
|--------------|------------|
| 应用层协议头 | 发送的信息 |
|--------------|------------|
  • 添加传输层协议头(tcp/udp)
|--------------|------------|
| 传输层协议头 | 上一层信息 |
|--------------|------------|
  • 添加网络层协议头(ip)
|--------------|------------|
| 网络层协议头 | 上一层信息 |
|--------------|------------|
  • 添加数据链路层协议头(mac)
|------------------|------------|
| 数据链路层协议头 | 上一层信息 |
|------------------|------------|

通过物理层的发送设备将数据包发送出去, 通过路由器将数据在网络上转发, 最终到达接收端的主机. 而接收端的主机将接收到的数据包进行一层层的解析, 最终将发送的信息交给应用程序. 应用程序解析应用层协议, 读取真正的数据. 在整个交互的过程中会涉及到很多交互逻辑和错误处理, 此处都没有说, 有机会再写几篇博客简单介绍一下.

最后看一个wireshark抓包的例子:

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.