你的位置: 首页 > 通信技术 > 计算机网络

TCP协议

2016-10-30 14:23:04 | 人围观 | 评论:

    1.TCP的特点
    (1)TCP是面向连接的传输层协议,应用程序在使用TCP协议之前,必须先建立TCP连接。在传输完数据后,必须释放已经建立的TCP连接。应用进程之间的通信就好像打电话,通话前要先拨号建立一条线路连接,通话结束后要挂机释放连接。
    (2)每一条TCP连接只能有两个端点,即TCP连接只能是点对点的。
    (3) TCP提供可靠交付的服务。也就是说,通过TCP传输的数据是无差错、不丢失、不重复并且按序到达。
    (4) TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。在发送时,应用程序把数据传送给TCP缓存后,就可以做自己的事,而TCP在合适的时候把数据发送出去。在接收时,TCP把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据。
    (5)面向字节流。TCP中的字节流(stream)指的是流入到进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小可以不等),但TCP把应用程序交下来的数据看成是一连串的无结构的字节流。TCP并不知道所传送的字节流的含义。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应的大小关系。但接收方所收到的字节流必须和发送方所发出的字节流完全一样。
    2.TCP的连接
    TCP把连接作为最基本的抽象,TCP的许多特性都与面向连接的这个基本特性有关。因此,我们要特别介绍TCP的连接。
    在TCP的特点中我们讲过,每一条TCP连接有两个端点。那么,TCP连接的端点是什么呢?这个端点指的不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口。TCP连接的端点叫做套接字(socket)或插口。根据RFC793的定义:端口号拼接到IP地址即构成了套接字。因此套接字的表示方法是在点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开。例如,若IP地址是192.3.4.5,而端口号是80,那么得到的套接字就是(192.3.4.5:80)。所以套接字可以表示为
    套接字socket=(IP地址:端口号)
    每一条TCP连接唯一地被通信两端的两个端点(即套接字)所确定。因此TCP连接可以表示为:{socket1,socket2}={(IP1:port1),(IP2:port2)}
    这里IP1和IP2分别是两个端点主机的IP地址,而port1和port2分别是两个端点主机中的端口号。套接字是个很重要的概念,在网络编程中有着非常重要的作用。
    总之,TCP连接就是由协议软件所提供的一种抽象。有时我们也可以说,在一个应用进程与另一个应用进程之间建立了一条TCP连接,但一定要记住:TCP连接的端点是套接字,同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中。
    3.停止等待协议
    前面我们介绍过TCP发送的报文段是交给IP层传送的。但IP层只能提供尽最大努力服务,也就是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP必须要有适当的措施保证两个传输层间的通信是可靠的。停止等待协议和连续ARQ协议就是两个这样的措施。
    在理想的传输条件下,即如果传输信道不产生差错,也不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据,那么传输层不需要采取任何措施就能保证数据的可靠传输。可是实际的网络传输条件都不是理想的条件,所以传输层就要采用一些可靠的传输协议。停止等待协议就是一个最简单的可靠传输协议。下面分四种情况说明这种协议。为了讨论问题的方便,我们仅考虑A发送数据,而B接收数据并发送确认的情况。
    所谓“停止等待”就是发送方每发送完一个分组就停止发送,等待对方确认。在收到对方确认后再发送下一个分组。参见图1


    4.连续ARQ协议
    这里简单地介绍连续ARQ协议,对理解滑动窗口协议打下基础。
    我们知道前面介绍的停止等待协议确实简单,容易实现,但对信道的利用率太低了,不适合在实际应用中使用。因此就提出了连续ARQ协议,原理和停止等待协议相同,但提高了信道的利用率。我们通过图2来说明连续ARQ协议的工作原理。

                    图2 连续ARQ协议工作原理
    连续ARQ协议规定,发送方和接收方都要维持一个发送或接收窗口,窗口的大小通过协商确定为N(这里N=5)个分组的空间。发送方每收到一个确认就将发送窗口向前滑动一个分组的位置,如图中所示,现在可以发送第6个分组了。接收方一般都是采用累积确认的方式。这就是说,接收方不必对收到的分组逐个发送确认,而是可以在收到几个分组后,对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已经正确收到了。
    累积确认的方法容易实现,即使确认丢失也不必重传。但缺点是不能向发送方反映出接收方已经正确收到的所有分组的信息。
    5.TCP报文段首部格式
    TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,TCP的全部功能都在首部中的字段体现出来。只有理解了TCP首部各字段的作用才能更好地掌握TCP的工作原理。TCP的首部格式见图4-15。
    TCP报文段首部的前20个字节是固定的,后面可能还有4N(N=1,2,3…)字节的选项(根据需要而定)。因此TCP首部的最小长度是20字节。
    6.TCP流量控制
    人们总是期望数据在网络上传输的越快越好,但如果发送方把数据发送得太快,接收方就可能来不及接收处理这些数据,当缓存空间装满,数据溢出,这样就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收处理。
    利用滑动窗口机制就可以很方便地在TCP连接上实现对发送方的流量控制。
    7.TCP拥塞控制
    拥塞控制与流量控制是两个不同的问题,但是有比较紧密的联系,希望通过这节的学习能够理解拥塞控制和流量控制的区别和联系。
    计算机网络中能给数据提供服务的设备和资源称为网络资源。如带宽、交换节点中的缓存和处理机等。若网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞(Congestion)。所以可以认为拥塞发生的条件就是网络可用资源小于网络的需求资源。若网络中有许多资源同时呈现供应不足,则网络的性能就会明显变坏,甚至出现瘫痪。
    网络拥塞是个非常复杂的问题,它一般是由很多因素引起的,但在某一方面增加某些资源一般是不能解决问题的。例如,当某个结点缓存的容量太小时,到达该结点的分组因缓存空间不够而不得不丢弃。现在设想将该结点的缓存容量扩展到非常大。于是凡到达该结点的分组均可在结点的缓存队列中排队,不受任何限制。但由于输出链路的带宽和处理机的速度并未提高,因此在这队列中的绝大多数分组的排队等待时间将会大大增加,结果上层应用进程只好把它们进行重传(因为早就超时了)。这样反而会进一步加剧网络的拥塞程度。由此可见,仅从某一方面增加网络资源并不能提高网络性能,还有可能加剧网络的拥塞。
    流量控制和拥塞控制的关系
    拥塞控制与流量控制的关系密切,它们之间也存在着一些差别。所谓拥塞控制就是防止更多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到网络中所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
    而流量控制是指点对点通信量的控制,是个端到端的问题,接收端控制发送端。流量控制所要做的就是抑制发送端发送数据的速率,以便接收端来得及接收。
    拥塞控制的方法在1999年公布的因特网建议标准RFC2581定义了四种算法,它们分别是慢开始、拥塞避免、快重传和快恢复。具体算法参见有关资料。




标签:

相关内容推荐: