面试计算机网络框架八股文十问十答第七期
面试计算机网络框架八股文十问十答第七期
作者:程序员小白条,个人博客
相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!
⭐点赞⭐收藏⭐不迷路!⭐
1)UDP协议为什么不可靠?
UDP(用户数据报协议)是一种无连接的、不可靠的传输协议。它的不可靠性主要体现在以下几个方面:
- 无连接性: UDP 不需要在发送数据之前建立连接,也不维护连接状态,因此不会进行握手和维持连接的开销。这使得 UDP 更加轻量级,但也使得它无法保证数据的可靠传输。
- 不保证数据的到达顺序: 由于 UDP 不会对数据包进行排序和重组,因此发送的数据包的到达顺序不一定与发送顺序一致。在网络中,数据包可能会因为不同的路由和网络拥塞情况而以不同的顺序到达目的地。
- 不提供重传机制: UDP 协议本身不提供重传机制。如果一个数据包在传输过程中丢失,UDP 协议不会负责重新发送该数据包,而是由应用层自行处理丢失的情况。
因此,尽管 UDP 在一些对实时性要求高、数据丢失对应用影响不大的场景下表现出色,但在对数据完整性和可靠性要求较高的场景下,通常会选择使用 TCP 协议。
2)TCP的重传机制
TCP(传输控制协议)是一种面向连接的、可靠的传输协议。TCP 通过以下机制来保证数据的可靠传输:
- 序列号和确认应答: TCP 在发送的数据包中会包含序列号,接收方收到数据后会发送确认应答,告知发送方已经收到了哪些数据。如果发送方在合理的超时时间内没有收到确认应答,就会认为数据丢失,进行重传。
- 超时重传: 如果发送方在一定时间内没有收到确认应答,就会重新发送相同的数据包。TCP 会动态调整重传的超时时间,以适应网络的变化。
- 快速重传: 如果发送方收到了对同一数据包的三个重复的确认应答,就会认为接收方已经丢失了后续的数据,立即进行快速重传,而不必等待超时时间到期。
3)TCP的拥塞控制机制
TCP 的拥塞控制是为了避免过多的数据注入到网络中,导致网络拥塞,从而影响网络性能。TCP 的拥塞控制主要包括以下几个机制:
- 慢启动: 发送方在连接刚建立时,会以指数增长的速率增加发送窗口大小,以快速填满网络的带宽。
- 拥塞避免: 一旦发送方开始遇到丢包,就会进入拥塞避免阶段,发送窗口大小会线性增长,而不是指数增长,以降低发送速率。
- 快速重传和快速恢复: 当发送方收到对同一数据包的三个重复的确认应答时,会触发快速重传和快速恢复机制,以快速调整发送窗口大小,避免继续注入更多的数据到网络中。
通过这些拥塞控制机制,TCP 能够在一定程度上适应网络的拥塞情况,保证网络的稳定性和公平性。
4)TCP的流量控制机制
TCP 的流量控制是为了防止发送方发送过多的数据,导致接收方无法处理。流量控制主要通过滑动窗口(Sliding Window)机制来实现:
- 接收窗口(rwnd): 接收方在通信的过程中会通知发送方自己当前的接收窗口大小,即能够接收的数据量。发送方根据这个信息来控制发送的数据量,保证不会超过接收方的处理能力。
- 滑动窗口: 发送方维护一个发送窗口,表示可以发送但还未收到确认的数据段的范围。滑动窗口的大小受到接收方通知的接收窗口大小和网络的实际情况的影响。
通过动态调整滑动窗口的大小,TCP 实现了流量控制,确保在通信过程中不会因为发送方速度过快而导致接收方无法处理。
5)TCP的可靠传输机制
TCP 的可靠传输机制主要包括以下几个方面:
- 序列号和确认应答: 发送方会为每个数据包分配一个序列号,接收方通过确认应答来告知发送方已经正确接收到数据。如果发送方在一定时间内未收到确认应答,会进行重传。
- 超时重传: 如果发送方在合理的超时时间内未收到确认应答,会认为数据包丢失,进行超时重传。
- 快速重传和快速恢复: 当发送方收到对同一数据包的三个重复的确认应答时,会触发快速重传和快速恢复机制,以快速调整发送窗口大小。
- 选择性重传: 发送方能够选择性地重传丢失的数据包,而不是重新传输所有的数据。
这些机制使得 TCP 在不可靠的网络环境中能够保证数据的可靠传输。
6)TCP的三次握手和四次挥手
TCP 的连接建立和断开分别通过三次握手和四次挥手来完成:
三次握手(Connection Establishment):
- 客户端发送 SYN: 客户端发送一个带有 SYN(同步)标志的数据包,表示请求建立连接。
- 服务端发送 SYN + ACK: 服务端收到客户端的请求后,回复一个带有 SYN 和 ACK(确认)标志的数据包,表示同意建立连接。
- 客户端发送 ACK: 客户端收到服务端的确认后,发送一个带有 ACK 标志的数据包,表示连接建立完成。
四次挥手(Connection Termination):
- 客户端发送 FIN: 客户端发送一个带有 FIN(结束)标志的数据包,表示要关闭连接。
- 服务端发送 ACK: 服务端收到客户端的关闭请求后,发送一个带有 ACK 标志的数据包,表示接收到关闭请求。
- 服务端发送 FIN: 服务端发送一个带有 FIN 标志的数据包,表示服务端也准备关闭连接。
- 客户端发送 ACK: 客户端收到服务端的关闭请求后,发送一个带有 ACK 标志的数据包,表示确认关闭。此时连接彻底关闭。
这样的握手和挥手机制确保了双方在建立和关闭连接时的可靠性和同步性。
7)TCP粘包是怎么回事,如何处理?
TCP粘包是指发送方发送的若干小数据包到达接收方时,接收方可能会将它们合并成一个大的数据包,从而导致接收方处理时难以区分原始的数据边界。这可能会引发一些问题,比如数据解析错误或应用层处理混乱。
原因:
- 缓冲机制: 操作系统或中间网络设备的缓冲机制可能会导致多个小数据包在传输过程中被合并成一个大的数据包。
- 发送速率: 发送方连续发送数据包的速率比接收方处理的速率快,导致多个数据包在传输过程中组成一个大的数据包。
处理方法:
- 消息长度标识: 在传输的数据中增加消息长度的信息,接收方通过解析长度信息来拆分数据。
- 特殊字符标识: 在消息之间增加特殊字符标识,接收方根据特殊字符来切分数据。
- 定长消息: 固定长度的消息,不足长度时用空格或其他填充。
- 使用消息边界标记: 在数据包的开头或结尾添加标记表示消息的开始或结束。
- 应用层协议设计: 在应用层设计协议时,可以采用更复杂的协议规定来避免粘包问题。
8)为什么udp不会粘包?
UDP是无连接的、不可靠的协议,它对数据包的传输不做任何拆分或合并的处理,因此不存在TCP粘包的问题。每个UDP数据包都是独立的,不会受到底层协议的影响而被合并,接收方能够按照发送方发送的数据包一一接收。
UDP的简单性和无连接性使得它不会进行复杂的缓冲和组包操作,也就不会出现TCP粘包的情况。然而,正因为UDP不保证可靠传输,应用层需要自行处理丢包、重复和顺序等问题。
9)对 WebSocket 的理解
WebSocket是一种在单个TCP连接上进行全双工通信的协议,它允许客户端和服务器之间进行实时、双向的数据传输。相比于传统的HTTP协议,WebSocket的优势在于降低了通信的延迟,提高了效率。
特点和优势:
- 全双工通信: 可以同时在同一个连接上进行双向通信,服务器可以向客户端推送数据,而不需要等待客户端的请求。
- 低延迟: 由于建立一次连接后可以持久存在,避免了HTTP协议中频繁的连接建立和断开,降低了通信的延迟。
- 轻量级: WebSocket协议的头部较小,通信时的数据帧相对较小,减少了网络传输的开销。
- 跨域通信: 支持跨域通信,通过一定的握手过程建立连接,使得客户端和服务器可以跨域进行实时通信。
10)即时通讯的实现:短轮询、长轮询、SSE 和 WebSocket 间的区别?
即时通讯的实现方式有多种,其中常见的包括短轮询(Short Polling)、长轮询(Long Polling)、SSE(Server-Sent Events)和WebSocket。
- 短轮询(Short Polling):
- 客户端定期发送HTTP请求询问是否有新消息。
- 服务器响应时,返回当前可用的消息。
- 缺点:频繁的HTTP请求可能造成不必要的开销,延迟高。
- 长轮询(Long Polling):
- 客户端发送HTTP请求到服务器,服务器保持连接打开,直到有新消息才响应给客户端。
- 客户端收到响应后立即再次发起请求。
- 缺点:仍然存在较高的延迟,但相较于短轮询减少了请求的频率。
- SSE(Server-Sent Events):
- 使用单个HTTP连接,服务器可以主动推送数据给客户端。
- 基于事件流的机制,通过EventSource对象在客户端接收服务器的推送。
- 缺点:仅支持单向通信,不适合需要双向通信的场景。
- WebSocket:
- 建立在单个TCP连接上,支持全双工通信。
- 通过握手过程建立连接,之后可以双向发送消息。
- 优点:低延迟,支持双向通信,适用于实时性要求高的场景。
总的来说,短轮询和长轮询通过HTTP请求,存在较高的延迟和开销;SSE是基于HTTP的单向通信,适用于服务器向客户端推送数据;WebSocket是全双工通信,延迟低,适用于实时性要求高的即时通讯场景。选择哪种方式取决于具体的需求和场景。
开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
已 300 + Star!
⭐点赞⭐收藏⭐不迷路!⭐
相关文章:
面试计算机网络框架八股文十问十答第七期
面试计算机网络框架八股文十问十答第七期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)UDP协议为什么不可…...

