TCP和UDP比较
2016-03-12 15:35
288 查看
一、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),视频,语音等方面。
相关文章推荐
- android学习笔记——HttpURLConnection简单应用以及讲解
- 网络编程 用eclipse获取百度服务器端的首页
- tcpdump和ngrep抓不到本机数据包
- Linux 网络编程 IP协议
- Python 神经网络实现MNIST分类
- https://github.com/1dot75cm/myrepo
- 网络编程 简易聊天室
- good bye pxe, hello http boot
- archlinux 网络配置
- 网络流(最大流) CQOI 2015 BZOJ 3931 网络吞吐量
- http协议学习系列
- 在线HTTP POST/GET接口测试 地址
- TCP/IP具体解释--三次握手和四次握手 Dos攻击
- Andrew NG机器学习课程笔记系列之——机器学习之神经网络模型-下(Neural Networks: Representation)
- Andrew NG机器学习课程笔记系列之——机器学习之神经网络模型-上(Neural Networks: Representation)
- ios网络学习------4 UIWebView的加载本地数据的三种方式
- TCP的运输连接管理(3次握手,4次握手)
- 如何让域中的计算机开机自动映射网络上的共享文件夹
- 人工智能——神经网络算法初体验
- http_load的安装和使用