1.概述
1.1分析方法
-
自底向上:从简单开始,逐渐复杂;将模块逐步拼凑成一个系统
-
自顶向下:从复杂开始,逐渐简单;将复杂系统问题拆分为模块问题
2.蟹堡王的例子(自底向上)
2.1当前要完成的目标
- 在比奇堡开通外卖
- 在北京和上海开分店
- 在全国开分店并开通外卖
2.2隐性需求
- 蟹老板需要知道分店的销售数据
2.3第一阶段:在比奇堡开通外卖
- 目前问题:章鱼哥在同一时间只能处理一位顾客的信息,即接收信息后还需要整理、确认并记录一遍信息
- 在不增加前台的情况下我们发现,一个外卖流程的成功首先需要顾客具有一样基础能力,即能够联系到蟹堡王,同时提供三样信息:谁吃?吃啥?送到哪里?
- 于是乎我们让珊迪为比奇堡居民提供了传真机,虽然我们单一时间只能打印一张订单,但是我们可以在同一时间接收多个订单。
2.4第二阶段:在北京和上海开分店
- 我们先在两地各开了一家分店后,并建立了直通的通信线路,以此来完成分店与主店之间的信息传递
2.5第三阶段:在全国开分店并开通外卖
- 在我们发现销售量提升后,我们同一地区多开了分店,但这些分店同样需要完成与主店之间的信息传递,为了节约线路成本,我们通过大分店进行中转信息,并记录详细的地址,实现信息的准确传递。
- 随着我们继续的扩张,我们希望在不同地区同样开设分店,为了尽可能节约成本,我们将上海和北京的最大分店作为中转点,所有发往比奇堡的信息都通过这个枢纽进行发送,所有地区的结点都能成为枢纽,减少建设通信线路的成本
2.6小结
-
类似结构
- 顾客:客户端
- 分店:服务端
- 小区转发点和城市转发分店:路由器
- 转发表格:网络协议
-
核心思想
-
信息的准确性和规范性
-
两点之间存在通路
-
多条通路的交点承载能力较强
-
3.计算机网络基础
3.1网络组成部分
-
主机:提供和接收信息
- 客户端
- 服务端
-
路由器:转发主机之间的信息
-
网络协议:统一格式
3.2电路交换&分组交换
-
电路交换
- 需要先建立连接
- 带宽占用
- 资源浪费
-
分组交换
- 不会预留资源
- 队列满后丢弃新的分组
- 报文分组
3.3网络分层
- 物理层->链路层->网络层->运输层->应用层
3.4协议
- 前提:两个实体之间能够相互交换信息
- 协议定义了在两个或多个通信实体之间交换的报文格式和顺序,标准
3.5表头和载荷
-
标头:收发信息
-
载荷:内容
-
http示例
-
null/loopback:链路层-本地帧头部
-
Internet protocol version 6:链路层-IP协议头部
- ip版本
- 源ip地址
- 目标ip地址
-
Transmission control protocol:运输层-TCP协议头部
- 源端口号
- 目标端口号
- 序列号
- 头部长度
- 载荷信息
- 载荷长度信息
-
Hypertext transfer protocol:应用层-HTTP协议头部
- 请求信息get/post
-
-
报文=内容层头+ip协议头+tcp协议头+http协议头+http正文
-
tcp协议格式:网上搜可以找到图
4.Web中的网络
4.1HTTP协议
-
http1.1:无法多路复用
-
http2:将多个请求拆分到帧里面,标识数据包
-
格式
- 第1-3个字节:载荷长度
- 第4字节:类型
- 第5字节:类型对应的标志位
- 第6-9字节:1位保留位,2-32位:流ID
- 随后的8192字节:载荷
-
好处
- 调整响应传输的优先级
- 头部压缩
- Server push
-
仍存在的问题
- 在TCP上队头堵塞
- 3RTT(Round-Trip Time),往返时延。
-
-
http3:quic
- 第一次1RTT
- 将两次握手组合
- 第二次0RTT
4.2CDN
-
物理层面
-
CDN的全称是Content Delivery Network,即内容分发网络。
-
按照地理位置安排服务器的位置
-
DNS劫持
- 域名解析一般由网站自己处理
- 要加速文档域名则重定向到CDN厂商的域名解析服务处理
- CDN厂商根据来源确定最近的CDN服务器的IP
- 用户直接访问最近的CDN服务器
-
拉策略,推策略
4.3WebSocket
-
有状态的持久连接
-
服务端可以主动推送消息
-
用WebSocket发送消息延迟比http低
5.网络安全
-
网络安全三要素
- 机密性:攻击者无法获知通信内容
- 完整性:攻击者对内容进行篡改时能被发现
- 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
-
对称加密和非对称加密
- 对称加密:加密、解密用同样的密钥
- 非对称加密::加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密,私钥加密只能用公钥解密
-
密码散列函数(哈希函数)
- 输入:任意长度的内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
-
机密性
- 加密需要加密算法和密钥
- 网络是明文的
-
完整性和身份验证
-
完整性:双方要具有秘密信息
-
如何实现身份验证
-
非对称加密
-
数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证
- 数字签名=私钥加密
- 消息=原文+数字签名
-
可信行验证
- 根证书,证书链,PKI
-
-
-
Https
- 把明文换成密文,再验证身份,即https
- Https = http + tls
- Tls = 身份验证 + 加解密
- 身份验证靠pki
- 服务端身份验证靠pki,客户端身份验证靠http协议