MTU:一個網絡包的最大長度,以太網中一般為1500各字節。
MSS:除去頭部之后,一個網絡包所能容納的TCP數據的最大長度。
應用程序調用write后,將要發送的數據被交給TCP/IP協議棧進行。
協議棧不關心應用的數據內容,統一認為是一定長度的二進制字節序列。
協議棧收到數據后,會先存放在內部的發送緩沖區中,繼續等待應用程序的下一段數據。一次將多少數據傳遞給協議棧是由應用程序自行決定的,協議棧并不能控制這一行為。
立即發送可能會發送大量小包,導致網絡效率下降。
積累多少數據再發送取決于幾個要素:
一、MTU與MSS
? ? ? ? 當應用程序收到的數據長度超過或者接近MSS時再發送出去,就可以避免發送小包問題了。
二、時間
? ? ? ? 當應用程序發送數據的頻率不高的時候,可能因為等待MSS長度數據時間太長而造成發送延遲。為此,協議棧內部有一個計時器,當經過一定時間后,就會將網絡包發送出去。
長度優先,那么網絡的效率會提高,但可能會因為等待填滿緩沖區而產生延遲;相反地,如果時間優先,那么延遲時間會變少,但又會降低網絡的效率。因此,在進行發送操作時需要綜合考慮這兩個要素以達到平衡。