TCP和UDP协议的特点和区别详解

        TCP和UDP都是传输层的协议,它们起到的最基本功能都是将IP提供的主机-主机传递服务扩展到端-端的进程级,通俗来说,就是把数据段从一个电脑上面的一个应用传递到另一个电脑上面的一个应用上面。除此之外,它们还都有的功能是差错检测功能,注意,只是检测功能,即都能发现错误,但是对于错误的处理就不相同了。
       

        UDP协议:User Datagram Protocol,即用户数据报协议。提供了不可靠的无连接传输服务。它使用IP传输报文,但增加了对给定主机上多个目标进行区别的能力。它的结构比较简单,但是是不可靠的。什么是不可靠的呢?就是对于差错的控制是不可靠的。

        具体来说,UDP协议:①没有确认机制。每当接收端接收到数据段之后,进行差错校验,不论是否有误,都不会给发端进行反馈,如果有错误就丢弃。这样发端就不知道这个数据段的传输情况,这对于提升效率是有好处的。②不对报文排序 即使数据段的顺序是不对的,收端也不会返回错误或者进行排序  ③没有反馈机制进行流量控制  流量控制能够有效避免接收端处理太慢从而造成缓冲区溢出的丢包事件,但是UDP没有这方面的处理,丢了就是丢了,也不会给发送端报告错误。  ④没有超时机制   丢包了也不会重发。

        这些特点导致了报文的丢弃,重复和乱序。但是我们都知道我们希望数据的完整性和顺序性,所以使用UDP的应用程序要承担可靠性方面的全部工作。

        这样看UDP似乎很差,那么为什么还是有很多应用愿意用UDP呢?这是因为它也有很多的优点是TCP不具备的,比如说:

        ①它的报头开销小。UDP的头只有8字节长,但是TCP的头有20字节。报文头短,结构简单,提升了数据传输的效率。

        ②它是面向无连接的,不需要在传输之前建立连接。并且不用建立连接,就不需要维护连接状态。这有什么用呢?UDP的非连接性让它不需要给每一个数据报编号,和发送确认号。它的延迟就更少,实时性好。所以说,UDP更适于像视频传输那种对于正确率要求并不是很高,但是要求延迟低的应用

       ③应用程序可控制何时发送数据。UDP想发送数据,直接发送即可,但是TCP就需要收到确认之后才能发送(由于拥塞和流量控制决定的)。并且遇到网络拥塞,TCP会使应用直接阻塞,无法发送。

        

        TCP协议:Transmission Control Protocol 传输控制协议。提供了可靠的面向连接的字节流传输协议。那么和UDP协议的区别无非有两点:可靠的,面向连接的。

        面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。所谓可靠传输,是TCP协议中规定了:①如何处理丢失或重复等差错情况。②如何初始化一个数据流传输 ③如何协商结束数据流传输 ④流量控制和拥塞控制机制。解释如下:

       对于可靠传输,判断丢包,重复靠的是TCP的段编号以及确认号。TCP在发送数据的时候,为每个字节编号,接收端收到数据之后,经过校验无误,发回确认号,确认号为接收端等待接受的写一个字节的序号。并且它会缓存到达的乱序数据,统一排序之后传递给上层。这样就解决了丢包,重复和乱序的问题。

       协商开始和结束数据传输:当协商开始数据传输的时候要发送SYN信号,请求同步,并且告知将要发送的数据序号是多少,经过三次握手两端都知道对方已经建立连接并且知道对方将要从那个序号开始发送;结束的时候一方发送FIN结束信号,另一方收到之后发送ACK确认信号,于是两端都知道连接被释放,数据传输就停止了。

        流量控制和拥塞控制:TCP采用滑动窗口的方式进行流量控制,用拥塞窗口的速率调整算法(慢启动算法)来进行拥塞控制。

        这些功能都是UDP所不具备的,它们都是为了可靠数据传输所提供的,但是TCP相对也有缺点。比如说延迟大,实时性不好等等。缺点看看上文UDP的优点就能对比出来了。

        TCP和UDP各有优缺点,最主要的区别就是可靠与不可靠,以及是否面向连接。两者共同构成了传输层端对端数据传输的基础。

        

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读