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

计算机网络常见面试题

目录

一、谈一谈对OSI七层模型和TCP/IP四层模型的理解?

答:OSI七层模型主要分为:

TCP/IP四层协议:

二、谈谈TCP协议的3次握手过程?

三、TCP协议为什么要3次握手?2次,4次不行吗?

四、谈谈TCP协议的四次挥手过程?

五、什么是流量控制?

六、什么是滑动窗口?

七、什么是拥塞控制?

拥塞控制的四个算法:

7.1慢启动

7.2拥塞避免

7.3拥塞发生

重传机制:

超时重传:

快速重传:

7.4快速恢复

八、TCP和UDP有什么区别?


一、谈一谈对OSI七层模型和TCP/IP四层模型的理解?

答:OSI七层模型主要分为:

应用层->人机交互界面,曹某将“你好”两个字输入电脑微信软件;

表示层->计算机将“你好”翻译成二进制;

会话层->找到接收方马某,建立会话关系;

传输层->曹某用微信发的消息,马某只能在微信上看;

网络层->网络中有许多用户,要想让这两个人准确的发送和接受,曹某需要知道马某的网络层IP;

数据链路层->网络层往下继续传输需要数据链路层的网卡;

物理层->数据变成信号传输,马某在自己微信看到了曹某发的“你好”;

目的是为了简化网络各层的操作,提供标准接口便于实现和维护;

TCP/IP四层协议:

是七层模型的简化版,分为:应用层(应用层,表示层,会话层)->传输层->网络层->网络接口层(数据链路层,物理层)


二、谈谈TCP协议的3次握手过程?

当客户端向服务端发起连接时,会先发一包连接请求数据(SYN)->syn=1,ack=0,询问服务端能否建立连接,如果服务端同意建立连接,会回复客户端一个(SYN+ACK)->syn=1,akc=1包数据,客户端收到之后,回复一包(ACK)->syn=0,ack=1包,连接建立。


三、TCP协议为什么要3次握手?2次,4次不行吗?

为了防止已失效的请求报文,突然又传到服务器引起错误。

假设用两次握手建立连接,客户端向服务器端发送了一个(SYN)A包,来请求建立连接,因为一些未知的原因A包未到达服务器,在中间某个网络结点产生了滞留,为了建立连接,客户端会重发(SYN)B包,这次B包正常送达,服务端回复(SYN+ACK)之后建立连接,两次握手完成。但是这时候A包阻塞的网络结点突然恢复,A包又送达到服务端,服务端以为客户端又发送了一次连接,在发送完(SYN+ACK)包之后进入等待数据状态。客户端认为是一个连接,但是服务端认为是两个连接,造成了状态不一致问题。

如果用四次握手建立连接,就会导致资源的浪费;


四、谈谈TCP协议的四次挥手过程?

1,客户端主动发起连接关闭请求,它需要向服务端发送一包(FIN)->FIN=1,ACK=0包,表示要关闭连接,自己进入终止等待1状态,这就是第一次挥手。

2,服务端收到(FIN)包,发送一包(ACK)->FIN=0,ACK=1包,表示自己进入了关闭等待状态,客户端进入终止等待2状态,这就是第二次挥手

3,服务端此时还可以发送未发送的数据,客户端也可以接收数据,等服务端发送完数据之后,发送一包(FIN)->FIN=1,ACK=1包,进入最后确认状态,这就是第三次挥手

4,客户端收到之后,回复一包(ACK)包,进入超时等待状态,经过超时时间后关闭连接,服务端收到(ACK)->FIN=0,ACK=1包之后立即关闭连接,这就是第四次挥手


五、什么是流量控制?

流量控制是为了控制发送方发送速率,保证接收方来得及接收;

接收方每次收到数据包,可以在发送确定报文的时候,同时告诉发送方自己的缓存区还剩余多少是空闲的,我们也把缓存区的剩余大小称之为接收窗口大小,用变量win来表示接收窗口的大小。

