扒一扒TCP协议与UDP协议

 TCP服务的特色算法

(1)面向链接:使用TCP协议通信的双方必须先创建链接,而后才能开始数据的读写。双方都必须为该链接分配必要的内核资源,以管理链接的状态和链接上数据的传输。TCP连接是全双工的,即双方的数据读写能够经过一个链接完成。完成数据交换以后,双方必须断开链接以释放系统资源。网络

        这种链接是一对一的,因此基于广播和多播(目标是多个主机地址)的应用程序不能使用TCP服务。而无链接的UDP则很是适合。tcp

(2)字节流:发送端执行的写操做次数和接收端执行的读操做次数之间没有任何数量关系。当发送端应用程序连续屡次执行屡次写操做时,TCP模块先将数据放入TCP缓冲区中,当TCP模块真正开始发送数据时,发送缓冲区中这些被接受到的数据可能被封装成一个或多个TCP报文段发出。下面会用图片表示出字节流服务和数据报服务的不一样。性能

(3)可靠传输:首先TCP协议采用发送应答机制,即发送端发送的每一个TCP报文段都必须获得接受方的应答,才认为这个TCP报文段传输成功。其次,TCP协议采用超时重传机制,发送端在发送出一个TCP报文段以后启动定时器,若是在定时时间内未收到应答,它将重发该报文段。最后,由于TCP报文段最终是以IP数据报发送的,而IP数据包到达接收端可能会乱序,重复,因此TCP协议还会对接收到的TCP报文段重排、整理,再交给应用层。spa

 UDP服务的特色设计

(1)无链接:即通讯双方不会保持一个长久的联系,所以应用程序每次发送数据都要明确指出接收端的地址。blog

(2)基于数据报服务:是相对于字节流服务而言,每一个UDP数据包都有一个长度,接收端必须以该长度为最小单位将其全部内容一次性读出,不然数据将被截断。图片

(3)不可靠:这意味着UDP协议没法保证数据从发送端正确的传送到目的端。若是数据在中途丢失,或者目的端经过数据校验发现数据错误而将其丢弃,则UDP协议只是简单地给应用程序通知发送失败。资源

 

字节流与数据报效率

 

TCP为了实现可靠传输,是以浪费部分带宽,牺牲实时性为代价 。UDP则报头小,效率高,代价小,能够在应用层本身实现与应答确认、快速重传等相似的功能来提升本身的可靠性。那么既然TCP是可靠的,为何不直接用它就好还要提升UDP的可靠性呢?

UDP实现的可靠协议,基本都会对TCP的某一部分进行增强,另一部分进行削弱。由于:”实时性+可靠性+公平性“ 三者不能同时保证,所以能够牺牲TCP的局部公平性来换取更好的实时性、或者浪费点带宽来实现更低的延迟。

目前已经有一些实现UDP可靠传输的机制,好比UDT(UDP-based Data Transfer Protocol)

UDT:是一个高性能的基于UDP协议的数据传输协议,它是为支持高速广域网上海量数据传输设计的,为解决TCP的效率和公平问题,同时提供可靠的数据流和报文传输。主要目的是针对“TCP在高带宽长距离网络上的传输性能差”的问题,尽量全面支持BDP网络上的海量数据传输。UDT是创建与UDP之上的面向双向的应用层协议,引入了新的拥塞控制算法和数据可靠性控制机制。它不只能够支持可靠的数据流传输(STREAM 类型TCP)和部分可靠的数据报(DGRAM相似网络上发广播消息)传输,也能够应用在点对点技术,防火墙穿透,多媒体数据传输等领域。

引入UDT的缘由

互联网上的标准数据传输协议TCP在高带宽长距离网络上性能不好,且没法充分的利用带宽。其缘由主要有一下几点:

1)现行的tcp拥塞窗口机制在高带宽长距离的环境下没法很好的工做,拥塞窗口过小,并且增长过于缓慢直接致使吞吐

率不高,没法充分利用带宽。

此外TCP的AIMD拥塞控制算法过激地下降拥塞窗口的大小,可是不能快速回复到高位充分利用带宽。

2)目前的tcp拥塞控制算法在BDP网络下具备较差的RTT公平性,rtt会影响拥塞窗口的增加,越不容易达的连接的拥塞 

窗口增长得越慢,其发送速度越慢,所以会致使越远的连接发送速率越慢。

相关文章
相关标签/搜索