计算机网络基础
计算机的组成部分:
主机(客户端和服务端 ):负责提供或者接收信息
路由器:转发主机之间的信息
网络协议:提供统一的格式,方便路由器或主机对信息进行编码或解码
网络的结构:网络的网络
信息交换方式:
电路交换:会占线,有较大的资源浪费
分组交换:包满了会丢包(计算机网络中使用)
计算机网络分五层:(目的是让职责分的更清晰)
低到高:物理层、链路层、网络层、运输层和应用层
协议:
协议的存在依赖于连接
协议定义了在两个或多个通信实体之间交换的1报文格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作。
网络协议:标头和载荷 每一层都会将上一层的标头和载荷视为这一层的载荷,并添加自己的标头
web中的网络
HTTP2解决了多路复用的问题,还有队头堵塞
HTTP3的出现是因为HTTP2还不够快
QUIC是Quick UDP Internet Connection的缩写
解决了HTTP队头堵塞的问题
UDP不靠谱(包丢了,UDP不管的;没有顺序保证)但是QUIC靠谱
QUIC可以为除HTTP协议以外的应用层协议提供支持
如何选择CDN服务器?
根据DNS查询来源id的地理位置,确定最近的CDN服务器。实际上地理位置最近但不一定最好,每多一个路由器节点,都需要增加一次转发延时,路由器接收需要时间,处理分组需要时间,转发分组也需要时间。
WebSocket协议(是从HTTP协议升级而来的)
有状态的持久连接
服务端可以主动推送消息
用WebSocket发送消息延迟比HTTP低
建立WebSocket连接需要先建立HTTP协议,在HTTP协议建立的基础上,双方在协商后使用WebSocket进行通信。WebSOcket应用既不需要关心WebSocket连接,也不需要关心如何创建一个可以升级到WebSocket连接的HTTP连接,只需要关心来自服务端的消息以及根据自己的需要发送给服务端的消息即可。
WebSocket应用在建立了WebSocket连接后,完成应用的目的即可。
网络安全
三要素: 机密性(攻击者无法获知通信内容:即使获取消息也无法知道内容)
完整性(攻击者对内容进行篡改时能被发现)(想要实现完整性,通信双方需要先有秘密信息)
身份验证(攻击者无法伪装成通信双方的任意一方与另一方通信)(签名:用于鉴别身份和防止伪造)
完整性和身份验证相互关联。
如何实现身份验证?
数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证
数字签名(指纹)= 私钥加密(密码散列函数(原文))
消息 = 原文 + 数字签名
一般用于对公开内容(如包含公钥的证书)进行数字签名,防止篡改
想要实现身份验证,通信双方需要先有秘密信息,即根证书中的公钥
建立方式:
对称加密(加密、解密用同样的密钥)
非对称加密(加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密)
密码散列函数(哈希函数):
输入:任意长度的内容
输出:固定长度的哈希值
性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的。
为了实现HTTPS,我们需要:
1、使用PKI对服务器提供的证书进行验证
2、使用验证后的证书中的公钥与服务器交换对称加密的算法和密钥
3、使用协商后的对称密钥的算法和密钥对明文进行加密
以上组合保证了HTTPS的安全