— network — 1 min read
在计算机网络体系结构中整体被划为了五层。由高到低:
今天主要来记录在五层体系结构中较为重要的一层,也是在工作和学习当中经常会接触到的一层--运输层。
从通信和信息处理的角度看,运输层向其上一层应用层提供通信服务,他属于面向网络通信的最高层,也是面向应用功能的最底层。也就是说他是在应用层和IP协议层(网络层)中间的一层,我们知道在两台机器互相通信时,我们通过ip定位到两端所在的位置(也就是ip层的主要作用)。不过这种说法不够正确,为什么说不够准确?网络通讯究其根本是一个端的应用进程在用户的操作下向另一端应用进程请求,而两端主机中不单单只同时存在一个任务进程,所以在两端通信时从根本上来说其实是两端主机中的两个进程在进行通讯。
IP协议层的主要工作就是帮我们在网络中定位当那一台我们想要请求的主机在哪里,但另一个问题出现了,就是我们无法准确定位目标主机中哪一个应用进程是我们要通信的,不能定位,也就不能将我们的请求发送到对应的应用进程。这时运输层协议的作用就派上用场了。
由于TCP协议的复杂性,本篇文章暂时只重点关注TCP协议在流量控制方面的问题。其他方面例如:可靠传输、拥塞控制、连接管理等问题以后再详细记录。
在了解TCP的流量控制前,有必要来先了解一下什么TCP报文段首部格式。逻辑上TCP是面向字节流的,但实际上TCP传输的数据单元是一个报文段。一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在他的报文段中,当然也包括要研究的流量控制。只用弄清报文段中每一个数据的意义,才能理解TCP工作的原理。
先说明,TCP的流量控制是基于滑动窗口的,也就是当前我们只关心报文段的首部格式中的窗口数据。
关于窗口数据的理解,在TCP中窗口数据指的是接收端的可用窗口数据,不是发送方的发送窗口,为什么要关心接收端的窗口数据呢?这也就是TCP的流量控制机制。TCP中规定,不希望发送方不停的发送数据,因为接收端的缓存空间是有限的,当超过接收端的缓存空间时会影响整个通信质量。简单理解就是窗口数据就是接收端传递给发送端让其作为发送窗口大小的依据。
关于报文段中其他的数据含义参考连接博客中内容。
通常来说,希望传输的数据的速度越快越好,但实际上TCP是双端通信,所以就会存在发送方过快而接收方来不及处理的问题,这样就是造成数据丢失,称为不可靠通信。
所以在TCP中为了保证两端的流量速率平衡,提供了流量控制机制,TCP的流量控制是基于滑动窗口机制实现的。
从上图中我们可以清楚的看到,主机B在这个通信的过程中进行了三次流量控制,第一次控制在300、第二次控制在100、第三次控制在0不允许发送。并通过确认机制保证了消息的可靠交付,并能够平衡两边的传输速率。
此时有一个特殊的情况没有在图中表示出来,当B告知了A窗口为0时,A也就暂停了其当前的工作,过了一会B有有了200的接收窗口,也就是A可以继续发送报文段了,那么A如何知道当前有新的接收窗口了呢?
在这种情况下,TCP协议为了解决这个问题规定:在一方接收到0窗口时,那么将启动一个持续计时器,这个计时器的主要工作就是在收到0窗口时启动,一定时间后将会向接收方发送0窗口探测报文段。如下图:
TCP同样规定,尽管在接收窗口设置为0时,接收方也要能接收以下几种报文段:零窗口探测报文段、确认报文段、携带紧急数据的报文段。
本篇文章记录了TCP的流量控制功能,在这之前先分析了运输层在计算机网络结构体系的五层结构中概念与作用,并记录了运输层提供的两种通信协议UDP和TCP,最后着重分析了TCP数据报的首部格式,了解了在TCP流量控制中用到的窗口参数,最后详细分析了,TCP协议如何在通信的过程中如何基于滑动窗口实现的流量控制,以及在出现接收窗口为0的情况下TCP如何解决发送方的恢复发送机制。
over~