簡體   English   中英

一次提供多少數據 NetworkStream.Write()?

[英]How much data to feed NetworkStream.Write() at a time?

我正在動態加密數據並將其寫入網絡 stream。

我應該在每個 16 字節加密塊數據可用時立即寫入 stream 還是應該緩沖它? 發送 16 字節的寫入而不是單個 20 KB 或 1 兆字節的寫入是否會降低性能?

盡可能多地喂它,它會讓你知道它是否不能再吃。 TCP 將為您處理緩沖。

此外,您提供的越多 - 越好,它可能會導致更少的流量,因為數據包不會被分割得太多。

默認情況下,Socket 使用Nagle 算法,該算法旨在通過使套接字緩沖小數據包,然后在某些情況下將它們組合並發送到一個數據包中來減少網絡流量。 一個 TCP 數據包由 40 個字節的 header 加上正在發送的數據組成。 當使用 TCP 發送小數據包時,由 TCP header 產生的開銷可能成為網絡流量的重要組成部分。 在負載較重的網絡上,這種開銷導致的擁塞會導致數據報丟失和重傳,以及擁塞導致的傳播時間過長。 當新的傳出數據從用戶到達時,如果連接上的任何先前傳輸的數據仍未得到確認,Nagle 算法將禁止發送新的 TCP 段。

您可以關閉 Nagle 算法,但這可能會導致更多的碎片和流量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM