tcp/ip学习笔记--第19章 TCP interactive data flow (交互数据流)
来源:互联网 发布:linux配置网卡mac 编辑:程序博客网 时间:2024/05/21 09:22
简介:
有文章对网络中的数据流研究发现,如果以包为单位进行统计的话,大约一半的包是用来发送成块数据的,而另一半是用来发送交互数据的。而以字节为单位的话,90%是成块的数据,10%是交互数据。 TCP对于两种不同的数据流,采用不同的算法。
交互式输入:
对于远程进行命令操作的软件rlogin来说,你每敲击一次键盘,都会产生一处tcp报文发送到服务端,同时服务端会回复一个报文表示收到。也就是说你一次敲击键盘的行为,会产生4个tcp报文(还有两个ack确认报文),当然一般来说,服务端的ack确认和回复会在一个报文中发送,那么也就是3个报文,这是惊人的。
延迟确认
一般来说,当TCP接收到一个消息时,并不会立即发送确认。而等待一段时间,看这个时间段之内是否有数据需要发送,如果有的话,就将确认和数据一起发送出去。如果没有,等待的时间到达之后,将发送ack确认。这样能够减小网络负载。
等待的时间一般来说是200ms。就像之前描述过的建立连接超时机制,这个时间不是准确的200ms,而是0到200ms之间的一个随机值。
Nagle Algorithm
小块的交互式的报文在局域网中发送一般都不会成为问题,但是到了某些拥挤的广域网中,这些小的报文段将使网域更加拥挤。nagle算法就是用来解决这个问题的。
算法是这么定义的:如果还没有收到之前发送的报文的ack确认,那么小块的报文就不能发送。而是将这些小的数据块收集起来再发送出去。需要注意的一点是,如果收到另一方发送来的数据,发送ack确认是不受这个限制的。同时,在发送ack确认的时候,可以附带着将数据发送过去。
这是一种优雅的算法,因为这个算法如此简单明了,却能够自适应。如果网络畅通,那么会更快的收到ack确认,也就能够更快的将数据发送出去。相反网络拥挤,收到ack的时间会延迟,发送数据的速率也就会降低。
关闭Nagle算法
在某些场景下,需要数据实时发送,比如说远程桌面连接,需要实时的传送鼠标的位置,这时候就需要关闭nagle算法。可以通过设置TCP_NODELAY选项来实现。
java代码如下:
socket.setTcpNoDelay(true);
- tcp/ip学习笔记--第19章 TCP interactive data flow (交互数据流)
- 《TCP/IP详解》学习笔记-第19/20章 TCP交互数据流、滑动窗口、拥塞窗口
- 19-TCP Interactive Data Flow
- tcp/ip学习笔记--第20章 TCP Bulk data flow
- TCP/IP 第19章 TCP的交互数据流
- 【TCP/IP详解】第19章 TCP的交互数据流
- TCP/IP学习笔记(11)-TCP交互数据流,成块数据流
- TCP/IP 详解 卷1 ch19 TCP Interactive Data Flow
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流 (转)
- 《TCP/IP详解 卷1:协议》 读书笔记 第19章 TCP的交互数据流
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流 .
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流
- TCP/IP详解学习笔记(7)-TCP交互数据流,成块数据流
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流 .
- TCP/IP详解--学习笔记(11)-TCP交互数据流,成块数据流
- 快学Scala-元祖、集合
- 二叉树的遍历
- YOLO源码详解(一)-训练
- Linux去重 排序 计数 分隔 命令 awk sort wc uniq
- Bash 脚本基本语法
- tcp/ip学习笔记--第19章 TCP interactive data flow (交互数据流)
- 六周五次课(11月24日) 13.1 NoSQL简介 13.2 redis服务搭建 13.3 redis连接池 13.4 redis管道
- 分布式机器学习系统之 ANGEL
- Java中==和equals()的区别
- 吴恩达深度学习1-4课后作业1 Building your Deep Neural Network: Step by Step
- Mybatis开发步骤
- Erratic Expansion UVA
- C++: windows使用gsoap开发webservice程序(单线程)---服务端
- 11.24学习PYTHON第二天 对print函数的思考