对线面试官》| 高频计算机网络面试题 pt.1

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
密钥管理服务KMS,1000个密钥,100个凭据,1个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 下面是我整理的一些高频计算机网络常问面试题,只要掌握了,分分钟拿捏面试官

在面试中,计算机网络是面试官最喜欢考察的内容之一

下面是我整理的一些高频计算机网络常问面试题,只要掌握了,分分钟拿捏面试官

1、说说 OSI 七层模型和 TCP/IP 四层模型的关系和区别
image-20221230100041289.png
OSI 七层从下往上依次是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

TCP/IP 四层从下往上依次是:网络接口层、网络层、传输层、应用层

这两个网络模型的特点:

  • 层与层之间相互独立又相互依靠
  • 上层依赖于下层,下层为上层提供服务

与 OSI 七层模型的映射关系如下:
image-20221230100325250.png
PS:TCP/IP 四层是 OSI 七层的简化版

2、说说 TCP 与 UDP 的区别

UDP(用户数据报协议) TCP(传输控制协议)
是否面向连接 无连接 面向连接
是否可靠 不可靠传输(没有流量控制和拥塞控制) 可靠传输(使用流量控制和拥塞控制)
连接对象个数 支持一对一、一对多、多对一、多对多交互通信 只支持一对一通信
传输方式 面向报文 面向字节流
header 开销 开销小,8个字节 最小20字节,最大60字节
适用场景 实时应用,可靠性需求不是很大的场景(视频会议、直播等) 要求可靠传输的应用(文件传输)

总结:

  • TCP 是面向连接的协议,提供可靠服务;UDP 是无连接的,不可靠传输
  • UDP 常用于实时性要求高的场景,TCP 常用于可靠性要求高的场景

3、TCP 是如何实现数据的可靠性?

TCP提供可靠交付的服务,传输过程中采用许多方法保证在连接上提供可靠的传输服务

  • 校验和

这是 TCP 用来解决数据发生损坏的方案,检验数据是否损坏的方式就是数据校验

在数据传输过程中,将发送的数据段都当做一个16位的整数,将这些整数加起来,并且前面的进位不能丢弃,补在最后,然后取反,得到校验和

发送方:在发送数据之前计算校验和,并进行校验和的填充。接收方:收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方进行比较

若数据出错,则接收方会直接将数据丢弃,发送方在一段时间后,没有接收到ACK报文,就会在超时后,重传这个报文

  • 序列号

由于网络的限制,TCP 必须将较大的数据拆分成一个个较小的报文段,并封装成 TCP 报文段,逐个传输

但又由于网络传输的不确定性(比如所通过的路径不同,某个报文段丢失然后重传等),这些报文段完全有可能不是按照顺序到达。所以,为了在接收方能够完整的接收数据,并能按序将这些报文组合起来

TCP 提供了一个解决方案——为每一个 TCP 报文段分配一个序号,每个报文段的序号依次增加

这样接收方就可以根据序号,来确定接收到的报文段是整个数据中的哪一部分,以及是否接收到了所有的部分

但是我们需要注意的是——TCP是对字节进行编号,而不是对报文段进行编号

TCP 对需要发送的数据的每一个字节都赋予了一个编号,比如第一个字节为 0 号,第二个为 1 号,以此类推

而每一个报文段一般都不止封装一个字节的数据,所以在 TCP 报文段中,封装的是这个报文段的数据中第一个字节的序列号

举个例子:
比如说发送方要发送250字节的数据,假设初始序号从0开始,则这250个字节的序号分别是0-249。

再假设每一个报文段最多允许封装100个字节的数据,所以第一个报文段将封装第1到100个字节,这些字节的序号为0-99,所以第一个报文段会将0放入它首部中的序号部分;

而第二个报文段封装100-199号字节,所以它的序号为100;

而第三个报文段封装200-249号字节,所以它的序号为200。

以上就是TCP发送方对序号的处理方法

总结:

  • 为了解决数据接收的完整性,TCP 为每个报文段都赋予了一个序列号
  • TCP 报文段的序列号是根据这个报文段中的第一个字节的数据的序列号来赋予的
  • 确认应答

TCP 传输过程中,每次接收方接收到数据后,都会对发送方进行确认应答,也就是发送 ACK 报文

这个 ACK 报文中带有对应的确认序列号,告诉发送方,接收了哪些数据,下一次数据从哪里传

  • 超时重传

这个方法用来解决 TCP 数据丢失的问题

TCP 会维护一个计时器,并设置一个超时时间,当发送一个 TCP 报文段后,没有在超时时间内收到 ACK 报文,则发送方认为数据丢失,于是会重传丢失的报文段,直到认为接收方已接收

由于 TCP 使用的是流水线传输,同一时间内可能会有多个已经发送但没有接收到 ACK 的报文段,所以按理来说,TCP 将维护多个计时器,为每一个报文段绑定一个,但是这样做需要花费很大的开销,而且管理计时器也很复杂

