常见面试题-计算机网络相关

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:慢启动门限

  1. 慢开始

连接建立完成后,初始 cwnd = 1,表示发送方可以传输 1 个报文段

当发送方接收到 1 个 ACK 应答后,表示接收方已经成功接收报文,于是发送方 cwnd += 1,表示发送方可以传输 2 个报文段

当发送方接收到 2 个 ACK 应答后, cwnd += 2,表示发送方可以传输 4 个报文段

当发送方接收到 4 个 ACK 应答后, cwnd += 4,表示发送方可以传输 8 个报文段

在慢开始中,发送方可以发送的包的数量是指数级的增长

  1. 拥塞避免

当 cwnd >= ssthresh 时,就会使用拥塞避免算法,一般来说 ssthresh = 65535字节

此时,接收方每接收到一个 ACK 时,cwnd 就会增加 1/cwnd

即,假设 ssthresh=8,那么当接收方收到 8 个 ACK 时,每次确认增加 1/8 个 cwnd,当 8 个 ACK 全部收到之后,一共可以增加 1 个 cwnd,于是下一次接受方可以发送 9 个数据包

在拥塞避免中,发送方可以发送的包的数量是线性增长

  1. 拥塞发生

当发送方可以发送包的数量一直增长,网络就会慢慢进入拥塞的状态,于是会出现丢包现象,那么此时发送方就需要对丢失的数据包进行重传

当触发了重传机制,就会使用拥塞发生算法

重传机制分为两种:

  • 超时重传
  • 快速重传

当发生超时重传时,此时会更新 ssthreshcwnd 的值: ssthresh=cwnd/2,cwnd=1(cwnd恢复为初始化的值)

这种情况下,会导致拥塞窗口一下子变为初始值,发送方发送数据速率突然下降很多,那么又会从慢开始再进入到拥塞避免阶段,这期间发送速率太慢,会导致网络卡顿

当发生快重传时,即接收方发现丢了一个中间包的时候,发送 3 个前一个包的 ACK ,那么就触发了快速重传,不需要等待超时再重传

此时更新 ssthreshcwnd 的值:cwnd = cwnd / 2,ssthresh = cwnd,会进入到快速恢复算法

  1. 快速恢复

快速恢复和快速重传一般会同时使用,在快速恢复算法中,先让 cwnd = ssthresh + 3,之后发送端重传丢失的数据包,如果再收到重复的 ACK,令 cwnd += 1,如果收到新数据的 ACK 后,令 cwnd = ssthresh

为什么收到重复的 ACK,cwnd 反而增加呢?

收到重复的 ACK 表明发送端发送的数据包接收端还没有收到,因此让 cwnd + 1 ,有快速重传机制的存在,那么客户端如果一直触发 快速重传 那么就一直增加 cwnd,从而将丢失的数据包尽快发送给接收端

参考:小林 TCP 讲解

7.有了流量控制,为什么还需要拥塞控制?

流量控制的目的是控制发送方速率,避免接收端没有缓存接收数据

但是,计算机网络是一个共享的环境,那么传输的数据包丢失可能不仅仅是因为接收方没有缓存,而是网络不稳定或者网络因为其他主机之间的通信而变得拥堵

那么此时,就不能只根据接收方的缓存来控制发送方的发送速率了,因此需要拥塞控制

拥塞控制就是避免发送方的数据填满整个网络

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

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

相关文章

【Python】Python爬虫使用代理IP的实现

前言 在爬虫的过程中,我们经常会遇到需要使用代理IP的情况。比如,针对目标网站的反爬机制,需要通过使用代理IP来规避风险。因此,本文主要介绍如何在Python爬虫中使用代理IP。 一、代理IP的作用 代理IP,顾名思义&…

FFmpeg编译hevc版本,支持mac、linux系统

相关前置库 openssl 仓库:https://github.com/openssl/openssl.git编译方式参考INSTALL.md中的步骤 # Unix / Linux / macOS$ ./config$ make && sudo make installlame库 如果需要处理mp3相关,依赖lame库, 仓库:https…

JVM虚拟机:垃圾回收器之Parallel Old(老年代)

本文重点 本文将学习老年代的另外一种垃圾回收器Parallel Old(PO),这是一种用于老年代的并行化垃圾回收器,它使用标记整理算法进行垃圾回收。 历史 在1.6之前,新生代使用Parallel Scavenge只能搭配老年代的Serial Old收集器,而…

Ubuntu22.04 下 NFS 相关问题与完整配置(客户机 MacOS)

categories: [Linux-Shell] tags: Linux NFS 写在前面 最近折腾一下 NFS, 先白嫖一顿华子云的 1 个月服务器, 2C4G 感觉不错了, 但NFS 配置起来还是有点难度, 主要还是随机分配的端口配置方面比较恶心. server环境: 华为云 2C4G Ubuntu22.04 client环境: MacOS M1 with brew …

