当前位置: 首页 > news >正文

秋招Day12 - 计算机网络 - UDP

说说TCP和UDP的区别?

TCP使用无边界的字节流传输,可能发生拆包和粘包,接收方并不知道数据边界;UDP采用数据报传输,数据报之间相互独立,有边界

应用场景方面,TCP适合对数据的可靠性要求高于速率要求的场景,比如邮件传输文件传输网页浏览。UDP适合对速率要求高、可以容忍一定数据丢失的场景,比如即时聊天在线视频语音电话

你会如何设计QQ中的网络协议?

首先是登陆功能,由于需要准确性和数据加密,所以采用TCP + SSL/TSL协议来进行登陆。

登陆之后的即时聊天/语音视频通话功能,由于实时性要求高,所以采用UDP协议。

如何保证消息的不丢失?

对于TCP协议来说,如果发生消息丢失,则会尝试进行重传(RTO超时重传/快速重传

对于UDP协议,可以通过应用层的重传机制来保证消息不丢失。当接收方的应用层收到消息后,发送一个确认信息给发送方,如果发送方没有收到确认信息,则重传。同时,每个消息都有一个序列号,接收方通过序列号来判断消息是否丢失,如果发现序列号不连续,就要求发送方重新发送,这样还可以避免消息重复。

消息持久化也很重要,可以将消息保存在服务器或者本地数据库中,即时网络断连,也能从数据库中恢复消息。

为什么QQ采用UDP协议?

  • QQ并不是全部采用UDP协议,比如文件传送采用的是TCP保证可靠性。
  • 使用UDP传输信息的好处是延迟较低,对于数据丢失的处理比较简单。TCP是一个全双工的协议,需要建立连接,网络开销较大
  • 如果使用QQ语音或者视频通话,UDP的优势更能显现,首先延迟较小,其次是偶尔的丢包不需要重传,因为用户可以接受偶尔的卡顿和画面模糊,但是如果频繁出现几秒前的画面和声音,几乎是不可接受的。
  • QQ的服务器设计容量是海量级的,一台服务器要容纳几十万的并发连接,因此服务器只有采用UDP与客户端通信才能保证如此大规模的服务,服务器压力小。

UDP协议为什么不可靠?

  • 不保证消息交付:无确认、无重传、无超时
  • 不保证交付顺序:无序号、不重排、无队首阻塞(TCP需要等待丢失的数据重传才能把数据交付到应用层)
  • 不跟踪连接状态
  • 不进行拥塞控制

DNS为什么要用UDP?

DNS既使用TCP又使用UDP。

使用TCP的情况是区域传送,也就是DNS服务器之间同步域名解析数据时。因为数据同步所要传输的数量大于普通的请求和响应,而TCP能够传输更大的报文长度,而且为了保证数据的正确性,所以使用TCP。

客户端向DNS服务器请求域名解析的时候使用UDP,服务器返回的内容不会超过UDP的最大允许长度,并且不需要建立连接,大大提升的响应速度,但这要求客户端自己有超时处理/请求重传/重试机制来保证响应数据的可靠性。

相关文章:

  • 05.MySQL表的约束
  • 如何区分虚拟货币诈骗与经营失败?
  • STM32G4 电机外设篇(四)DAC输出电流波形 + CAN通讯
  • Vue-3-前端框架Vue基础入门之VSCode开发环境配置和Tomcat部署Vue项目
  • paoxiaomo的XCPC算法竞赛训练经验
  • C++中实现随机数(超详细!​​​​​)
  • 黑马程序员C++核心编程笔记--4 类和对象--多态
  • 1.文件操作相关的库
  • Java Netty 中处理粘包和半包问题的解决方案 | TCP消息完整性校验(XOR )
  • 基于GPT-SoVITS-v4-TTS的音频文本推理,流式生成
  • SOC-ESP32S3部分:25-HTTP请求
  • 移动AI神器GPT Mobile:多模型自由切换
  • 基于SpringBoot运动会管理系统设计和实现(源码+文档+部署讲解)
  • 抛砖引玉:RadarDet4D,NuScenes数据集Radar模态目标检测第二名(即将开源)
  • 道路目标检测和分类数据集
  • 神经网络中的梯度消失与梯度爆炸
  • TC3xx学习笔记-启动过程详解(一)
  • 【MySQL基础】库的操作:创建、删除与管理数据库
  • Docker私有仓库Harbor安装指南
  • 《深度剖析:基于Meta的GameFormer构建自博弈AI游戏代理》
  • c 做网站/服务营销策划方案
  • 用.net做的网站/营销推广软件
  • 重庆网站营销靠谱/百度图片收录提交入口
  • 集美区网站建设/上海十大营销策划公司
  • 免费的tickle网站/郑州seo排名第一
  • 含山县城市建设有限公司网站/企业门户网站模板