TCP延迟确认
外观
此條目需要編修,以確保標點使用恰当。 (2019年1月31日) |
TCP延迟确认(英語:TCP delayed acknowledgment)是传输控制协议所使用的技术,用于改善网络性能。该技术可以将若干ACK报文组合在一起成为单个报文,从而减少协议开销。但是在某些情况下,该技术可能会降低应用程序性能。
方法和优点
[编辑]RFC1122(页面存档备份,存于互联网档案馆)規定,主机在收到資料報文後,最遲可於500毫秒內,傳送ACK報文。而且,在主機收到一連串長度逹最大分段大小的報文時,每收到兩段報文,至少要回應一次ACK。
延遲ACK回應可以使应用程序有机会更新TCP接收窗口,或是在ACK報文中夾帶其他資料。对于某些协议(如Telnet),通过将ACK、窗口更新和响应数据组合到一个段中,可以将服务器发送的响应数量減少2/3。 [1]
问题
[编辑]延迟ACK引入的额外等待时间在与某些应用程序和配置交互时可能导致进一步的延迟。如果发送方使用納格算法,在收到ACK回應前,會將預備送出的資料暫存,待收到回應後將資料一次送出。如果发送方送出的数据未逹最大分段大小,且打算在收到ACK回應後再送出資料,则传输将暂停到ACK延迟超时。
Linux内核从版本2.4.4开始支持禁用延迟ACK的TCP_QUICKACK套接字选项。 [2]由此可以得知,如果发送方的套接字层的数据少于一个完整数据包,根据納格算法,在收到已发送数据的ACK之前,是不会发送这段数据的。与此同时,接收方的应用层在获取所有数据之前不会发送响应;如果接收方启用了延迟的ACK,则它的套接字层将不会发送ACK,直到达到超时。
如果应用程序以较小的块发送数据并期望定期ACK,则可能发生这种负面交互。为防止此延迟,应用程序层需要连续发送数据而无需等待ACK,或者納格可能被发送方的应用程序禁用。
参考
[编辑]- ^ http://tools.ietf.org/html/rfc1122#page-96 (页面存档备份,存于互联网档案馆)
- ^ tcp(7) in Linux. manpages.info. [9 May 2018]. (原始内容存档于2019-01-31) (英语).