发送方收到之后,便会调整自己的发送速率,也就是调整自己发送窗口的大小,当发送方收到接收窗口的大小为0时,发送方就会停止发送数据,防止出现大量丢包情况的发生。


六、什么是滑动窗口?

滑动窗口是 TCP 协议用于实现流量控制的一种机制。 发送方和接收方分别维护各自的缓冲区,这个缓冲区就是窗口。发送方的窗口大小由接收方的 TCP 首部的窗口字段决定。

发送方将窗口内容分为:已发送并确认,已发送未确认,未发送未超出接收方窗口范 围,未发送但超出接收方窗口范围。随着接收方的确认,发送方将不断在窗口内向前滑动。

接收方将窗口内容分为:接受已确认,未收到但可以接受。接收方读取窗口内容,并不断确认通知发送方,窗口向前滑动。接收方通过改变窗口大小,可以控制发送方的速率,从而实现流量控制。


七、什么是拥塞控制?

拥塞控制就是为了防止过多的数据注入到网络中,控制的目的就是避免发送方的数据填满整个网络,控制 发送方的数据发送量。

拥塞控制的四个算法:

7.1慢启动

目的:用来确定网络的负载能力或拥塞程度

算法思路:由小到大呈指数增大拥塞窗口数值

两个变量

1)拥塞窗口:

初始拥塞窗口值:2种设置方法

1至2个最大报文段(旧标准)

2至4个最大报文段(RFC 5681)

窗口值逐渐增大

2)慢开始门限

防止拥塞窗口增长过大引起网络拥塞


7.2拥塞避免

慢启动每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。 于是,TCP 会设置一个慢启动门限 ssthresh ,当 cwnd >= 门限时,进入拥塞避免,每个轮次 只将 cwnd 加 1 ,降低拥塞窗口的增长速度。

7.3拥塞发生

拥塞避免算法一直增长下去,网络也会慢慢进入了拥塞的状况,就会出现丢包现象,这时就需要对丢失的数据包进行重传。当触发了重传机制,也就进入了「拥塞发生算法

重传机制:
  • 超时重传:

当发生「超时重传」的拥塞发生算法

ssthresh 设为 cwnd/2

cwnd 重置为 1

这个时候,重新进入慢启动

  • 快速重传:

当接收方发现数据包丢失的时候,会连续发送三次 ACK确认数据包,于是发送端就会快速地重传,不必等待超时再重传。

这个时候,TCP 认为这种情况不严重,因为大部分没丢,只丢了一小部分,所以当发生「快速重传」的拥塞发生算法cwnd = cwnd / 2 , ssthresh = cwnd

7.4快速恢复

快速重传恢复算法一般同时使用,快速恢复算法是认为,你还能收到 3 个重复 ACK 说明网络拥塞状况没有特别糟糕,所以没有必要像 RTO 超时重传直接进入慢启动,那么强烈。

拥塞窗口 cwnd = ssthresh + 3

重传丢失的数据包

如果再收到重复的 ACK,那么 cwnd 增加 1


八、TCP和UDP有什么区别?

UDP->写信,TCP->打电话。

这两者本质的区别就是写信是基于非连接的,打电话是基于连接的。

也就是说UDP是基于非连接的,TCP是基于连接的。

可靠传输: TCP 协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输; UDP 不保证可靠性传输。

性能效率: TCP 协议传输效率慢,需要较多的资源开销。 UDP 协议传输效率快,需要较 少的资源开销。

首部格式: TCP 协议的首部需要 20-60 个字节, UDP 协议需要8个字节。

 

相关文章:

计算机网络常见面试题

目录 一、谈一谈对OSI七层模型和TCP/IP四层模型的理解? 答:OSI七层模型主要分为: TCP/IP四层协议: 二、谈谈TCP协议的3次握手过程? 三、TCP协议为什么要3次握手?2次,4次不行吗? …...

