计算机网络概论
课程内容:
- 建立对计算机网络的整体认识
- 建立对网络协议分层的认知
- HTTP1,2,3的关系
- CDN运行的基本原理
- 网络安全的最基本原理
蟹堡王实例
利用一个生动的例子解释了计算机网络。前期蟹堡王只有靠打电话接外卖的方法进行销售,而且只有章鱼哥可以接到电话,这样会影响效率且浪费资源。不如这样做,实施三步走战略:1.在比奇堡开通外卖2.在北京和上海开分店3.在全国开分店和通信网络。利用转发表格的方法:将顾客作为客户端,分店作为服务端,转发表格为网络协议。
计算机网络基础
组成部分
- 主机:客户端&服务器
- 路由器
- 网络协议
网络结构:网络的网络
- 比奇堡和小区网络:本地网络
- 北京和上海分店+比奇堡:三个本地网络节点的网络
- 全国通信网络:本地网络的网络
- 区域网,城域网和广域网
网络分层
-
物理层(Physical Layer): 物理层负责处理与物理介质(如电缆、光纤等)相关的通信任务,包括数据的比特流传输、信号编码、硬件接口等。在这一层,数据以比特(bit)为单位进行传输。
-
数据链路层(Data Link Layer): 数据链路层负责建立、维护和断开数据链路,以确保从源到目的地的可靠数据传输。此外,数据链路层还负责进行错误检测和流量控制。在这一层,数据以帧(frame)为单位进行传输。
-
网络层(Network Layer): 网络层负责处理网络寻址和路由选择,以确定数据包从源节点到目的节点的最佳路径。网络层使用 IP 地址进行寻址。此外,网络层还负责处理分组和重组数据包。在这一层,数据以数据包(packet)为单位进行传输。
-
传输层(Transport Layer): 传输层负责提供端到端的通信服务,包括数据的分段、传输、重组和确认。传输层还负责处理流量控制和差错控制。常见的传输层协议有 TCP(传输控制协议)和 UDP(用户数据报协议)。
-
会话层(Session Layer): 会话层负责建立、管理和断开网络中的通信会话。会话层通过会话标识符来区分不同的通信会话,以确保数据流向正确的目的地。
-
表示层(Presentation Layer): 表示层负责处理数据的表示和编码问题,以确保发送方和接收方的数据格式兼容。此外,表示层还负责进行数据加密和解密、数据压缩和解压缩等操作。
-
应用层(Application Layer): 应用层是网络协议栈的最顶层,负责处理与特定应用程序相关的通信任务。应用层协议通常与用户直接交互,例如 HTTP(超文本传输协议)、FTP(文件传输协议)和 SMTP(简单邮件传输协议)等。
协议
协议的存在依赖于链接
协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作
TCP协议格式
网络协议
标头和载荷
Web中的网络
HTTP协议
红色是请求
蓝色是响应
HTTP连接模型
队头堵塞
HTTP1.1:无法多路复用 多路复用归功于, HTTP/2 中的 帧(frame)和流(stream)。帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。就是在一个 TCP 连接中可以存在多条流。而Http 1.x 并没有这个标识,每次请求都会建立一次HTTP连接,3次握手4次挥手。
HTTP2的帧
帧来带来的好处
- 调整响应传输的优先级
- 头部压缩
- Server Push
HTTP3出现的原因是HTTP2还不够快和解决 HTTP/2 中仍然存在的一些问题和局限性
HTTP3:QUIC
- Quick UDP Internet Connection
- 现存网络设备对TCP和UDP支持已经僵化
- UDP不靠谱(包丢了就不管了,业务给多少数据,它就发多少数据)但是QUIC靠谱
- QU1C可以为除HTP协议以外的应用层协议提供支持
CDN
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低
网络安全
网络安全的三要素
- 机密性
- 完整性
- 身份验证
网络安全:对称加密和非对称加密
-对称加密:加密,解密用同样的密钥 -非对称加密;加密,解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密,私钥加密只能用公钥解密。
网络安全:密码散列函数(哈希函数)
- 输入:任意长度的内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
网络安全:机密性
- 加密需要加密算法和密钥等信息(统称为秘密信息)
- 网络是明文的,不安全
网络安全:完整性和身份验证
完整性和身份验证相互关联。
实例:
-
蟹老板向银行发起了转账请求
-
银行需要确认
- 这个请求真的是蟹老板发起的
- 目标账户和转账金额没有被篡改
如何实现机密性
- 已知:网络是明文的
- 如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以
- 所以想要通过明文通信交换秘密信息,通信双方需要先有秘密信息,意思就是我们想要通过明文来交换密钥,就得有不会被攻击者知道的秘密信息
如何实现完整性
-
密码散列函数性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
-
有明文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
-
所以想要实现完整性,通信双方需要先有秘密信息。
如何实现身份验证
数字签名是一种基于公钥加密技术的技术,用于保证数据的完整性、不可否认性和真实性。它通常使用非对称加密算法进行实现,如 RSA、DSA 等。
在数字签名中,发送方首先对原始数据进行哈希运算,得到一个唯一的、固定长度的哈希值。然后,发送方使用自己的私钥对这个哈希值进行加密,形成数字签名,并将数字签名和原始数据一起发送给接收方。接收方可以使用发送方的公钥来验证数字签名的真实性和完整性。
验证数字签名的过程如下:
- 接收方对原始数据进行哈希运算,得到一个哈希值。
- 接收方使用发送方的公钥对数字签名进行解密,得到一个哈希值。
- 接收方比较这两个哈希值是否相同,如果相同,则说明数字签名是有效的,原始数据没有被篡改。
这个过程的核心在于发送方使用私钥对哈希值进行加密,只有持有私钥的发送方才能够生成有效的数字签名,因此数字签名可以被认为是发送方对原始数据的“数字指纹”。同时,接收方使用公钥对数字签名进行解密,只有持有公钥的发送方才能够生成有效的数字签名,因此可以保证数字签名的真实性和完整性。
总之,数字签名是一种基于公钥加密技术的技术,用于保证数据的完整性、不可否认性和真实性。它通过对原始数据进行哈希运算和使用发送方的私钥进行加密,生成数字签名,然后通过使用发送方的公钥对数字签名进行解密和验证,保证数据的安全性和可靠性。
- 签名:用于鉴别身份和防止伪造
- 非对称加密性质:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
- 蟹老板用自己的私钥对信件进行加密,并发送给海绵宝宝
- 海绵宝宝使用蟹老板的公钥进行解密,获得原文
- 保证了机密性、完整性和身份验证
证书链示例
HTTPS
-
把HTTP的明文换成密文,在验证身份,即HTTPS。
-
HTTPS=HTTP+TLS
-
TLS=身份验证+加解密
-
身份验证靠PKI
-
服务器身份验证靠PKI,客户端身份验证靠HTTP协议。