文章

《计算机网络核心知识》

《计算机网络核心知识》

一、OSI 七层、TCP/IP 五层

网络模型对比

传输层及以下三层共四层协议不可更改,传输层协议之上的三层可以自己定义(统称应用层)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
OSI 七层模型              TCP/IP 五层模型
┌─────────────┐
│  应用层      │           
├─────────────┤           ┌─────────────┐
│  表示层      │           │  应用层      │
├─────────────┤           │             │
│  会话层      │           │             │
├─────────────┤           ├─────────────┤
│  传输层      │           │  传输层      │
├─────────────┤           ├─────────────┤
│  网络层      │           │  网络层      │
├─────────────┤           ├─────────────┤
│  数据链路层   │           │  数据链路层   │
├─────────────┤           ├─────────────┤
│  物理层      │           │  物理层      │
└─────────────┘           └─────────────┘

各层常用协议

网络层次协议/标准说明
应用层HTTP/HTTPS超文本传输协议,用于 Web 浏览
 FTP文件传输协议,用于文件上传下载
 SMTP简单邮件传输协议,用于发送邮件
 POP3/IMAP邮件接收协议
 DNS域名系统,用于域名解析
 Telnet远程登录协议
 SSH安全外壳协议,用于加密远程登录
 DHCP动态主机配置协议,用于自动分配 IP 地址
表示层JPEG图像压缩标准
 MPEG视频压缩标准
 ASCII字符编码标准
 XDR外部数据表示标准
会话层NetBIOS网络基本输入输出系统
 RPC远程过程调用
 SQL结构化查询语言(数据库会话)
传输层TCP传输控制协议,面向连接的可靠传输
 UDP用户数据报协议,无连接的不可靠传输
 SCTP流控制传输协议
网络层IP网际协议(IPv4/IPv6)
 ICMP互联网控制消息协议(如 ping 命令)
 IGMP互联网组管理协议
 ARP地址解析协议,IP 地址转 MAC 地址
 RARP反向地址解析协议
 RIP路由信息协议
 OSPF开放最短路径优先
 BGP边界网关协议
数据链路层Ethernet以太网协议
 PPP点对点协议
 HDLC高级数据链路控制
 VLAN虚拟局域网
 MAC媒体访问控制
物理层IEEE 802.3以太网物理层标准
 IEEE 802.11无线局域网标准(Wi-Fi)
 RS-232串行通信标准
 USB通用串行总线
 传输介质光纤、双绞线、同轴电缆等

各层详解

应用层、表示层、会话层(统称应用层)

特点:

  • 都是基于传输层来扩展的
  • 非必要(类似于传输层提供基础通信,往上三层基于基础通信加格式)
  • 可以自定义协议

传输层(重点⭐️)

作用:侧重于传输,确保传输的数据 100% 正确

协议:

  • TCP:确保数据传输的可靠性
  • UDP:提供无连接的数据传输服务

注意:SSL/TLS 协议位于应用层与传输层之间,为应用层提供加密服务,不属于传输层本身

网络层

作用:整个广域网中的 IP 寻址

数据链路层

作用:保障信号在多设备之间精准传输

特点:

  • 局域网内通信
  • 通过设备 MAC 地址进行寻址

物理层

作用:

  • 保障两个设备之间通信
  • 定义电信号高低电压如何传输

二、TCP/UDP 协议

1. 简介

协议全称特点
TCPTransmission Control Protocol
(传输控制协议)
提供面向连接的,可靠的数据传输服务
UDPUser Datagram Protocol
(用户数据协议)
提供无连接的,尽最大努力的数据传输服务
(不保证数据传输的可靠性)

2. TCP/UDP 区别

特性TCPUDP
连接性面向连接无连接
可靠性可靠传输,使用流量控制和拥塞控制不可靠传输,不使用流量控制和拥塞控制
连接对象只能是一对一通信支持一对一、一对多、多对一和多对多交互通信
传输方式面向字节流面向报文
首部开销首部最小 20 字节,最大 60 字节首部开销小,仅 8 字节
适用场景适用于要求可靠传输的应用
例如:文件传输
适用于实时应用
例如:视频会议、直播

三、TCP 三次握手和四次挥手

1. 三次握手

过程:

  1. 第一次握手:客户端发送带有 SYN 标志的数据包 → 服务端
  2. 第二次握手:服务端发送带有 SYN/ACK 标志的数据包 → 客户端
  3. 第三次握手:客户端发送带有 ACK 标志的数据包 → 服务端

2. 为什么要三次握手?

