计算机网络的学习离不开OSI参考模型&TCP/IP模型
对各层功能与任务的了解就是学习的主要内容
其二者的区别也是我们应该了解的




其中 拥塞控制和流量控制 就是各层功能中 两个易混淆的概念
-
流量控制(Flow Control) :解决的是发送方 和接收方 之间速度不匹配 的问题。它是一个端到端(点对点)的问题。
-
拥塞控制(Congestion Control) :解决的是整个网络 (如路由器、链路)承载能力不足 的问题。它是一个全局性的问题。
深度解释一下就是:
流量控制是由接收方控制收发速度的,具体而言,在TCP中的实现机制就是,接收方会在ACK确认报文中告诉发送方自己的窗口大小,发送方则会根据这个接收窗口的大小调整发送的数据量,保证不出现超额现象,从而避免了丢包,重传等浪费。
形象点说,流量控制就是有1个人丢大饼,另一个人接大饼,丢的人速度太快了,接的人就会说"哎呀你慢点!!!",避免饼被丢地上
拥塞控制呢,有关网络的承载能力,是一种机制,防止过多的数据注入网络,导致路由器或者链路过载,出现网络拥塞。同样在TCP中,通过拥塞窗口,慢开始算法,拥塞避免算法,快重传,快恢复等手段协调全局。这里是由发送方驱动,它会根据网络反馈调整速度。
拥塞就好比堵车,网络就像一个共享的公路系统。如果所有车辆(数据包)同时涌入一条公路(网络链路),就会造成拥堵(路由器缓冲区爆满),导致所有车辆的通行速度都变慢(网络延迟增加),甚至发生交通事故(数据包被丢弃)。
了解以上内容便可以知道,拥塞控制只会出现在网络层(OSI)/ 网际层(TCP/IP)。因为它与路由器有关系
而流量控制在OSI的数据链路层,网络层,传输层都有,却只在TCP/IP模型的传输层有
那么你可能会问:为什么TCP/IP模型的网际层没有流量控制功能?
答案就牵扯到了这两个模型的不同之处。
TCP/IP模型的设计思想是 "傻网络,智能终端" ,主张网络内部(核心设备,如路由器)应该保持简单和"愚蠢",只负责尽可能高效地转发数据包("尽力而为",Best-Effort Delivery)。而复杂的智能功能(如可靠性保证、流量控制、拥塞控制)应该放在网络的边缘,即通信的终端主机上。
类比 邮政系统。邮局(网际层)只负责尽最大努力分拣和投递信件,它不关心信的内容、也不保证一定送到(尽管大多数时候可以)。保证可靠送达(如挂号信、要求回执)是寄信人和收信人(传输层)之间需要协商和负责的事情。
所以这个功能就交由传输层实现,省去网际层的麻烦。