拥塞控制

拥塞控制的基本原理
-
监控系统
检测拥塞在什么时候、什么位置发生。
-
把拥塞信息传递到可以采取措施的地方。
-
调整系统的运行方式,消除或缓解拥塞问题。
避免拥塞路径
choke分组
抑制源端的流量(拥塞是因为源端的流量过多)
用 choke packet(阻塞包) 一跳一跳地往回传,让上游把流量降下来
有两种:
只影响源端的 choke packet

逐跳生效的 hop-by-hop choke packet

RED(random early detection)
重要!!!
-
思想: 在缓冲区还没被完全占满之前,就提前、随机地丢弃部分分组。
-
Threshold(阈值):
设置若干队列长度的阈值,用来决定什么时候开始"早丢弃"。
-
How to tell the source about the problem? 如何把拥塞情况告诉源端?
-
发送一个抑制分组(choke packet);
-
或者直接丢掉选中的分组而不显式报告(让上层通过丢包自己察觉)。
-
-
Application 应用场景
-
使用"丢包 → 源端降速"机制的协议,例如 TCP;
-
典型用于有线网络。
-
5.4 服务质量
需求/为了实现良好QoS可以使用的具体技术手段/综合服务/区分服务/标签交换与MPLS
四个 QoS 指标是什么?
-
Reliability 可靠性 :
分组丢不丢、是否出错。对"文件""邮件"这类应用,一点错都不行,所以写 High ;
对语音、视频,偶尔丢一点人耳、眼睛能忍受,所以写 Low。
-
Delay 时延 :
从发送到接收的时间。
-
邮件、文件:慢一点无所谓 → Low;
-
远程登录、语音、视频通话:必须"及时" → High 或 Medium。
-
-
Jitter 抖动 :
分组到达时间的不均匀程度(时延的波动)。
-
文件、邮件:只要最后都到了,不在乎顺不顺畅 → Low;
-
音视频、电话:到达时间忽快忽慢会卡顿、声音不连贯 → High。
-
-
Bandwidth 带宽 :
单位时间内可传多少数据。
-
邮件、登录、语音(压缩后)数据量很小 → Low;
-
文件传输、网页、多媒体尤其是视频 → 需要 Medium 或 High。
-

Techniques for achieving good QoS
(实现良好QoSd的具体技术手段)
- 过量提供资源
做起来简单,现实中常见好用,但是很贵
- 在客户端缓冲
用缓存抹平网络抖动


3.流量整形
两种经典的流量整形算法:
✓ The Leaky Bucket Algorithm 漏桶算法
✓ The Token Bucket Algorithm 令牌桶算法

漏桶算法的两种实现:


在令牌桶约束下,一个流最多可以以"峰值速率 M"连续突发多久
在一个令牌桶参数为 (B, R) 的系统里,如果你想以峰值速率 M 连续发数据,最长只能发 S 秒,超过这个时间桶里的令牌就用完了,之后只能降到 R 附近的平均速率


分组调度
资源预留:
带宽/缓冲区空间,给某些流预留一部分队列/处理器时间,预留处理时间,保证包能被及时转发
调度方法
先来先服务;丢包策略,队列满后把新来的包丢掉;公平队列(不再只有一条队列,而是**每个流/每个连接一条队列,**调度器按某种公平规则在这些队列之间轮流取包发送)

5.5 连接网络
网络如何被连接?
不同网络在很多方面都可能不同,例如:
-
Service offered 服务类型
- 无连接(datagram,像 IP) vs 面向连接(virtual circuit,像 ATM、MPLS)。
-
Addressing 地址方式
- 地址长度不同、是否分层(平lat / 分层 hierarchical),比如以太网 MAC、IP 地址等。
-
Broadcasting 广播能力
- 有的网络支持广播/组播,有的完全不支持。
-
Packet size 分组大小
- 各种网络的最大分组长度(MTU)不同:以太网常见 1500 字节,某些链路更大/更小。
-
Ordering 交付顺序
- 有的保证按顺序交付,有的可能乱序。
-
QoS、Reliability、Security
-
有的提供 QoS 保证、有的没有;
-
丢包率、错误率不同;
-
安全机制、隐私保护、加密能力不同。
-
-
Parameters、Accounting
-
参数:超时值、流规格等都可能不同;
-
计费方式:按连接时间、按分组数、按字节,或干脆不计费。
-
结论:
现实中的网络高度异构,所以要把它们连成一个 Internet,需要一套"统一抽象"和一些"适配手段"。
靠共同网络层IP互联
用一个共同的网络层协议------IP,把底下各种异构链路统一起来。
各种底层网络靠适配器/路由器转换链路层头,IP 层在端到端保持一致。
隧道
(简答题问什么是隧道)
当中间网络根本不支持某协议时,用封装隧道的方式"借道而行":
-
边界路由器给分组套一层中间网络能懂的头;
-
穿过中间后再脱掉,继续用原来的协议


