TCP/IP传输机制(如何实现可靠传输,流量控制,拥塞控制)与UDP的区别

  • TCP与UDP的比较
  • UDP特点,主要应用场景
  • TCP 协议如何保证可靠传输
  • 3次握手4次挥手

TCP与UDP的比较
UDP的包头信息
TCP/IP传输机制(如何实现可靠传输,流量控制,拥塞控制)与UDP的区别_第1张图片
UDP(user datagram protocol,用户数据报协议)的特点:
1.面向无连接。
利用IP提供面向无连接的通信服务,并且它是将应用程序发送过来的数据包在收到的那一刻,立即按照原样发送到上的一种机制。
2.不提供复杂的控制机制。
即使在网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,在传输过程中如果出现丢包,UDP也不负责重发,甚至当数据包的到达顺序乱掉之后也没有纠正顺序的功能。因此,如果需要这些细节控制的话,就需要在采用UDP协议的应用层去作出处理。
(3) 简单高效。
由于UDP面向无连接,所以它可以随时向对端发送数据包,再加上UDP本身的处理既简单,高效
UDP的主要应用场景
1,需要资源少,网络情况稳定的内网,或者对丢包不敏感的应用
2,不需要一对一沟通,建立连接,而是可以广播的应用。因为不面向连接,所以可以做到一对多,承担广播或多播的协议
3,需要处理速度快,可以忍受丢包,即使是咋网络拥塞的情况下
eg:直播。实时游戏,物联网。

  • 直播。直播对实时性的要求比较高,宁可丢包,也不要卡顿的,所以很多直播应用都基于 UDP 实现了自己的视频传输协议
  • 实时游戏。游戏的特点也是实时性比较高,在这种情况下,采用自定义的可靠的 UDP 协议,自定义重传策略,能够把产生的延迟降到最低,减少网络问题对游戏造成的影响
  • 物联网。一方面,物联网领域中断资源少,很可能知识个很小的嵌入式系统,而维护 TCP 协议的代价太大了;另一方面,物联网对实时性的要求也特别高。比如 Google 旗下的 Nest 简历 Thread Group,推出了物联网通信协议 Thread,就是基于 UDP 协议的
    TCP的包头信息*
    TCP/IP传输机制(如何实现可靠传输,流量控制,拥塞控制)与UDP的区别_第2张图片

TCP的包头有哪些内容呢?分别有什么用?
1.源端头,目标端头
2.包的序号:主要解决乱序的问题
3.确认序号:解决的是丢包问题。发出去的包应该有确认,这样可知道对方是否收到,没有收到就应该重发
4.状态位:SYN是发起一个链接,ACK是回复,RST是重新连接,FIN是结束连接。因为TCP是面向连接的,需要双发维护连接的状态,这些状态位的包会引起双方的状态变更
5.窗口大小:TCP要做流量控制,需要双方各声明一个窗口,标识自己当前的处理能力
TCP 协议如何保证可靠传输

可靠传输的要求:
所谓的可靠,就是能保证数据的正确性,无差错、不丢失、不重复、并且按序达到。
TCP通过序列号、检验和、确认应答信号、重发控制、连接控制、流量控制、拥塞控制实现可靠性
序列号
应用数据被分割成TCP认为最适合发送的数据块,TCP给发送的每一个包进行编号,接收方对数据进行排序,将有序数据传送到应用层
检验和
校验和(checksum)是指传输位数的累加,当传输结束时,接收者可以根据这个数值判断是否接到了所有的数据。如果数值匹配,那么说明传送已经完成。
TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
确认应答
TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。
序列号的作用不仅仅是应答的作用,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。这也是TCP传输可靠性的保证之一。
重发控制/超时重传机制
TCP协议利用重新发送(retransmission)来实现TCP传输的可靠性。重新发送的基本形式是超时重新发送,根据统计的往返时间来设置超时标准;如果超时,则重新发送TCP片段。另一方面,快速重新发送则通过乱序片段的ACK来更早的推断出片段的丢失。

  • 自动重传请求 ARQ 协议/超时重传
    停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重转时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求ARQ。

优点: 简单
缺点: 信道利用率低

  • 连续ARQ协议
    连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。

优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。
缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。
连接控制
连接管理就是三次握手和四次挥手的过程,保证可靠的连接,是保证可靠性的前提。
流量控制
流量控制往往是指点对点通信量的控制,是个端到端的问题。流量控制所要做的就是控制发送端发送速率,以便使接收端来得及接受。利用滑动窗口机制就可以实现流量的控制。
原理就是运用TCP报文中的窗口大小字段来控制,发送的发送窗口不可以大于接收方的接收窗口大小。如果接收方没有足够的缓存来接收数据,发送方就会收到一个零窗口的通知。此时发送方停止发送。并且定时发送一个窗口探测报文来探测接收方的接收能力。
拥塞控制
在某段时间内,若对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变差,这种叫做拥塞。
拥塞控制就是防止过多的数据注入到网络中,这样可以使网路中的路由器或链路不致于过载。
RFC2581定义了四种拥塞控制算法,即慢开始,拥塞避免、快重传、快恢复
为了进行拥塞控制,TCP 发送方要维持一个拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

常见问题:
TCP和UDP的区别
1.TCP是面向连接,UDP是面向无连接
2.TCP是面向字节流的,UDP是基于数据报的
3.TCP是可靠连接(使用流量控制和拥塞控制,保证数据正确性,数据顺序),UDP是不可靠连接(不保证)
4.TCP只能是一对一通信,UDP支持一对一,一对多,多对一和多对多交互通信
5.TCP用于传输数据量大,可靠性要求高的应用,UDP用于一次只传送少量数据,可靠性要求低、传输经济等应用
什么是面向连接,什么是面向无连接?
面向连接,是指通信双方在通信时,要事先建立一条通信线路,其有三个过程:建立连接、使用连接和释放连接。
面向无连接,指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包(报文分组)送到线路上,由系统自主选定路线进行传输。
TCP为什么可靠连接?——基于字节为单位的滑动窗口
TCP通过序列号、检验和、确认应答信号、重发控制、连接控制、流量控制、拥塞控制实现可靠性。

滑动窗口
TCP 的顺序问题,丢包问题(确认应答信号、重发控制),流量控制都是通过滑动窗口来解决的,拥塞控制时通过拥塞窗口来解决的

你可能感兴趣的:(TCP/IP传输机制(如何实现可靠传输,流量控制,拥塞控制)与UDP的区别)