01前言&课程介绍
课程介绍
-
通过一个示例建立对计算机网络的整体认识
-
建立对网络协议分层的认知
-
分析HTP1、2、3的关系
-
介绍CDN运行的基本原理
-
了解网络安全的最基本原侧
分析方法
自底向上
- 从简单开始,逐渐变复杂
- 将模块逐步拼凑成一个系统
自顶向下
- 从复杂开始,逐渐变简单
- 从复杂的系统问题入手,拆分为模块问题
02蟹堡王帝国
你是否看过海绵宝宝呢?现在蟹老板有一个小目标。你是一个军师,需要为他实现这个目标。你执行了一个三步走战略
03网络基础
网络组成部分
- 主机:客户端和服务器(提供信息和接收信息)
- 路由器(转发主机之间的信息)
- 网络协议(负责提供统一的格式,方便路由器和主机对信息进行编码和解码)
网络结构:网络的网络
- 比奇堡和小区网络:本地网络
- 北京和上海分店+比奇堡:三个本地网络节点的网络
- 全国通信网络:本地网络的网络
- 区域网络、城域网和广域网
信息交换方式
- 电路交换
- 分组交换(可以看成传真)
网络分层
- 快递员不关心包裹内容
- 卡车司机不关心车厢里拉的是什么
- 高速公路不关心开的什么车
网络层、运输层和应用层。每一层都有对自身层级逻辑的封装,对于上一层来说相当于一个黑盒子。
网络层相当于高速公路,他不在乎上面跑的是什么车。
运输层相当于一个卡车,不在乎里面运输的是什么,也不关心有没有路可以走。
应用层可以看作是快递公司,不需要操心包裹和卡车怎么运行。
协议
两个实体必须能交换信息,否则没有意义。计算机都是以二进制进行存储数据的。可以类比人类社会中的语言。
标头和载荷
HTTP协议
- HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
- HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的
- 协议: 为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。
HTTP协议示例(第一行)
右边的左半部分是以十六进制展现的结果
HTTP协议示例:链路层-本地帧头部(第二行)
另一个是以ascall码值展现的数据
HTTP协议示例:链路层-IP协议头部(第三行)
HTTP协议示例:运输层-TCP协议头部(第四行)
HTTP协议示例:应用层-HTTP协议头部(第五行)
TCP协议格式
http2重要的一点:在http协议中需要留意的一个重点是http1.1及以前的版本中,头部和载荷是通过换行和回车来划分的
小结
- 网络组成部分:主机、路由器、交换机等组成
- 网络结构:网络的网络
- 信息交换方式:电路交换和分组交换(主要)
- 网络分层:物理层、链路层、网络层、运输层和应用层(分清职责,降低各层的使用成本)
- 网络协议:标头和载荷(每一层的标头和载荷视为这一层的载荷,并添加自己的标头)
04Web中的网络
HTTP1协议
HTTP1.1:无法多路复用
HTTP2:帧
结构图
HTTP2:帧带来的额外好处
- 调整响应传输的优先级
- 头部压缩
- Server Push
HTTP2:对头堵塞,但是在TCP上
- TCP包0:包含了(包含了style.css的第1行内容)的HTTP2的帧
- TCP包1:包含了(包含了main.js的全部内容)的HTTP2的帧
- TCP包2:包含了(包含了style.css的的第2行内容)的HTTP2的帧
- TCP包3:包含了(包含了style.css的的第3行内容)的HTTP2的帧
HTTP2: 3RTT启动
HTTP 3: QUIC
HTTP 3:QUIC-1 RTT
HTTP:QUIC-0 RTT
CDN:你无法突破物理极限的
CDN:你的钱包够鼓吗?
CDN:你,够强大吗?
CDN:最多跳两次
CDN:DNS劫持
WebSocket
小结
- HTTP123的演进历史
- CDN解决了HTTP协议之外的问题
- WebSocket从HTTP协议升级而来
05网络安全
网络安全:三要素
- 机密性:攻击者无法获知通信内容
- 完整性:攻击者对内容进行篡改时能被发现
- 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
网络安全:对称加密和非对称加密
- 对称加密:加密、解密用同样的密钥
- 非对称加密:加密、解密使用不同的密钥(公钥和私钥),而且公钥 加密只能用私钥解密、私钥加密只能用公钥解密
网络安全:密码散列函数(哈希函数)
-
输入:任意长度的内容
-
输出:固定长度的哈希值
-
性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
网络安全:机密性
- 加密需要加密算法和秘钥等信息(统称为秘密信息)
- 网络是明文的,不安全
网络安全:完整性和身份验证
-
蟹老板向银行发起了转账请求
-
银行需要确认
- 这个请求真的是蟹老板发起的
- 目标账户和转账金额没有被篡改
网络安全:如何实现机密性
-
已知:网络是明文的
-
如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以
-
所以想要通过明文通信交换秘密信息,通信双方需要先有秘密信息
网络安全:如何实现完整性
- 密码散列函数性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
- 有明文m,密码散列函数H
- 计算H(m)获得哈希值h
- 将m和h组合成新信息m+h
- 接收方拆分m+h,重新计算H(m)得h',对比h'和h
网络安全:如何实现完整性
- 有明文m,密码散列函数H,以及一个密钥s
- 计算H(m+s)获得哈希值h
- 将m和h组合成新信息m+h
- 接收方拆分m+h,重新计算H(m+s)得h',对比h'和h
- 所以想要实现完整性,通信双方需要先有秘密信息
网络安全:如何实现身份验证
- 签名:用于鉴别身份和防止伪造
- 非对称加密性质:加密、解密使用不同的密钥(公钥和私钥),而且 公钥加密只能用私钥解密、私钥加密只能用公钥解密
- 蟹老板用自己的私钥对信件进行加密,并发送给海绵宝宝
- 海绵宝宝使用蟹老板的公钥进行解密,获得原文
- 保证了机密性、完整性和身份验证
网络安全:如何实现身份验证
- 数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证
- 数字签名(指纹)=私钥加密(密码散列函数(原文))
- 消息=原文+数字签名
- 一般用于对公开内容(如包含公钥的证书)进行数字签名,防止篡改
网络安全:如何实现身份验证
- 可信的人验证蟹老板的公钥
- 那谁验证可信的人的公钥?
- 根证书是证书链的尽头
- 验证的一连串证书称为证书链
- 分发证书、验证证书的基础设施称为PKI,Public Key Infrastructure
- 所以想要实现身份验证,通信双方需要先有秘密信息,即根证书中的公钥
网络安全:HTTPS
把HTTP的明文换成密文,再验证身份,即HTTPS。
HTTPS HTTP TLS TLS=身份验证+加解密 身份验证靠PKI
服务端身份验证靠PKI,客户端身份验证靠HTTP协议。
小结
- 网络安全三要素:机密性、完整性和身份验证
- 在没有提前交换秘密信息的前提下,无法在不安全的信道交换秘密信息
- PKI保证了普通用户不需要“面对面”和根证书机构交换根证书
- HTTPS使用PKI完成了除客户端身份验证以外的特性,客户端身份验证靠
- HTTP协议实现