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

相关推荐
wangchunyu1143 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck3 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir3 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人4 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_944521594 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
南归北隐6 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
古法老登瞎折腾6 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
ai大模型-探索者6 小时前
Function Call与MCP(区别、联系与实战)
java·服务器·网络
略略略咯咯6 小时前
啊啊啊啊啊
java·服务器·数据库
SL_staff6 小时前
运维救火实战:钉钉API变更致薪资计算中断,如何用可视化逻辑引擎5分钟热修复
java·开源·全栈