1. 为什么需要拥塞控制?
TCP 不仅要保证数据的可靠传输(通过确认与重传),还要避免“发送方发送太快,导致网络中的路由器或链路过载”。拥塞控制就是一套动态调整发送速率(即拥塞窗口 cwnd)的机制。
2. 核心状态变量
cwnd(拥塞窗口,Congestion Window):发送方一次能发送、但还未收到 ACK 的数据量(单位:报文段个数)。发送速率 = min(接收方窗口,拥塞窗口)。
ssthresh(慢启动门限,Slow Start Threshold):决定使用慢启动算法还是拥塞避免算法的阈值。
3. 四个主要阶段
阶段一:慢启动(Slow Start)
触发条件:连接刚建立,或发生超时重传后重新开始。
初始状态:cwnd 初始值通常为 1 或 10(取决于实现,RFC 建议 10,但经典教材说 1)。
增长方式:指数增长。
每收到一个 ACK,cwnd 增加 1。
这意味着经过 1 个 RTT(往返时间),cwnd 翻倍(因为一个 RTT 内收到了上个窗口所有报文的 ACK,每个 ACK 都使 cwnd+1)。
例子: 初始 cwnd=1,发送 1 个报文,收到 ACK 后 cwnd=2;发送 2 个,收到 ACK 后 cwnd=4;发送 4 个,收到 ACK 后 cwnd=8……
退出条件:当 cwnd >= ssthresh 时,进入拥塞避免阶段。
阶段二:拥塞避免(Congestion Avoidance)
增长方式:线性增长(加性增)。
每经过一个 RTT,cwnd 增加 1。
具体实现通常是:每收到一个 ACK,cwnd 增加 1/cwnd(这样在一个 RTT 内总共增加 1)。
目的:缓慢探测网络剩余容量,避免再次拥塞。
阶段三:网络发生拥塞(丢包事件)
TCP 通过丢包来判断网络拥塞。丢包分两种情况:
超时重传(RTO,Retransmission Timeout):
ssthresh = max(cwnd/2, 2)(记录一半的值作为新的慢启动阈值)。
cwnd = 1(回到慢启动起点)。
重新进入慢启动。
表现:等待 ACK 的时间超时了,说明网络可能非常拥塞,甚至链路断了。
反应(最激进):
收到三个重复 ACK(快速重传):
表现:说明网络还有能力传输数据,但出现了单个报文丢失(可能是轻微拥塞)。
反应:执行快恢复算法。
阶段四:快恢复(Fast Recovery)
动作:
ssthresh = max(cwnd/2, 2)(与超时一样,将阈值设为当前窗口的一半)。
cwnd = ssthresh + 3(因为已经收到的 3 个重复 ACK 表明有 3 个报文已经离开网络,所以可以稍微提高一点窗口)。
进入拥塞避免(线性增长)。
4. 总结记忆口诀
慢启动:指数涨,到门限。
拥塞避免:线性增,防拥塞。
遇拥塞(超时):门限减半,窗口归 1,重慢启。
遇拥塞(3ACK):门限减半,窗口减半(+3),进快恢。
错误原因分析:TCP 拥塞控制的核心思想是“学习网络容量”。一旦发生拥塞,TCP 认为之前的发送速率太高了,所以要把阈值(ssthresh)降低到当前窗口的一半,以此来记录这个“危险点”。下次慢启动增长到原来的一半时,就会提前转入线性增长的拥塞避免阶段,避免再次很快撞到拥塞点。
不是“恢复为初始值”:初始值(Initial Window)通常是一个固定的大值(如 65535 字节),或者是由用户设置的。如果每次都恢复到这个大的固定值,那么每次拥塞后又会快速撞墙,无法起到自适应调节的作用。
实际变化:
拥塞前:ssthresh = 旧阈值(可能很大)
拥塞后:ssthresh = cwnd / 2(例如从 64 降到 32)
因此,门限值是动态调整的,减半,而不是恢复成不变的初始值。
典型协议:以太网(Ethernet)、PPP(点对点协议)。
3.网络层:负责路由选择和分组转发,将数据包从源端发送到目的端(可能跨越多个网络)。它提供的是尽力而为的服务,不保证可靠传输(可靠性通常由上层负责)。
典型协议:IP(网际协议)。
4.传输层:负责端到端的可靠数据传输(如 TCP),但它是在两个主机之间,而不是在物理线路上。它依赖下层(网络层、数据链路层、物理层)的服务。
什么是有类路由协议?
有类路由协议:在路由更新中不携带子网掩码信息。路由器根据 IP 地址的主类(A、B、C 类) 来判断网络边界,自动应用默认掩码。
特点:
不支持 VLSM(可变长子网掩码)。
不支持 CIDR(无类别域间路由)。
在边界路由器上会自动进行路由汇总(无法关闭)。
只能用于连续子网的网络设计。
典型协议:RIPv1、IGRP。
什么是无类路由协议?
无类路由协议:在路由更新中携带子网掩码信息。
特点:
支持 VLSM 和 CIDR。
支持更精细的路由控制。
可以手动控制路由汇总。
典型协议:RIPv2、OSPF、IS-IS、BGPv4、EIGRP。
总结表:

1、RIPv1:报文格式中不包含子网掩码字段,路由条目仅包含地址和度量值。
2、RIPv2:报文格式中增加了子网掩码字段,还增加了下一跳地址和路由标记等字段,以支持 CIDR、VLSM 和路由认证。
因此,虽然两种报文类型相同(Request 和 Response),但 RIPv2 的报文格式是对 RIPv1 的扩展,并不完全一致。
1. OSPF 开销(Cost)的计算方式
在 OSPF 中,Cost 是路由度量值,用于计算最短路径。计算公式通常为:
Cost = 参考带宽 / 接口带宽
参考带宽:默认为 100 Mbps(在某些较新的设备实现中,参考带宽可能被修改,但思科等厂商的经典默认值为 100 Mbps)。
接口带宽:接口的物理带宽(或配置的带宽)。
2. 本题计算
参考带宽 = 100 Mbps
接口带宽 = 100 Mbps
Cost = 100 Mbps / 100 Mbps = 1
3. 为什么是 1?
当接口带宽等于参考带宽时,Cost 值为 1。
Cost 值必须为整数(小于 1 的会取整为 1)。
如果接口带宽大于参考带宽(如千兆接口 1000 Mbps,参考带宽 100 Mbps),计算结果可能小于 1,OSPF 会将其取整为 1(或根据实现可能为更小的整数,但思科早期实现中为 1)。但在严格计算中,当接口带宽等于参考带宽时,Cost 正好是 1。
软考课堂目前推出网络工程师、系统架构师两个方向串讲课程!
网工串讲课程链接:
内容包含:基本知识点、近两年真题详解、备考注意点、解题方法与思路等,全方位助力考生顺利通过考试!
架构师串讲课程链接:
内容包含:基本知识点+近两三年真题组合、案例和论文详解、解题方法与思路等,全方位助力考生顺利通过考试!
考前10天左右推出网工、架构师的冲刺课程:
1、网工内容包含:知识点冲刺梳理、案例预测、解题思路。
2、架构师内容包含:知识点冲刺梳理、案例预测、论文预测、解题思路。
学习贵在坚持!大家加油!
更多备考学习可加讲师微信交流~