Codeforces Round 926 (Div. 2)
A. Sasha and the Beautiful Array(模拟) 思路 最大值减去最小值 #include<iostream> #include<algorithm> using namespace std; const int N 110; int a[N];int main(){int t, n;cin>>t;while(t--){cin>>n;for(int i 0; i…...

构建智慧交通平台:架构设计与实现
随着城市交通的不断发展和智能化技术的迅速进步,智慧交通平台作为提升城市交通管理效率和水平的重要手段备受关注。本文将探讨如何设计和实现智慧交通平台的系统架构,以应对日益增长的城市交通需求,并提高交通管理的智能化水平。 ### 1. 智慧…...

移动端设置position: fixed;固定定位,底部出现一条缝隙,不知原因,欢迎探讨!!!
1、问题 在父盒子中有一个子盒子,父盒子加了固定定位,需要子盒子上下都有要边距,用margin或者padding挤开时,会出现缝隙是子盒子背景颜色的。 测试过了,有些手机型号有,有些没有,微信小程序同移…...

有关网络安全的课程学习网页
1.思科网络学院 免费学习skillsforall的课程 课程链接:Introduction to Cybersecurity by Cisco: Free Online Course (skillsforall.com) 2.斯坦福大学计算机和网络安全基础 该证书对于初学者来说最有价值,它由最著名的大学之一斯坦福大学提供。您可…...
计算机网络-面试题
一、基础 1、网络编程 网络编程的本质是多台计算机之间的数据交换存在问题 如何准确的定位网络上一台或多台主机如何进行可靠传输2、网络协议 在计算机网络有序的交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式、是否需要发送一个应答信息。这些规则被称为网络…...
C++虚函数
C虚函数 在C中,虚函数(Virtual Function)是一个使用关键字virtual声明的成员函数,它在基类中被声明,以便在任何派生类中被重写(Override)。使用虚函数的目的是实现多态性——一种允许使用基类指…...

