赞
踩
一、TCP协议的特点
1、TCP是面向连接的传输层协议。也就是说,应用程序在使用TCP协议之前,必须先建立TCP连接。在传输数据完毕后,必须释放已经建立的TCP连接。这就是说,应用进程之间的通信好像在“打电话”。通话前要先拨号建立连接,通话结束后要挂机释放连接。
2、每一条TCP连接只能有两个端点(end point) ,只能是点对点的一对。
3、TCP提供可靠交付的服务。也就是说,通过TCP连接传送的数据,无差错、不丢失、不重复且按序发送和接收。
4、TCP提供全双工通信。
5、TCP面向字节流。TCP中的“流”(steam) 指的是流入到进程或从进程流出的字节序列。
6、TCP面向字节流的概念,如下图所示:
注意:
■TCP连接是一条虚连接而不是一条真正的物理连接。
■TCP对应用进程一次把多长的报文发送到TCP的缓存中是不关心的。
■TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。
■TCP可把太长的数据块划分短一些再传送。
■ TCP 也可等待积累有足够多的字节后再构成报文段发送出去。
二、TCP报文的首部格式
1、序号,取值范围是0~,共个序号2的32次方。TCP是面向字节流的,在一个TCP连接中传送的字节流的每一个字节都要按顺序编号,整个要传送的字节流的起始序号必须在连接建立时设置。若干个字节形成一个TCP报文段,TCP报文段以本报文段所发送的数据的第一个字节的序号作为本报文段的标识,也就是TCP报文首部中的“序号”,因此报文段首部中的“序号”字段,也可称为“报文段序号”。
2、确认号,它的值是期望收到发送方下一个报文段序号,即下一个报文段第一个数据字节的序号。所以,我们应当记住:若确认号是N,则表明到序号N-1位置的所有数据都已确认收到。
3、数据偏移。这个字段实际上是指出TCP报文段的首部长度。
4、确认ACK。仅当ACK=1时确认号字段才有效。
5、紧急URG (Urgent)。 当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序传送。
6、推送PSH。当PSH=1时,希望在键入一个命令后立即就能收到对方的回应,可以使用此操作。
7、复位RST。当RST=1时,必须释放连接,然后重新建立传输连接。
8、终止FIN。用来释放一个连接。当FIN=1时,表此报文段的发送方的数据已发送完毕,并要求释放传输连接。
9、窗口。接收方目前允许对方发送的数据量。窗口值在收发过程中是会改变的。
10、校验和。检验传输数据的准确性。
11、紧急指针。紧急指针仅在URG=1时才有意义,它指出了紧急数据的末尾在报文段的位置。当所有数据都处理完,TCP 就告诉应用程序恢复到正常操作。如下图所示:
三、TCP可靠传输的实现
1、停止等待协议的要点
①概念:发送方每次只发送一个分组, 在收到确认后再发送下一个分组,这种方式就是停止等待协议。
②编号。对发送的每个分组和确认都进行编号。
③自动重传请求。 发送方为每个发送的分组设置一 个超时计时器。若超时计时器超时,发送方会自动重传分组。
④简单,但信道利用率太低。
2、停止等待协议的两种工作模式
通常A最终总是可以收到对所有发出的分组的确认。如果A不断重传分组但总是收不到确认,就说明通信线路太差,不能进行通信。
■使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
■上述的自动重传请求ARQ意思是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。
3、连续ARQ协议和滑动窗口协议——改进的停止等待协议
虽然停止等待协议可以实现可靠传输,但效率比较低,因此使用了ARQ协议和滑动窗口协议。如下图所示:
4、选择确认(SACK)
连续ARQ协议和滑动窗口协议都采用累积确认的方式。
TCP通信时,如果发送序列中间的某个数据包丢失,TCP 会重传最后确认的分组后续的分组,这样原先已经正确传输的分组也可能重复发送,降低了TCP性能。为改善这种情况,发展出选择确认( SACK) 技术,使TCP只重新发送丢失的包,而不用发送后续所有的分组,并提供相应机制使接收方能告诉发送方哪些数据丢失,哪些数据已经收到等。
四、流量控制
1、概念:流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。在客户端向服务器发送TCP连接请求时,TCP首部会包含客户端的接收窗口大小,服务器就会根据客户端的接收窗口大小调整发送窗口。分析数据包时的Win是接收窗口大小。
2、拥塞控制的原因
从上图中可看出,随着提供的负载的增大,网络吞吐量的增长速率逐渐减小。也就是说,在网络吞吐量还未达到饱和时,就已经有一部分输入分组被丢弃了。当网络的吞吐量明显地小于理想吞吐量时,网络就进入了轻度拥塞状态。更值得注意的是,当提供的负载达到某一数值时, 网络的吞吐量反而随提供的负载的增大而下降,这时网络就进入了拥塞状态。当提供的负载继续增大到某一数值时,网络的吞吐量就下降到零,网络已无法工作。这就是所谓的死锁(Deadlock)。
3、拥塞控制的方法:慢开始、拥塞避免、快重传和快回复。
五、发送窗口的上限
拥塞控制和接收方对发送方的流量控制一起考虑, 那么很显然,发送方的窗口的上限值应当取为接收方窗口rwnd和拥塞窗口cwnd这两个变量中较小的一个,也就是说:
-当rwnd<cwnd时,是接收方的接收能力限制发送方窗口的最大值。
-反之,当cwnd<rwnd时,是网络的拥塞限制发送方窗口的最大值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。