TCP的组包大小控制,默认使用Nagle算法,即协议栈发送队列积压数据超过阀值MSS或收到一个ack确认后,才会发送下一包数据。
伪代码逻辑:
if there is new data to send
if the window size >= MSS and available data is >= MSS
send complete MSS segment now
else
if there is unconfirmed data still in the pipe
enqueue data in the buffer until an acknowledge is received(timeout 40ms)
else
send data immediately
end if
end if
end if
小包数据发送场景(telnet登录),则需要开启TCP_NODELAY模式,不论数据多小,立即发送tcp包;
TCP协议栈默认开启nagles算法,减少延时发送小包;
大量数据发送场景(如文件传输),则需要开启TCP_CORK模式,尽量以最大包MTU发送数据,0.6~0.8s没有组成一个MTU大包,则直接发送数据。