1 前言和课程介绍
- 建立对计算机网络的整体认知
- 建立对网络协议分层的认知
- 分析HTTP1、2、3的关系
- 介绍CDN运行的基本原理
- 了解网络安全的最基本原则
分析方法:自底向上,自顶向下
2 蟹堡王帝国
将商店网络与计算机网络进行类比
顾客:客户端
分店:服务端
小区转发点和蟹堡王城市转发分店:路由器
转发表格:网络协议,规定传递格式
3 计算机网络基础
网络组成部分(不完整)
- 主机:客户端和服务端——提供/接收信息
- 路由器——转发信息
- 网络协议——提供统一格式,方便编码和解码
网络结构:网络的网络
-
比奇堡和小区网络:本地网络
-
北京和上海分店+比奇堡:三个本地节点的网络
-
全国通信网络:本地网络的网络
-
区域网络、城域网和广域网
信息交换方式
- 电路交换:在通信双方建立连接后,一直占用通信线路,直到通信结束。
- 分组交换:将数据分成固定长度的数据块,每个数据块都有一个首部,包含了目的地址和源地址等信息。
- 报文交换:将整个报文发送到下一个节点,然后再发送到下一个节点,直到到达目的地。
分组比报文小,因此传输时间更短;分组长度固定,缓冲区容易管理;分组交换可以实现逐段链路的差错控制,传输质量更高;分组交换的传输可靠性更高。
分组交换是最常用的一种方式。
网络分层
为了降低通信协议实现的复杂性,将整个网络的通信功能划分为了多个层次,每个层次完成一定的功能,相互独立,各层之间通过接口进行联系,高层只需要通过与底层的接口就能获得需要的服务。
常用的分层模型有OSI七层模型、TCP/IP四层模型和五层模型。
OSI模型没有被广泛应用,现在大多数计算机网络都采用TCP/IP协议。
| OSI模型 | |
|---|---|
| 应用层 | 为用户提供各种应用服务,如文件传输、电子邮件和远程登陆等。 |
| 表示层 | 负责数据格式转换、加密解密和压缩解压缩等。 |
| 会话层 | 负责建立、管理和终止会话。 |
| 传输层 | 负责向两台主机中进程之间的通信提供可靠的端到端服务,包括流量控制、差错控制和数据重传等。 |
| 网络层 | 负责数据包从源到宿的传输,包括寻址、路由选择和拥塞控制等。 |
| 数据链路层 | 在物理层提供的服务之上,进一步规定了数据传输的格式和传输速率等细节问题。 |
| 物理层 | 规定通信设备的机械、电气特性及传输介质的特性,以明确0、1比特流在传输线上的表示方法。 |
| TCP/IP五层模型 | 常用协议 | |
|---|---|---|
| 应用层 | 为用户提供网络服务 | HTTPS、HTTP、Telnent、FTP、TFTP、DNS、SMTP |
| 传输层 | 提供端到端的数据传输服务 | TCP、UDP |
| 网络层 | 负责数据在网络中的传输,为数据包选择路由和转发 | IP、ICMP、RIP、IGMP、OSPF |
| 数据链路层 | 主要负责数据在物理媒介上传输,将比特流转换成帧,并进行差错控制和流量控制 | 以太网、令牌环、PPP、PPTP、L2TP、ARP、ATMP |
| 物理层 | 数据在物理媒介上传输,将比特流转换成电信号或光信号,并进行创输速率控制 |
TCP/IP五层模型中的应用层对应OSI模型中应用层、表示层、会话层。
TCP/IP协议中的传输层不能保证数据包在该层总是能够安全可靠地传输,而OSI模型可以做到。
- 这是因为TCP/IP协议中的传输层采用的是无连接服务,即在传输数据之前不需要建立连接,也不需要维护连接状态,因此无法保证数据包在该层总是能够安全可靠地传输。而OSI模型中的传输层采用的是面向连接的服务,即在传输数据之前需要建立连接,并维护连接状态,因此可以保证数据包在该层总是能够安全可靠地传输。
协议
协议定义了互联网的通信规则,使不同厂商生产的计算机和网络设备可以互相通信。
协议的存在依赖于连接。
协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作。
标头和载荷
数据包通产由标头和载荷组成
运输信息——标头:通常包含源地址、目的地址、数据类型、校验和等信息
包裹内的东西——载荷:实际传输的数据部分
4 Web中的网络
HTTP协议
一种用于传输超媒体文档(例如HTML)的应用层协议,是浏览器与服务端之间最主要的通信协议,也是互联网上应用最广泛的协议之一,所有的www文件都必须遵守这个标准。
HTTP 1.1
- 高延迟——队头阻塞
- 无状态特性——阻碍交互
- 对连接状态没有记忆能力,没有cookie等机制,每个连接都是一个新的连接,会掉登录态
- 明文传输——不安全性
- 不支持服务端推送
HTTP 2
-
新增特性
- 二进制分帧—HTTP2性能增强的核心
- HTTP/2 采用二进制格式传输数据,而非 HTTP/1 的文本格式,二进制协议解析起来更高效。
- HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。
- 为多路复用提供了底层支持
- 多路复用
- 在一个连接里,客户端和浏览器都可以同时发送多个请求和响应,而不用按照顺序一一对应,这样避免了队头阻塞。
- 帧是最小的数据单位,标识自己属于哪个流,流是多个帧组成的数据流。
- 在一个连接里,客户端和浏览器都可以同时发送多个请求和响应,而不用按照顺序一一对应,这样避免了队头阻塞。
- 头部压缩——解决巨大的HTTP头部
- 使用专门的 HPACK 算法,每次请求和响应只发送差异头部,一般可以达到 50%~90% 的高压缩率。
- 请求优先级——先获取重要数据
- 在网络通道被非关键资源堵塞时,高优先级的请求会被优先处理。
- 服务端推送
- 让服务端主动把资源文件推送给客户端。当然客户端也有权利选择是否接收。
- 提高安全性
- 支持使用 HTTPS 进行加密传输。
- 二进制分帧—HTTP2性能增强的核心
-
缺陷
-
TCP 以及 TCP+TLS 建立连接的延时
- RTT(Round-Trip Time): 往返时延。表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。
- TCP 连接需要和服务器进行三次握手,即消耗完 1.5 个 RTT 之后才能进行数据传输。
-
TCP 的队头阻塞并没有彻底解决
-
多路复用导致服务器压力上升
-
多路复用容易 Timeout
-
HTTP 3
基于UDP 协议的 QUIC (Quick UDP Internet Connection)协议。
- 改进的拥塞控制、可靠传输
- 快速握手
- 可以实现 0-RTT 或者 1-RTT 来建立连接,可以大大提升首次打开页面的速度。
- 集成了 TLS 1.3 加密
- 多路复用
- QUIC 原生实现了多路复用功能,并且传输的单个数据流可以保证有序交付且不会影响其它数据流,这样的技术就解决了前边提到的 TCP 多路复用(HTTP2)存在的问题。
- 连接迁移
CDN
解决HTTP协议以外的问题。
CDN是内容分发网络的缩写,是一种通过在各个地理位置放置节点服务器来提高用户访问速度和内容可用性的技术。
CDN解决了以下问题:
- 减少延迟:CDN可以将内容缓存到全球各地的服务器上,使用户可以从最近的服务器获取内容,从而减少延迟。
- 减轻源服务器负载:CDN可以缓存静态内容,例如HTML页面、CSS、JavaScript、图像和视频等,以便用户可以更快地访问它们。这可以减轻源服务器的负载,从而提高网站的性能。
- 提高可用性:如果源服务器不可用,则CDN可以提供备份内容,以便用户可以继续访问网站。
CDN:DNS劫持
- 域名解析一般由网站自己处理
- 要加速的域名则重定向到CDN厂商的域名解析服务处理
- CDN厂商根据来源确定最近的CDN服务器的IP
- 用户直接访问最近的CDN服务器
WebSocket协议
一种在单个TCP连接上进行全双工通信的协议,通常用于实时Web应用程序,例如在线游戏、聊天应用程序和股票报价应用程序等。
- 有状态的持久连接,允许在客户端和服务器之间进行实时通信,而无需使用轮询或其他技术。
- 服务端可以主动推送消息
- 用WebSocket发送消息延迟比HTTP低
建立在HTTP协议之上,从HTTP协议升级而来
5 网络安全
网络安全三要素
-
机密性:攻击者无法获知通信内容
-
加密需要加密算法和密钥等信息(统称为秘密信息)
-
网络是明文的不安全
怎么在不安全的信道交换秘密信息?
通信双方需要先有秘密信息
-
-
完整性:攻击者对内容进行篡改时能被发现
-
身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
完整性和身份验证是相互关联的
加密方式
- 对称加密:加密、解密用同样的密钥
- 非对称加密:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
密码散列函数(哈希函数)
- 输入:任意长度的内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上时不可能的
- 从一个哈希值是不可能反推出输入的(?)
如何实现机密性
通信双方先有秘密信息
如何实现完整性
使用密码散列函数性质,进行校验
想要实现完整性,通信双方也需要先有秘密信息
如何实现身份验证
-
签名:用于鉴别身份和防止伪造
-
非对称加密性质:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
-
同时满足机密性、完整性和身份验证,但非对称加密的计算效率太低
-
-
数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证
-
数字签名(指纹)=私钥加密(密码散列函数(原文))
-
消息=原文+数字签名
-
一般用于对公开内容(如包含公钥的证书)进行数字签名,防止篡改
可信之人验证公钥,根证书是证书链的尽头,验证的一连串证书称为证书链,分发证书、验证证书的基础设施称为PKI,Public Key Infrastructure
- 所以想要实现身份验证,通信双方需要先有秘密信息,即根证书中的公钥
在没有提前交换秘密信息的前提下,无法在不安全的信道交换秘密信息