蟹堡王帝国
计算机网络基础
网络组成部分
- 主机:客户端和服务端
- 路由器
- 网络协议
网络结构:网络的网络
- 比奇堡和小区网络:本地网络
- 北京和上海分店+比奇堡:三个本地网络节点的网络
- 全国通信网络:本地网络的网络
- 区域网络、城域网和广域网
电路交换&分组交换
网络分层
- 快递员(快递公司类比应用层)不关心包裹内容
- 卡车司机(类比传输层)不关心车厢里拉的是什么
- 高速公路(类比网络层)不关心开的什么车
协议
协议的存在依赖于连接 协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作
标头和载荷
小结
- 网络组成部分:由主机、路由器、交换机等组成
- 网络结构:网络的网络
- 信息交换方式:电路交换和分组交换
- 网络分层:分清职责,物理层、链路层、网络层、运输层和应用层
- 网络协议:标头和载荷
web中的网络
http1
HTTP 连接模型
HTTP 1.1:无法多路复用
HTTP 2:帧
帧来带来的好处
- 调整响应传输的优先级
- 头部压缩
- Server Push
HTTP3出现的原因是HTTP2还不够快和解决 HTTP/2 中仍然存在的一些问题和局限性
HTTP3: QUIC
- Quick UDP Internet Connection
- 现存网络设备对TCP和UDP支持已经僵化
- UDP不靠谱(包丢了就不管了,业务给多少数据,它就发多少数据)但是QUIC靠谱
- QU1C可以为除HTP协议以外的应用层协议提供支持
HTTP3: QUIC-1 RTT
HTTP3: QUIC-0 RTT
CDN:你无法突破物理极限的
-
HTTP3快吗?
快!
-
那从美国到中国,HTP3要多久? 150ms!
-
和北京到上海比,还快吗? 好像不够?
CDN:你的钱包够鼓吗?
- 流量多少钱一个G?
- 1块
- 那我在福建给上海的小满发一部100G的小电影大合集得100块钱?
- 对!
- 发10次岂不是要1000块钱?
- 是的!
- 我都发到北京了,小满就不能跟其他同学内部共享一下吗?
CND:你,够强大吗?
- 我们有几台服务器?
- 1台
- 他能抗多少流量?
- 100G!
- 双十一峰值得1000G,扛得住吗?
- 不一定,可能会G....
CDN:DNS劫持
- 域名解析一般由网站自己处理
- 要加速的域名则重定向到CDN厂商的域名解析服务处理(通常不是由自己来解析,而是由CDN厂商来做)
- CDN厂商根据来源确定最近的CDN服务器的IP
- 用户直接访问最近的CDN服务器
WebSocket
- 有状态的持久连接
- 服务端可以主动推送消息
- 用VebSocket发送消息延迟比HTTP低
小结
- HTTP123的演进历史
- CDN解决了HTTP协议之外的问题
- WebSocket从HTTP协议升级而来
网络安全
网络安全:三要素
- 机密性:攻击者无法获知通信内容
- 完整性:攻击者对内容进行篡改时能被发现
- 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
网络安全:对称加密和非对称加密
- 对称加密:加密、解密用同样的密钥
-
- 非对称加密:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
网络安全:密码散列函数(哈希函数)
- 输入:任意长度的内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
网络安全:机密性
- 加密需要加密算法和密钥等信息(统称为秘密信息)
- 网络是明文的,不安全
怎么在不安全的信道交换秘密信息?
网络安全:完整性和身份验证
完整性和身份验证相互关联。
-
蟹老板向银行发起了转账请求
-
银行需要确认
- 这个请求真的是蟹老板发起的
- 目标账户和转账金额没有被篡改
如何实现机密性
- 已知:网络是明文的
- 如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以
- 所以想要通过明文通信交换秘密信息,通信双方需要先有秘密信息,意思就是我们想要通过明文来交换密钥,就得有不会被攻击者知道的秘密信息
如何实现完整性
- 密码散列函数性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
- 有明文m,密码散列函数H
- 计算H(m)获得哈希值h
- 将m和h组合成新信息m+h
- 接收方拆分m+h,重新计算H(m)得h',对比h'和h
- 所以想要实现完整性,通信双方需要先有秘密信息
如何实现身份验证
- 签名:用于鉴别身份和防止伪造
- 非对称加密性质:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
- 蟹老板用自己的私钥对信件进行加密,并发送给海绵宝宝
- 海绵宝宝使用蟹老板的公钥进行解密,获得原文
- 保证了机密性、完整性和身份验证
- 数字签名 对明文内容的哈希值使用私钥加密,验证者使用公钥验证
- 数字签名(指纹)=私钥加密(密码散列函数(原文))
- 消息=原文+数字签名
- 一般用于公开内容(如包含公钥的证书)进行数字签名,防止篡改
- 可信的人验证谢老板的公钥
- 那谁验证可信的人的公钥
- 根证书是证书链的尽头
- 验证的一连串证书成为证书链
- 分发证书、验证证书的基础设施成为pki,PUBLIC key infrastructure
- 所以想要实现身份验证,通信双方需要现有秘密信息,即根证书中的公钥
网络安全:Https
小结
- 网络安全三要素:机密性、完整性和身份验证
- 在没有提前交换秘密信息的前提下,无法在不安全的信道交换秘密信息
- PKI保证了普通用户不需要“面对面”和根证书机构交换根证书
- HTTPS使用PKI完成了除客户端身份验证以外的特性,客户端身份验证靠
- HTTP协议实现