小程序多文件上传 Tdesign

众所周知,小程序文件上传还是有点麻烦的,其实主要还是小程序对的接口有诸多的不便,比如说,文件不能批量提交,只能一个个的提交,小程序的上传需要专门的接口。 普通的小程序的页面也比普通的HTML复杂很多 现…

前端学习地址_备忘录(随时更新)

前端基础&&体系: MDN:MDN Web Docs 菜鸟教程:菜鸟教程 - 学的不仅是技术,更是梦想! 印记中文:印记中文 - 深入挖掘国外前端新领域,为中国 Web 前端开发人员提供优质文档 w3cschool:w3cschool官网 - 1000多本编程教程免费学 js中…

Java,多线程,线程安全的懒汉式、死锁、ReentrantLock的使用以及一些知识点补充

关于线程安全地懒汉式有以下几种方式: /*** 实现线程安全的懒汉式*/ public class BankTest {Bank b1 null;Bank b2 null;public static void main(String[] args){BankTest bb new BankTest();Thread t1 new Thread(){Overridepublic void run(){bb.b1 Bank.…

安卓RadioButton设置图片大小

RadioButton都不陌生,一般我们都会设置图片在里面,这就涉及一个问题,图片的大小。如果图片过大,效果很不理想。搜了很多方法,都不理想。无奈只能自己研究了 代码如下: 1,一个简单的 RadioButt…

IBM Qiskit量子机器学习速成(一)

声明:本篇笔记基于IBM Qiskit量子机器学习教程的第一节,中文版译文详见:https://blog.csdn.net/qq_33943772/article/details/129860346?spm1001.2014.3001.5501 概述 首先导入关键的包 from qiskit import QuantumCircuit from qiskit.u…

力扣138:随机链表的复制

力扣138:随机链表的复制 题目描述: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff…

《网络协议》02. 物理层 · 数据链路层 · 网络层

title: 《网络协议》02. 物理层 数据链路层 网络层 date: 2022-08-31 22:26:48 updated: 2023-11-08 06:58:52 categories: 学习记录:网络协议 excerpt: 物理层(数据通信模型,信道)、数据链路层(封装成帧&#xff0c…

Flink 基础 -- 应用开发(Table API SQL) Table API

Table API是用于流和批处理的统一关系API。表API查询可以在批处理或流输入上运行,而无需修改。Table API是SQL语言的超集,专为与Apache Flink一起工作而设计。Table API是Scala、Java和Python的语言集成API。与将查询指定为SQL中常见的字符串值不同&…

NtripShare Mos地铁自动化监测终端盒子硬件设计

自动化监测产品到目前为止做了接近一年,在软件层面上,控制终端软件、平台软件、网平差算法都已解决,硬件盒子始终是心里过不去的坎,最终还是没有耐住性子自己做了一把。 选型如下: 1、主板:瑞芯微RK3568主板。 2、外…

向量的点积和外积

参考:https://www.cnblogs.com/gxcdream/p/7597865.html 一、向量的内积(点乘) 定义: 两个向量a与b的内积为 ab |a||b|cos∠(a, b),特别地,0a a0 0;若a,b是非零向量,…

【性能测试】服务端中间件docker常用命令解析整理(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、搜索 docker …

Redis底层数据结构:字典

在 Redis 中,字典(Dictionary)是一种常用的底层数据结构,它被用于实现 Redis 的哈希表(Hash Table)数据结构。字典用于存储键值对,它提供了快速的键值查找、插入和删除操作。 Redis 字典的特点&…

HTMLCSS3

HTML&CSS3 语雀HTML&CSS3文档 04-CSS语法与选择器 1、CSS简介 层叠样式表 网页实际上是一个多层的结构,通过CSS可以分别为网页的每一个层来设置样式,类似PS的图层 使用CSS来修饰元素样式的方式大致可以分为3种 内联样式(行内样…

【系统架构设计】架构核心知识: 1 系统工程与信息系统基础

目录 一 系统工程 二 信息系统 三 电子政务 四 企业信息化与电子商务

11-08 周三 图解机器学习之实现逻辑异或,理解输出层误差和隐藏层误差项和动量因子

11-08 周三 图解机器学习之实现逻辑异或,理解输出层误差和隐藏层误差项 时间版本修改人描述2023年11月8日14:36:36V0.1宋全恒新建文档 简介 最近笔者完成了《图解机器学习》这本书的阅读,由于最近深度学习网络大行其是,所以也想要好好的弄清…

Effective C++ 系列和 C++ Core Guidelines 如何选择?

Effective C 系列和 C Core Guidelines 如何选择? 如果一定要二选一,我会选择C Core Guidelines。因为它是开源的,有300多个贡献者,而且还在不断更新,意味着它归纳总结了最新的C实践经验。最近很多小伙伴找我&#xff…