2009-11-06 31 views
0

我正在研究嵌入式TCP/IP4堆棧和HTTP/SNMP/SMTP的東西。 它功能正常,但我想讓它在局域網上工作得更快。 由於Nagle的算法和延遲的TCP-ACK, 即使在局域網上,HTTP應用程序似乎也工作得很慢。專用網絡(如在IPv4中)問題

可在http://en.wikipedia.org/wiki/IPv4#Private_networks, 上看到有3種不同的專用網絡具有不同的位塊值。

我將做什麼是:

  1. 我會首先要確保我看我自己的IP是一個LAN成員
  2. 我會看dst_ip並檢查它是否屬於和我一樣的局域網

這些足以證明我和對方屬於同一個局域網嗎?

那麼當然,我會用一個簡單的hack像發送同樣的數據包兩次到 加速通信。我已經測試過它,它可以工作,但現在可以選擇 。我想把它變成一個內置的功能。

在此先感謝...

+0

雖然答案表明測量延遲是非常有前途的;對於這個特定的系統來說,這是不可行的(非常低端的嵌入式系統幾乎沒有功能)。感謝您的回答... – Malkocoglu 2009-11-06 10:24:34

回答

2

您需要檢查您的子網掩碼,以確定目標IPv4地址是否與您位於同一網絡中。只有具有相同前綴的地址肯定會共享相同的網絡。例如,如果您的IP地址爲10.2.3.87,並且您的子網掩碼爲/ 26,則意味着10.2.3.64和10.2.3.127之間的地址與您位於同一子網上,因爲它們將使用相同的前綴10.2 .3.64。/26子網掩碼是255.255.255.192。

當然,你會用二進制來做所有這些,所以你不會檢查以確保地址介於最小值和最大值之間,而是使用子網掩碼來獲取你的地址的前綴和目的地地址,然後檢查它們是否相等。

在二進制:

10.2.3.87  00001010 00000010 00000011 01010111 
10.2.3.64  00001010 00000010 00000011 01000000 
255.255.255.192 11111111 11111111 11111111 11000000 

正如你可以看到,與門掩模具有一個26個比特(/ 26),並因此被施加子網掩碼當兩個IP地址共享相同的前綴。

其他子網可能駐留在同一個局域網廣播域中,所以在奇怪的情況下,您的性​​能技巧將無法工作。如果您使用子網掩碼來識別目標IP地址的接近程度,那麼您可能不需要擔心RFC 1918專用尋址。

+0

謝謝,使用subnet_mask看起來更好... – Malkocoglu 2009-11-06 10:21:18

0

這些地址是在內部網絡(企業和家庭)的使用。 他們不能在公共互聯網中使用。

我認爲它會好的。

+0

事實上,RFC 1918地址可以在公共互聯網上使用,並在公共互聯網上使用。當然,它們不應該是這樣,但阻止它們被使用的唯一因素是每個使用它們的網絡上的流量過濾器。看來,很多網絡不會過濾流量並泄漏到Internet上。看到這個網址的一些網絡泄漏這個所謂的火星流量的例子:http://www.ris.ripe.net/historic-reports/martians/2009/01/20090101.html – 2009-11-06 10:00:57

+0

@邁克爾狄龍:這是我第一次聽到這個「火星交通」。我認爲這是由低質量adsl調制解調器造成的。沒有大的網絡管理員會犯這樣的錯誤,對吧? – Malkocoglu 2009-11-06 10:30:15

1

只要你確定沒有人使用VPN連接,你可能是相當安全的。但是,通過VPN連接連接的計算機將(至少通常)具有本地IP地址,即使它們的連接可能具有相當(甚至極其)的高延遲。

+0

感謝您的額外信息... – Malkocoglu 2009-11-06 08:21:58

1

檢測「低延遲」連接而不是「LAN連接」可能更爲穩健。

也許你的應用程序/堆棧可能以某種方式測量延遲,然後切換到替代算法。

1

你(可能)比查看IP地址更好地衡量延遲。僅僅因爲兩個IP不在同一個子網內並不意味着它們之間的延遲很高。

僅僅因爲兩個IP碰巧生活在相同的IP範圍內並不意味着具有低延遲(考慮兩個以太網段,通過64kbps線路上的WAN橋連接;可能不太可能在今天這個時代,但我當然與那些像這樣的鏈接很常見的網絡合作)。

但是,檢查兩個IP在同一個子網內肯定是一個很好的近似值。