首页 > 代码库 > TCP和UDP比較

TCP和UDP比較

一、TCP/IP协议

TCP/IP协议,你一定常常听说吧,当中TCP(Transmission Control Protocol)称为传输控制协议,IP(Internet Protocol)称为因特网互联协议。

事实上TCP/IP协议,是一个协议簇,就是一大堆协议的集合。
这一大套协议定义了整个互联网通信的基础,比方一次网络链接要经过哪些步骤,一块传输数据过程中应该怎样解释,这块数据该怎样展示给编程者等等问题。


举个样例:就好比小时候玩过家家的游戏。谁负责当爸。谁负责当妈,谁负责当儿子,都有明白的指派,谁负责买菜,买菜之后的钱交给谁来管理。假设没花了,怎么办,每天应该几点起床。起床之后应该谁叠被。都会明白指出,每一个人都会默默遵从人物角色和规则。

TCP/IP整个协议集合大概做的就是这个事情,他包括了非常多个不同的角色(相应于协议),并定义好了数据怎样传输,不同角色之间怎样协商。

理解了TCP/IP是什么,时时刻刻觉得,它里面包涵非常多个协议,这些协议就是一整套规则,它定义了整个互联网怎样连接,怎样协商的最基础规则。

TCP/IP协议又分为了4层,分别为:应用层,传输层,IP层,物理层。

二、重点介绍下传输层,也就是TCP,UDP两个协议。

技术分享
TCP和UDP(User Datagram Protocol)这两个协议,是用来传输数据的,由于他们叫传输层嘛,那不做这个事情。毫无用处了。


我们想象一个场景,网络中随意两个端要通信。会採用什么样的传输方式呢?

想象下人类之间的通信吧。

第一种是拨电话。我拨通了你的手机号码,直到你回答“喂,你好”,我听到了这个话之后。我们之间才继续进行交谈。


另外一种是发短信。我给你的手机号码发送一条短信,然后就没有然后了,有可能你没收到,有可能你收到了一会儿又给我回复。

第一种相应的就是TCP,另外一种相应的是UDP,TCP是须要对方确认的,也就是传输之前须要进行“三次握手”(这里又是一个专有名词,就是传输的两端要经过三次确认。才干開始通信)。UDP是比較粗暴的,无论对方什么情况,直接发送。不须要确认过程。

非常多博客和书籍中说的。TCP是可靠的链接(由于中间有个Control的单词。带上了这个单词。以为着更可靠哦),UDP是不可靠的链接就是这个意思。

可靠的链接带来的是效率的下降。比方一次网络请求非常大一部分时间都是浪费在互相确认的过程当中,资源消耗比較多,可是保证了数据的传输是可靠的,而且传输数据是有序的。不可靠的链接带来的是效率的提升,但可能服务质量有下降。

要摆脱一种人为的误区,不要以为UDP不可靠。就没有什么应用场景。据说QQ发送数据就是靠UDP发送的呢,尽管是不可靠的链接,可是还是用了非常多校验算法保证了数据质量的稳定,同一时候保证了效率。TCP尽管耗时,可是对于稳定性优先的场景,还是应该有限选用TCP,比方浏览器中訪问网页用的就是TCP。此外在一些长连接系统里面。比方微信,连接通道应该也是用TCP建立的。由于要维护一条稳定的信息传输通道。

详细协议是怎样控制的,数据包是怎样传输的,怎么校验数据的正确性。还有重传特性。这些都是协议中重要的控制过程,可是不做详述了,不但枯燥。而且对于实际的产品并没有什么卵用。详细选用什么样的传输数据方式,应该依据场景而定。

安全的东西往往不快。反之也是如此,而TCP和UDP他们之间也是这种:

  • TCP(传输控制协议)
    是基于连接的。在正式收发数据之前必须要与对方建立连接。这之间须要经过三次“对话”,首先A主机须要和B主机之间建立数据的收发,A须要发送一个请求,询问B:“我须要连接”,B收到询问后会给A发送一个回应:“能够连接”,这时A主机得到B主机的回应后。他们之间就建立了连接,就能够进行数据的传输了。
  • UDP(用户数报协议)它与TCP相相应的协议,是面向非连接的,不与对方建立连接。直接把数据包发送出去,UDP适用于一次传输少量的数据。对可靠性要求不高的应用环境。日常生活中使用的ping命令測试两台主机是否通信正常,其原理就是通过UDP实现的。

三、理解TCP和UDP

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议。也就是说,在正式收发数据前,必须和对方建立可靠的连接。

一个TCP连接必须要经过三次“对话”才干建立起来,当中的过程非常复杂。我们这里仅仅做简单、形象的介绍,你仅仅要做到能够理解这个过程就可以。

三次对话:

我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,能够吗?”。这是第一次对话;主机B向主机A发送允许连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“能够。你什么时候发?”,这是第二次对话。主机A再发出一个数据包确认主机B的要求同步:“我如今就发,你接着吧!

”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后。主机A才向主机B正式发送数据。

UDP(User Data Protocol,用户数据报协议)是与TCP相相应的协议。

它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

UDP适用于一次仅仅传送少量数据、对可靠性要求不高的应用环境。
比方,我们常常使用“ping”命令来測试两台主机之间TCP/IP通信是否正常。事实上“ping”命令的原理就是向对方主机发送UDP数据包。然后对方主机确认收到数据包,假设数据包是否到达的消息及时反馈回来。那么网络就是通的。

比如,在默认状态下,一次“ping”操作发送4个数据包。

大家能够看到。发送的数据包数量是4包,收到的也是4包(由于对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议。没有建立连接的过程。正由于UDP协议没有连接的过程,所以它的通信效果高;但也正由于如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

四、适用场合

TCP:Transfer Control Protocol,传输控制协议。


这是一个全双工的、面向连接的、可靠的而且是精确控制的协议。

主要是用在那些实时性不强、但要求不能出错的应用。比方说,网页的浏览、文件的下载(不是BT、电驴下载)、邮件的收发等场合,就须要TCP协议进行传输(由于不会出错)。

当然,它在网络方面的开销是昂贵的。

UDP:User Datagram Protocol。用户数据报协议。

这是一个不可靠的传输协议。由于它不排序所要发送的数据段、不关心这些数据段到达目的方的顺序(所以它才不可靠),所以它在网络的开销要比TCP小非常多。因此UDP适合用在那些实时性强、允许出错的场合。

比方说:即时通信(MSN、QQ),视频,语音等方面。

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

TCP和UDP比較