所以实际上 TCP 只维护一个计时器,绑定的是当前最早被发送,但是还没有收到 ACK 报文的报文段

如果这个报文段超时,发送方将重传该报文段,并重启计时器;如果收到了这个报文段的 ACK 报文,同样重启计时器,此时绑定的就是新的报文段

总结:

TCP 的超时重传机制能够很好地解决网络中发生数据丢包的问题

  • 连接管理

指的是 TCP 三次握手、四次挥手的过程

4、 TCP 协议如何提高传输效率?

  • 滑动窗口

如果每一个发送的报文段,都要收到 ACK 应答之后才发送下一个报文段,会导致效率很低,因为大部分时间都用在了等待 ACK 应答上了
image-20221230105934085.png
既然一发一收的效率比较低,那么我们可以一次发送多条数据,这样就能使等待时间大大减少,从而提高性能
image-20221230110211159.png
窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,上图窗口大小就是 3000 个字节(三个段)

发送前三个段的时候不需要任何的 ACK 应答,直接发送,收到第一个 ACK 应答之后,窗口向后移动,发送后三个段的数据

操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录那些数据还没有应答;只有确认应答过的数据才能在缓冲区中删除

窗口越大,网络吞吐量就越高;在建立连接的时候已经确认了窗口的大小,确认了发送数据大小的上限

  • 快重传

如果出现了数据丢失,就需要进行重传,一般分为两种情况:

  • 数据包已经抵达,ACK被丢了。这种情况下,部分ACK丢了并不影响,因为可以通过后续的ACK进行确认
  • 数据包直接丢了。发送端会连续收到多个相同的 ACK 确认,发送端立即将对应丢失的数据重传
  • 延迟应答

如果接收数据的主机⽴刻返回ACK应答, 这时候返回的窗⼝可能⽐较⼩

假设接收端缓冲区为 1M,一次收到了 500K 的数据,如果立即 ACK 应答,返回的窗口就是 500K

但实际上可能接收端处理的速度很快,10 ms 之内就把 500 K 的数据从缓冲区消费掉了,在这种情况下,接收端处理还远没有达到自己的极限

如果接收端稍微等⼀会再应答, ⽐如等待200ms再应答, 那么这个时候返回的窗⼝⼤⼩就是1M

延迟应答的两个限制:

  • 数量限制: 每个N个包就应答一次;
  • 时间限制: 超过最大的延迟时间就应答一次
  • 捎带应答

在延迟应答的基础上,很多情况下,客户端服务器在应用层也是一发一收的

这时候常常采用捎带应答的方式来提高效率,而ACK响应常常伴随着数据报文共同传输。如:三次握手
image-20221230111158460.png

5、你知道 TCP 如何处理拥塞吗?

网络拥塞是指到达通信网络中某一部分的分组数量过多,使得该部分网络来不及处理,导致这部分甚至整个网络性能下降,严重时甚至导致网络通信业务陷入停顿

拥塞控制处理网络拥塞现象的一种机制,有以下四个阶段:

  • 慢启动
  • 拥塞避免
  • 快速重传
  • 快速恢复

6、为什么 TCP 链接需要三次握手,两次不可以么,为什么?

  • 两次握手只能保证单向连接是畅通的

第一步:client 给 server 发送一条消息:你好,server

第二步:server 收到消息后 ACK 应答,并给 client 回复一条消息:你好,client

以上便是两次握手的过程,这个过程 client 给 server 发消息,server 收到了,说明 client 可以正常给 server 发送数据

但是 server 给 client 发消息却没有收到 client 的应答,也就不能保证 server 是否能正常给 client 发送消息

  • 两次握手会导致网络资源浪费

第一步:client 给 server 发送一条消息:你好,server

由于网络传输是不可靠的,这条消息可能在网络上长时间滞留,等到 server 那里的时候已经是失效了的

第二步:server 收到消息后 ACK 应答,并给 client 回复一条消息:你好,client

这时候 server 应答这条失效的消息之后就会建立起一条连接通道等待 client 发送数据,可是这时候 client 是没有发送建立连接请求的,就会使得 server 一直在等待 client 发送数据,导致网络资源白白浪费

7、IP地址是怎样分类的,你知道吗?

  • IP 地址由四段组成,每个字段是一个字节,8位,最大值是255。
  • IP 地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机

image-20221230112911962.png
A类:(1.0.0.0-126.0.0.0)一般用于大型网络。

B类:(128.0.0.0-191.255.0.0)一般用于中等规模网络。

C类:(192.0.0.0-223.255.255.0)一般用于小型网络。

D类:是多播地址,地址的网络号取值于224~239之间,一般用于多路广播用户。

E类:是保留地址。地址的网络号取值于240~255之间

8、说说 HTTP 和HTTPS 的区别?

HTTP 是一种超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

HTTPS 的全称是 (Hypertext Transfer Protocol Secure),从名称我们可以看出 HTTPS 要比 HTTP 多了 secure 安全性这个概念,实际上, HTTPS 并不是一个新的应用层协议,它其实就是 HTTP + TLS/SSL 协议组合而成,而安全性的保证正是 TLS/SSL 所做的工作

总结:HTTPS 就是身披了一层 SSL 的 HTTP
image-20221230134109915.png
区别:

  • HTTP 在地址栏上的协议是以 http:// 开头,而 HTTPS 在地址栏上的协议是以 https:// 开头
  • HTTP 的默认端口是 80,而 HTTPS 的默认端口是 443
  • HTTP 是未经安全加密的协议,明文传输,它的传输过程容易被攻击者监听、数据容易被窃取、发送方和接收方容易被伪造;而 HTTPS 是安全的协议,它通过 密钥交换算法 - 签名算法 - 对称加密算法 - 摘要算法 能够解决上面这些问题

9、你知道对称加密和非对称加密的区别和原理吗?

对称加密:是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题——如何安全地将密钥发给对方

非对称加密:是指使用一对非对称密钥——公钥和私钥,公钥可以随意发布,但私钥只有自己直到。发送密文的一方使用对方的公钥进行加密处理,对方接收到密文后用自己的私钥进行解密

10、常见的 HTTP 状态码有哪些?

  • 1xx:(请求处理中,请求已被接受,正在处理)
  • 2xx:(请求成功)

    • 200:请求被成功处理
  • 3xx:(重定向,要完成请求必须进行进一步处理)

    • 301:永久重定向
    • 302:暂时重定向
    • 304:请求被重定向到客户端本地缓存
  • 4xx:(客户端错误)

    • 400:客户端请求存在语法错误
    • 401:客户端请求没有经过授权
    • 403:客户端没有访问权限
    • 404:请求的资源在服务器上不存在
  • 5xx:(服务端错误)

    • 500:服务端发送永久错误
    • 502:错误网关
    • 503:服务端发送临时错误

11、Get与POST的区别

  • GET 一般用来从服务器上获取资源,POST 一般用来创建资源
  • GET 是幂等的,即读取同一个资源,总是得到相同的数据,而 POST 不是幂等的。GET 不会改变服务器上的资源,而 POST 会对服务器资源进行改变
  • 请求参数形式上看,GET 请求的数据会附在 URL 之后,以 ”?“分割 URL 和传输数据,参数之间以 ”&“ 连接;而 POST 请求会把提交的数据则放置在是HTTP请求报文的 body 中
  • POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明文出现在 URL 上,而 POST 请求参数则被包装到请求体中,相对更安全
  • GET 请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
13 2
|
14天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
15天前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
5月前
|
算法 Java 调度
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
71 0
|
2月前
|
缓存 算法 网络协议
一文详细理解计算机网络 - 数据链路层(考试和面试必备)
这篇文章详细介绍了计算机网络中数据链路层的概念、基本问题、点对点信道和广播信道的数据链路协议(如PPP和CSMA/CD),以及局域网和以太网的相关知识。
203 0
一文详细理解计算机网络 - 数据链路层(考试和面试必备)
|
2月前
|
存储 网络协议 网络性能优化
一文详细理解计算机网络体系结构(考试和面试必备)
这篇文章提供了C++基础知识的快速概述,包括C++的特点、面向对象设计、组成部分、标准、学习建议、应用领域、源文件、编译器、类与对象、编译执行步骤、分号与块、标识符、基本数据类型、typedef、枚举类型、变量定义与声明等。
65 0
一文详细理解计算机网络体系结构(考试和面试必备)
|
3月前
|
缓存 网络协议 算法
这些年背过的面试题——网络和操作系统基础篇
本文是技术人面试系列网络和操作系统基础篇,面试中关于网络和操作系统基础都需要了解哪些内容?一文带你详细了解,欢迎收藏!
|
3月前
|
网络协议 网络架构
OSPF邻居关系建立失败?揭秘网络工程师面试中最常见的难题,这些关键步骤你掌握了吗?网络配置的陷阱就在这里!
【8月更文挑战第19天】OSPF是网络工程中确保数据高效传输的关键协议。但常遇难题:路由器间无法建立OSPF邻居关系,影响网络稳定并成为面试热点。解决此问题需检查网络连通性(如使用`ping`),确认OSPF区域配置一致(通过`show running-config`),校准Hello与Dead计时器(配置`hello`和`dead`命令),及核查IP地址和子网掩码正确无误(使用`ip address`)。系统排查上述因素可确保OSPF稳定运行。
70 2
|
3月前
|
机器学习/深度学习
【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
长短时记忆网络(LSTM)的基本概念、解决梯度消失问题的机制,以及介绍了包括梯度裁剪、改变激活函数、残差结构和Batch Normalization在内的其他方法来解决梯度消失或梯度爆炸问题。
136 2
|
5月前
|
安全 网络协议 算法
Android网络基础面试题之HTTPS的工作流程和原理
HTTPS简述 HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。
63 2