华为OD技术面真题 - 计算机网络 - 2

文章目录

  • 介绍一下TCP和UDP
    • TCP
    • UDP
  • 什么时候选择UDP,什么时候选择TCP?
  • TCP连接为什么要三次握手
  • TCP为什么挥手为什么要分为四步
  • 基于TCP和UDP常见协议
  • 使用UDP传输数据的系统一定不可靠吗?
  • TCP是如何保证可靠传输

介绍一下TCP和UDP

TCP

TCP(Transmission Control Protocol)传输控制协议,提供了一种面向连接可靠字节流服务。属于传输层协议。

特点:

  • 面向连接:通信前必须先建立连接(三次握手),通信结束要释放连接(四次挥手),双方在通信前要确认彼此的存在和状态。
  • 提供可靠传输:TCP 提供可靠、有序、不丢失、不重复的数据传输。
    • 不丢失:TCP使用确认应答(ACK)机制传输,发送方没收到接收方ACK会进行重传。
    • 数据不重复:TCP每个字节都有一个序号,接收方可以识别重复数据并丢弃。
    • 数据有序:即使网络中乱序到达,TCP 会按序号重新排序后再交付应用层
    • 数据无差错:使用校验和,出错的数据段会被丢弃并重传。
  • 面向字节流:TCP 把应用层数据看成连续的字节流,不保留应用层的“消息边界。
  • 全双工通信:通信双方可以同时发送和接收数据

TCP报文格式:

  • 序号: TCP传输过程,在发送端发出的字节流中,传输报文中的数据部分的每个字节都有它的编号。占32位,发送方发送数据都需要标记序号。TCP协议通过序号对上层提供有序的字节流.序号的语义与SYN控制标识有关,根据SYN是否为1,序号表达不同的含义:
    • SYN=1,当前为连接建立阶段,此时的序号为初始序号ISN(Initial Sequence Number),通过算法随机生成序号
    • SYN=0,数据传输开始,第一个报文的序号为ISN+1,后面的序号为前一个SN的值 + TCP报文的静载荷字节数。
  • 确认序号: 标识报文接收端期望接收的字节序列。如果设置了ACK控制位,确认序号的值表示一个准备接收的包的序列码。
  • 头部长度: 占四位,表示TCP报文首部的长度,单位4字节。
  • 保留字段:预留的字段长度为6位
  • 控制标志:
    • URG: 1位,表示紧急指针字段有效。,此标志用通知接收方,紧急数据需要优先处理。
    • ACK:1位,表示确认字段有效。确认接受到了之前发送的数据。
    • PSH: 提示接收端应立即处理并推送接收到的数据到应用层,而不必等待缓冲区填满。
    • RST: 重置连接,用于强制关闭连接或拒绝连接。当出现不正常通信情况。
    • SYN: 初始化连接,在TCP握手的第一个步骤发出,用于同步序列号。
    • FIN: 表示发送方已经发送完数据,并希望关闭连接。
  • 窗口大小:长度为16位。用来进行流量控制,流量控制单位为字节数,值是本端期望一次接收的字节数。
  • 校验和:16位,对整个TCP报文段,即TCP头部和TCP数据进行检验和计算,接收端用于对数据进行校验。
  • 紧急指针:16位,一个偏移量,和SN序号值相加表示紧急数据最后一个字节的序号。
  • 选项和填充: 在这部分可以增加可选项, 填充需要确保Tcp头是32位的整数倍,

UDP

User Datagram Protocol,用户数据报协议,基于IP协议提供面向无连接的网络通信服务。特点:简单不可靠面向数据报。 UDP协议属于ISO网络模型的传输层协议。

