tcp传输时影响性能的几个常见点

其实都是摘自TCP/IP详解和HTTP权威指南上面的。

1.http事务的时延
主要是指我们要发起一个请求,需要先进行dns查询,然后对对应的IP:PORT发起请求。整个过程总每个环境都可能造成时延,比如dns查询,连接建立,服务器响应,请求和响应报文的大小。
2.TCP三次握手。
连接建立的三次握手也比较耗时,尤其是client和server相隔很远的时候物理距离造成的光传播时间本来就长,而且可能网络之类不佳造成重传等等都可能使得连接的建立耗时很久。对于返回内容比较少的情况下,连接建立时间占整体时间的比例会相对较大。
3.延迟确认
简单地说server向client连续发了几个组的数据,client其实不会直针对每个组都去发ACK确认,而是会在收到第一组数据后启动延迟定时器,过100-200ms再看看现在收到的所有组有那些,能连续组装起来的,就直接把最大的序号的组确认一下就OK了。
4.TCP慢启动
TCP的慢启动本来是为了避免快的发送方到慢的接受方这样的情况。所有每个连接连接后,开始发送的数据量比较小,比如一个分组,加入对方收到好ACK确认了,那么下次就直接发2个分组的数据,以此类推。因此新的连接比已经完成“调谐”的连接要慢一些,如果双方是持续连接(keepalive),那么效果就会比较好。
5.Nagle算法与TCP_NODELAY
nagle算法本来是为了避免每次发一个小的分组,造成网络性能非常差。Nagle算法要求一个TCP连接上最多只有一个未被确认的完成的小分组,但因为确认过程本身是由延迟定时器(100-200ms)来完成所以可能会造成额外的延迟。一般来说nagle算法会在对方确认的越快就会发送的最快,比较自适应。但是如果是类似telnet这种远程登录操作,或者是X系统里面鼠标的一个移动,那们都是希望能尽量实时,不要延迟,基本都会选择TCP_NODELAY选项关闭nagle算法。
6.TIME_WAIT累计和端口耗尽。
每个socket其实是由
[text]
源ip:源port,目标IP,目标port
[/text]
组成。对于做代理服务器时,因为能变的只有源端口,所以可能造成TIME_WAIT挤压把端口毫无的情况,对后端的访问速度有(65535-1024)/60限制。

当然,假如后面有很多机器,那么因为目标IP不同,实际情况会好些。

此条目发表在System, Web server分类目录。将固定链接加入收藏夹。

发表回复