本文将讨论:
TCP的基本概念;
数据流的收发;
TCP报文;
建立和关闭连接;
糊涂窗口;
现在所用的网络上,我们常用的运输层协议是TCP和UDP。现在我们来讨论TCP。
TCP具有的特征有4个,面向数据流(面向字节)、虚电路连接、传输缓冲和全双工连接。下面来依次细讲。
在两个进程相互传输数据的时候,我们实际上是以八位组的比特流来传输的,当然我们同时将这个八位组的比特流称为字节。同时,我们在使用TCP的时候,我们一定需要在两个进程间建立连接,就像两个电话中间连了一条电话线。在使用TCP进行数据传输的时候,应用程序不断的往对方发送八位组,这个八位组有时候是1个,有时候是两个,有时候是别的。每个应用程序都在使用自己认为适宜大小的八位组。接收的时候,TCP通过某种方式来把这些八位组按照发送的顺序组合起来,直接交付给上一层。当发现需要交付的数据不够填满一个缓冲区的时候,只要到达了某个值,TCP就会直接发送,当然这个发送还是遵循着TCP的规则。全双工连接就更容易理解了,对于一个应用程序而言,全双工连接包括了两个独立的、流向相反的数据流,并且这两个数据流之间不进行明显的交互。
数据流的收发
对于TCP,它的可靠性体现在只要接收方收到了一组八位组,就会给发送方返回一个ACK。这种是一种叫“带重传的肯定确认”技术,大部分可靠协议都用它。只有在收到了这个八位组回的ACK才会发下一个。发送方在发送每一个分组的时候都会启动一个定时器,并在定时器超时且没有收到ACK的情况下重发这个八位组。
那么,如果每一次都要等待ACK,那么收发效率都会很低很低。那该怎么办呢?有没有这样一种思路,我一次性的发若四组八位组1234,在回1的时候发5,回2的时候发6。如果回了4但是没回3并且过了超时时间,那么我就重新发3