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

【计算机网络 - 基础问题】每日 3 题(二十)

✍个人博客:Pandaconda-CSDN博客
📣专栏地址:http://t.csdnimg.cn/fYaBd
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
📝推荐参考地址:https://www.xiaolincoding.com/(这个大佬的专栏非常有用!)

58. UDP 和 TCP 有什么区别呢?分别的应用场景是?

TCP 和 UDP 区别:

  1. 连接
  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP 是不需要连接,即刻传输数据。
  1. 服务对象
  • TCP 是一对一的两点服务,即一条连接只有两个端点。
  • UDP 支持一对一、一对多、多对多的交互通信
  1. 可靠性
  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议。
  1. 拥塞控制、流量控制
  • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
  • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
  1. 首部开销
  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
  1. 传输方式
  • TCP 是流式传输,没有边界,但保证顺序和可靠。
  • UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
  1. 分片不同
  • TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
  • UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。

TCP 和 UDP 应用场景:

由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:

  • FTP 文件传输;
  • HTTP / HTTPS;

由于 UDP 面向无连接,它可以随时发送数据,再加上 UDP 本身的处理既简单又高效,因此经常用于:

  • 包总量较少的通信,如 DNS 、SNMP 等;
  • 视频、音频等多媒体通信;
  • 广播通信;

59. TCP 和 UDP 的头部列举

TCP 头部包含以下字段:

  • 源端口(16 bits):源主机使用的端口号。
  • 目标端口(16 bits):目标主机使用的端口号。
  • 序列号(32 bits):TCP 传输数据的字节流编号,用于保证数据的有序性。
  • 确认号(32 bits):对方期望收到的下一个字节的序列号,用于确认接收到的数据。
  • 数据偏移(4 bits):TCP 头部长度的字段,指明 TCP 头部占用的 32 位字的数量。
  • 保留(6 bits):保留字段,用于将来使用。
  • 控制位(6 bits):用于标识 TCP 连接的状态和控制信息,包括 SYN、ACK、FIN 等。
  • 窗口大小(16 bits):用于流量控制,指明发送方所期望的接收窗口大小。
  • 检验和(16 bits):用于检测 TCP 头部和数据的错误。
  • 紧急指针(16 bits):指明紧急数据的最后一个字节的位置。
  • 选项和填充:可选的TCP选项和填充字节。

UDP 头部包含以下字段:

  • 源端口(16 bits):源主机使用的端口号。
  • 目标端口(16 bits):目标主机使用的端口号。
  • 长度(16 bits):UDP 报文的总长度,包括头部和数据。
  • 校验和(16 bits):用于检测 UDP 头部和数据的错误。

总的来说,TCP 头部包含了更多的字段,用以支持可靠传输、流量控制、拥塞控制等机制;而 UDP 头部较为简单,只包含基本的信息。两者在不同的应用场景中使用,根据需要选择合适的协议。

60. 为什么 UDP 头部没有「首部长度」字段,而 TCP 头部有「首部长度」字段呢?

原因是 TCP 有可变长的「选项」字段,而 UDP 头部长度则是不会变化的,无需多一个字段去记录 UDP 的首部长度。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • nginx+keepalived健康检查案例详解(解决nginx出现故障却不能快速切换到备份服务器的问题)
  • 也遇到过 PIL Image “image file is truncated“的问题
  • 锤炼核心技能以应对编程革命
  • AndroidLogger插件使用技巧
  • JW01二氧化碳传感器(串行通信 STM32)
  • Linux:八种重定向详解(万字长文警告)
  • 低代码中实现数据映射的必要性与方案
  • 【计网】从零开始掌握序列化 --- 实现网络计算器项目
  • 细说硫酸钙防静电地板的材质结构和优势特点
  • 产品经理面试整理-常见面试问题
  • 开放原子开源基金会OPENATOM
  • 京准电钟:NTP网络校时服务器助力校园体育场馆
  • 论文 | Reframing Instructional Prompts to GPTk’s Language
  • 等保测评与企业内部安全管理体系的融合
  • 虚幻引擎游戏保存/加载存档功能
  • Cookie 在前端中的实践
  • JavaScript创建对象的四种方式
  • js
  • SpriteKit 技巧之添加背景图片
  • Web设计流程优化:网页效果图设计新思路
  • 浮现式设计
  • 高程读书笔记 第六章 面向对象程序设计
  • 马上搞懂 GeoJSON
  • 码农张的Bug人生 - 见面之礼
  • 三分钟教你同步 Visual Studio Code 设置
  • 微信小程序填坑清单
  • 整理一些计算机基础知识!
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • !$boo在php中什么意思,php前戏
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (一)80c52学习之旅-起始篇
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .apk 成为历史!
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET C# 配置 Options
  • .Net Core 中间件验签
  • .net 获取url的方法
  • .NET框架设计—常被忽视的C#设计技巧
  • .net专家(高海东的专栏)
  • @SuppressWarnings注解
  • [20161101]rman备份与数据文件变化7.txt
  • [AI 大模型] 百度 文心一言
  • [C++] vector list 等容器的迭代器失效问题
  • [CSDN首发]鱿鱼游戏的具体玩法详细介绍
  • [GYCTF2020]Ez_Express
  • [HJ56 完全数计算]
  • [IMX6DL] CPU频率调节模式以及降频方法
  • [one_demo_12]递归打印*\n*.*.\n*..*..\n图形
  • [Python GUI PyQt] PyQt5快速入门
  • [python]python监听、操作键盘鼠标库pynput详细教程
  • [SageMath] 关于SageMath本地环境的搭建与基本使用