特点:

  • 无连接: 两台主机在使用UDP进行数据传输时,不需要建立连接,只需要知道对方端的IP和端口号即可把数据发送过去。
  • 不可靠:UDP协议没有确认重传机制,如果因为网络故障导致报文无法发到对方,或者对方接收到了报文,但是传输过程中乱序了,对方检验失败后把乱序的包丢了,UDP协议层也不给应用层任何错误反馈信息。
  • 面向数据报:以数据报文为单位一个个发出去,然后一个个接收的,导致上面的应用层无法灵活控制数据的读写次数和数量。

UDP报文格式:

  • 源端口号: 发送方的端口,用于唯一确认发送方主机的一个进程。 大小范围1-65535
  • 目的端口: 接收方的端口,用于唯一确认接收方主机的一个进程。大小范围1-65535
  • UDP长度:一个UDP报文所能传输的最大长度是64K,包含UDP首部。
  • UDP校验和: 为了确保数据包在传送过程中,数据检测数据是否被篡改和丢失的一种手段。通过二进制补码求和进行校验,校验和的内容包括:
    • 伪首部(IP数据包的一部分):源IP地址(32位),目的IP地址(32位),保留字段(8位, 0),协议号(8位, 指定为17,代表udp)UDP长度(16) UDP数据报的总长度,包括头部和数据
    • UDP首部:源端口号、目的端口号、长度字段、校验和字段(初始值为0)
    • UDP数据: 实际传输的应用层数据。

什么时候选择UDP,什么时候选择TCP?

主要从三个方面出发考虑:

  1. 适用场景:
    • TCP: 适用于需要可靠传输和有序数据流的应用场景。Web浏览、电子邮件、文件传输等需要可靠的数据传输,这些通常使用TCP协议。TCP通过确认和重传机制保证数据的可靠性,并且通过流量控制和拥塞控制适应网络状况,确保数据的有序传输。
    • UDP:UDP则适用于对实时性要求较高,且对数据顺序和完整性要求不那么严格的应用场景。例如,音频和视频流媒体、网络游戏等需要快速传输和实时交互,通常使用UDP协议。
  2. 传输速度:在传输速度方面,UDP通常比TCP更快。这是因为TCP协议为了保证数据的可靠传输,采用了确认机制、重传机制、流量控制和拥塞控制等机制,这些操作增加了处理时间和系统资源的消耗,导致传输速度相对较慢。而UDP则没有这些机制,可以更快地发送数据。
  3. 安全性:
    • TCP:TCP的安全性相对较高,因为它采用了确认机制、重传机制、流量控制和拥塞控制等机制,可以减少数据传输中的错误和攻击。此外,TCP的连接是面向连接的,需要在传输数据之前建立连接,这有助于防止未经授权的访问和数据泄漏。
    • UDP:UDP是无连接协议,可以直接发送数据,无需建立连接和断开连接等操作,因此速度较快,但这也增加了被攻击的风险

TCP连接为什么要三次握手

三次握手的目的:让双方能够同步各自的序列号和确认号,确保双向通信的可靠性。同时确保通信双方的发送能力和接受能力都正常。

先介绍一个TCP连接三次握手过程:

步骤解释:

  • 第一次握手:SYN
    • 客户端主动向服务端发送一个SYN请求,主动建立TCP连接,包中设置seq为a
  • 第二次握手:SYN-ACK
    • 服务端准许建立这个连接的情况下,向客户端返回一个SYN-ACK(同步-确认)包.
    • 返回包包含两个信息: ack=a+1,表示确认收到客户端seq为a的包。seq=b表示自己的初始序列号为b
  • 第三次握手: ACK
    • 客户端在接收端到服务端的SYN-ACK响应之后,发送一个 ACK(确认)包给服务器。
    • 这个包确认号为 ack = b + 1,表示已接收到服务器的 SYN 包。

