計算機網絡的學習離不開OSI參考模型&TCP/IP模型
對各層功能與任務的了解就是學習的主要內容
其二者的區別也是我們應該了解的
其中 擁塞控制和流量控制 就是各層功能中 兩個易混淆的概念
流量控制(Flow Control):解決的是發送方和接收方之間速度不匹配的問題。它是一個端到端(點對點)的問題。
擁塞控制(Congestion Control):解決的是整個網絡(如路由器、鏈路)承載能力不足的問題。它是一個全局性的問題。
深度解釋一下就是:
流量控制是由接收方控制收發速度的,具體而言,在TCP中的實現機制就是,接收方會在ACK確認報文中告訴發送方自己的窗口大小,發送方則會根據這個接收窗口的大小調整發送的數據量,保證不出現超額現象,從而避免了丟包,重傳等浪費。
形象點說,流量控制就是有1個人丟大餅,另一個人接大餅,丟的人速度太快了,接的人就會說“哎呀你慢點!!!”,避免餅被丟地上
擁塞控制呢,有關網絡的承載能力,是一種機制,防止過多的數據注入網絡,導致路由器或者鏈路過載,出現網絡擁塞。同樣在TCP中,通過擁塞窗口,慢開始算法,擁塞避免算法,快重傳,快恢復等手段協調全局。這里是由發送方驅動,它會根據網絡反饋調整速度。
擁塞就好比堵車,網絡就像一個共享的公路系統。如果所有車輛(數據包)同時涌入一條公路(網絡鏈路),就會造成擁堵(路由器緩沖區爆滿),導致所有車輛的通行速度都變慢(網絡延遲增加),甚至發生交通事故(數據包被丟棄)。
了解以上內容便可以知道,擁塞控制只會出現在網絡層(OSI)/ 網際層(TCP/IP)。因為它與路由器有關系
而流量控制在OSI的數據鏈路層,網絡層,傳輸層都有,卻只在TCP/IP模型的傳輸層有
那么你可能會問:為什么TCP/IP模型的網際層沒有流量控制功能?
答案就牽扯到了這兩個模型的不同之處。
TCP/IP模型的設計思想是 “傻網絡,智能終端” ,主張網絡內部(核心設備,如路由器)應該保持簡單和“愚蠢”,只負責盡可能高效地轉發數據包(“盡力而為”,Best-Effort Delivery)。而復雜的智能功能(如可靠性保證、流量控制、擁塞控制)應該放在網絡的邊緣,即通信的終端主機上。
類比郵政系統。郵局(網際層)只負責盡最大努力分揀和投遞信件,它不關心信的內容、也不保證一定送到(盡管大多數時候可以)。保證可靠送達(如掛號信、要求回執)是寄信人和收信人(傳輸層)之間需要協商和負責的事情。
所以這個功能就交由傳輸層實現,省去網際層的麻煩。