读书笔记-Web性能权威指南-ing
https://book.douban.com/subject/25856314/
Ch1 延迟与带宽
- 传播延迟: 消息从发送端到接收端需要的时间,是信号传播距离和速度的函数
- 传输延迟: 把消息中的所有比特转移到链路中需要的时间,是消息长度和链路速率的函数
- 处理延迟: 处理分组首部、检查位错误及确定分组目标所需的时间
- 排队延迟: 到来的分组排队等待处理的时间
路由线路侦测: traceroute 原理: 设置 ttl 1, 在第一跳后超时发回 ICMP 超时; 依次类推..
测速 http://speedtest.net
目标:高带宽和低延迟 不能让光线跑得更快, 但可以把距离缩短, 把数据部署到接近客户端的地方
Ch2 TCP的构成
TCP 负责在不可靠的传输信道之上提供可靠的抽象层, 向应用层隐藏了大多数网络通信的复杂细节, 比如丢包重发、按序发送、拥塞控制及避免、数据完整.
HTTP标准并未规定TCP是唯一的传输协议.
TCP 建立连接三次握手, so, 提高TCP应用性能的关键是重用TCP连接.
节点间带宽容量不对称的网络存在”拥塞崩溃”问题, so, TCP引入流量控制/慢启动/拥塞预防.
sysctl net.ipv4.tcp_window_scaling
发送端或接收端超过了未确认的最大数据量, 被迫等待之前分组的ACK, 导致形成数据缺口, => 窗口应该尽量大
往返时间限制最大有效带宽, 进而限制最大有效窗口
等待分组全部到达才能访问数据, 造成队首阻塞.无需按顺序交付数据或能处理分组丢失的应用程序, 以及对延迟或抖动要求很高的应用程序, 最好选择UDP.(语音/游戏)
大多数情况, TCP的瓶颈是延迟, 而非带宽.
TCP调优:
- 把服务器内核升级到最新版本(Linux:3.2+);
- 确保 cwnd 大小为 10;
- 禁用空闲后的慢启动;
- 确保启动窗口缩放;
- 减少传输冗余数据;
- 压缩要传输的数据;
- 把服务器放到离用户近的地方以减少往返时间;
- 尽最大可能重用已经建立的 TCP 连接。
Ch3 UDP的构成
WebRTC基于UDP
- UDP 不保证消息交付
- UDP 不保证交付顺序
- UDP 不跟踪连接状态
- UDP 不需要拥塞控制
TCP 面向字节流; UDP 面向数据报, 不可分片.
NAT穿透: STUN TURN ICE
设计单播UDP的建议条件:
- 应用程序必须容忍各种因特网路径条件;
- 应用程序应该控制传输速度;
- 应用程序应该对所有流量进行拥塞控制;
- 应用程序应该使用与 TCP 相近的带宽;
- 应用程序应该准备基于丢包的重发计数器;
- 应用程序应该不发送大于路径 MTU 的数据报;
- 应用程序应该处理数据报丢失、重复和重排;
- 应用程序应该足够稳定以支持 2 分钟以上的交付延迟;
- 应用程序应该支持 IPv4 UDP 校验和,必须支持 IPv6 校验和;
- 应用程序可以在需要时使用 keep-alive(最小间隔 15 秒)。
Ch4 TLS
HTTP -> TLS -> TCP -> IP -> MAC
第三方监听者只能推断出连接的端点、加密类型,以及发送数据的频率和大致数量,不能实际读取或修改任何数据.
这些新协议一般要依赖于建立 HTTPS 信道,以绕过中间代理,从而实现可靠的部署.
TLS握手(Client 向 Server 发起请求):
- 建立TCP连接(三次握手)
- Client 发送支持的TLS版本和加密方法列表等参数.
- Server 选一个TLS版本, 选一个加密方法, 送回 Client, 附带自己的证书(包含网站信息和公钥).
- Client 验证 Server 的证书. 通过后随机生成一个对称密钥, 用 Server 的公钥加密这个对称密钥, 发给 Server, 附带上 Client 的证书.
- Server 用自己的私钥解密, 得到这个对称密钥, 同时检查哈希完整性, 发送”Finished”消息, TLS通道建成.
- Client 用对称密钥在TLS通道上发送加密信息.
非对称加密: 低效的加密解密(无需协商密钥)/签名认证 对称加密: 高效的加密解密(需要协商密钥) 哈希: 检查一致性
Vhost的HTTPS: SNI
TLS记录协议负责识别不同的消息类型, 消息的安全和完整性. TLS记录限制: TLS记录最大16KB(2^14 byte); 必须收到整条记录才能开始解密和验证.
应该禁用TLS压缩.
Server发送证书时包含中间证书, 减少浏览器一个请求.
HSTS HTTP头 Strict-Transport-Security 从性能角度说,HSTS 通过把责任转 移到客户端,让客户端自动把所有链接重写为 HTTPS,消除了从 HTTP 到 HTTPS 的重定向损失。
Ch5 无线网络
Ch6 WIFI
工作在免许可证的 2.4GHz ISM 频段, 基于 IEEE 802.11
CSMA(Carrier Sense Multiple Access) 载波监听多路访问: 先听后发,边发边听,冲突停发 ,随机延迟后重发. 保证信道利用率, 即冲突最小化, 信道负载需小于10%.
MIMO Gbit/s
你的 802.11g 客户端和路由器的速度可能是 54 Mbit/s,但如果你的邻居也占用了相 同的 Wi-Fi 信道,而且正在实时观看高清视频,那你的带宽就会减至一半,甚至还 不到一半。你的接入点在这里没有发言权,因为这是 Wi-Fi 的功能,而非 bug ! 更糟糕的是,延迟性能也好不到哪去。从客户端到 Wi-Fi 接入点的第一跳需要多长 时间,也是没有保证的。在网络重叠严重的环境下,第一跳所需的时间可能是几十 ms,也可能是几百 ms。因为你需要跟同一信道内的其他无线客户端竞争!
Ch7 移动网络
代 | 数据速率 | 延迟时间 |
---|---|---|
2G | 100~400Kbit/s | 300~1000ms |
3G | 0.5~5Mbit/s | 100~500ms |
4G | 1~50Mbit/s | <100ms |
实践中,在传输大量数据时,如果信号强度足够大,Wi-Fi 通常效率更高。不过, 如果设备经常空闲,则 3G/4G 网络的效率更高。