三次握手各步骤作用:

  • 确保双方的可用性: 第一次握手(SYN)让服务端知道客户端主动想建立TCP连接,第二次(SYN-ACK)让客户端确认服务器的存在。
  • 序列号同步: 第一次握手和第二次握手过程中交换了双方在进行数据传输时的起始序列号。可以确保后续传递数据包的排序正确性。
  • 避免半开放连接:如果不进行第三次握手,可能导致连接客户端或者服务端认为连接已经建立,但另一方断开了。这种情况会导致存在潜在的半开放连接,导致资源浪费。

为什么不能两次握手?

服务器无法确认客户端的接收能力是否正常。如果服务器发的SYN+ACK客户端根本没收到,服务器却认为连接已经建立,客户端认为没建立成功.双方状态不一致,服务器资源会被浪费。

TCP为什么挥手为什么要分为四步

挥手的目的:确保在数据完整传输前提下,安全的断开连接。

先介绍一下四次挥手的步骤:

各步骤解释:

  • 第一次挥手:FIN
    • 主动断开方主动发送方发送一个FIN包,表示它已经没有数据要发送了,想要关闭连接。
    • 发送完FIN包之后,主动段开放进行FIN_WAITE_1状态。
  • 第二次挥手: ACK
    • 被动断开方收到FIN包之后,发送一个ACK包,表示确认收到关闭请求。
    • 发送完ACK包之后,被动断开方进入CLOSE_WAIT的状态。
  • 第三次挥手: FIN
    • 被动断开方在处理所有未完成的数据传输之后,会主动发送一个FIN包,表示自己已经准备好关闭连接请求了。
    • 被动断开方会进入LAST_ACK状态,等待客户端的ACK请求。
  • 第四次挥手: ACK
    • 主动断开方在接受到 对方法来的FIN包时,会立即发送一个ACK包,确保让对方知道已经接受到对方的关闭请求。
    • 发送ACK之后,主动断开方进入TIME_WAIT状态,等待一段时间以确保对方已经ACK,之后完全关闭连接。等待时间一般为2 * MSL(最大报文段存活时间),确保被动断开方能够收到ACK包(没有收到ACK包,被动断开方会重发FIN请求, 在2*MSL时间范围内)。

四个步骤的本质:

  • 第一步:客户端不再发送。
  • 第二步:服务器反馈知道客户端不发了
  • 第三步:服务器不再发送
  • 第四步:客户端知道服务器不发了

为什么需要四步挥手?

从上面步骤总结来看:TCP 采用四次挥手断开连接,是因为 TCP 是全双工通信协议,连接的两个方向需要分别关闭。任意一方在发送完数据后只能关闭自己的发送方向,对方可能仍有数据需要发送,因此需要分别发送 FIN 和 ACK 确认,最终完成连接的可靠释放。

基于TCP和UDP常见协议

这类问题询问形式,一般是xx协议基于什么TCP/UDP,这里直接做个总结

常见基于TCP的协议(协议用途):

  • HTTP/HTTPS:web服务
  • FTP:文件传输
  • SMTP:发送邮件
  • POP3:接受邮件
  • SSH:安全远程登录
  • Telnet:远程登录

常见基于UDP的协议(协议用途):

  • DNS:域名解析
  • DHCP:动态分配IP
  • TFTP:简单文件传输
  • NTP:网络时间同步
  • QUIC:基于 UDP 实现可靠传输,HTTP/3 使用。

使用UDP传输数据的系统一定不可靠吗?

结论:使用 UDP 传输的数据本身是不可靠的,但基于 UDP 构建的系统可以是可靠的,系统的可靠性可以放在应用层实现。

常见基于UDP可靠的例子:

  • QUIC/HTTP3:
    • 基于UDP
    • 同时可提供:可靠传输有序交付,拥塞控制,内建加密
  • DNS:失败之后自动会进行尝试。
  • 实时音视频:RTC/WebRTC协议,可以保证关键帧不丢失。

TCP是如何保证可靠传输

