秋招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的最大允许长度 ,并且不需要建立连接,大大提升的响应速度,但这要求客户端自己有超时处理/请求重传/重试机制来保证响应数据的可靠性。

相关推荐
乐观的Terry21 分钟前
1、为什么要自己造发布系统
java·spring boot·后端·spring cloud·架构
兰令水34 分钟前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
名字还没想好☜1 小时前
用 Redis + Redisson 实现分布式锁:从踩坑到生产可用
java·redis·分布式·junit·分布式锁·redisson
谙忆1 小时前
图片CDN与边缘优化实战:缓存策略、图片处理型CDN与动态裁剪
java·spring·缓存
ltqvibe2 小时前
怎么让本体语义变成可执行的智能体
java·人工智能·本体语义
javajenius2 小时前
Masslynx 4.1安装包免费下载及详细安装教程
java·服务器·前端·其他
程序员吕洞宾2 小时前
开源多维表格SmartTable V1.6.1:工作流画布,让自动化工作流配置更直观、更方便
java·开源·自动化
我登哥MVP2 小时前
走进 Gang of Four 设计模式:访问者模式
java·设计模式·访问者模式·原型模式
雪碧聊技术2 小时前
一文深入理解 Java 函数式编程思想
java·函数式编程
AIGS0012 小时前
突破语义鸿沟:从向量空间JBoltAI看企业大脑构建逻辑
java·大数据·人工智能·人工智能ai大模型应用