springboot整合MeiliSearch轻量级搜索引擎

一、Meilisearch与Easy Search点击进入官网了解&#xff0c;本文主要从小微型公司业务出发&#xff0c;选择meilisearch来作为项目的全文搜索引擎&#xff0c;还可以当成来mongodb来使用。 二、starter封装 1、项目结构展示 2、引入依赖包 <dependencies><dependenc…...

禁用鼠标的侧边按键

新买了个鼠标&#xff0c;整体都不错&#xff0c;就是鼠标左侧有两个按键&#xff0c;大拇指经常无意触碰到&#xff0c;造成误操作。 就想着关闭侧边按键功能。以下这批文章帮了大忙&#xff01; 鼠标侧键屏蔽&#xff0c;再也不用担心按到侧键了。_禁用鼠标侧键_挣扎的蓝藻…...

【C语言】数组和指针刷题练习

指针和数组我们已经学习的差不多了&#xff0c;今天就为大家分享一些指针和数组的常见练习题&#xff0c;还包含许多经典面试题哦&#xff01; 一、求数组长度和大小 普通一维数组 int main() {//一维数组int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));//整个数组…...

2023年中国研究生数学建模竞赛D题解题思路

为了更好的帮助大家第一天选题&#xff0c;这里首先为大家带来D题解题思路&#xff0c;分析对应赛题之后做题阶段可能会遇到的各种难点。 稍后会带来D题的详细解析思路&#xff0c;以及相关的其他版本解题思路 成品论文等资料。 赛题难度评估&#xff1a;A、B>C>E、F&g…...

在编译源码的环境下,搭建起Discuz!社区论坛和WordPress博客的LNMP架构

目录 一.编译安装nginx 二.编译安装MySQL 三.编译安装PHP 四.安装论坛 五.安装wordpress博客 六.yum安装LNMP架构&#xff08;简要过程参考&#xff09; 一.编译安装nginx 1&#xff09;关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下 systemctl stop fire…...

腾讯面试题:无网络环境,如何部署Docker镜像?

亲爱的小伙伴们&#xff0c;大家好&#xff01;我是小米&#xff0c;很高兴再次和大家见面。今天&#xff0c;我要和大家聊聊一个特别有趣的话题——腾讯面试题&#xff1a;无网络环境&#xff0c;如何部署Docker镜像&#xff1f;这可是一个技术含量颇高的问题哦&#xff01;废…...

医学影像信息(PACS)系统软件源码

PACS系统是PictureArchivingandCommunicationSystems的缩写&#xff0c;与临床信息系统&#xff08;ClinicalInformationSystem,CIS&#xff09;、放射学信息系统(RadiologyInformationSystem,RIS)、医院信息系统(HospitalInformationSystem,HIS)、实验室信息系统&#xff08;L…...

【01】FISCOBCOS的系统环境安装

我们选择ubuntu系统 01 https://www.ubuntu.org.cn/global 02 03下载最新版 04等待下载 00提前准备好VM&#xff0c;点击创建新的虚拟机 01选择自定义安装 02一直下一步到 03 04 05其他的默认即可 06 07 08 09 10 11一直默认到下面 12 13等待安装 安装后重启即可…...

flutter 权限和图片权限之前的冲突

权限插件 permission_handler: ^9.2.0想调起相册和视频&#xff0c;这个插件只有Permission.storage.request().&#xff0c;获取存储权限。 问题是android 13的一些手机&#xff0c;系统设置没有存储权限&#xff0c;用了上面这个权限&#xff0c;三次拒绝后就永久拒绝了&…...

OpenCV(四十八):读取视频和保存视频

OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个功能强大的开源计算机视觉库&#xff0c;它提供了丰富的功能&#xff0c;包括读取和保存视频。下面分别演示如何使用OpenCV来读取视频和保存视频。 1. 读取视频&#xff1a; 在OpenCV中我们要获取一…...