TCP 通过序号、确认应答、重传机制、校验和、滑动窗口、流量控制和拥塞控制等机制,保证数据可靠、有序、无差错地传输。

  1. 保证数据不丢失
    • 确认应答机制:每个 TCP 报文段都需要接收方确认
    • 超时重传:发送方在超时时间内没收到 ACK。认为数据丢失,自动重传。
    • 快重传:连续收到3 个重复 ACK,不等超时,立刻重传丢失段。
  2. 保证数据不重复、不乱序
    • TCP 给每个字节编号
    • 接收方:可以通过序号对数据进行去重和重排序。
  3. 保证数据无差错传输:
    • 校验和:发送前计算校验和,接收后校验,出错的报文段直接丢弃。
  4. 保证通信双方和中间传输网络不被压垮:
    • 拥塞控制可协调数据发送速率,具体包括
      • 慢启动
      • 拥塞控制
      • 快重传
      • 快恢复
  5. 保证可靠连接建立和释放
    • 通过三次握手可保证可靠连接建立。
    • 通过四次挥手可保证连接安全释放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机中的符号是什么意思?

author: hjjdebug date: 2026年 01月 08日 星期四 12:45:41 CST descrip: 计算机中的符号是什么意思? 文章目录 甲. 什么叫符号?0 下面是测试代码1 用 $ nm test 可列出其所有符号,非常简明2. 用 $ readelf -s test 有对符号更细致的描述.3. 用 $ readelf --dyn-syms test 会…

深度学习毕设选题推荐:基于python-CNN卷积神经网络对盆栽识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

导师严选8个AI论文写作软件,专科生搞定毕业论文+格式规范!

导师严选8个AI论文写作软件,专科生搞定毕业论文格式规范! AI 工具助力论文写作,专科生也能轻松应对 在当今学术写作领域,AI 工具正逐步成为学生和科研工作者的得力助手。尤其是对于专科生而言,面对毕业论文的撰写压力&…

导师推荐9个一键生成论文工具,自考本科生轻松搞定毕业论文!

导师推荐9个一键生成论文工具,自考本科生轻松搞定毕业论文! AI 工具助力论文写作,自考学生不再焦虑 在当前的学术环境中,越来越多的自考本科生开始借助 AI 工具来辅助完成毕业论文。这些工具不仅能够有效降低 AIGC 率,…

两句话理解 ElasticSearch 搜索引擎数据库的作用

一个有两千万商品的商品表,如何提高根据商品名关键字检索商品的效率,搜索引擎数据库 ElasticSearch 一、个人理解 在 MySQL 数据库中有一个商品表,表中有 2 千万个商品数据,现在要根据商品名称关键字,去查找相关的商品…

程序员必看:Docker+Dify+DeepSeek本地部署大模型+知识库完整教程(含实操,建议收藏)

本文详细介绍了如何使用Docker、Dify和DeepSeek搭建本地大模型系统。通过安装Docker环境,部署Dify平台,配置DeepSeek和bge-large模型,上传私有知识库,最终创建个性化AI助手。这种本地部署方式能让大模型学习个人专业知识&#xff…

SnapShot硬盘备份软件:一款小巧强大的德国军工级数据备份方案

在系统维护、数据迁移和灾难恢复场景中,一款可靠、快速的备份工具至关重要。与Acronis True Image、Ghost等大型商业软件不同,Drive SnapShot​ 以其“小而美”的设计哲学脱颖而出。它用极小的体积实现了专业级备份软件的核心功能,尤其适合技…

【干货收藏】RAG调优完整指南:从基础到GraphRAG,提升大模型回答准确率

文章详解RAG系统调优方法,包括知识库优化(检索优化、知识沉淀、健康度检查)、高级召回排序技术(混合检索、重排序、查询扩展)及GraphRAG解决复杂查询。提出三阶段进阶路径:起步期优化分词和混合检索&#x…

mysql的分区表

