chaper1.
速度包括延迟和带宽
延迟:传播延迟,传输延迟,处理延迟,排队延迟
排队延迟:当今本地路由器缓冲区很大,导致tcp拥塞预防机制失效,CODEL主动队列管理算法,linux 内核3.5,解决该问题。
传播延迟:当前光纤传播的信息的速度约为20万公里每秒,主要是由一个介质折射率。
"最后一公里问题":用户接入点到运营商的主干路由器,FCC报告光纤入户的平均达到18ms
本地接入速度测试:http://www.speedtest.net/
chaper2
tcp三次握手加速方式:
长连接
tcp快速打开,tcp fast open;google的研究表明:TFO平均降低http事务网络延迟15%,页面加载时间10%以上,linux 内核3.7支持TFO.
流量控制:
1.接收窗口,rwnd,每个ack分组携带相应的最新的rwnd大小。
窗口缩放,开始tcp规范的窗口大小字段16位,最大值为65535字节。TCP Window scaling,在三次握手阶段商量,可以将接受窗口提高至1G。
sysctl net.ipv4.tcp_window_scaling
sysctl -w net.ipv4.tcp_window_scaling=1
2.慢启动
拥塞窗口大小,cwnd, 最开始为1,RFC 2581调整为4,RFC 6928 拥塞窗口调整为10个TCP段。
新tcp连接传输的最大数据量为rwnd和cwnd的最小值
初始阶段连接的带宽受限于cwnd, cwnd达到N个tcp段(1460BYTE)所需时间为:t=rtt*log(N/cwnd);对于短连接,优化CWND对速度提升影响非常明显
慢启动重启:SSR(slow start restart),空闲连接一定时间后重置cwnd大小,验证影响keepalive连接,建议禁用SSR。
sysctl net.ipv4.tcp_slow_start_after_idle
sysctl -w net.ipv4.tcp_slow_start_after_idle=0
3.拥塞预防
tcp依赖丢包来实现拥塞预防
最初的算法,倍减加增,AIMD,该算法比较保守,当前有新的算法,RFC6937,比例降速,PRR,目标是改进丢包后的恢复速度,谷歌的测试,该算法可以将丢包造成的平均连接延迟减少3%~10%
PRR算法是linux 3.2+内核默认的拥塞预防算法
BDP带宽延迟积
发送方和接收方之间的链路上传输的未确认最大数据量,为cwnd和rwnd最小值。
吞吐量受限于窗口和rtt
最优wnd大小=带宽*rtt
服务器调优建议:
1.增到tcp 的初始cwnd
2.禁用慢启动重启
3.开启窗口缩放
4.tcp 快速打开
ss 来查看套接字的各种信息
ss --options --extended --memory --processes --info
chaper3. udp
分组和数据报区别:
分组:任何格式化数据块
数据报:通过不可靠服务传输的分组
私有地址:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
udp与nat设备冲突:
1.连接状态超时删除,tcp和udp都面临类似问题
解决办法:双向keepalive分组,周期性重置nat设备的计时器
2.对于p2p,voip,游戏和文件共享,需要端到端的双向通信,upd方式无法穿透nat设备
解决方案:STUN,TURN,ICE
谷歌实现的基础库:libjingle, 用于gtalk
chaper4
TLS
1.功能:加密,完整性,身份验证
2.TLS握手:6次传输,3倍RTT,包括tcp握手,hello密钥套件协商,密钥生成和验证
对称加密和非对称加密的性能对比:
openssl speed rsa
openssl speed aes
3. SNI 机制,解决server 单ip支持多host https
4.TLS会话恢复机制,复用协商的对称密钥,减少一次rtt,实现机制包括:会话标示符(ID和协商的参数),保存在server端,存储管理瓶颈;会话记录单(服务器密钥加密过的数据),保存在客户端
优化建议:
1.tcp的全部优化办法
2.openssl最新库,性能明显优化
3.尽早完成握手,cdn与客户端建立tls
4.会话缓存和无状态恢复
5.tls记录大小,ipv4 20byte(ipv6 40字节),tcp 20byte(tcp option 40字节),tls记录1420字节比较合适
6.tls压缩,禁用tls协商的压缩选项
7.证书链长度,减少链长度,避免慢启动阶段超过默认拥塞窗口大小,删除不必要证书
8.OCSP封套,证书链包括OCSP响应,让浏览器跳过在线查询
9.HTTP严格传输首部
在线测试:https://www.ssllabs.com/ssltest/
openssl s_client -state -CAfile startssl.ca.crt -connect igvita.com:443
来源:https://www.cnblogs.com/realmeh/p/3691725.html