目的:为了双方有一个可靠的连接(即双方的发送/接收功能都没问题)

详细分析:

步骤过程确认内容
A → B客户端发送 SYN服务端确认:自己接收没问题
A ← B服务端发送 SYN/ACK客户端确认:
1. 自己第一次发送没问题
2. 自己接收没问题
A → B客户端发送 ACK服务端确认:自己上一次发送没问题

结论:至此,双方都确认自己的接收和发送功能都没问题。


3. 四次挥手

过程:

  1. 第一次挥手:客户端发送一个 FIN,用来关闭客户端到服务器的数据传送
  2. 第二次挥手:服务器收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加 1
    • 和 SYN 一样,一个 FIN 将占用一个序号
  3. 第三次挥手:服务器关闭与客户端的连接,发送一个 FIN 给客户端
  4. 第四次挥手:客户端发回 ACK 报文确认,并将确认序号设置为收到序号加 1

4. 为什么要四次挥手?

目的:为了双方都确认自己的断开对方知道了,并且对方的断开自己知道了

详细分析:

步骤过程说明
A → B客户端发送断开请求(FIN)服务端知道了客户端要断开
(需要给客户端回复)
A ← B服务端发送确认(ACK)客户端确认:自己断开请求对方收到了
但客户端不知道服务端要不要断开
只能等服务端发断开消息
A ← B服务端发送断开请求(FIN)客户端知道了服务端要断开
(需要给服务端回复)
A → B客户端发送确认(ACK)服务端确认:自己断开请求对方收到了

结论:至此,双方都断开,并且对方都知道了。


🌰 举个栗子

A 和 B 打电话,通话即将结束后:

  1. A 说:”我没啥要说的了”
  2. B 回答:”我知道了”
  3. 但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话
  4. 于是 B 可能又巴拉巴拉说了一通
  5. 最后 B 说:”我说完了”
  6. A 回答:”知道了”

这样通话才算结束。


四、TCP 协议如何保证可靠传输

TCP 通过以下机制保证可靠传输:

1. 分块

应用数据被分割成 TCP 认为最适合发送的数据块。

2. 编号

TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。

3. 校验和

TCP 将保持它首部和数据的检验和:

  • 这是一个端到端的检验和
  • 目的是检测数据在传输过程中的任何变化
  • 如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段

4. 丢弃重复数据

TCP 的接收端会丢弃重复的数据。

5. 流量控制

机制:TCP 连接的每一方都有固定大小的缓冲空间

作用:

  • TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据
  • 当接收方来不及处理发送方的数据时,能提示发送方降低发送的速率
  • 防止包丢失

实现:TCP 使用的流量控制协议是可变大小的滑动窗口协议

6. 拥塞控制

当网络拥塞时,减少数据的发送。

7. ARQ 协议

基本原理:

  • 每发完一个分组就停止发送,等待对方确认
  • 在收到确认后再发下一个分组

8. 超时重传

机制:

  • 当 TCP 发出一个段后,它启动一个定时器
  • 等待目的端确认收到这个报文段
  • 如果不能及时收到一个确认,将重发这个报文段

五、在浏览器中输入 URL 地址 → 显示主页的过程

完整流程

1. DNS 解析

将域名解析为 IP 地址。

2. 发送 HTTP 请求

  • Cookie 会随着请求发送给服务器

3. TCP 连接

  • 把 HTTP 请求报文分割成数据段,方便传输

4. 服务器处理请求并返回 HTTP 报文

  • 服务器接收请求
  • 处理业务逻辑
  • 返回响应数据

5. 浏览器解析渲染页面

  • 解析 HTML
  • 解析 CSS
  • 执行 JavaScript
  • 渲染页面

6. 连接结束

  • 断开 TCP 连接

GET 请求 vs POST 请求

GET 请求

使用角度:向服务器请求某个资源

特点:

  • ✅ GET 请求通过 URL 地址传输参数
  • ⚠️ 传输数据的大小受到 URL 路径长度的限制
  • 📦 GET 产生一个 TCP 数据包
    • 浏览器会把 http header 和 data 一并发送出去
    • 服务器响应 200(返回数据)

POST 请求

使用角度:向服务器写入某个资源

特点:

  • ✅ POST 通过 request body 传递参数
  • 📦 POST 产生两个 TCP 数据包
    • 浏览器先发送 header,服务器响应 100 continue
    • 浏览器再发送 data,服务器响应 200 ok
  • 🔒 POST 相对来说更安全,因为 GET 参数明文传输在地址栏

六、HTTP 状态码

状态码分类

