TCP的交互数据流

引言

       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没有数据发送

发布了24 篇原创文章 · 获赞 2 · 访问量 7977
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章