TCP建链和拆链 数据交互 流量控制

来源:互联网 发布:软件项目保密措施 编辑:程序博客网 时间:2024/06/07 20:17

TCP的建链和拆链:

    TCP的建链是TCP的3次握手,主要就是互相通知本端最大能接收的数据包大小(MSS)和最大的接收数据缓存大小(WIN)

connect.jpg

2009-5-20 01:02 上传
下载附件(12.03 KB)



步骤一:由client端发起syn包  告诉server端自己最大接收包的大小和缓存大小。

步骤二:由server端发syn包  告诉client自己的最大接收和缓存  在这里server告诉client   默许:server已经接收到client的syn

步骤三:client回复ack   告诉server自己收到

建链消息中,主要的信息“最大接收包大小”和“缓存大小”是用来控制两端每次发包的大小和发包速度,示意如下图

WIN.jpg

2009-5-20 00:18 上传
下载附件(17.93 KB)



而TCP的拆链过程有4步,如下图所示。其实TCP完全可以像建链那样使用3步搞定拆链,但是为了照顾一个叫半连接的功能,TCP采用了4步拆链。半连接简单的说,就是一端主动拆链后,还能继续处理另一端发送的数据包,直到另一端也进行拆链操作,它的示意也在下图中描述:


Disconnect.jpg 

2009-5-20 00:18 上传
下载附件(22.37 KB)

  TCP的数据交互:    

TCP的数据交互过程,采用的也是发送应答方式。对于数据交互,非常重要的是要了解数据包编号的应用

cooperation.jpg

2009-5-20 02:57 上传
下载附件(14.68 KB)


如上图所示,每个发送包都会有一个自己的编号,而 “包编号+包的数据长度”就是下一个连续包的编号。如上图中第一个包编号是1000,数据长度是512,则下个包的编号是1000+512=1512。而接收端的确认消息中,只包含它期望收到的下一个包的包号,用于告知发送端数据包的接收的进展。当发送端发现确认的包号不是将要发送的包号,则可能发生了丢包,需要进行重发,如下图所示:

lost.jpg
2009-5-20 02:57 上传
下载附件(19.29 KB)


仔细看上图,会发现重发的包与原先的包的大小不同,从100变成了200,这并不是错误,TCP的重发只是从丢包的包号开始重新发数据,但是数据的大小可以不一样,可以包含更多的数据。同样,接收端会忽略比已收到的包号小的数据包,确认消息中,只包含根据已收包得出的最大的期望收包号。也就是说,接收端不需要对每个收到的包单独确认,而只需要确认最大的接收包号就可以完成对之前所有包的确认。而在交互应用时,一个数据包会同时携带本端的确认消息,如下图所示:

Together.jpg 

TCP的流量控制:
某个时间点,网络的容量或是某个连接的容量总是有限的。容量由带宽,环路时延,接收缓存等一系列因素共同决定。如果发送端数据发送的太慢,远低于连接容量,首先便是数据交互等待时间加长(想象下,如果等下一个文件要几个小时……),再次就是造成网络的利用率低,投资不能充分利用(好比使用8M的ADSL,只看普通网页)。相反,如果某段时间网络上传输的包过多,超过了容量,那造成的结果就是网络拥塞(有点几年前忙时上网的感觉),大量的数据包被丢弃,重发,如果不加控制,则会进一步造成重发数据包泛滥,不断吞噬网络带宽,使有效网络带宽不断降低,流量控制很多时候就是为了拥塞控制和拥塞恢复

control.jpg

2009-5-20 06:29 上传
下载附件(21.2 KB)


TCP的各种流量控制的原则,总得来说就是使流量总是能接近但不超过网络或连接的容量,即最大化的利用网络带宽,但又不至于造成拥塞,或是一但出现拥塞,能够快速的恢复到一个最佳的流量值,下面再列举一些TCP的措施

尽量减少包数:

每个包都有包头的开销,因而相同数据使用越少的包,便能够提高有网络传送有效负荷的比例;同时,包数的减少,也能够降低网络设备的处理负荷。

TCP允许一个包含有多个功能,一个数据包不但包含本次发送的数据,同时还携带对于对端数据的确认、拆链信息等信息,这样可以最大化地利用TCP包头的字段,并减少确认包和命令包

multi.jpg
2009-5-20 06:29 上传
下载附件(19.01 KB)


TCP允许接收端不对每个接收到的数据包立即进行确认,如上图所示,接收端可以在发送数据时,或是等待一段时间后,对收到的,编号最大的包进行确认。发送端可以知道,接收端确认包号之前的包都已经正确收到,这样可以减少确认包。

TCP会尽量避免数据包分片。数据包分片一是会造成包数增加,二是会增加重传的风险(任一个分片丢失,原数据包就需要重发)。TCP在建链过程中,双方会相互知会各端最大可以接收的包长,并协商出一个最大的发送包长,后续的包长都以小于这个最大发送包长的大小发送,避免分片。

TCP的各种重传间隔都不是等长的,而是以指数级增长的。即第一次重传和第二次重传的间隔会比第三次与第四次的间隔小很多,这种重传控制方法,可以在相同时间内,大量减少的重传次数,如下图所示

resend.jpg
2009-5-20 12:17 上传
下载附件(22.56 KB)


发送速度控制:

TCP双方交互数据时,都会携带各自目前的缓存大小,这样,各端都能根据目前对端缓存的变化,控制发送速度。

D_win.jpg
2009-5-20 06:29 上传
下载附件(32.8 KB)


   此外,TCP有很多控制发送数据,避免拥塞的算法,要研究具体算法,那就要啃书了,但基本原则还是与本文开头一致,使发送速率总是控制在恰好低于网络或通道饱和容量之下,即要高效地利用网络,又不至于使网络陷入拥塞。

speed.jpg
2009-5-20 12:18 上传
下载附件(33.56 KB)



原创粉丝点击