状态码类别说明
1xxInformational(信息性状态码)接收的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务器错误状态码)服务器处理请求出错

常见状态码

状态码含义
200 OK请求成功
204 No Content请求成功,但响应报文不含实体的主体部分
206 Partial Content进行范围请求成功
301 Moved Permanently永久性重定向
302 Found临时性重定向
303 See Other表示资源存在另一个 URI,应使用 GET 方法获取资源
304 Not Modified资源未修改,可使用缓存
307 Temporary Redirect临时重定向,和 302 含义类似,但是期望客户端保持请求方法不变
400 Bad Request请求报文存在语法错误
401 Unauthorized请求需要有通过 HTTP 认证的认证信息
403 Forbidden请求资源的访问被服务器拒绝
404 Not Found服务器上没有找到请求的资源
500 Internal Server Error服务器端在执行请求时发生了错误
503 Service Unavailable服务器暂时处于超负载或正在进行停机维护,现在无法处理请求

七、HTTP 长连接、短连接

短连接(HTTP/1.0 默认)

特点:

  • 客户端和服务器每进行一次 HTTP 操作,就建立一次连接
  • 任务结束就中断连接

示例场景:

  • 当客户端浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源(如 JavaScript 文件、图像文件、CSS 文件等)
  • 每遇到这样一个 Web 资源,浏览器就会重新建立一个 HTTP 会话

长连接(HTTP/1.1 默认)

特点:

  • 从 HTTP/1.1 起,默认使用长连接
  • 用以保持连接特性

响应头标识:

1
Connection: keep-alive

注意事项:

  • Keep-Alive 不会永久保持连接
  • 它有一个保持时间,可以在不同的服务器软件(如 Apache)中设定这个时间
  • 实现长连接需要客户端和服务端都支持长连接

九、HTTP 是不保存状态的协议,如何保存用户状态?

问题

HTTP 是一种不保存状态,即无状态(stateless)协议。

也就是说 HTTP 协议自身不对请求和响应之间的通信状态进行保存。


解决方案:Session 机制

Session 的主要作用:通过服务端记录用户的状态

工作原理:

  1. 服务端给特定的用户创建特定的 Session
  2. 这样就可以标识这个用户并且跟踪这个用户了
  3. 一般情况下,服务器会在一定时间内保存这个 Session
  4. 过了时间限制,就会销毁这个 Session

Session 存储方式

常用的存储方式:

  • ✅ 内存
  • ✅ 数据库(比如使用内存数据库 Redis 保存)

Session 跟踪方式

原理:

  • 在 Cookie 中附加一个 Session ID 来跟踪

方式 2:URL 重写(Cookie 被禁用时)

原理:

  • 利用 URL 重写把 Session ID 直接附加在 URL 路径的后面

十、Cookie 的作用是什么?和 Session 有什么区别?

作用:一般用来保存用户信息

示例:

  • 登录信息
  • 登录之后可以访问该网站所有页面

安全建议:

  • ⚠️ Cookie 中存储一些敏感信息,不要直接写入 Cookie 中
  • ✅ 最好能将 Cookie 信息加密,然后使用时再去服务器端解密

Session

作用:主要作用就是通过服务端记录用户的状态

典型场景:

  • 购物车:当你要添加商品到购物车的时候,系统不知道是哪个用户操作的
  • 因为 HTTP 协议是无状态的,所以需要 Session 来记录用户状态

特性CookieSession
存储位置保存在客户端(浏览器端)保存在服务器端
安全性相对不安全安全性更高
存储容量单个 Cookie 保存的数据不能超过 4KB理论上无限制(受服务器资源影响)
生命周期可以设置过期时间,长期有效默认会话结束即失效,可设置超时时间

十一、URI 和 URL 的区别

URI(Uniform Resource Identifier)

定义:统一资源标志符

作用:可以唯一标识一个资源


URL(Uniform Resource Location)

定义:统一资源定位符

作用:可以提供该资源的路径

特点:

  • 它是一种具体的 URI
  • URL 可以用来标识一个资源
  • 而且还指明了如何 locate(定位)这个资源

关系

1
2
URI
└── URL(URL 是 URI 的子集)

💡 简单理解:URL 是 URI 的一种实现方式,所有的 URL 都是 URI,但不是所有的 URI 都是 URL。


十二、HTTP 版本对比

1. HTTP 1.0 vs HTTP 1.1

