常见面试题-计算机网络相关
1.OSI 七层模型?
OSI 七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP/IP 五层模型:应用层、传输层、网络层、链路层、物理层
应用层
应用层是由网络应用程序使用的,是离用户最近的一层
应用层通过各种协议,为网络应用提供服务,常见协议如下:
- FTP - 文件传输协议
- HTTP/S - 超文本传输(安全)协议
- SMTP - 邮件发送协议:用于与邮件服务器建立通信,并处理电子邮件的发送操作
- POP3 - 邮件接收协议:用于与邮件服务器建立通信,并且从服务器中检索邮件
- Telnet : 与虚拟段之间的通信协议
表示层
表示层从应用层接收数据,这些数据以字符和数字的形式出现,表示层将这些字符和数据
转成二进制
在传输数据之前,表示层将原始数据进行压缩,可以加快传输,并且保证完整性数据传输前的数据加密
在发送端,数据在表示层会被加密,在接收端,数据在表示层会进行解密操作
会话层
会话层用于建立连接、管理连接、发送和接收数据
在客户端和服务器建立会话之前,服务端会对客户端进行身份验证并且授权
传输层
传输层通过分段、流量控制、差错控制来控制通信的可靠性
网络层
网络层将从传输层接收到的数据段从一台计算机传输到不同网络的另一台计算机中
网络层的数据单元成为数据包
网络层的功能是:逻辑寻址、路由、路径确定
数据链路层
数据链路层从网络层接收数据包,数据包包含了发送方和接收方的 IP 地址
逻辑寻址在网络层已经完成,即添加了 IP 地址,形成 IP 数据包
物理寻址在数据链路层中完成,在 IP 数据包中添加发送方和接收方计算机的物理地址,从而形成一个数据帧
MAC 地址是由计算机制造商嵌入到计算机中的,是唯一的
物理层
物理层将二进制序列转成信号在本地戒指(铜缆、光纤、无线信号)上传输
2.发送邮件属于哪一层,基于什么协议?
利用 E-mail 收发电子邮件,需要设置 POP3 服务器和 SMTP 服务器的地址
用户要从邮件服务提供商提供的电子邮箱中获取自己的电子邮件,就需要通过邮件服务提供商的POP3邮件服务器来帮助完成。
发送邮件即 SMTP(Simple Mail Transfer Protocol)协议,属于应用层,SMTP、POP3 都是基于 TCP/IP
的应用层协议
3.各层协议了解吗?
网络层协议:
- IP 协议
- ICMP 协议
- ARP 协议
- RARP 协议
传输层协议:
- TCP 协议
- UDP 协议
应用层协议:
- FTP
- Telnet
- SMTP
- HTTP
- RIP
- NFS
- DNS
- RSTP
4.TCP 和 UDP 的区别?
当网络出现拥塞时,TCP 能够减少向网络诸如数据的速率和数量,缓解拥塞
UDP 没有拥塞控制,会导致在网络不好的情况下会丢包,但是如果在实时性要求较高的场景下,就需要使用 UDP 而不是 HTTP
TCP:
- 面向连接
- 可靠传输,可以流量控制和拥塞控制
- 一对一
- 面向字节流
UDP:
- 无连接
- 不可靠传输
- 支持 一对一、一对多、多对一、多对多
- 面向报文
5.流量控制是什么?
流量控制:让发送方根据接收方的实际接收能力,来控制发送的数据量
接收方每次收到数据包时,在发送确认报文的时候,告诉发送方自己的缓冲区还有多少时空闲的,那么当发送方收到之后,就会调整自己的发送窗口的大小
那么当接收方缓存满了之后,发送方该什么时候去继续发送数据呢?
可以让接收方处理完数据之后,发送通知给发送方,表示可以继续接收数据
但是如果这个通知存在丢失的风险,因此我们也可以让发送方启动一个定时器,每隔一段时间就去询问接收方,是否可以继续发送数据
接收窗口大小固定吗?
在现在的 TCP 中,接收窗口的大小是会动态调整的
一般情况下,接收窗口 >= 发送窗口
6.TCP 的四种拥塞控制算法
名词解释:
cwnd = 拥塞窗口
swnd = 发送窗口
rwnd = 接收窗口
ssthresh:慢启动门限
- 慢开始
连接建立完成后,初始 cwnd = 1,表示发送方可以传输 1 个报文段
当发送方接收到 1 个 ACK 应答后,表示接收方已经成功接收报文,于是发送方 cwnd += 1,表示发送方可以传输 2 个报文段
当发送方接收到 2 个 ACK 应答后, cwnd += 2,表示发送方可以传输 4 个报文段
当发送方接收到 4 个 ACK 应答后, cwnd += 4,表示发送方可以传输 8 个报文段
在慢开始中,发送方可以发送的包的数量是指数级的增长
- 拥塞避免
当 cwnd >= ssthresh 时,就会使用拥塞避免算法,一般来说 ssthresh = 65535字节
此时,接收方每接收到一个 ACK 时,cwnd 就会增加 1/cwnd
即,假设 ssthresh=8
,那么当接收方收到 8 个 ACK 时,每次确认增加 1/8 个 cwnd,当 8 个 ACK 全部收到之后,一共可以增加 1 个 cwnd,于是下一次接受方可以发送 9 个数据包
在拥塞避免中,发送方可以发送的包的数量是线性增长
- 拥塞发生
当发送方可以发送包的数量一直增长,网络就会慢慢进入拥塞的状态,于是会出现丢包现象,那么此时发送方就需要对丢失的数据包进行重传
当触发了重传机制,就会使用拥塞发生算法
重传机制分为两种:
- 超时重传
- 快速重传
当发生超时重传时,此时会更新 ssthresh
和 cwnd
的值: ssthresh=cwnd/2,cwnd=1(cwnd恢复为初始化的值)
这种情况下,会导致拥塞窗口一下子变为初始值,发送方发送数据速率突然下降很多,那么又会从慢开始再进入到拥塞避免阶段,这期间发送速率太慢,会导致网络卡顿
当发生快重传时,即接收方发现丢了一个中间包的时候,发送 3 个前一个包的 ACK ,那么就触发了快速重传,不需要等待超时再重传
此时更新 ssthresh
和 cwnd
的值:cwnd = cwnd / 2,ssthresh = cwnd
,会进入到快速恢复算法
- 快速恢复
快速恢复和快速重传一般会同时使用,在快速恢复算法中,先让 cwnd = ssthresh + 3
,之后发送端重传丢失的数据包,如果再收到重复的 ACK,令 cwnd += 1,如果收到新数据的 ACK 后,令 cwnd = ssthresh
为什么收到重复的 ACK,cwnd 反而增加呢?
收到重复的 ACK 表明发送端发送的数据包接收端还没有收到,因此让 cwnd + 1 ,有快速重传机制的存在,那么客户端如果一直触发 快速重传
那么就一直增加 cwnd,从而将丢失的数据包尽快发送给接收端
参考:小林 TCP 讲解
7.有了流量控制,为什么还需要拥塞控制?
流量控制的目的是控制发送方速率,避免接收端没有缓存接收数据
但是,计算机网络是一个共享的环境,那么传输的数据包丢失可能不仅仅是因为接收方没有缓存,而是网络不稳定或者网络因为其他主机之间的通信而变得拥堵
那么此时,就不能只根据接收方的缓存来控制发送方的发送速率了,因此需要拥塞控制
拥塞控制就是避免发送方的数据填满整个网络
相关文章:
常见面试题-计算机网络相关
1.OSI 七层模型? OSI 七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 TCP/IP 五层模型:应用层、传输层、网络层、链路层、物理层 应用层 应用层是由网络应用程序使用的,是离用户最近的一层 应用层通过…...
leetcode做题笔记231. 2 的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 示例 1: 输入:n 1 输出:tr…...

