捕获ftp数据流查看图片_TCP的交互数据流传输

71cbece122e43bd99d2ac2b2dd240a6a.gif

TCP协议基础之上建立着许多不同类型的网络协议,我们通常根据数据吞吐量的大小将其分为两大类:

第一类协议是交互数据类型协议,较为常见的协议有Telnet协议、SSH协议等。这种类型的协议在多数情况下用做小流量的数据交换,诸如输入一小段指令、回显一些文字等;

第二类协议是数据成块类型协议,较为常见的协议有FTP协议、HTTP协议、电子邮件等。这种类型的协议要求TCP尽可能的运载数据,把数据吞吐量做到最大,并尽可能提高效率。

针对这两类协议,TCP都会对他们进行优化传输。接下来,一起分析TCP是如何应对交互数据流传输的。

8332cfc932f6fbd88f85680242e71676.png

交互式输入

8c1f7de3bfcfa3833a1015340f7160da.png

(图片源于网络)

如图所示, Telnet是连接交互命令时所产生的数据流。在Telnet传输的过程中,每次的交互输入都会产生一个数据分片,而当客户端输入完命令敲击回车键时都会产生一次数据交互,同时Telnet需要服务器回显给客户端需要响应的字符,此时产生四个报文段:

首先,输入完命令敲击回车时,产生了来自客户端的数据交互字节;

当服务器收到以后,会将这些字节发送给服务器,同时对客户端进行确认;

当Telnet处理完之后,会将回显的内容发送给TCP,TCP再将回显的内容发送给客户端进行显示;

最后,客户端收到回显内容,并在屏幕进行显示,对回显的字段进行确认。

整个交互过程中,每段数据流的内容都较少,这充分展示了Telnet的特点:流量小,交互次数多。而多数使用Telnet的用户对传输延迟不敏感,因此TCP需要采用两种手段对交互式输入进行优化处理。

8332cfc932f6fbd88f85680242e71676.png

第一种优化手段:Delay ACK

2b26500b6f78858d0be640c46cef48ad.png

(图片源于网络)

Delay ACK也被称作延迟确认、延迟ACK、捎带ACK等,经常被次数多、流量小的应用来进行优化传输。TCP在接收数据时并不会立即发送ACK,相反会推迟发送,并在以下三种情况中触发服务器对收到的程序进行确认。

第一种情况:三次握手完成后,服务器会开启不断翻滚的计时器,一般该计时器的时间会设置成200ms。在200ms的计时器内,没有其它内容需要发送时,等待200ms时间到之后进行Delay ACK确认,而不是在收到数据后立即进行确认。该计时器在三次握手建立后启动,并非在收到数据后立即启动,因此等待的时间应为0-200ms之间的随机数。

第二种情况:服务器接收到数据之后不会立即回复确认,而是在计时器的时间到限前,如果有回显的数据需要发送,TCP会捎带着确认信息一并发送,这也就是捎带ACK的原因。

第三种情况:计时器时间到限前,服务器连续两次收到数据字节,此时的服务器不再遵循之前提到的两种等待情况,而会直接进行答复。

Delay ACK正是通过减少确认的次数,让原本需要在网络中频繁应答的过程变得简洁。

8332cfc932f6fbd88f85680242e71676.png

第二种优化手段:Nagle算法

MSS

49aabc1b63c46047f9522bb9ba7d2533.png

学习Nagle算法前,先来了解一个概念:MSS。MSS的全称是Maximum Segment Size, TCP在建立连接发送SYN段时,会同时将MSS发送给对方。例如图中的第一个红框内容,flags是TCP的标志位,标志该数据包为一个SYN;而下面的红框内容是MSS的参数,发送该参数意味着告诉对方其希望接收TCP数据报文段的最大长度。图中示例能接收到的最大长度是1460个字节,在三次握手建连的过程中,双方会将该参数协商清楚,并在传输的过程中以此作为依据。

Nagle算法

TCP在传输过程中的任意时刻最多只能有一个未被确认的小段,而小于MSS尺寸的数据块就是小段。

Nagle算法规则

Nagle算法的规则一共有四个:

1、 如果数据包的长度没有达到MSS,TCP会等待后面的数据包;

2、 如果数据包中含有FIN标识,TCP会立即把数据包发送出去;

3、 如果TCP设置了NPdelay的选项,TCP会把收到的数据包直接发送出去;

4、 如果以上三种情况都没有发生,而TCP发生了超时,TCP会把缓存中的数据立刻发送出去。

Nagle算法的目的是尽可能发送大的数据块,尽量避免网络中充斥着小的数据块,以减少传输压力。但有时Nagle算法也会造成延时,这种情况下我们需要设置TCP Nodelay选项来关闭Nagle算法。

Nagle算法全过程?

ce8f8748fd13d70b331795dbb8c0da83.png f5ff37e8c19f64012dbda40e805e5af0.gif

看不懂没关系,视频正在加载中...

957bb5e7fc4e559ed3543f543519dcba.png 5560eac31b6e723359273b711c045c57.png 957bb5e7fc4e559ed3543f543519dcba.png

(点击扫码☝观看视频吧)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值