传输控制协议TCP概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/May_3/article/details/79933400

写在前面:

    TCP和UDP协议是根据传输层中不同的程序需求的两种传输协议。即面向连接的TCP和面向无连接的UDP。在这篇博客中,将会总结TCP协议。

    文章中部分内容参考《计算机网络》第五版--谢希仁。


  • TCP协议的主要特点:

    (1)TCP是面向连接的传输层协议。也就是应用程序在使用TCP协议之前,必须要建立TCP连接。在传输完毕后,要释放TCP连接。

    (2)每一条TCP连接只能有2个端点。每一条TCP连接只能是点对点的。

    (3)TCP提供可靠交付的服务。即,通过TCP传输的数据,无差错,不丢失,不重复,并且按序到达。

    (4)TCP提供全双工通信。

    (5)面向字节流。TCP把应用程序交下来的数据看出仅仅是一连串的无结构的字节流。

  • 套接字:

    TCP连接的两个端口是套接字,根据RFC793中的定义,即Socket=(IP地址:端口号)。

  • TCP可靠传输的工作原理:

    因为TCP发送的报文段交给IP层(网络层)来传送。但是IP层只能提供尽最大努力服务,即TCP下面的网络所提供的是不可靠的传输。理想的传输,要保证(1):传输信道不发生差错 (2):不管发送方以多块的速度发送数据,接收方总是来得及处理手收到的数据。    

  • 实现可靠传输的协议:

    (1)停止等待协议:就是把每发送完一个“分组”就停止发送,等待对方的确认。在收到确认之后,再发送下一个分组。停止等待协议分为以下3种情况:

    1、无差错情况

    发送方A发送分组M1,A发送后就暂停发送,等待B的确认,当B收到分组M1后,向A回送确认报文。A收到了B的M1确认报文之后,才继续发送下一个分组M2。

    2、出现差错情况

     发送方A发送分组M1,A发送后就暂停发送,等待B的确认。由于出现了差错情况(可能是丢失,或者是检测时出现差错),B在检测报文M1时,就丢弃M1,也不会向A发送确认报文(什么都不做)。A在一段时间仍然没有收到B的报文,就认为刚刚发送的M1丢失了,这时,会重传前面发送过的分组(即超时重传)。实现超时重传,就要在每发送完的分组,设置一个超时计时器。此外,注意:A在发送完一个分组后,必须暂时保留已经发送的副本。分组和确认分组都必须进行编号,方便审核。超时计时器设置的重传时间要比数据在分组传输的平均往返时间更长一点(防止不必要的重传)。

    3、确认丢失和确认迟到

    确认丢失:是指B所发送的M1确认报文丢失了。而这时A不知道是自己的发送的分组出错还是B发送的确认丢失。第一步,A重传M1分组,并丢弃这个分组M1,不向上层交付。第二步,B向A发送确认。

    确认迟到:这一种情况,传输过程中没有出现任何差错。但B对A的确认迟到了。这时,A向B重传一个分组M1,当A收到B迟到的确认后,丢弃这个确认。B这时收到分组M1(由于重复,也将分组丢弃),但会向A确认。

    停止等待协议的优点是简单,但是信道利用率太低。即信道在绝大多数时间内都是空闲的。

(2)连续ARQ协议:即滑动窗口协议。在发送时,可以发送X个分组,而不等待对方的确认。假设X=5。这样就大大的提高了信道利用率。

    连续ARQ协议规定,发送方每手动一个确认,就把发送窗口向前滑动一个分组的位置。如果原来已经发送来5个分组,那么当发送方接收到了第一个分组的确认后,就可以发送窗口内的分组6。

    而且接收方,不必要收到每一个分组都向发送方进行确认,可以累积确认。可以在收到几个分组之后,对按序到达的最后一个分组进行确认。这样就表示,这个分组之前的分组都已经正确收到。

  • TCP的流量控制:

    流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。

    利用滑动窗口实现流量控制。在连接建立时,接收端告诉发送方,接收窗口rwnd(receiver window)。接收端通过修改rwnd的值,来进行流量控制,当rwnd=0时,即不允许发送方再发送数据了。

  • TCP的拥塞控制:

    若对网络某一资源的请求,超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫拥塞。

    拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

    拥塞控制和流量控制的区别在于,拥塞控制解决的是信道,或者链路的发送数据的速率问题。而流量控制,解决的是端到端的问题,即,接收端是否可以接收这么多的报文。

    举例来说明拥塞控制和流量控制的区别:

    例A:某个光纤网络的链路传输速率为1000Gb/s。现在一个巨型计算机向一个普通PC机以1Gb/s的速率发送文件。显然,网络本身的带宽是足够的,也就不存在拥塞的问题,但由于PC的负载不足以接收大量的数据,所以,需要进行流量控制。

    例B:另一个网络,链路传输速率为1Mb/s,有1000台计算机连接在这个网络上,现在其中500台计算分别向其余的500台计算机以100kb/s的速率发送文件。这种情况,计算机的负载足够可以接受相应的数据,但是网络的船速速率不足以承受500台计算机同时以以100kb/s的速率发送文件,产生了网络拥塞。

    根据RFC2581标准,定义了4种解决拥塞控制的算法,即慢开始,拥塞避免,快重传和快恢复。



    

    

    

猜你喜欢

转载自blog.csdn.net/May_3/article/details/79933400