【TCP/IP详解 卷一:协议】第十九章 TCP的交互数据流
19.1 引言
前一章我们介绍了TCP连接的建立与释放:三握四挥,以及状态转移图。
TCP报文段分为:交互数据,以及成块数据(下一章介绍)。
交互数据:例如telnet,ssh,这种类型的协议在大多数情况下只是做小流量的数据交换,比如说按一下键盘,回显一些文字等等。
一些关于通信量的研究发现:
按分组数量计算:一半的TCP报文段包含成块数据(FTP,电子邮件,Usenet新闻),另外一半则包含交互数据(Telnet和Rlogin)。
按字节计算:90% : 10%。这是因为成块数据基本上都是满长度的(full-sized),一般为512字节的用户数据。而交互数据小的多(约90%的交互数据小于10字节)。
对于交互性要求比较高的应用,TCP给出两个策略来提高发送效率和减低网络负担:
(1)捎带ACK。
(2)Nagle算法(一次尽量多的发数据)。
19.2 交互式输入 以 Rlogin 为例
我们来观察在一个 Rlogin连接 上键入一个交互命令的时候产生的数据流。每一个交互按键都会产生一个数据分组。
一般有四个报文段:
- (1)来自客户的交互数据键
- (2)来自服务器的按键确认
- (3)来自服务器的按键回显
- (4)来自客户的回显确认
一般来说,上述的四个报文段中的第二个和第三个是一起发送的,称为 经受时延的确认。
19.3 经受时延的确认 或者说 捎带ack
TCP在收到数据的时候,一般不立刻进行ack的发送,相反,它推迟ack的发送,以便将 ack 与 沿该方向传送的数据 一起发送。这种现象也称为 数据捎带ack。
大多数实现采用的时延 为200ms,也就是说 TCP 将以200ms的时延等待是否有数据一起发送 :采用了一个200ms的定时器,这个定时器以相对内核引导的200ms固定时间溢出。
19.4 Nagle 算法
Rlogin连接 上客户一般每次发送一个字节到服务器,这就产生了一些 41字节长的分组(20字节的IP首部,20字节的TCP首部,1字节数据),在局域网上(LAN),这些微小分组(tinygram)通常不会引起麻烦,因为局域网一般不会出现 网络拥塞。但是在广域网上,这些小分组则会增加拥塞出现的可能。一种好的方法:采用 Nagle算法。
Nagle算法要求 TCP连接上 最多只能有一个未被确认的未完成的小分组。在该分组确认到达之前不能发送其他的小分组,如果在分组确认到达之前有分组准备好了,TCP收集了放入缓存中,然后在确认到来的时候一起发送出去。
该算法的优越地方在于:自适应。确认到达的越快,发送的也越快。而在希望减小微小分组的广域网上,则会发送更少的分组。
在局域网上两个主机之间发送数据的时候很少使用这个算法。
简单的来说,这个算法的目的,是减少在广域网上的小包的数量,以避免网络拥塞。利用的原理是,在发送出去的包确认到达之前,把准备好的包存储起来,等到确认到来的时候,以一个大包的形式发送出去。
TCP可以在 应用读取并处理数据前 发送 所接收数据的确认。这个TCP确认仅仅只是表明 TCP已经正确接收了数据。
19.4.1 关闭 Nagle算法
但是 我们有时候也需要关闭 Nagle 算法,比如 X窗口服务系统:小消息(鼠标移动)必须无时延的发送,以便 进行某种操作的交互用户 进行 及时反馈。
插口API用户可以使用 TCP_NODELAY套接字 选项来关闭 Nagle 算法。
RFC 声明,TCP必须实现 Nagle算法,但是必须为应用提供 关闭在某个连接上的 Nagle算法 的方法。
窗口大小通告 8192/4096
服务器通常的 通告窗口大小 为8192字节。这是因为服务器在 读取并回显 接收到的数据之前,TCP没有数据发送。
但是,在ACK到来的时候,客户的TCP总是有数据需要发送,这是因为在 等待ACK 的过程中,积累了数据字符。当客户发送缓存的数据的时候,客户并没有时间读取 来自服务器的数据,因此,客户通告的 窗口大小 总小于 4096.
2016/8/14
【TCP/IP详解 卷一:协议】第十九章 TCP的交互数据流的更多相关文章
- TCP/IP详解 卷一(第十九章 TCP的交互数据流)
TCP需要同时处理两类数据:块数据.交互数据. 本章将以Rlogin应用为例观察交互数据的传输过程. 交互式输入 首先观察在一个Rlogin连接上键入一个交互命令时所产生的数据流(每键入一个交互按键都 ...
- TCP/IP详解 卷1 第十九章 TCP的交互数据流
19.1 引言 成块数据:比如ftp.电子邮件.Usenet新闻 交互数据:Telnet.Rlogin 成块数据的报文段基本上都是满长度(full-size)的,而交互数据小的多(Telnet和Rlo ...
- TCP/IP详解 卷一(第十四章 DNS:域名系统)
域名系统(DNS Domain Name System)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息. 从应用角度上看,对DNS的访问时通过 ...
- TCP/IP详解 卷一(第十二章 广播和多播)
广播和多播仅应用于UDP. 广播指的是一个主机向网上的所有其他主机发送帧,而 多播仅发送给属于多播组的多个主机. 为了弄清广播和多播,需要了解主机对由信道传送过来帧的过滤过程 1.首先,网卡查看由信道 ...
- TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)
建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...
- 『TCP/IP详解——卷一:协议』读书笔记——10
2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...
- 『TCP/IP详解——卷一:协议』读书笔记——01
从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...
- 【TCP/IP详解 卷一:协议】第二章:链路层
2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...
- TCP/IP详解 卷一(第一章 概述)
很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们相互进行通信. 1.分层 TCP/IP不是一个协议,而是一个协议族,通常它被认为是一个四层的协议系统,下面展 ...
- 【TCP/IP详解 卷一:协议】第二十四章 TCP的未来与性能
来到了TCP的最后一个章节,未来与性能.在当时(1991年)的未来,如今已经部分变为现实,部分就只是历史中的实验. 主要内容: 路径MTU的发现与TCP的结合. 长肥管道 和 高速千兆比网络. 窗口扩 ...
随机推荐
- mysql 内置功能 触发器 实验
#准备表命令表 CREATE TABLE cmd ( id INT PRIMARY KEY auto_increment, ), priv ), cmd ), sub_time datetime, # ...
- 【剑指offer】调整数组顺序使奇数位于偶数前面
一.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 二.思路: 用 ...
- python——asyncio模块实现协程、异步编程
我们都知道,现在的服务器开发对于IO调度的优先级控制权已经不再依靠系统,都希望采用协程的方式实现高效的并发任务,如js.lua等在异步协程方面都做的很强大. Python在3.4版本也加入了协程的概念 ...
- RMAN中%d %t %s %u,%p,%c 等代替变量的意义
backup incremental level 0 database format='LEV0_%d_%t_%U_%s_%p' format=string 文件路径和名称的格式串,其中可包含宏变量: ...
- javascript unicode与GBK2312(中文)编码转换示例
一个javascript的unicode与GBK2312编码相互转换的方法. 代码: var GB2312UnicodeConverter = { ToUnicode: function (s ...
- ambari集成impala
1.查看hdp版本,可在ambari-agent节点上查看 VERSION=`hdp-select status hadoop-client | sed 's/hadoop-client - \([0 ...
- Base64编码加密
package liferay; public class Base64 { public static final char EQUAL = '='; public static final cha ...
- 浅谈CDN加速问题
(以百度CDN进行分析) 婆说婆有理,公说公有理.是否使用CDN,不同的工程师有不同的意见. 这里呢我来进行一下简单的分析. [正方观点] 1. 提升网站加载速度:CDN通过缓存技术提升网站打开速度, ...
- 下载及安装selenium IDE
安装方法1:可以从官方网站下载:http://seleniumhq.org/download/,但是由于selenium服务器在美国,中美的网络经常不稳定,经常会连接失败,导致下载不了 可以找一下se ...
- js 变量 作用域及内存
由于Javascript是松散型的,所以其变量只是在特定时间用于保存特定值的一个名字而已,并不存在某个变量必须保存某种类型的值的规则,变量的值以及其数据类型都可以在脚本的声明周期内改变 一.基本类型与 ...