1.前言

 

 对于即时消息新手来说,在开始编写即时消息或消息推送系统的代码之前,最大的问题是应该选择TCP还是UDP作为传输层协议。本文延续了“懒惰网络编程入门”系列文章的风格,通过快速比较和分析TCP和UDP之间的差异,帮助即时通信初学者快速理解这些基本知识点,以便在即时通信和消息推送等网络通信应用场景中准确选择合适的传输层协议。

 

 随着网络技术的飞速发展,网络速度不再是传输的瓶颈。UDP以其简单、快速的优点,在越来越多的场景中取代了TCP,如网页浏览、流媒体、实时游戏和物联网等。本文是“懒惰网络编程入门”系列文章的第五篇,将快速梳理出UDP在某些场景下相对于TCP的优势。

 

 此外,即时通讯网络的文章:“简要描述一下TCP和UDP的区别”,“为什么QQ用UDP代替TCP?”,“移动即时消息协议选择:UDP还是TCP?”,更详细地阐述了类似的内容,可以为你提供更多的参考。

 2.系列文章

 

 这篇文章是一系列文章中的第四篇,其概要如下:

 

 惰性网络编程导论(一):网络通信协议的快速理解(上)

 惰性网络编程导论(二):网络通信协议的快速理解(下)

 网络编程中的懒人介绍(3):快速理解TCP协议就足够了

 网络编程中的懒人介绍(4):快速理解TCP和UDP的区别

 网络编程中的懒人介绍(5):快速理解为什么UDP有时优于TCP(本文)

 网络编程中的懒人介绍(6):历史上最流行的集线器、交换机和路由器的功能原理介绍

 网络编程中的懒人介绍(7):用简单的方式理解HTTP协议

 网络编程中的懒人介绍(8):教你写基于TCP的套接字长连接。

 网络编程中的懒人介绍(9):通俗的解释,当你有IP地址的时候为什么要用MAC地址?》

 网络编程中的懒人入门(10):泡在尿里的时候,快速理解quic协议

 网络编程中的懒人入门(11):在一篇文章中了解什么是IPv6

 懒惰网络编程入门(12):快速阅读Http/3协议,一个就够了!》

 

 本网站的“脑障网络编程入门”也适合入门学习。该系列的概要如下:

 

 脑残网络编程导论(1):学习TCP三次握手和四波动画

 脑残网络编程导论(2):读写套接字时,我们在读什么和写什么?》

 脑残网络编程导论(3):对超文本传输协议的一些必要知识

 脑残网络编程导论(4):对HTTP/2服务器推送的快速理解

 

 如果你认为这一系列文章太基础,你可以直接阅读“未知网络编程”系列文章。目录如下:

 

 未知网络编程(一):TCP协议中的疑难问题分析(上)

 未知网络编程(二):TCP协议中的疑难问题分析(下)

 未知的网络编程(3):为什么在关闭TCP连接时要等待时间和关闭等待时间

 未知网络编程(4):深入研究和分析TCP异常关机

 未知网络编程(5): UDP连接和负载平衡

 未知网络编程(ⅵ):深入理解UDP协议并充分利用它

 未知网络编程(七):如何使不可靠的UDP可靠?》

 未知网络编程(8):从数据传输层深度解密HTTP

 未知网络编程(九):理论联系实际,全方位理解域名系统

 

 有关移动网络的特性和优化方法的摘要文章,请参见:

 

 现代移动网络短连接优化方法综述:请求速度、弱网络适应和安全保障

 “移动即时消息开发人员必须阅读(1):易于理解,理解移动网络的“弱”和“慢”

 移动即时消息开发者必须阅读(2):历史上最全面的移动弱网络优化方法总结

 

 3.参考

 

 TCP/IP的详细说明-第11章UDP:用户数据报协议

 TCP/IP的详细说明-第17章TCP:传输控制协议

 TCP/IP的详细说明-第18章TCP连接的建立和终止

 TCP/IP的详细说明-第21章TCP的超时和重传

 易于理解——对TCP协议的深刻理解(一):理论基础

 易于理解——对TCP协议的深刻理解(ⅱ): RTT,滑动窗口,拥塞处理

 理论经典:三次握手和四波TCP协议详解

 理论与实践相结合:无线鲨鱼对TCP三握手四波的数据包捕获分析

 技术过去:TCP/IP协议改变世界(珍贵的多画面,手机注意)

 计算机网络通信协议图(中文版)

 高性能网络编程(一):一台服务器可以有多少个并发的TCP连接

 高性能网络编程(二):十年来著名的C10K并发连接问题

 高性能网络编程(3):在未来10年,是时候考虑C10M的并发问题了

 高性能网络编程(四):从C10K到C10M的高性能网络应用的理论探索

 简单介绍了TCP和UDP的区别

 UDP中数据包的最大大小是多少?》

 为什么QQ使用UDP而不是TCP?》

 “移动即时消息协议选择:UDP还是TCP?》

 4.网络速度的提高为UDP的稳定提供了可靠的网络保障

 

 CDN服务提供商Akamai报告称,从2008年到2015年的七年间,各国的平均网络速度从1.5兆位/秒提高到5.1兆位/秒,网络速度提高了近四倍。随着网络环境的改善,网络传输的时延和稳定性得到了提高,UDP的丢包率小于5%。如果再次使用应用层重传,可以充分保证传输的可靠性。

 5.比较测试结果,UDP的性能优于TCP

 

 为了提高浏览速度,谷歌提出了SPDY协议和基于TCP的HTTP/2协议。谷歌在Chrome上试验了基于UDP的QUIC协议,传输速率降低到100毫秒以下。

 

 网络编程中的懒人介绍(5):快速理解为什么UDP有时优于TCP _1

 

 谷歌采用QUIC后,连接率可有效提高75%;

 谷歌搜索采用QUIC后,页面加载性能提高了3%;

 在采用QUIC后,YouTube已经减少了30%的重新协商。

 

 6.TCP设计过于冗余,难以进一步提高速度

 

 为了实现网络通信的可靠性,TCP采用了复杂的拥塞控制算法,并建立了繁琐的握手过程和重传策略。因为TCP建立在系统协议栈中,所以很难对其进行改进。

 7.UDP以其简单、快速的优点在越来越多的场合取代了TCP

 

 7.1网络浏览

 

 使用UDP协议有三个优点:

 

 它可以简化握手过程,减少网络通信的往返次数;

 可以优化TLS加密和解密过程;

 快速发送和接收,无阻塞。

 

 7.2流媒体

 

 使用TCP时,一旦发生数据包丢失,TCP将缓存后续数据包,然后在前一个数据包被重新传输和接收后继续发送数据包,这将导致越来越多的延迟。基于UDP的协议,如实时音频和视频开源项目WebRTC,是很好的选择。

 

 2010年,谷歌通过收购全球知识产权解决方案(Global IP Solutions)获得了网络实时通信(WebRTC)技术,该技术用于提高网页的视频速率。关于网络广播电视公司的介绍,请参阅《采访网络广播电视公司标准之父:网络广播电视公司的过去、现在和未来》。如需更多WebRTC文章,请点击此处进入。

 

 7.3实时游戏

 

 在实时性要求严格的情况下,使用自定义的可靠的UDP协议,如Enet和RakNet(用户有索尼在线游戏和minecraft),自定义的重传策略可以最大限度地减少数据包丢失造成的延迟,最大限度地减少网络问题对游戏的影响。

 

 使用UDP的经典游戏,如FPS游戏《地震》和《CS》,著名的游戏引擎Unity3D也使用RakNet。

 

 7.4物联网

 

 2014年,谷歌的子公司Nest成立了Thread集团,并推出了物联网通信协议Thread,以改善物联网通信。

 

 网络编程中的懒人介绍(5):快速理解为什么UDP有时比TCP _3有优势

 

 采用UDP有三个关键点:

 

 网络带宽需求小,但实时性要求高;

 大多数应用程序不需要维护连接;

 要求低功耗。

 

 8.本文摘要

 

 如今,世界上近50%的人在使用互联网,人们不断追求更快更好的服务。一切都在改变。在越来越多的领域,UDP将占据TCP的主导地位。

 附录:更多高性能网络编程文章

 

 介绍Java新一代网络编程模型的AIO原理和Linux系统的AIO

 关于“为什么选择Netty”的11个问题和答案

 关于开源NIO框架的流言蜚语——首先是MINA还是Netty?》

 选择内蒂还是米娜:深入研究与比较(一)

 选择内蒂还是米娜:深入研究和比较(2)

 NIO框架介绍(一):服务器端基于网络4的UDP双向通信演示

 NIO框架介绍(2):服务器端基于MINA2的UDP双向通信演示

 NIO框架介绍(3):iOS与MINA2和Netty4之间跨平台UDP双向通信的实战

 NIO框架介绍(四):安卓与MINA2和网络4之间跨平台UDP双向通信的实战

 网络4.x学习(一):字节流的详细说明

 Netty 4.x学习(二):渠道和渠道的详细说明

 Netty 4.x学习(3):线程模型的详细说明

 Apache Mina框架的高级章节(一):IoFilter的详细解释

 Apache Mina框架的高级章节(2):IoHandler的详细解释

 MINA2线程原理总结(包括简单的测试案例)

 Apache MINA2.0开发指南(中文版)[附件下载]

 MINA和Netty(在线阅读版)的源代码已经整理出来并发布

 用源代码解决多协议数据传输中的TCP粘包和丢包问题

 解决Mina中同一类型的多个过滤器实例共存的问题

 "实践总结:那些被3.x网升级4.x网(线程)遇到的坑. "

 实践总结:网3.x与网4.x的线程模型

 Netty安全性详细说明:原理介绍和代码演示(第一部分)

 内蒂安全性的详细说明:原理介绍和代码演示(第二部分)

 详细解释内蒂优雅的退出机制和原理

 NIO框架的详细说明:Netty的高性能

 Twitter:如何使用Netty 4来减少JVM的GC开销(翻译)

 绝对干货:基于网络的大规模接入推送服务的技术要点

 网状干货共享:京东小麦生产级TCP网关技术实践总结

 > >更多类似的文章...

 

 (原链接:https://yq.aliyun.com/articles/88122,有变化)

 即时消息网络-即时消息开发者社区!来源:即时消息网络-即时消息开发者社区!

哇谷im_im即时通讯_私有云_公有云-哇谷云科技官网-JM沟通

IM下载体验 - 哇谷IM-企业云办公IM即时聊天社交系统-JM 沟通下载

IM功能与价格 - 哇谷IM-提供即时通讯IM开发-APP搭建私有化-公有云-私有化云-海外云搭建

新闻动态 - 哇谷IM-即时通讯热门动态博客聊天JM沟通APP

哇谷IM-JM沟通热门动态博客短视频娱乐生活

关于哇谷-哇谷IM-提供企业即时通讯IM开发-语音通话-APP搭建私有化-公有云-私有化云-海外云搭建

联系我们 - 哇谷IM-即时通讯IM私有化搭建提供接口与SDK及哇谷云服务

IM云系统即时通讯公有云、私有云、企业云、海外云-哇谷IM团队

新的市场叫板环信、融云、腾讯云!开源版IM即使聊天工具

im即时通讯社交软件APP红包技术分析(五):微信红包、聊呗红包、诚信红包、高并发技术

公有云和私有云之间有什么区别?类似融云、环信云、网易云、哇谷云?