AI主播“败走”双11,想用AI省成本的商家醒醒吧,程序员不必担心失业,发展空间依旧很大
目录 1 2 3 “AI人”并不算是新鲜事,随着AI的发展,AI主播也开始悄悄进入到直播间中。 持续无间断的直播、比人工费便宜等优势,让很多商家选择了AI主播。 AI主播到底好不好用?终于在今年“双11”现出了原形。 1 AI主播没火过半年…...

◢Django 自写分页与使用
目录 1、设置分页样式,并展示到浏览器 2、模拟页码 3、生成分页 4、数据显示 5、上一页下一页 6、数据库的数据分页 7、封装分页 8、使用封装好的分页 建立好app后,设置路径path(in2/,views.in2),视图def in2(request): ,HTML: in2.html…...

某城高速综合管控大数据大屏可视化【可视化项目案例-04】
🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本文选自专栏:可视化技术专栏100例 可视化技术专栏100例,包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不…...
如何在Linux下进行文件查看
cat 文本内容显示到终端 head 查看文件开头 tail 查看文件结尾 常用参数 -f 文件内容更新后,显示信息同步更新 wc 统计文件内容信息...

OSG练习:模仿Ventsim制作三维矿井智能通风系统
1、效果 2、计划内容 1) 三维场景的加载显示;已实现 2)矿井巷道建模及纹理;已实现 3)矿井基础数据采集及修正;已实现 4)通风网络解算算法;已实现 5)通风设备及设施模型制作;未实现 6)风流模拟效果 ;进行中 7)火灾模拟效果;未实现 8)巷道属性查看栏;未实现 9)…...