MySQL数据库基础(二):MySQL数据库介绍
文章目录 MySQL数据库介绍 一、MySQL介绍 二、MySQL的特点 三、MySQL版本 四、MySQL数据库下载与安装 1、下载 2、安装 五、添加环境变量(Windows) 六、检测环境变量是否配置成功 MySQL数据库介绍 一、MySQL介绍 MySQL是一个关系型数据库管理…...
常用文件命令
文章目录 文件命令文件内容查看catnlmoreless(more的plus版)headtailod 文件属性操作用户权限常见的权限chownchmodchgrpumask 隐藏属性常见的隐藏属性lsattrchattr 查找文件查看文件类型查找文件位置whichwhereislocatefind 文件操作(复制、…...

在屏蔽任何FRP环境下从零开始搭建安全的FRP内网穿透服务
背景 本人目前在境外某大学读博,校园网屏蔽了所有内网穿透的工具的数据包和IP访问,为了实现在家也能远程访问服务器,就不得不先开个学校VPN,再登陆。我们实验室还需要访问另一个大学的服务器,每次我都要去找另一个大学…...

OpenGL-ES 学习(1)---- AlphaBlend
AlphaBlend OpenGL-ES 混合本质上是将 2 个片元的颜色进行调和(一般是求和操作),产生一个新的颜色 OpenGL ES 混合发生在片元通过各项测试之后,准备进入帧缓冲区的片元和原有的片元按照特定比例加权计算出最终片元的颜色值,不再是新…...
Python 函数的学习笔记
Python 函数的学习笔记 0. Python 函数的概要说明1. 自定义函数示例2. 匿名函数示例3. 内置函数示例3-1. filter() 示例3-2. map() 示例3-3. reduce() 示例 4. 可变长参数*args和**kwargs示例4-1. *args(Positional Variadic Arguments)4-2. **kwargs&am…...

详解 Redis 实现数据去重
✨✨ 欢迎大家来到喔的嘛呀的博客✨✨ 🎈🎈希望这篇博客对大家能有帮助🎈🎈 目录 言 一. Redis去重原理 1. Redis Set 数据结构 2. 基于 Set 实现数据去重 3. 代码示例 4. 总结 …...

FreeRTOS 延迟中断处理
采用二值信号量同步 二值信号量可以在某个特殊的中断发生时,让任务解除阻塞,相当于让任务与中断 同步。这样就可以让中断事件处理量大的工作在同步任务中完成,中断服务例程(ISR) 中只是快速处理少部份工作。如此,中断处理可以说是…...

计网体系结构
计算机网络的概述 概念 网络:网状类的东西或系统。 计算机网络:是一个将分散的、具有独立性功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。即计算机网络是互连(通过通信链路互连…...

linux系统zabbix工具监控web页面
web页面监控 内建key介绍浏览器配置浏览器页面查看方式 监控指定的站点的资源下载速度,及页面响应时间,还有响应代码; web Scenario: web场景(站点)web page :web页面,一个场景有多…...

VMware虚拟机网络配置
VMware虚拟机网络配置 桥接模式NAT网络 桥接模式 桥接模式其实就是借助你宿主机上的网卡进行联网和通信,所以相当于虚拟机和宿主机平级,处于同一个网段中。 配置要点: 注意选择正确的宿主机网卡 查看宿主机的网络信息,这些信息指…...

代码随想录算法训练营DAY18 | 二叉树 (5)
一、LeetCode 513 找树左下角的值 题目链接:513.找树左下角的值https://leetcode.cn/problems/find-bottom-left-tree-value/ 思路一:递归回溯全局变量比深度。 class Solution {int Max_depth 0;int result 0;public int findBottomLeftValue(TreeNo…...
企业微信自动推送机器人的应用与价值
随着科技的快速发展,企业微信自动推送机器人已经成为了企业数字化转型的重要工具。这种机器人可以自动推送消息、执行任务、提供服务,为企业带来了许多便利。本文将探讨企业微信自动推送机器人的应用和价值。 一、企业微信自动推送机器人的应用 企业微信…...

Matplotlib plt.plot:从入门到精通,只需一篇文章!
Matplotlib plt.plot:从入门到精通,只需一篇文章! 利用Matplotlib进行数据可视化示例 🌵文章目录🌵 📊 1. 引言:为什么Matplotlib在数据可视化中如此重要?📊✨ 2. plt.pl…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...