5 不要低估TCP的性能
任何协议的性能都与网络、应用程序、负载和包括实现质量在内的其他一些因素有关。
5.1 TCP性能
TCP在基本的IP数据报服务的基础上增加了可靠性和流量控制功能,而UDP只添加了一个检验和,但是这并不表示UDP的性能比TCP好。
- TCP为了提供可靠性,接收端TCP必须向发送端TCP发送ACK,但是这个工作量没有想象的那么多。
- 首先,接收端可以通过它要发回给对等实体的数据来捎带ACK,实际上,很多TCP实现都会将ACK延迟几个毫秒发送,以防止本端应用程序有对输入分段的应答发送。
- TCP没有必要为每个段产生一个ACK。正常情况下,大部分TCP实现都是隔一段发送一次ACK的。
注意:RFC建议延迟发送ACK,但最大不超过0.5秒,并且每两个全尺寸段至少进行一次ACK。
5.2 建立连接 (3次握手)
注意:RTT表示一个往返时间,即分组从一台主机发送到其对等实体再发送回来所需的时间。
5.3 TCP与UDP性能对比
以太网桢最多可以装载1500B,IP和TCP首部各需20B,TCP选项保留20B,因此实际的最大段发送长度为1440B。
-
服务器是本地主机,使用回路127.0.0.1地址时,TCP的性能要比不适用回路地址好(估计快3倍)。而UDP的性能没有显著的差异。
使用netstat -i命令可以看到,eth1的MTU为1500B,而lo的MTU为65536。 -
本地主机使用回路地址,TCP的速度大约是UDP的两倍。
因为TCP可以将几个1440B组合起来,写入一个段中,而UDP会将每个1440B的数据报单独发出去。 -
在LAN中,UDP大约比TCP快20%,但UDP丢报严重,即使在同一台机器上运行客户端和服务器也会丢包,主要是运维缓冲区空间耗尽导致。
-
TCP和UDP的性能还会受到发送数据包大小的影响,如果发送的包大小为300B,可能在LAN上TCP的性能比UPD还好。