【数据结构】非递归实现二叉树的前 + 中 + 后 + 层序遍历(听说面试会考?)
👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:数据结构 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&…...
32 Feign性能优化
2.3.Feign使用优化 Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括: •URLConnection:默认实现,不支持连接池 •Apache HttpClient :支持连接池 •OKHttp:支持连接池 因此提高Feign的…...

星岛专栏|从Web3发展看金融与科技的融合之道
11月起,欧科云链与香港主流媒体星岛集团开设Web3.0安全技术专栏,该专栏主要面向香港从业者、交易机构、监管机构输出专业性的安全合规建议,旨在促进香港Web3.0行业向安全与合规发展。 出品|欧科云链研究院 自2016年首届香港金融…...
什么是网络爬虫?
网络爬虫是一种自动化程序,可以自动地浏览网站并从网站上抽取数据。APP数据抓取实际上也是运用了网络爬虫的技术,只不过抓取的对象不是网站上的信息,而是手机APP上的数据。下面详细介绍APP数据抓取的过程。 1、确定数据需求 首先需要明确要抓…...

酷柚易汛ERP - 商品库存余额表操作指南
1、应用场景 商品库存余额表用于查询商品在各仓库的实际结存量、单位成本以及成本等明细。 2、主要操作 打开【仓库】-【商品库存余额表】,可筛选仓库、商品、商品类别,导出/打印等操作见【销货单】不再赘述。 3、分享操作 库存余额分享,…...
第27期 | GPTSecurity周报
GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…...

大数据-玩转数据-Flume
一、Flume简介 Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集、聚集、移动的服务,Flume只能在Unix环境下运行。Flume基于流式架构,容错性强,也很灵活简单。Flume、Kafka用来实时进行数据收集,Spark、Flink用来实时处理数据,impala用来实时查询。二、Flume…...

【Linux】进程概念IV 进程地址空间
Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我吧!你定不会失望。 本篇导航 0. 数据在内存中的分布1. 虚拟地址与真实物理地址2. 进程地址空间2.1 进程地址空间概念2.2 进程->页表->内存 0. 数据在内…...

Flink在汽车行业的应用【面试加分系列】
很多同学问我为什么要发这些大数据前沿汇报? 一方面是自己学习完后觉得非常好,然后总结发出来方便大家阅读;另外一方面,看这些汇报对你的面试帮助会很大,特别是面试前可以看看即将面试公司在大数据前沿的发展动向&…...

智慧工地源码:助力数字建造、智慧建造、安全建造、绿色建造
智慧工地围绕建设过程管理,建设项目与智能生产、科学管理建设项目信息生态系统集成在一起,该数据在虚拟现实环境中,将物联网收集的工程信息用于数据挖掘和分析,提供过程趋势预测和专家计划,实现工程建设的智能化管理&a…...

Spring Boot(二)
1、运行维护 1.1、打包程序 SpringBoot程序是基于Maven创建的,在Maven中提供有打包的指令,叫做package。本操作可以在Idea环境下执行。 mvn package 打包后会产生一个与工程名类似的jar文件,其名称是由模块名版本号.jar组成的。 1.2、程序…...

上海亚商投顾:沪指缩量调整跌 高位强势股继续退潮
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数11月10日弱势震荡,上证50盘中跌超1%,以保险为首的权重板块走势较弱。 高位强…...
药理学试卷
1【单选题】关于尼可刹米,错误的是 C A、直接兴奋延脑呼吸中枢 B、刺激颈动脉体化学感受器 C、作用时间较长 D、过量可致惊厥 2【单选题】属于第三代头孢菌素的药物是 C A、头孢克洛 B、头孢噻吩 C、头孢曲松 D、头孢匹罗 3【单选题】不属于β受体阻断药禁…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...