關於提高UDP傳送效率的方法

2021-09-06 22:18:17 字數 2183 閱讀 6896

udp的傳送效率和什麼因素有關呢?

直觀覺得,udp的切包長越大,應該傳送效率越高(最長為65536)。可是依據實際測試和在網上查到的資料的結果,包長度為1024為傳送效率最高。

這樣的結果讓人感到疑惑,為什麼是1024這樣的奇怪的值呢?為什麼不是mtu(最小傳送單元)的長度(即1500-28)呢?

後來調查發現,windows的網路底層,預設udp分片長度為1024時,走的是高速通道模式,詳細如何的高速通道?沒有再繼續深入研究。

通過改動以下的登錄檔能夠加大1024.

hkey_local_machine\system\currentcontrolset\services\afd\parameters\fastsenddatagramthreshold

而且須要改動網絡卡登錄檔的mtu與上面的值一致,詳細登錄檔項例如以下所看到的:

hkey_local_machine\\system\currentcontrolset\services\tcpip\parameters\inte***ces\mtu

改動以上登錄檔值的演示樣例**:

// 改動本地udp包傳送長度並依據網路mtu確定實際udp傳送的包長度
// lenpacket【out】:包長度,

bistorestartcomputer【out】:是否重新啟動計算機(當改動了登錄檔,則須要重新啟動有效)

// 返回:true(成功),false(失敗)

bool setmaxefficencyu***acketlength(int &lenpacket, bool &bistorestartcomputer)

bistorestartcomputer = true;

} // 校驗值

else

bistorestartcomputer = true;

}} }

// 設定【hkey_local_machine\system\currentcontrolset\services\tcpip\parameters\inte***ces】

// 改動mtu=1500

// 假設不存在,則返回

hkey hmainkey = null;

long lretcode = ::regopenkeyex(hkey_local_machine,_t("system\\currentcontrolset\\services\\tcpip\\parameters\\inte***ces"),0,key_read,&hmainkey);

if(lretcode != error_success)

// 遍歷全部網口,改動mtu

dword dwindex = 0;

tchar swzsubkey[max_path] = _t("");

dword dwnamelen = max_path;

while(error_success == ::regenumkeyex(hmainkey, dwindex, swzsubkey, &dwnamelen, null, null, null, null))

bistorestartcomputer = true;}}

} // 重置快取

memset(swzsubkey, 0, sizeof(swzsubkey));

dwnamelen = max_path;

// 下乙個子項

dwindex ++;

} ::regclosekey(hmainkey);

return true;

}

可是須要注意的是,改動此值須要確保小於或者等於整個網路路徑的mtu,如何檢查整個網路的mtu呢?能夠通過執行以下指令獲取:

ping -f -n 1 -l 1472 192.168.0.2

當中,1472為傳送的包長度,假設執行結果為0,表示可以傳送;可以繼續提高1472,否則減少;直至獲取最大值。

詳細**例如以下所看到的:

// 獲取網路mtu

// uldestip【in】:目標ip

// 返回:mtu

uint getlanmtu(ulong uldestip)

else

return lenpacket;

}

提高SQL執行效率的方法

oracle提供了多種方法用於減少花在剖析oracle sql表示式上的時間,在執行帶有大量執行計畫的複雜查詢時剖析過程會拖累系統的效能。現在我們來簡要地看看這些方法中的幾種。1 使用ordered提示 oracle必須花費大量的時間來剖析多 的合併,用以確定 合併的最佳順序。如果sql表示式涉及七...

常用提高C 效率的方法

自從七十年代c語言誕生以來,一直以其靈活性 高效率和可移植性為軟體開發人員所鍾愛,成為系統軟體開發的首選工具。而c 作為c語言的繼承和發展,不僅保留了c語言的高度靈活 高效率和易於理解等諸多優點,還包含了幾乎所有物件導向的特徵,成為新一代軟體系統構建的利器。相對來說,c語言是一種簡潔的語言,所涉及的...

提高python執行效率的方法

python上手很容易,但是在使用過程中,怎麼才能使效率變高呢?下面說一下提高python執行效率的方法,這裡只是說一點,python在引入模組過程中提高效率的方法。例如 1.我們要使用os模組中的某個屬性,那我們可以單獨引入os中某個屬性 from os import version 同樣的我們也...