《Web性能权威指南》-网络技术概览-读书笔记

注:TCP/IP等知识牵涉面太广,且不说本文,哪怕是原书,限于篇幅,很多知识点都是大致介绍下。如果想深入理解,需要更一步Google相关页面资料。

延迟与带宽

WPO,Web Performance Optimization,Web性能优化。

对所有网络通信都有决定性影响的两个方面:

  • 延迟:分组从信息源发送到目的地所需的时间;
  • 带宽:逻辑或物理通信路径最大的吞吐量。

路由器,负责在客户端和服务器之间转发消息的设备,牵涉影响延迟的4大因素:

  • 传播延迟:消息从发送端到接收端需要的时间,是信号传播距离和速度的函数;
  • 传输延迟:把消息中的所有比特转移到链路中需要的时间,是消息长度和链路速率的函数;
  • 处理延迟:处理分组首部、检查位错误及确定分组目标所需的时间;
  • 排队延迟:到来的分组排队等待处理的时间

以上延迟的时间总和,就是客户端到服务器的总延迟时间:

  • 传播时间取决于距离和信号通过的媒介,另外传播速度通常不超过光速;
  • 传输延迟由传输链路的速率决定,与客户端到服务器的距离无关;
  • 分组(packet)到达路由器,路由器必须检测分组的首部,以确定出站路由,并且还可能对数据进行检查。这些检查通常由硬件完成,相应的延迟一般非常短,但再短也还是存在;
  • 分组到达的速度超过路由器的处理能力,分组就要在入站缓冲区排队,即排队时间。

每个分组在通过网络时都会遇到这样或那样的延迟。发送端与接收端的距离越远,传播时间就越长。一路上经过的路由器越多,每个分组的处理和传输延迟就越多。最后,网络流量越拥挤,分组在入站缓冲区中被延迟的可能性就越大。

CDN(Content Delivery Network,内容分发网络),通过把内容部署在全球各地,让用户从最近的服务器加载内容,大幅降低传播分组的时间。

最后一公里问题:延迟中相当大的一部分往往花在最后几公里,而不是在横跨大洋或大陆时产生。

想提高上网速度,那选择延迟最短的ISP(Internet Service Provider,物流服务提供商,如电信,移动)是最关键的。

网络核心的带宽:光纤通信,通过波分复用(WDM,Wavelength-Division Multiplexing)技术,光纤可以同时传输很多不同波长(信道)的光,因而具有明显的带宽优势。一条光纤连接的总带宽,等于每个信道的数据传输速率乘以可复用的信道数。

网络边缘的带宽:用户可用带宽取决于客户端与目标服务器间最低容量连接;相比于核心光纤通信非常小。Ookla运营的speedtest,相信大家都用过。

高带宽和低延迟:宽度已经足够,性能优化重点是降低延迟。

拓展

Hibernia Express

华为与Hibernia Atlantic合作铺设的一条横跨大西洋,连接伦敦和纽约的近5000km的海底光缆​。唯一目的就是减少城市间的路由,​为金融交易商节省5ms延迟。只服务于金融机构,耗资预计达4亿美元。即1ms延迟成本价是8000万美元。

Bufferbloat

缓冲区爆满,Jim Gettys发明的术语,表述排队延迟影响网络整体性能。

造成这个问题的原因主要是如今市面上的路由器都会配备很大的入站缓冲区,以便不惜一切代价避免丢包(分组)​。可是,这种做法破坏TCP的拥塞预防机制(Congestion Avoidance)​,导致网络中产生较长且可变的延迟时间。

为解决这个问题,有人提出新的CoDel主动队列管理算法,且已经在Linux内核3.5以上版本中实现。

traceroute

Linux平台的网络诊断工具,可以列出分组经过的路由节点,以及它在IP网络中每一跳的延迟。为找到每一跳的节点,它会向目标发送一系列分组,每次发送时的跳数限制都会递增​。在达到跳数限制时,中间的节点会返回ICMP Time Exceeded消息,traceroute根据这个消息可计算出每一跳的延迟。

Windows平台中对应的命令为tracert。

TCP构成

TCP负责在不可靠的传输信道之上提供可靠的抽象层,向应用层隐藏大多数网络通信的复杂细节,如丢包重发、按序发送、拥塞控制及避免、数据完整等。采用TCP数据流可以确保发送的所有字节能够完整地被接收到,且到达客户端的顺序也一样。TCP的目标是精确传送,并没过多顾及时间。

三次握手

在交换应用数据之前,必须就起始分组序列号,以及其他一些连接相关的细节达成一致。
在这里插入图片描述
出于安全考虑,序列号由两端随机生成:

  • SYN:Synchronize Sequence Numbers,同步序列编号。客户端选择一个随机序列号x,并发送一个SYN分组,其中可能还包括其他TCP标志和选项。
  • SYN ACK:服务器给x加1,并选择自己的一个随机序列号y,追加自己的标志和选项,然后返回响应。
  • ACK:客户端给x和y加1并发送握手期间的最后一个ACK分组。

三次握手带来的延迟,影响性能,因此需要重用连接。

TFO,TCP Fast Open,TCP快速打开,致力于减少新建TCP连接带来的性能损失。Linux 3.7及之后的内核已经在客户端和服务器中支持TFO。

但是,TFO只能在某些情况下有效:

  • 随同SYN分组一起发送的数据净荷有最大尺寸限制
  • 只能发送某些类型的HTTP请求
  • 由于依赖加密cookie,只能应用于重复的连接。

拥塞预防及控制

拥塞崩溃:可能是往返时间超过所有主机的最大中断间隔,于是相应的主机会在网络中制造越来越多的数据报副本,使得整个网络陷入瘫痪。最终,所有交换节点的缓冲区都将被填满,多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnny233

晚饭能不能加鸡腿就靠你了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值