https://img1.doubanio.com/lpic/s27249387.jpg

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 发起请求):

  1. 建立TCP连接(三次握手)
  2. Client 发送支持的TLS版本和加密方法列表等参数.
  3. Server 选一个TLS版本, 选一个加密方法, 送回 Client, 附带自己的证书(包含网站信息和公钥).
  4. Client 验证 Server 的证书. 通过后随机生成一个对称密钥, 用 Server 的公钥加密这个对称密钥, 发给 Server, 附带上 Client 的证书.
  5. Server 用自己的私钥解密, 得到这个对称密钥, 同时检查哈希完整性, 发送”Finished”消息, TLS通道建成.
  6. 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 网络的效率更高。

Ch8 移动网络优化建议