特性HTTP 1.0HTTP 1.1
连接方式默认短连接默认长连接
Host 头不支持必须支持 Host 头域
请求消息中如果没有 Host 头域会报 400 错误
带宽优化不支持断点续传支持只发送 header 信息,节省带宽
缓存处理使用 If-Modified-Since引入了更多的缓存控制策略
如 Entity tag,If-Unmodified-Since 等
错误状态码较少增加了 24 个错误状态码

Host 头的必要性:

  • 现在一个物理机可能有多台虚拟主机
  • 它们共享一个 IP 地址
  • 通过 Host 头来区分访问哪个虚拟主机

2. HTTP 1.x vs HTTP 2.0

多路复用(重要⭐️)

定义:连接共享,即每一个 request 都使用作连接共享机制

优势:

  • 同一个连接可以并发处理多个请求
  • 解决了 HTTP 1.x 的队头阻塞问题

新的二进制格式

HTTP 1.x:解析是基于文本的

HTTP 2.0:

  • 协议解析采用二进制格式
  • 实现方便且健壮

Header 压缩

问题:HTTP 1.x 的 header 带有大量信息,而且每次都要重复发送

解决方案:

  • HTTP 2.0 使用 encoder 来减少需要传输的 header 大小
  • 通讯双方各自 cache 一份 header fields 表
  • 既避免了重复 header 的传输
  • 又减小了需要传输的大小

十三、HTTPS

定义

HTTPS:Hypertext Transfer Protocol Secure(超文本传输安全协议)

组成:

1
HTTPS = HTTP + TLS/SSL

协议栈:

  • HTTPS 经由 HTTP 进行通信
  • 但利用 TLS/SSL 来保证安全
  • HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议
  • SSL/TLS 运行在 TCP 之上

HTTPS 的一次请求流程

sequenceDiagram
    participant 浏览器
    participant DNS服务器
    participant 服务器
    participant CA服务器
    
    浏览器->>DNS服务器: 1. DNS 解析域名
    DNS服务器-->>浏览器: 返回 IP 地址
    
    浏览器->>服务器: 2. 建立 TCP 连接
    服务器-->>浏览器: TCP 连接建立成功
    
    浏览器->>服务器: 3. 请求 TLS/SSL 证书
    服务器-->>浏览器: 返回证书
    
    浏览器->>CA服务器: 4. 验证证书合法性
    CA服务器-->>浏览器: 证书验证通过
    
    浏览器->>浏览器: 5. 通过证书生成对称密钥
    浏览器->>服务器: 6. 用公钥加密对称密钥并发送
    
    服务器->>服务器: 7. 用私钥解密得到对称密钥
    
    浏览器->>服务器: 8. 使用【对称密钥】加密通信
    服务器-->>浏览器: 使用【对称密钥】加密响应

详细步骤说明

1. DNS 解析域名

可以从以下位置获取域名对应的 IP 地址:

  • 浏览器缓存
  • 路由器缓存
  • 交换机缓存
  • DNS 服务器

2. 建立 TCP 连接

浏览器封装一个 HTTP 请求,和服务器建立一个 TCP 连接。

3. 获取 TLS/SSL 证书

浏览器获取到服务器的 TLS 或者说 SSL 证书。

4. 验证证书

去 CA 服务器验证证书的合法性。

💡 注意:CA 已经把根证书存到了我们的操作系统中。

5. 生成对称密钥

浏览器通过证书里面的公钥加密一个对称密钥。

6. 传输加密的对称密钥

将加密后的对称密钥发送给服务器。


7. 服务器解密

服务器收到密文,通过私钥解密得到对称密钥。


8. 加密通信

双方通过对称密钥进行通信与传输数据。


对称加密 vs 非对称加密

对称加密

特点:

  • 密钥只有一个
  • 加密解密为同一个密码
  • 加解密速度快

典型算法:

  • DES
  • AES

非对称加密

特点:

  • 密钥成对出现(公钥 + 私钥)
  • 根据公钥无法推知私钥,根据私钥也无法推知公钥
  • 加密解密使用不同密钥
    • 公钥加密需要私钥解密
    • 私钥加密需要公钥解密
  • 相对对称加密速度较慢

典型算法:

  • RSA
  • DSA

HTTPS 和 HTTP 的区别

特性HTTPHTTPS
传输方式明文传输密文传输
默认端口80443
CA 证书不需要需要 CA 证书验证身份
安全性HTTPHTTPS = HTTP + 加密 + 认证 + 完整性保护
性能较快较慢(需要加密解密)
SEO一般搜索引擎更偏好 HTTPS

📚 参考资料:本文内容基于个人学习笔记整理

本文由作者按照 CC BY 4.0 进行授权