计算机网络基础
网络组成部分
- 主机:客户端和服务端
- 路由器
- 网络协议
网络协议:网络的网络
协议
协议的存在依赖于连接
协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和接收一条报文或其他事件所采取的动作。一般是二进制。
HTTP模型
- Short-lived connections
- Persistent connection
- HTTP Pipelining 队头阻塞(Head of Line Blocking)
Web中的网络
HTTP1.1 无法多路复用
HTTP2 帧
前三个字节:载荷长度
第四个字节:类型
第五个字节:类型对应的Flags
第六到九个字节:保留位、流ID
随后8192字节:载荷
HTTP2:3RTT启动
帧带来的额外好处
- 调整响应传输的优先级
- 头部压缩
- Server Push
HTTP3 QUIC
Quick UDP Internet Connection
UDP不靠谱但是QUIC靠谱
1 RTT
CDN
DNS劫持
- 域名解析由网站自己处理
- 要加速的域名则重定向到CDN厂商的域名解析服务处理
- CDN厂商根据来源确定最近的CDN服务器的IP
- 用户直接访问最近的CDN服务器
WebSocket
- 有状态的持久连接
- 服务端可以主动推送信息
- 用WebSocket发送信息延迟比HTTP低
服务端代码
const {WebSocketServer} = require('ws');
const wss = new WebSocketServer({port:8080});
wss.on('connetion', function connction(ws) {
ws.on('message', function messsage(data) {
// 打印消息,并发送回服务端
console.log('received: %s', data)
ws.send(data)
})
})
客户端代码
const WebSocket = require('ws');
const ws = new WebSocket('ws://loccalhost:8080');
ws.on('onen', () => {
ws.send('something')
})
ws.on('message', () => {
console.log('received: %s', data)
})
WebSocket从HTTP协议升级而来
网络安全
网络安全三要素
- 机密性
- 完整性
- 身份验证
对称加密
加密、解密用同样的密钥
非对称加密
加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能私钥解密,私钥加密只能用公钥解密。
密码散列函数(哈希函数)
- 输入:任意长度的内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的。
HTTPS
HTTPS = HTTP + TLS
TLS = 身份验证 + 加解密
身份验证靠PKI(Public Key Infrastructure)