TCP的交互数据流
引言
TCP通信量的研究:
- 按照分组数量计算:一般TCP报文段包含成块数据(如FTP、电子邮件和Usenet新闻),另一半则包含交互数据(如Telnet和Rlogin)。
- 按照字节计算:90%为成块数据,10%为交互数据。
交互式输入
在一个Rlogin连接上键入一个交互命令所产生的数据流,通常每一个交互按键都会产生一个数据分组,每次从客户传到服务器的是一个字节的按键。
经受时延的确认
通常TCP在接收到数据时并不立即发送ACK;它会等到有需要发送的数据,再和ACK一起发送。(有时候称为数据捎带ACK)
绝大多数采用的时延为200ms,TCP将以最大200ms的时延等待是否有数据一起发送。每次等200ms,然后发一次。
ACK等待发送的时间总是不大于定时器,因为ACK在1~200ms内到达,而定时器在200ms溢出,那它等待的时间肯定小于200ms啦。
Nagle算法
交互数据可能是很多的小分组,比如一个字节,就要发送41字节的分组:IP首部+TCP首部+1=41.
在局域网上这些小分组通常不会有问题,局域网很少拥塞。但是在广域网上,这些小分组就增加了拥塞的可能。
Nagle算法:要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组确认到达之前不能发送其他的小分组;TCP收集这些小分组,在确认到来时一起以一个分组发出去。
优点:减少拥塞的可能。
缺点:增加时延。
关闭Nagle算法
有时候需要关闭Nagle算法,因为有些应用必须无时延发送。
窗口大小通告
TCP报文段会通报窗口大小win,一般为4096.表示缓存可以接收的数据大小。