在數據傳輸過程中,有時候雖然設備之間的連接是正常的,但是也會發生通信故障。如在傳輸一個大型文件的時候,網絡明明是連接正常的,但是會突然冒出一個“文件傳送失敗”的錯誤,或者接收成功的文件無法正常打開。這主要都是因為在文件傳送的過程中出現了數據丟失的情況。眾所周知,在網絡中傳送數據的時候,在發送端會將需要傳送的數據文件分割成一個個固定長度的數據塊;然后再在接收端進行組裝。在這個傳送的過程中,如果有一個數據塊丟失,就會發生以上的錯誤。為此網絡工程師要設計一個穩定的網絡,就必須要考慮到數據丟失這種意外情況。即在網絡設計中,采取必要的措施避免這種情況的發生。

一、數據丟失發生的原因
如上圖所示,當網絡中的文件服務器將某個文件發送到交換機A中,有可能會發生流量丟失的情況。當交換機A將文件傳送到交換機B中,也有可能發生流量丟失的問題。也就是說,在任何兩臺設備之間,只要涉及到數據的轉發,那么就都有可能發生流量丟失的情況。這主要是什么原因造成的呢?
其實這主要是因為兩臺不同設備之間緩沖區的大小不同所造成的。如發送端(交換機A)的緩沖區比較大,而接收端(交換機B)的緩沖區比較小。當交換機A將數據流量源源不斷的發送到交換機B的過程中,由于交換機A的緩沖區要比交換機B大,那么交換機B的緩沖區就裝不下這么多流量。如果交換機B不不能夠很快的釋放其緩存區中的數據,那么在交換機B中就可能發生緩沖區溢出故障,從而發生數據流量的丟失。
不過即時兩臺設備的數據緩沖區大小相同,但是由于其他一些方面的原因,也會造成數據流量的丟失。或者說,接收端與發送端具有相同的工作效率,發送端也可能會發生緩沖區溢出的故障。如可能因為某個網絡設備內在的瓶頸或者下流設備(如下游交換機故障)的原因,接收設備無法及時將數據發送出去,從而不能夠足夠快的清空接收緩沖區。此時發送端不知道這種情況,仍然源源不斷的將數據發送過來,此時就難免會發送緩沖區溢出的故障,從而導致數據流量丟失。所以雖然通過整體升級網絡設備,讓同級設備之間具有近似的緩沖區與工作效率,可以在一定程度上降低數據流量丟失的故障。但是不能夠從根本上解決這個問題。為此我們還是需要尋求其他的解決方式。
二、利用流量控制功能來減少設備之間的流量丟失
在IEEE802.3種,提出了流量控制的特性。通過這個特性,就可以有效的避免設備之間的流量丟失。不過可惜的是,并不是所有的網絡設備都支持這個特性。雖然如此,為了避免上述的數據流量丟失錯誤,筆者還是建議盡可能的采用流量控制功能來防止數據流量丟失。這個數據流量控制功能的工作原理比較簡單,其提供了一種在兩臺設備之間,或者精確的說,是在鏈路伙伴之間提供一種緩沖區是否滿的這種情況進行溝通的一種手段。當鏈路伙伴發現對端設備的緩沖區已經滿了,則將停止發送數據流量,并且在對端設備表明它具有接收流量的能力之后(緩沖區得到一定的釋放之后)再重新發送流量。其實,這個特性只是對QOS特性的一個補充。網絡工程師普遍認為,這個特性有助于解決緩沖區溢出導致的數據流量丟失問題。
如上圖所示,當交換機B發現自己的緩沖區已滿無法接收更多的數據時,就會向其鏈接伙伴交換機A發送消息,告知自己的緩沖區已經滿了無法再接收新的數據。此時交換機B就會停止向其發送新的數據,直到交換機B再次發送消息給交換機A,可以重新發數據為止。在流量控制特性中,網絡設備是使用特定的數據正來通知鏈路伙伴網絡設備來延遲一段特定的時間后再重新發送數據。那么這個特定的時間是多少呢?根據現在的網絡通行標準,這個時間不是有用戶或者網絡管理員配置的。而是接收端根據實際情況來自動確定的,或者說是根據接收端的交換機等網絡設備的端口邏輯來確定的。通常情況下,網絡管理員不需要關注這個時間是多少,只需要了解此時會發生數據延遲。這也是采用數據流量控制所帶來的一個負面作用。不過話說回來,比起數據流量丟失來說,這個數據延遲還是可以接受的。畢竟只要能夠完全接收數據,即使發送數據延遲的話,至少這個數據還可以正常使用。相反,只要一發生數據流量丟失,無法完整的受到全部數據,那么這個文件就無法正常使用。
三、在思科系列交換機上啟用流量控制特性
現在大部分的思科交換機都支持這個流量控制特性。如在基于IOS軟件的交換機中,可以通過執行如下命令來啟動這個功能。
Flowcontrol {receive/send} {on/desired/off}
其中關鍵字receive表示網絡設備的接口是否處理接收到的表示緩沖區滿的特定楨(一般把這個楨叫做暫停楨)。而關鍵字send表示交換機等網絡設備的接口在發生擁塞的情況下是否發送暫停楨,即是否通知鏈接伙伴自己的緩沖區已滿,暫停發送數據。在思科交換機上啟用流量控制特性的時候,筆者認為需要注意如下幾個問題。
首先是需要考慮到兼容性。也就是說,為了讓這個特性發揮應有的作用,一般要求相關的網絡設備都啟用這個特性。如果某個鏈接伙伴沒有啟用這個特性的話,則仍然會發生數據流量丟失的問題,甚至還會造成其他的數據通信故障,從而使得功虧一簣。但是由于企業網絡設備購買時間不同,為此如果讓網絡管理員去一一確認網絡設備是否開啟了這個特性,具有一定的難度。而且每加入一個網絡設備,都需要確認一下,靈活性不高。為此筆者建議,平時最好將這個參數的值設置為desired。這個參數表示“請求實現”的意思。也就是說,如果將交換機的端口設置為這個值,那么交換機會根據實際情況來判斷是否需要開啟流量控制特性。首先其會請求鏈路伙伴開啟這個特性。如果對方設備支持這個特性的話,那么在接收端與發送端都會采用數據流量控制特性。但是如果鏈路伙伴的另一端不支持這個特性,那么這個接口在數據傳輸的過程中也會關掉這個特性,從而保證數據的正確傳輸。這種自動協商機制,跟IPSec安全措施中的協商機制有著異曲同工之妙。
其次需要注意的是,數據流量丟失往往跟設備的配置沒有直接的關系。如思科高端交換機與具有吉比特網卡的服務器之間也有可能因為緩沖區溢出而發生數據流量丟失的情況。這主要是因為可能出現網絡擁塞或者下游設備故障所造成的。總之,光升級網絡設備還不能夠徹底的解決這個問題。為了避免因網絡擁塞等原因造成數據包丟失,筆者強烈建議對于網絡設備采用流量控制的特性。特別是在關鍵或者高端服務器和工作站的配置中,要啟用這個特性。當然,有時候企業可能需要更換不支持這個特性的網絡設備。但是筆者認為,這個投資還是有必要的。