5.6 网络层
网络的设计原则

IP数据报的基本结构
(问你,每个部分结构的含义)
IHL ip header length
头部组成
IP 数据报 = 头部(Header)+ 正文(Payload)
-
头部最少 20 字节,最多可以有"选项"字段,变长;
-
正文里装的是上层数据(通常是 TCP/UDP 报文段)。

-
Version(版本)
4 位,表示 IP 版本。IPv4 的值是 4,IPv6 的是 6。
-
IHL(Internet Header Length,首部长度)
4 位,以 4 字节为单位。
-
最小值 5 → 5×4 = 20 字节(无选项);
-
如果有 Options,就会更大。
-
-
Differentiated Services(区分服务 / TOS)
8 位,用于 QoS 标记:
- 现在主要用里面的 DSCP/ECN 指示优先级、拥塞通知等。
-
Total length(总长度)
16 位,整个 IP 数据报的总长度(头 + 数据),单位是字节,最大 65535。
-
Identification(标识)
16 位,用来标识一个原始数据报。
- 当一个大数据报被分片成多个小片时,这些片的 Identification 相同,方便目的端重组。
-
Flags 标志位 D/F/MF (图里那小灰块 D、M)
一共 3 位:
-
第一位保留;
-
DF (Don't Fragment):不要分片,=1 时禁止中途分片;
-
MF (More Fragments):是否还有后续分片,
-
对于中间片 =1,最后一个片 =0;
-
未分片的数据报 MF=0。
-
-
-
Fragment offset(片偏移)
13 位,表示当前分片在原始数据报中的偏移位置 ,以 8 字节为单位 。
重组时靠它把各个片拼回正确顺序。
-
Time to live(TTL,生存时间)
8 位,最初设计为"秒",实际上基本按"跳数限额"用:
-
每经过一个路由器就减 1;
-
减到 0 时该包被丢弃,并发 ICMP 报文通知源端;
-
用来防止路由环路导致数据报在网内无限循环。
-
-
Protocol(协议号)
8 位,指明 上层使用的协议:
-
6 = TCP
-
17 = UDP
-
1 = ICMP
-
...
目的主机收到 IP 包后,根据这个字段把数据交给对应的传输层模块。
-
-
Header checksum(首部校验和)
16 位,只对 IP 首部做校验(不含数据部分):
-
每到一个路由器,TTL 会减 1,导致首部变动,所以都要重新计算校验和;
-
如果校验错误,说明首部出错,该包被丢弃。
-
-
Source address(源 IP 地址)
32 位,发送方的 IPv4 地址。
-
Destination address(目的 IP 地址)
32 位,接收方的 IPv4 地址。
-
Options(选项,可有可无)
0 个或多个 32 位字:
-
很少在普通网络里用;
-
例如安全选项、路由记录、时间戳等,都在这里。
-
-
Padding(填充)
为了让整个首部长度是 4 字节的整数倍,用 0 填充。
几种Options

-
Security 安全选项
-
用来标明这个数据报的"保密级别",例如机密、秘密、公开等。
-
主要设计给军事、政府网络用,普通 Internet 几乎不用。
-
-
Strict source routing 严格源路由
-
发送方在选项里写出完整路径上要经过的每一个路由器;
-
中间路由器必须严格按这个列表转发,不能走别的路。
-
用来做精确路径控制和测试,但现在出于安全原因一般被禁用。
-
-
Loose source routing 宽松源路由
-
发送方只给出"必须经过的一些路由器列表";
-
中间的路由器只要保证不要漏掉这些点,中间可以插别的路由跳数,路径不必完全固定。
-
相当于"途经这些站,至于中间转几次车你自己安排"。
-
-
Record route 记录路由
-
要求每个经过的路由器把自己的 IP 地址写进选项字段;
-
收到包之后,源主机就能看到这个包从哪些路由器走过,常用于诊断、调试。
-
-
Timestamp 时间戳选项
-
要求每个路由器在选项里写入自己的地址 + 当前时间;
-
可以用来测量各段链路的延迟、分析路径性能。
-
