计算机网络12 - 实践
拥塞控制

拥塞控制的基本原理
监控系统
检测拥塞在什么时候、什么位置发生。把拥塞信息传递到可以采取措施的地方。
调整系统的运行方式,消除或缓解拥塞困难。
避免拥塞路径
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的具体技术手段)
1. 过量提供资源
做起来简单,现实中常见好用,但是很贵
2. 在客户端缓冲
用缓存抹平网络抖动


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 时间戳选项
要求每个路由器在选项里写入自己的地址 + 当前时间;
行用来测量各段链路的延迟、分析路径性能。


浙公网安备 33010602011771号