如何在react/next.js app中的同级组件间传递数据

这篇文章也可以在我的博客中查看 问题 为什么会有这么奇怪的需求&#xff1f;在事情真正发生前真的难说&#xff0c;但真遇到一个需要这么做的情况。 最近想做一个网页时钟&#xff0c;它的结构如下&#xff1a; 时钟&#xff08;计算时间&#xff0c;组织各个要素&#xff…...

软件需求文档、设计文档、开发文档、运维文档大全

在软件开发过程中&#xff0c;文档扮演着至关重要的角色。它不仅记录了项目的需求、设计和开发过程&#xff0c;还为项目的维护和管理提供了便利。本文将详细介绍软件开发文档的重要性和作用&#xff0c;以及需求分析、软件设计、开发过程、运维管理和项目管理等方面的文档要求…...

排序算法-----归并排序

目录 前言&#xff1a; 归并排序 1. 定义 2.算法过程讲解 2.1大致思路 2.2图解示例 拆分合成步骤 ​编辑 相关动态图 3.代码实现&#xff08;C语言&#xff09; 4.算法分析 4.1时间复杂度 4.2空间复杂度 4.3稳定性 前言&#xff1a; 今天我们就开始学习新的排序算法…...

docker 配置 gpu版pytorch环境--部署缺陷检测--Anomalib

目录 一、docker 配置 gpu版pyhorch环境1、显卡驱动、cuda版本、pytorch cuda版本三者对应2、拉取镜像 二、部署Anomalib1、下载Anomalib2、创建容器并且运行3、安装Anomalib进入项目路径安装依赖测试&#xff1a; 一、docker 配置 gpu版pyhorch环境 1、显卡驱动、cuda版本、p…...

为什么定时发朋友圈会更有效呢?

这是因为在同一时段 发送的好友朋友圈 无法有效分散用户的注意力 导致曝光度难以提升 而通过推广定时发朋友圈 可根据自己的粉丝活跃度 设置发圈时间 让每一条朋友圈都能高效 传递到更多的好友手中 这样&#xff0c;曝光度自然而然地就大大提升了&#xff01; 1.多个号…...

【跟小嘉学 PHP 程序设计】一、PHP 开发环境搭建

系列文章目录 【跟小嘉学 PHP 程序设计】一、PHP 开发环境搭建 文章目录 系列文章目录@[TOC](文章目录)前言一、PHP介绍二、Centos 安装 PHP2.1、安装并启动 Nginx2.2、安装并启动 mariadb2.3、安装 rh-php2.4、添加 Nginx 配置2.5、Nginx 服务三、使用 Docker 为 PHP 部署开发…...

【zookeeper】zk选举、使用与三种节点简介,以及基于redis分布式锁的缺点的讨论

这里我准备了4台虚拟机&#xff0c;从node1到node4&#xff0c;其myid也从1到4. 一&#xff0c;zk server的启动和选举 zk需要至少启动3台Server&#xff0c;按照配置的myid&#xff0c;选举出参与选举的myid最大的server为Leader。&#xff08;与redis的master、slave不同&a…...

Unity截图生成图片 图片生成器 一键生成图片

使用Unity编辑器扩展技术实现快速截图功能 效果&#xff1a; 里面没有什么太难的技术&#xff0c;直接上源码吧 注意&#xff01;代码需要放在Editor文件下才能正常运行 using System; using UnityEditor; using UnityEngine;[ExecuteInEditMode] public class Screenshot …...

Matlab图像处理-区域特征

凹凸性 设P是图像子集S中的点&#xff0c;若通过的每条直线只与S相交一次&#xff0c;则称S为发自P的星形&#xff0c;也就是站在P点能看到S的所有点。 满足下列条件之一&#xff0c;称此为凸状的&#xff1a; 1.从S中每点看&#xff0c;S都是星形的&#xff1b; 2.对S中任…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...