文档章节

19.TCP的交互数据流

loda0128
 loda0128
发布于 2018/11/12 01:26
字数 678
阅读 15
收藏 0

介绍

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算法来减少报文段的数量

© 著作权归作者所有

共有 人打赏支持
上一篇: 位运算
loda0128
粉丝 93
博文 95
码字总数 119278
作品 0
朝阳
程序员
私信 提问
gRPC双向数据流的交互控制(go语言实现)

gRPC简介 gRPC (https://grpc.io) 是一个由Google开发的高性能、开源、跨多种编程语言和通用的远程过程调用协议(RPC) 框架,用于客户端和服务器端之间的通信,使用HTTP/2协议并将 ProtoBuf (...

阿狸不歌
2018/05/08
0
0
通过Websocket与gRPC交互 | gRPC双向数据流的交互控制系列(2)

在本系列第一篇文章《gRPC双向数据流的交互控制系列(1).初步实现》(https://www.jianshu.com/p/5158d6686769)中,我们完成了通过控制台进行gRPC双向数据流交互控制的实验。但是只是用控制台交...

阿狸不歌
2018/07/26
0
0
通过Nginx实现gRPC服务的负载均衡 | gRPC双向数据流的交互控制系列(3)

前情提要 本系列的第一篇文章 通过一个例子介绍了go语言实现gRPC双向数据流的交互控制,第二篇文章介绍了如何通过Websocket与gRPC交互。通过这两篇文章,我们可以一窥gRPC双向数据流的开发方...

阿狸不歌
2018/08/23
0
0
三次握手原理

访问这张图片: http://img1.gtimg.com/13/1387/138784/138784061200x10000.jpg 通过wireshark可以看到一次完整的三次握手: 整个交互过程是: 1. 客户端发起syn 2. 服务端返回syn+ack 3. 客户端...

极光火狐狸
2015/10/04
73
0
《TCP/IP详解 卷1:协议》系列分享专栏

《TCP/IP详解卷1:协议》是一本详细的TCP/IP协议指南,计算机网络历久不衰的经典著作之一。 作者理论联系实际,使读者可以轻松掌握TCP/IP的知识。阅读对象为计算机专业学生、教师以及研究网络...

开元中国2015
2018/11/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

我所遇到的GitLab 502问题的解决

我所遇到的GitLab 502问题的解决 2015年02月11日 20:17:07 wangxicoding 阅读数:51095 标签: gitlab 502 解决 端口冲突 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://bl...

rootliu
33分钟前
3
0
OSChina 周五乱弹 —— 对不起,把你看成绿灯了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 梁博《男孩 (Live)》居然只有现场版,也是好听cry。 《男孩 (Live)》- 梁博 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
44分钟前
298
5
移植Modbus到STM32F103(2):移植FreeModbus到usart3并运行示例代码

FreeModbus是Modbus的一个被广泛移植的实现。其源码在github,最新版是1.6。 FreeModbus支持Modbus功能码里的0x01~0x06,0x0F~0x11和0x17,对一些功能比如异常诊断和读事件计数等功能码并没有...

Konstantine
今天
3
0
浅谈神经网络(神经网络篇)

背景 之前写过浅谈神经网络基础篇,简单介绍下机器学习这块内容,用于扫盲。本文正式将神经网络,这部分是深度学习的基础。了解完可以掌握强大的机器学习的方法,也可以更好的了解深度学习。...

Uknowzheng
今天
5
0
移动硬盘变为RAW格式后的修复

在Mac上使用自己的移动硬盘结果文件系统格式变为RAW; 在自己windows笔记本上使用chkdsk H: /F进行修复,修复日志如下: C:\Users\mengzhang6>chkdsk H: /F文件系统的类型是 NTFS。卷标是 do...

晨猫
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部