有沒有辦法給限制局域網內某臺主機的流量?首先,還是得從TCP的原理說起。
TCP擁塞控制
TCP是個君子協議,在擁塞控制的設計(RFC 2851)中包括慢開始、擁塞避免、快重傳和快恢復4種算法。
擁塞窗口(cwnd)和接收端窗口(rwnd)二者的最小值確定了發送窗口的上限值,而實際上對于現今的網卡,接收端窗口的大小是可以很大的,也就是說,擁塞主要寄希望于擁塞窗口來控制,擁塞窗口直接決定了傳輸的速率。從上面這張圖可以看到:
慢開始增加到門限初始值的這段過程中,擁塞窗口的增長是比較快的。
之后的增長由指數式變成了保持線性緩慢增長,直到出現網絡擁塞超時。
超時以后重新慢開始的過程,但是門限值發生了改變,變成了擁塞發生值的一半大小。
為了改進上述擁塞控制算法的弊端,又加入了快重傳和快恢復算法。快重傳指的是:
對于msg1和msg2,接收端收到以后,就分別回復ack2和ack3,但是這時候msg3丟失了(或者由于網絡原因很久還未到達);
接收端又收到了msg4,那就可以接收下msg4,但是依然回復ack3(ack3依舊是意味著告訴發送端只收到了msg1和msg2);
發送端繼續發送msg5和msg6,可是接收端依然回復ack3;
但是發送端只要發現一連3個重復的ack3,就知道估計msg3丟失了,得重傳msg3了。
而快恢復算法是為了解決在發生網絡擁塞時,擁塞窗口一下子跌到谷底(為1),導致不能很快恢復網絡正常通信流量狀態,所以做了一個改進——
在擁塞發生的時候,只是把擁塞窗口置為ssthresh+n×MSS(其中n表示收到重復的ack報文的個數,MSS指的是最長報文段);
同時,這以后當收到新的ack報文時,就將擁塞窗口置為ssthresh的值。
TCP協議在這樣的擁塞控制機制下保證了對質量較差的網絡也有較好的適應性,但是UDP協議就不具備這種擁塞控制機制(除非你在協議之上的應用中自己設計),而流媒體往往是基于UDP來實現的,因為它更快、無連接,而且偶爾丟幀也可以接受。在這種爭奪帶寬的場景下,君子TCP就沒有辦法爭奪到較好的流量了。
多端口多連接
這是迅雷的主要做法之一,開啟多個端口,建立多個連接,靠這種簡單粗暴的方式來占取帶寬。
ARP欺騙
Google搜索局域網搶帶寬以后,映入眼簾的是P2P終結者這樣的“殺器”,它的原理就是基于ARP欺騙,即是說,通過ARP攻擊等使局域網內其它機器產生大量本地盲包,減少對公用網絡資源的占用。
ARP(Address Resolution Protocol,地址解析協議)是獲取物理地址的一個TCP/IP協議。某節點的IP地址的ARP請求被廣播到網絡上后,這個節點會收到確認其物理地址的應答,這樣的數據包才能被傳送出去。也就是說,在這個過程中,發送方用目標IP地址去換取了接收方的MAC地址,之后MAC地址存放到本地的緩存中(在一定的生存期時間內)。
由于在局域網中是使用MAC地址進行傳輸的,因此P2P終結者就偽造這樣的一個ARP應答,把P2P終結者所在的機器A的MAC地址告訴目標機B(目標機B在任意時候都可以接收ARP請求的應答),讓目標機以為本機才是網關,這樣B接收后就會更新本地緩存,以后所有本該走到網關去的包都會從機器A走,這就是一個簡單的ARP欺騙的原理。
ARP欺騙是黑客常用的攻擊手段之一,ARP欺騙分為二種,一種是對路由器ARP表的欺騙;另一種是對內網PC的網關欺騙。
MSS
在TCP的選項字段中,有一個是最大報文長度(MSS),在TCP建立連接的時候,雙方就要約定好這個數值,每一個報文段都希望盡可能大,這樣在帶寬有限的情況下,相同數量的報文段可以承載更多的信息,但是MSS是有限制的,限制的值=MTU-IP頭長度-TCP頭長度,所以對于以太網來說就是1500-20-20=1460
新聞熱點
疑難解答