引言
在TCP进行数据传输时,可以分为成块数据流和交互数据流两种,且处理的算法不同.
交互式输入
每一个交互按键都会产生一个分组,也就是说,每次从客户传到服务器的是一个字节的按键(而不是每次一行).
报文段2可以和报文段3进行合并—按键确认和按键回显一起发送
经受时延的确认
按键确认和按键回显两个报文段合并在一起发送,这种技术叫做经受时延的确认。
通常TCP在接收到数据时并不立即发送ACK;相反,他推迟发送,以便将ACK与需要沿该方向发送的数据一起发送(有时称这种现象为数据捎带ACK)
绝大多数实现采用的时延为200ms,也就是说,TCP将以最大200ms的时延等待是否有数据一起发送.
Nagle算法
目的:减少网络上的微小分组,降低出现拥塞的可能,但也会增加延时.
Nagle算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组.
流程:
1,发送端TCP将从应用进程收到的第一数据块立即发送,不管其大小,哪怕只有一个字节.
2,发送端输出第一块数据后开始收集数据,并等待确认.
3,确认未到达时,若收集数据打到窗口的一半或一个MSS段,立即发送.
4,确认到达后,发缓冲区中的数据组成一个TCP段,然后发送.
Socket API用户可以使用TCP_NODELAY选项来关闭Nagle算法.(比如当小消息需要无时延发送时)
窗口大小通告
Slip通告窗口大小为4096字节
vangogh通告其窗口大小为8192字节
服务器通常通告窗口大小为8192字节,应为服务器在读取并回显接收到的数据之前,其TCP没有数据发送