6.3TCP和UDP区别
6.3.1面向连接服务
TCP提供的是面向连接服务,传输数据要经过三个阶段:
(1)数据传输前,先建立连接
(2)连接建立后再传输数据
(3)数据传送完后,释放连接
TCP所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等,可确保数据传送的次序和传输的可靠性。由于传输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
(目前APP基本都采用TCP传输方式)
6.3.2无连接服务
UDP提供的是无连接服务:只有传输数据阶段,消除了除数据通信外的其它开销,只要发送实体是活跃的,无须接收实体也是活跃的。UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发。UDP只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。
UDP在底层协议的封装上没有采用类似TCP的“三次握手”,且不必进行收发数据的确认,优点是开销小、数据传输速率高,实时性更好;但无连接服务不能防止报文的丢失、重复或失序,是一种不可靠的数据传输协。
程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证之类的,确保数据传送的次序和传输的可靠性。
(知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了)
区分TCP和UDP特别简单、形象的例子是:打电话和写信。两个人如果要通电话,必须先建立连接--拨号,等待应答后才能相互传递信息,最后还要释放连接--挂电话。写信就没有那么复杂了,地址姓名填好以后直接往邮筒一扔,收信人就能收到。