博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
19.TCP的交互数据流
阅读量:6813 次
发布时间:2019-06-26

本文共 831 字,大约阅读时间需要 2 分钟。

hot3.png

介绍

TCP通信中,按分组数量算,块数据占一半,交互数据占一半;按字节数算,块数据占9成,交互数据占1成。TCP同时处理这两类数据,但是使用了不同的算法

交互式输入

Rlogin提供交互式输入,大部分都是小数据

数据交互过程:

image_1cjgc2vg112bkjeo1a51144o1ntj9.png-33.7kB

通常可以将报文段2(确认)和报文段3(回显)合并减少网络负载

经受时延的ACK

通常TCP接收到数据并不是马上回应ACK,它最多等待一个时延(绝大多数设置200ms),直到有数据时将数据和ACK一块发送

经受时延的ACK就是等待了最大时延后才响应的ACK

image_1cjil06sme701ht31c0s1kb11t4em.png-173.6kB

  • 从bsdi到srv4的7个ACK(报文3、6、9、12、15、17、19)被标记为经受时延的ACK
  • 经受时延的ACK等待的时延并不是200ms,而且1~200ms中的任意值
  • 经受时延的ACK之间间隔都是200ms的整数倍
  • 从srv4到bsdi的7个ACK(报文2、5、8、11、14、16、18)不是经受时延的ACK,因为都有数据随着ACK一块发送

上面几个现象说明,TCP实现经受时延的ACK,并不是要等待200ms,发现没数据才ACK。而是采用一个200ms定时器,每隔200ms检查有没有数据需要确认,如果有就响应ACK,否则就不发

Nagle算法

image_1cs1rj3tuaj54qjke1cldamkg.png-74.9kB

如图,在广域网中,产生很多小分组通常会导致网络拥塞,通常会使用Nagle算法,保证一个连接上最多只有一个未被确认的小分组

对时延要求较高的应用,通常会关闭Nagle算法,如果在局域网,一些小的分组并不会影响网络状况

image_1cs1ru4821ai1iufmu8upo18dtt.png-97.9kB

窗口大小通告

image_1cs1sb5faaruibb82v1to412oc1a.png-103.6kB

大多数情况下,客户端窗口是4096字节,服务端窗口是8192字节。但是后面客户端发送交互数据到服务端时,它并没有机会读取服务端响应就要发送新的数据,导致窗口一直不能恢复,总是小于4096

小结

发送交互数据的时候,很多都是小分组,需要通过引入经受时延的ACK和Nagle算法来减少报文段的数量

转载于:https://my.oschina.net/u/1378920/blog/2874809

你可能感兴趣的文章
android变化HOLO对话风格
查看>>
windows 10 install oracle 12c error:[ INS-30131 ]
查看>>
用SWD调试接口测量代码运行时间 ( SWO )
查看>>
Oracle数据库的经典问题 snapshot too old是什么原因引起的
查看>>
EnumMap demo
查看>>
HDU 3153 Pencils from the 19th Century(数学)
查看>>
Redis3在CENTOS6上的安装配置
查看>>
于linux已安装moodle
查看>>
Ubuntu 14.04下NFS安装配置
查看>>
一个简单的图片切换效果
查看>>
Linux:文件解压与压缩
查看>>
CDOJ 1157 数列(seq) 分块+线段树
查看>>
linux 查看系统信息命令(比较全)
查看>>
[Bootstrap]modal弹出框
查看>>
14.7-2
查看>>
士兵杀敌(三)(线段树)
查看>>
类string的构造函数、拷贝构造函数和析构函数
查看>>
OC 消息机制本质
查看>>
3第一周课后练习·阅读计划(2)-使用指针来访问私有数据成员
查看>>
学习使用 SVG 创建材料设计涟漪(Ripple)效果
查看>>