https://blog.csdn.net/liusandian/article/details/52238939

登陆采用TCP协议和HTTP协议,
你和好友之间发送消息,主要采用UDP协议,
内网传文件采用了P2P技术。

QQ对于普通用户是采用UDP协议,对于会员用TCP协议

总来的说:

1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。

2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输如果消息发送失败,客户端会提示消息发送失败,并可重新发送。

3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。

具体的:

首先,QQ并不是完全基于UDP实现。
比如在使用QQ进行文件传输等活动的时候,就会使用TCP作为可靠传输的保证

使用UDP进行交互通信的好处在于,延迟较短,对数据丢失的处理比较简单
同时,TCP是一个全双工协议,需要建立连接,所以网络开销也会相对大。如果使用QQ语音和QQ视频的话,UDP的优势就更为突出了,首先延迟较小。最重要的一点是不可靠传输,这意味着如果数据丢失的话,不会有重传。因为用户一般来说可以接受图像稍微模糊一点,声音稍微不清晰一点,但是如果在几秒钟以后再出现之前丢失的画面和声音,这恐怕是很难接受的。

TCP和UDP都是传输层协议,QQ的消息为应用层内容,需要通过传输协议封装传输。
TCP为可靠的面向连接协议,建立TCP连接需要两端三次握手协商(双方在线)。
UDP为不可靠的无连接协议,数据传输出去,无需连接两端,确认是否到达(对端可以不在线)。
QQ采用UDP协议提高了消息传输的效率,无需两端建立连接,即使对端不在线也能传输消息。

UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。
由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。

QQ为何采用UDP协议?相关推荐

  1. QQ使用了什么通讯协议?为什么要这样做?为什么采用 UDP 协议,而不采用 TCP 协议实现?

    登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术. QQ对于普通用户是采用UDP协议,对于会员用TCP协议 总来的说: 1.登陆过程,客户端cli ...

  2. 采用UDP协议实现PIC18F97J60 ethernet bootloader

    采用UDP协议实现PIC18F97J60 ethernet bootloader 了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloade ...

  3. 从入门到入土:基于C语言采用UDP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统|代码展示

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  4. 从入门到入土:基于C语言采用UDP协议实现通信功能的程序

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  5. 为什么聊天软件一般采用UDP协议

    TCP是美国国防部设计的两种传输协议之一,另一种是UDP.UDP是一种不可靠的网络服务,负载比 较小,而TCP则是一种可靠的通信服务,负载相对而言比较大.TCP采用套接字(socket)或者端口 (p ...

  6. PC基于wifi采用UDP协议实现ESP32无线图传显示在1.44寸屏幕

    开发环境:Ubuntu16.04 ESP32:Arduino PC图传:Python3.6.9 首先上python代码 import socket import cv2 import numpy as ...

  7. 模拟QQ聊天——采用TCP协议的C/S架构实现

    模拟QQ聊天,一个服务器处理多个客户端的连接,同时要求各个客户端之间能够自由通信. 本程序采用C/S架构,利用多线程完成. 服务器端: a#include <stdio.h> #inclu ...

  8. 网络编程 day03 (linux) UDP 协议的传输 与函数 getsockopt setsockopt sendto(经socket传送数据)recvfrom

    1.UDP协议的特点 UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议.在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输. 适用情况: 1.发 ...

  9. 简介 传输层协议——UDP协议

    UDP协议: UDP:User Datagram Protocol 用户数据报协议 UDP简介: UDP是一种面向无连接的传输层协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可 ...

最新文章

  1. mysql数据库从删库到跑路之mysql完整性约束
  2. C# socket 解析http 协议
  3. win10雷电3接口驱动_雷电3 ,高速又多用,尽在一个接口
  4. SIGIR 2019 eBay高精度召回任务挑战赛冠军团队DeepBlueAI技术分享
  5. Same Sum Blocks
  6. 今天说说OPPO——OPPO 实时数仓揭秘:从顶层设计实现离线与实时的平滑迁移
  7. 牛客IOI周赛26-提高组(逆序对,对序列,未曾设想的道路) 题解
  8. 微信小程序 三元运算 checked
  9. kax格式怎么导入不了pr_pr如何导入.mogrt文件 pr模板导入教程
  10. 4-5:TCP协议之确认应答(ACK)机制和超时重传机制
  11. thymeleaf和freemarker比较
  12. Python提取.ipynb文件中的Python代码保存为.py文件
  13. 没有对应的Id ,报空指针异常
  14. TOB、TOC、TOVC
  15. Java 多线程:线程池实现原理
  16. 【LOJ】#3088. 「GXOI / GZOI2019」旧词
  17. activex 控件 过期,解决“无法注册Flash Player 的ActiveX控件”的问题
  18. ae怎么卸载已经安装的插件_ae红巨人插件卸载教程!
  19. 加权平均成本计算公式
  20. 判断char*是否为utf8编码

热门文章

  1. 联发科秘密武器MT6589M介绍及与MT6589对比
  2. Win10系统Docker搭建单机Redis环境
  3. 【第71期】破案了!库里为何会花18万美元买一个猴子头像?
  4. Ubuntu16.04 挂载硬盘(简单实用)
  5. 数据立方体计算与数据泛化
  6. Python笔记-day6
  7. Vim查找命令及快捷键
  8. SQL 存储过程 procedure 讲解+代码实例
  9. 理解高并发(9).线程通信之_wait、notify
  10. 彻底学会微服务之间的服务调用【第四期】