1.SQL表创建 下面以时间范围进行创建(每月一个分区,表中创建了四个月的分区) 创建:CREATE TABLE test_table ( id INT NOT NULL AUTO_INCREMENT, content VARCHAR(255), create_time DATETIME NOT NULL,PRIMARY KEY (id, creat…

保姆级教程:使用Dify搭建知识库+Ollama部署本地模型,零基础也能轻松上手!

本文详细介绍了两大步骤:首先讲解如何安装配置Dify并调整文件上传限制;其次指导使用Ollama部署本地模型,包括安装配置、监听设置及模型名称获取。通过本教程,读者可掌握搭建个人知识库和本地AI服务的完整流程,适合想要…

最新APP导航下载页系统源码 带后台

非常好看的一款App导航推荐页源码,带后台,这是一款PHP源码,Thinkphp框架,这款源码安装非常便捷干净,后台添加应用及轮播广告也非常方便,网站自适应PC手机自适应,喜欢的自行部署吧!安…

AI产品经理进阶指南+大模型全栈学习路线:104G资源包助你从零到实战

文章详解AI产品经理与通用产品经理的区别、必备技能及转型路径,并系统介绍大模型七大学习阶段,从系统设计到行业应用实战。同时提供100套AI商业化方案、全套视频教程和200本PDF书籍等资源,帮助程序员和小白系统掌握大模型技术,实现…

深度学习毕设选题推荐:基于python_CNN卷积神经网络对甜点识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

公众号图片圆角与阴影样式配置实战(以135编辑器为例)

摘要:本文聚焦公众号图片圆角(border-radius)与阴影(box-shadow)样式配置的核心需求,以135编辑器为实操案例,从操作步骤、参数解析到避坑指南,全流程拆解可视化样式配置的实现逻辑。…

千寻运动助手V3.1小程序源码 全开源版

会员积分流量主自动化任务全功能上线基于PHPMySQL的运动步数管理助手,支持VIP自动任务、积分体系、流量主变现,打造专属健康运动小程序项目简介:运动健康领域的全能助手在全民健身和数字化健康管理的时代背景下,一款能够激励用户运…

基于C++Qt实现邮政客户投诉工单处理系统[2026-01-07]

基于CQt实现邮政客户投诉工单处理系统[2026-01-07] 项目介绍 邮政客户投诉工单处理系统是一个基于Qt框架开发的信息管理系统,主要用于处理邮政客户的投诉工单,实现了投诉工单的创建、处理、审核、统计等全流程管理。系统支持多角色权限管理&#xff0c…

《计算机网络》深入学:组帧

在计算机网络的世界里,物理层像是一个不知疲倦的搬运工,它只负责传输比特流(0 和 1),却并不关心这些比特代表什么意义。 而数据链路层(Data Link Layer) 的核心任务之一,就是把这些…

MySQL数据误删或者误更新如何恢复(详细步骤,一看就会)

目录 本篇文章适用场景 一、下载MyFlash工具二、误删数据恢复 先检查MySQL有没有开启binlog日志演示误删除数据利用MyFlash工具 反写SQL利用mysqlbinlog 执行反写的sql二进制文件恢复完成 三、误更新数据恢复 演示误更新数据查看binlog最近的更新记录 ,确定起始、结…

空间计算开发者技能指南 2026

空间计算时代的来临:定义、生态与技术共振 “空间计算”(Spatial Computing)不仅仅是营销术语,它标志着计算平台从二维屏幕向三维物理空间的范式转移。虽然 Apple 将 visionOS 定义为空间计算操作系统,但在更广泛的开…

通信协议仿真:通信协议基础_(7).协议仿真的工具与软件

协议仿真的工具与软件 在通信协议仿真领域,选择合适的工具和软件是至关重要的。这些工具和软件可以帮助我们更高效地设计、实现和测试通信协议。本节将详细介绍一些常用的协议仿真工具及其使用方法,包括NS-3、OMNeT++、MATLAB等。 1. NS-3 NS-3(Network Simulator 3)是一…