前言
本文是我的计算机网络相关知识的知识备忘,旨在忘记时快速回顾,需要时CV。
本篇涵盖HTTP协议、现代网络协议分层原理、常见应用/传输层协议
内容包含
- HTTP
- 历代HTTP版本
- HTTP响应头
- HTTP状态码
- TCP、UDP
- TLS与SSL
- OSI七层模型
1. OSI七层模型
OSI七层模型概览
| 层级 | 名称 | 作用和典型协议 | 作用 |
|---|---|---|---|
| 7 | 应用层 | HTTP, FTP, SMTP, SSH… | 应用间通讯,例如HTTP(浏览器),SMTP(Email) |
| 6 | 表示层 | TLS/SSL, JPEG, MPEG | 加密(TLS)、图片/视频编码,用于把数据转换成双方看得懂的格式 |
| 5 | 会话层 | RPC, NetBIOS, SMB | 负责建立、管理、终止两台计算机间的连接(通信过程) |
| 4 | 传输层 | TCP, UDP | 数据传输控制,最典型的就是大名鼎鼎的TCP |
| 3 | 网络层 | IP, ICMP, IPv6 | 跨网路寻址,寻找网络间的两台计算机,例如广域网寻找最佳路由建立通讯 |
| 2 | 数据链路层 | Ethernet, PPP, VLAN, ARP | 同一网络下计算机间通讯的链路,例如MAC寻址 |
| 1 | 物理层 | 光纤,网线,电磁波…… | 构成网络的物理设备,传输原始比特流 |
注:TLS 在 OSI 理论上属表示层,但在实际 TCP/IP 架构中常被视为一个介于应用层和传输层之间的独立层次
上面这个表格就是完整的OSI七层模型,OSI(Open System Interconnect)是一个概念性的网络参考模型,由国际标准化组织(ISO)于1985年提出,将网络通信过程分为七个逻辑层,从名字(OSI/开放式系统互连)就能看出,它制定的是一套开放的标准通讯协定,让不同设备、系统能够进行互连。
OSI模型从第 1 层(物理层)开始,它是最基础的层次,模型的底层。模型中的每一层都建立在紧邻的下一层提供的服务之上运行,最终将交付到 第 7 层(应用层),也就是离用户最近的层次。
详细解释
物理层(第1层,Physical Layer)
第一场物理层是模型的起点、最底层。物理层负责在计算机间传输原始比特流,用真实的物理介质传输数据,这一层没有任何判断,仅作为比特流传输。
典型例子就是光纤、网线、无线信号(WiFi和蓝牙)
顺便说一句,WiFi居然都出WiFi 7了(IEEE 802.11be),我现在用的是WiFi 5。
数据链路层(第2层,Data Link Layer)
此层级负责同一网络间的数据传输,比如局域网下使用MAC地址找到隔壁的NAS下载图片、发文档给打印机打印就是在此层上运行的,数据链路层的作用是稳定的把数据包传输到同一网段下的另一台设备。
交换机就是数据链路层的典型代表,A设备向B发送数据,交换机通过MAC寻址找到B,然后把数据丢给B处理
在在TCP/IP模型中第一层和第二层合并为网络接口层,因为物理层和数据链路层密切相关,共同负责数据的物理传输和本地寻址。
网络层(第3层,Network Layer)
网络层负责的是不同局域网之间的数据转发和寻址,能让信息穿越大量中继节点,找到全球任意一台联网设备。最核心的是IP协议、路由选择、分包转发等。
比如我现在要访问1.1.1.1这个IP,数据包在网络层传输,我可以通过tracert命令跟踪路由节点,命令输出为:
C:\Users\Ethaniel>tracert 1.1.1.1
通过最多 30 个跃点跟踪
到 one.one.one.one [1.1.1.1] 的路由:
1 3 ms 3 ms 3 ms 192.168.0.1
2 3 ms 3 ms 3 ms 192.168.1.1
3 9 ms 6 ms 6 ms 100.119.0.1
4 * * * 请求超时。
5 * * * 请求超时。
6 * * * 请求超时。
7 * 18 ms * 202.97.X.X
8 * * * 请求超时。
9 * 85 ms 79 ms 202.97.X.X
10 * * * 请求超时。
11 79 ms 79 ms 79 ms 162.158.160.37
12 64 ms 66 ms 64 ms one.one.one.one [1.1.1.1]
跟踪完成。
可以看到从我的电脑到1.1.1.1要经过12个路由,出国路线是CN2 GT(202.97.X.X是电信CN2骨干网)
请求超时很正常,路由节点设置的原因
传输层(第4层,Transport Layer)
传输层复制处理两个设备间的可靠(或高效,二选一)通信,它有端口、分段/重组、流控、错误检验等机制。
传输层的典型代表是TCP和UDP,为什么说两个设备间通信只能在可靠、高效间二选一?因为协议问题,TCP作为可靠性优先的协议使用三次握手四次挥手,极大程度提高了可靠性,但缺点就是额外开销大,延迟更高;而UDP则是高效优先,什么握手挥手统统没有,一股脑打包数据包发送出去,收没收到不管我的事,用于延迟敏感、小丢包无所谓的场景。
HTTP获取网页内容、电子邮件这种不容差错的场景通常使用TCP(当然有例外,HTTP 3.0是基于UDP QUIC的);直播、实时游戏这种要求高速的则使用UDP(电话卡住了没关系,但对方说一句话五分钟后才能听到就很要命了)
会话层(第5层,Session Layer)
会话层负责建立、管理、终止两个应用进程间的连接(通信过程),常见的协议有SMB之类的网络服务协议
会话层的会话控制能控制传输方式,常见的有:单工、半双工、全双工,单工传输数据只能由一方发给另一方,例如HDMI、收音机、早期电视;半双工能双向传输数据,但不能同时进行,比如对讲机、上古时期的以太网集线器;全双工传输相当于由两个功能完整方向不一致的单工传输组成,能同时收发,比如USB3.0。
同步和恢复这个功能也是由会话层提供的,用于传输数据到一半恢复传输。
表示层(第6层,Presentation Layer)
表示层用于数据的翻译、加密和压缩——确保彼此能够处理数据。例如HTTP数据用TLS加密。
表示层是用于处理数据的,比如解压还原、加密解密,典型例子就是用于加密的TLS。
应用层(第7层,Application Layer)
应用层为七层模型中的最高层,它规定了终端软件如何与网络好好说话,比如浏览器的HTTP、电子邮件的SMTP,各类软件使用此层的协议使用网络。
在TCP/IP模型中应用层通常与表示层、会话层合并为一个单一的层次:应用层
为什么合并OSI的第5、6、7为一层?因为这三层是联系最密切的,比如TLS就需要做到建立安全连接(第五层)、加解密(第六层);HTTP协议规定了HTTP文本(HTML语法),即特定格式(第六层)是专门为特定协议(第七层)服务的。
OSI模型七层和TCP/IP 四层模型对比
| OSI 七层模型 | TCP/IP 四层模型 | 对应的层级编号 |
|---|---|---|
| L5: 会话层 L6: 表示层 L7: 应用层 | 应用层 (Application Layer) | L5,L6,L7三层合并 |
| L4: 传输层 | 传输层 (Transport Layer) | L4 |
| L3: 网络层 | 互联网层 (Internet Layer) | L3 |
| L1: 物理层 L2: 数据链路层 | 网络接口层 (Network Interface Layer) | L1,L2双层合并 |
2. TCP 与 UDP
TCP和UDP作为第四层传输层最出名最常用的两个协议,分别对应可靠传输、高效传输,比如HTTP用TCP,DNS用UDP
| 协议 | 类型 | 发布时间 | 主要特性 | 优点 | 缺点 |
|---|---|---|---|---|---|
| TCP | 传输层协议 | 1974 | 可靠传输、保证顺序、丢包重传 | 可靠 | 时延、连接消耗高 |
| UDP | 传输层协议 | 1980 | 无连接、不保证送到、不重传 | 快、简洁、实时性强 | 不保证可靠性 |
TCP
作为可靠性优先的协议,TCP加入了许多机制,如三次握手、四次挥手,错误恢复与容错、差错检测、流量控制。
三次握手(建立连接):
客户端发送SYN请求(请求建立连接)
服务器收到后回复SYN+ACK包(同意建立,同时应答)
客户端再返回ACK包(确认收到)
连接正式建立
四次挥手(断开连接):
客户端发送FIN包(申请关闭连接)
服务器返回ACK(先确认收到关闭请求)
服务器发送FIN(服务器剩余数据也发完,申请断开)
客户端发ACK(最终确认)
连接安全断开
错误恢复与容错:
错误恢复主要通过超时重传来实现,确保丢失的数据段能够被找回。
- 计时启动: 客户端发送TCP报文段后立即启动重传计时器
- 等待确认: 客户端等待接收方返回该数据段的ACK确认
- 判断丢失并重传: 如果在计时器超时前未收到ACK,客户端认为数据或ACK丢失。
- 操作: 发送方重传该数据段。
差错检测:
差错检测用于发现数据内容在传输过程中是否被破坏或篡改。
- 发送端根据部分数据内容和TCP头部计算一个校验和,并将校验和放置在TCP报文段的头部。
- 接收方收到报文段后,重新计算校验和
- 如果计算结果与报文段中的校验和不匹配,则接收方丢弃该报文段不发送ACK(迫使发送方重传)
流量控制:
流量控制用于协调发送方和接收方的速度,防止网速快的一方将另一方淹没,使用滑动窗口控制。
- 接收方在ACK报文段中包含一个“窗口大小”字段,窗口大小表示接收方当前缓冲区还能容纳多少数据
- 发送方严格遵守这个窗口限制,不发送超出接收方窗口大小的数据,并且根据ACK窗口大小字段动态协调速率
基于上述优点,TCP广泛应用于各种网络通信,比如HTTP、SMTP、FTP、SSH等不容差错的场景。
UDP
TCP协议以可靠性为主,UDP就随便多了,UDP的特点是无连接、无确认、无序列化机制
- 无连接:发送数据前不用花时间握手,直接发,提供目标IP和端口就能扔过去
- 无确认:数据发出不管对面收没收到,丢包不重要
- 无序:收到的包顺序可能和发送顺序不同,排序由应用层负责
优点:
- 简单高效
- 无连接、头部小,占带宽少
- 实时性强
缺点:
- 不保证数据包全部送达,丢包不重传
- 不保证接收到的顺序
基于上述特点,UDP通常应用于需要实时性高的场景,比如实时对战游戏、直播,以及DNS。毕竟都是实时的东西,没有等待重传的必要(难不成还等待重传过去的战局、视频?),
| 特征 | TCP | UDP |
|---|---|---|
| 是否建立连接 | 有(握手/挥手) | 无 |
| 可靠性 | 高,重传纠错 | 无,丢了就丢 |
| 数据包排序 | 自动排序 | 无,应用层处理 |
| 延迟/实时性 | 稍高(握手/流控/等待) | 极低(即发即收 |
| 性能开销 | 稍大(头部、连接、管理等操作多) | 小(几字节头部,无状态) |
| 用于 | 网页、下载文件传输数据 | 直播、电话、DNS、在线游戏 |
3. TLS 与 SSL
SSL与TLS
SSL(Secure Sockets Layer)是最早广泛用于Web安全传输的协议,后续被TLS(Transport Layer Security)取代和升级。
TLS/SSL提供数据加密(防止被截获数据)、身份认证、数据完整性校验,SSL加密是之前使用的加密手段,先已停用被TLS取代,不过SSL证书这个名字倒是遗留下来作为TSL证书的名字了
SSL证书(X.509证书)是数字证书,由权威CA机构签发,负责加密密钥交换及数据传输,不是协议,而是密钥管理和身份标识,CA签名必须预装CA信任链,才会信这个证书。
历代TLS/SSL协议
TLS 各版本核心区别:
| 协议版本 | 发布时间 | 特性 | 特点及与前代关系 | 状态 |
|---|---|---|---|---|
| SSLv2 | 1995 | 最早期加密协议 | 很多严重漏洞 | 已弃用 |
| SSLv3 | 1996 | 加强了安全 | 仍有POODLE漏洞 | 已弃用 |
| TLS 1.0 | 1999 | 本质上是SSL 3.1 | 向后兼容SSL 3,大部分环境停用 | 废弃中 |
| TLS 1.1 | 2006 | 微升级 | 增强算法和协议协商,已极少使用 | 废弃中 |
| TLS 1.2 | 2008 | 主流 | 支持更强的加密单次SHA256等 | 主流 |
| TLS 1.3 | 2018 | 最新标准 | 简化握手步骤,去掉弱算法,前向保密性,不向前兼容 | 高安全 |
TLS 1.3 特点:
- 手续更少,只需要一次或零次往返即可建好加密通道
- 禁用过去的MD5、SHA-1等弱加密,强制高安全算法
- 完全加密握手内容(更难被窃听、注入)
- 前向保密,即使服务器私钥泄露,过去的通信也能保持安全
- 移除旧版特性(不再兼容TLS 1.2的旧加密套件)
4. HTTP
HTTP(HyperText Transfer Protocol)是超文本传输协议,是Web最基础的数据交换标准。它定义的是浏览器、服务器如何请求和响应网页、图片、文件等资源。HTTP属于应用层协议,建立在TCP(或QUIC/UDP)的基础上。
同时HTTP还定义了HTML(HyperText Markup Language/超文本标记语言)这种标记语言用于描述网页结构看,让浏览器可以读取渲染
历代HTTP协议
| 协议 | 发布时间 | 传输层 | 多路复用 | 首部压缩 | 服务器推送 | 队头阻塞 | 加密支持 | 性能 | 优点 | 缺点 |
|---|---|---|---|---|---|---|---|---|---|---|
| HTTP/1.0 | 1996 | TCP | 无 | 无 | 无 | 有 | 无 | 低 | 实现简单 | 连接浪费,缓存机制弱,无host头法区分虚拟主机 |
| HTTP/1.1 | 1997 | TCP | 管道化 | 无 | 无 | 有 | TLS | 中 | 持久连接、管道化、支持虚拟主机、缓存机制丰富 | 队头阻塞,管道化不完善,连接复用有限 |
| HTTP/2 | 2015 | TCP | 有 | HPACK | 有 | 有(TCP级) | TLS | 高 | 多路复用、头部压缩、推送技术提升性能,兼容性好 | 仍基于TCP,TCP层面队头阻塞(丢一个包需等所有流) |
| HTTP/3 | 2022 | UDP/QUIC | 有 | QPACK | 有 | 无 | 内建TLS | 很高 | 基于UDP/QUIC,多路复用无队头阻塞,握手快 | UDP部署对CDN/防火墙要求高,旧设备兼容性待完善 |
各代具体变化详细说明
- HTTP/1.0
- 每次请求时都新建TCP连接,响应后关闭,效率低下
- 支持最基本的GET、POST等操作,简单明文报文格式,功能有限
- 缓存控制不完善、无虚拟主机支持(同IP仅能部署一个网站,无法使用CDN)
- HTTP/1.1
- 默认支持持久连接,同一连接可多次复用,提升效率
- 新增Host头支持虚拟主机,一个IP可承载多个网站
- 引入管道化请求,新增更多请求方法(如PUT、DELETE、OPTIONS)
- 丰富了缓存控制,支持分块传输、断点续传、带宽优化等
- HTTP/2
- 使用二进制分帧协议替换文本,所有报文都被封装为二进制帧
- 核心引入多路复用,同一TCP连接上可并发多请求,减少队头阻塞
- 支持头部压缩(HPACK),带宽更节省
- 引入服务器推送,可提前下发关联资源
- HTTP/3
- 基于UDP的QUIC协议,不再受制于TCP多路复用的队头阻塞
- 连接建立更快(0-RTT/1-RTT握手),自动加密(内建TLS 1.3)
- 客户端可无缝切换网络,丢包恢复、延迟控制性能大幅提升
HTTP状态码全览
HTTP状态码分为五大类,分别是:
- 1XX 信息性响应(Informational)
- 2XX 成功响应(Successful)
- 3xx 重定向响应(Redirection)
- 4xx 客户端错误(Client Error)
- 5xx 服务器错误(Server Error)
| 状态码 | 名称 | 说明 |
|---|---|---|
| 1xx 信息 | ||
| 100 | Continue | 继续,客户端应继续请求 |
| 101 | Switching Protocols | 协议切换(如HTTP升级为WebSocket) |
| 102 | Processing | 正在处理(WebDAV扩展) |
| 103 | Early Hints | 预先提示,如可用于提前推送资源头部 |
| 2xx 成功 | ||
| 200 | OK | 请求成功 |
| 201 | Created | 成功创建新资源 |
| 202 | Accepted | 请求已接收,处理中 |
| 203 | Non-Authoritative Information | 非授权信息,代理返回的修改版本 |
| 204 | No Content | 成功,无响应体 |
| 205 | Reset Content | 成功,请重置表单或视图 |
| 206 | Partial Content | 部分内容(如断点续传分片下载) |
| 207 | Multi-Status | 多状态(WebDAV扩展) |
| 208 | Already Reported | 已报告(WebDAV扩展) |
| 226 | IM Used | 已用IM(Delta编码,RFC3229) |
| 3xx 重定向 | ||
| 300 | Multiple Choices | 多种可选响应 |
| 301 | Moved Permanently | 永久重定向 |
| 302 | Found | 临时重定向 |
| 303 | See Other | 推荐POST提交后跳转的页面,客户端用GET获取 |
| 304 | Not Modified | 客户端缓存未过期,无需传输内容(缓存命中) |
| 305 | Use Proxy | 需代理访问(弃用) |
| 307 | Temporary Redirect | 临时重定向(严格要求用原请求方法) |
| 308 | Permanent Redirect | 永久重定向(严格要求用原请求方法) |
| 4xx 客户端错误 | ||
| 400 | Bad Request | 错误请求,参数、语法错误 |
| 401 | Unauthorized | 未授权/需认证 |
| 402 | Payment Required | 需付费访问(极少用) |
| 403 | Forbidden | 拒绝访问,无权限 |
| 404 | Not Found | 资源不存在 |
| 405 | Method Not Allowed | 方法不允许 |
| 406 | Not Acceptable | 请求资源内容类型客户端不接受 |
| 407 | Proxy Authentication Required | 需代理认证 |
| 408 | Request Timeout | 请求超时 |
| 409 | Conflict | 资源状态与当前请求冲突(如版本冲突) |
| 410 | Gone | 已删除(更绝对的404,用于SEO) |
| 411 | Length Required | 需指定Content-Length头 |
| 412 | Precondition Failed | 前置条件不成立 |
| 413 | Payload Too Large | 请求体过大 |
| 414 | URI Too Long | 请求URI太长 |
| 415 | Unsupported Media Type | 不支持的数据类型 |
| 416 | Range Not Satisfiable | 服务端无法满足Range请求 |
| 417 | Expectation Failed | Expect头字段无法满足 |
| 418 | I’m a teapot | 我是个茶壶(愚人节彩蛋) |
| 421 | Misdirected Request | 请求错发到不合适的服务器 |
| 422 | Unprocessable Entity | 请求格式正确,但语义错误无法遵循(WebDAV扩展) |
| 423 | Locked | 正在访问的资源被锁定(WebDAV扩展) |
| 424 | Failed Dependency | 由于前一个请求失败,请求失败(WebDAV扩展) |
| 425 | Too Early | 服务器不愿意冒险处理可能被重播的请求 |
| 426 | Upgrade Required | 服务器拒绝使用当前协议执行请求需要升级协议 |
| 428 | Precondition Required | 源服务器要求请求是有条件的 |
| 429 | Too Many Requests | 请求过快被速率限制了 |
| 431 | Request Header Fields Too Large | 请求头过大服务器不愿意处理 |
| 451 | Unavailable For Legal Reasons | 因法律要求不可用(内容屏蔽) |
| 5xx 服务器错误 | ||
| 500 | Internal Server Error | 服务器不知道如何处理,服务器崩了 |
| 501 | Not Implemented | 不支持此请求方法 |
| 502 | Bad Gateway | 网关/代理错误,连接上游失败 |
| 503 | Service Unavailable | 服务器没准备好响应请求(宕机、过载或维护) |
| 504 | Gateway Timeout | 网关/代理超时 |
| 505 | HTTP Version Not Supported | 不支持的HTTP协议版本 |
| 506 | Variant Also Negotiates | 服务器存在内部配置错误(协商变体出错) |
| 507 | Insufficient Storage | 存储空间不足(WebDAV扩展) |
| 508 | Loop Detected | 检测到无限循环(WebDAV扩展) |
| 510 | Not Extended | 服务器需要对请求进行进一步扩展才能完成请求 |
| 511 | Network Authentication Required | 客户端需要进行身份验证才能获得网络访问权限 |
注:
- 某些状态码(如207、422、423、424、507等)为WebDAV 扩展。
- 418号为彩蛋。
- 306、402等较少用或保留。
- 428、429、431、451、508等为新标准/现代Web安全或流量控制用途。
- 103 Early Hints、425 Too Early、226 IM Used等为新协议特性,部分环境才支持。
HTTP请求方法
| 方法 | 含义/用途 | 典型应用 |
|---|---|---|
| GET | 获取资源(请求的数据在URL中明文传递) | 网页、图片、接口查询 |
| POST | 提交数据(请求体里发送),服务器会处理数据并返回结果 | 表单提交、登录、注册 |
| PUT | 用于完整地替换/修改指定资源,不存在则创建,幂等 | 资源整体替换、配置写入 |
| PATCH | 对资源的部分内容修改,不是整体替换 | 文档或配置部分更新 |
| DELETE | 删除指定资源,幂等 | 删除数据接口 |
| OPTIONS | 查询服务器支持哪些 HTTP 方法,以及相关功能(如跨域CORS预检) | 前端跨域请求、接口能力测试 |
| HEAD | 请求资源的响应头,不返回正文(内容) | 获取网站元信息 |
| TRACE | 回显服务器收到的请求(调试用),大多服务器禁用 | 调试HTTP中转 |
| CONNECT | 用于代理/隧道,比如HTTPS握手前升级到TCP隧道 | 代理服务器 |
门罗币钱包地址47JGXgtfPvANa9b29RfGEGRpCsK6