本篇总结的是计算机网络知识相关的面试题,后续也会更新其他相关内容
文章目录
- 1、计算机网络的各层协议及作用是什么?
- 2、简述一下DNS的工作流程
- 3、TCP与UDP有什么区别?
- 4、TCP协议如何保证可靠传输
- 5、拥塞控制机制是什么?
- 6、HTTP 与 HTTPS 的区别是什么?
- 7、什么是对称加密与非对称加密
- 8、常用的HTTP状态码有哪些?
- 9、常见的请求类型有哪些?
- 10、GET和POST区别有哪些?
1、计算机网络的各层协议及作用是什么?
答:计算机网络体系分为三种,七层模型、五层模型和TCP/IP四层模型,在面试中我们一般回答出五层模型就可以了。如下:
应用层
- 应用层的任务是通过应用进程之间的交互来完成特定的网络作用,常见的应用层协议有
域名系统DNS
,HTTP协议
等。
传输层
- 传输层的主要作用是负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有
传输控制协议TCP
和用户数据协议UDP
。
网络层
- 网络层的主要作用是选择合适的网间路由和交换结点,确保数据及时送达。常见的协议有
IP协议
。
数据链路层
- 数据链路层的作用是在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。 常见的协议有
SDLC
、HDLC
、PPP
等。
物理层
- 物理层的主要作用是实现相邻计算机结点之间比特流的透明传输,并尽量屏蔽掉具体传输介质和物理设备的差异。
2、简述一下DNS的工作流程
答:DNS的主要工作就是将域名解析为对应的IP地址,在域名输入到浏览器中,会发生:
- 本地主机的操作系统会先检查自己本地的hosts文件是否有这个域名的映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
- 如果hosts文件中没有,则查询本地DNS解析器缓存,如果有,则完成域名解析。
- 如果本地DNS解析器缓存中没有,则去查找**本地DNS服务器,**如果查到,完成解析。
- 如果没有,则本地服务器会向根域名服务器发起查询请求。根域名服务器会告诉本地域名服务器去查询哪个顶级域名服务器。
- 本地域名服务器向顶级域名服务器发起查询请求,顶级域名服务器会告诉本地域名服务器去查找哪个权限域名服务器。
- 本地域名服务器向权限域名服务器发起查询请求,权限域名服务器告诉本地域名服务器域名所对应的IP地址。
- 本地域名服务器告诉主机域名所对应的IP地址。
主机 -> 本地的hosts文件 -> 本地DNS解析器缓存 -> 本地DNS服务器
本地DNS服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权限域名服务器 -> 主机
3、TCP与UDP有什么区别?
答:区别如下:
4、TCP协议如何保证可靠传输
答:TCP协议主要有校验和、序列号、超时重传、流量控制及拥塞避免等方法。
校验和
- 在发送算和接收端分别计算数据的校验和,如果两者不一致,则说明数据在传输过程中出现了差错,TCP将丢弃和不确认此报文段。
序列号
- TCP会对每一个发送的字节进行编号,接收方接到数据后,会对发送方发送确认应答(ACK报文),并且这个ACK报文中带有相应的确认编号,告诉发送方,下一次发送的数据从编号多少开始发。
- 如果发送方发送相同的数据,接收端也可以通过序列号判断出,直接将数据丢弃。
超时重传
- 在上面说了序列号的作用,但如果发送方在发送数据后一段时间内(可以设置重传计时器规定这段时间)没有收到确认序号ACK,那么发送方就会重新发送数据。这里发送方没有收到ACK可以分两种情况:
- 如果是
发送方发送的数据包丢失
了,接收方收到发送方重新发送的数据包后会马上给发送方发送ACK; - 如果是接收方之前接收到了发送方发送的数据包,而
返回给发送方的ACK丢失
了,这种情况,发送方重传后,接收方会直接丢弃发送方重传的数据包,然后再次发送ACK响应报文。
- 如果是
- 如果数据被重发之后还是没有收到接收方的确认应答,则进行再次发送。此时,等待确认应答的时间将会以2倍、4倍的指数函数延长,直到最后关闭连接。
流量控制
- 如果发送端发送的数据太快,接收端来不及接收就会出现丢包问题。为了解决这个问题,TCP协议利用了滑动窗口进行了流量控制。
- 在TCP首部有一个16位字段大小的窗口,窗口的大小就是接收端接收数据缓冲区的剩余大小。
- 接收端会在收到数据包后发送ACK报文时,将自己的窗口大小填入ACK中。
- 发送方会根据ACK报文中的窗口大小进而控制发送速度。如果窗口大小为零,发送方会停止发送数据。
拥塞控制
- 如果网络出现拥塞,则会产生丢包等问题,这时发送方会将丢失的数据包继续重传,网络拥塞会更加严重,所以在网络出现拥塞时应注意控制发送方的发送数据,降低整个网络的拥塞程度。
- 拥塞控制主要有四部分组成:慢开始、拥塞避免、快重传、快恢复。
5、拥塞控制机制是什么?
答:在拥塞控制中发送方会维护一个拥塞窗口的状态变量,它和流量控制的滑动窗口是不一样的,滑动窗口是根据接收方数据缓冲区大小确定的,而拥塞窗口是根据网络的拥塞情况动态确定的。
拥塞控制主要有四部分组成:慢开始、拥塞避免、快重传、快恢复。
慢开始
- 为了避免一开始发送大量的数据而产生网络阻塞,会先初始化cwnd为1,当收到ACK后到下一个传输轮次,cwnd为2,以此类推成
指数形式增长
。
拥塞避免
- 因为cwnd的数量在慢开始是指数增长的,为了防止cwnd数量过大而导致网络阻塞,会设置一个
慢开始的门限值ssthresh
,当cwnd>=ssthresh时,进入到拥塞避免阶段,cwnd每个传输轮次加1。 - 但网络出现超时,会将门限值ssthresh变为
出现超时cwnd数值的一半
,cwnd重新设置为1,如上图,在第12轮出现超时后,cwnd变为1,ssthresh变为12。
快重传
-
在网络中如果出现超时或者阻塞,则按慢开始和拥塞避免算法进行调整。但如果只是丢失某一个报文段,则使用快重传算法。如下图:
-
但是根据快重传算法,要求在这种情况下,需要快速向发送端发送M2的确认报文,在发送方收到三个M2的确认报文后,无需等待重传计时器所设置的时间,可直接进行M3的重传,这就是快重传。
快恢复
- 当发送收到三个重复的ACK,会进行快重传和快恢复。
- 快恢复是指将ssthresh设置为发生快重传时的cwnd数量的一半,而cwnd不是设置为1而是设置为为门限值ssthresh,并开始拥塞避免阶段。
一般来说发送方真实的发送窗口为滑动窗口和拥塞窗口中的最小值。
6、HTTP 与 HTTPS 的区别是什么?
答:
7、什么是对称加密与非对称加密
答:
对称加密
- 对称加密指加密和解密使用同一密钥。
- 优点是运算速度快。
- 缺点是如何安全将密钥传输给另一方。
- 常见的对称加密算法有
DES
、AES
等等。
非对称加密
- 非对称加密指的是加密和解密使用不同的密钥,一把公开的公钥,一把私有的私钥。公钥加密的信息只有私钥才能解密,私钥加密的信息只有公钥才能解密。
- 优点解决了对称加密中存在的问题。
- 缺点是运算速度较慢。
- 常见的非对称加密算法有
RSA
、DSA
、ECC
等等。
非对称加密的工作流程:
- A生成一对非对称密钥,将公钥向所有人公开,
- B拿到A的公钥后使用A的公钥对信息加密后发送给A,经过加密的信息只有A手中的私钥能解密。
- 这样B可以通过这种方式将自己的公钥加密后发送给A,两方建立起通信,可以通过对方的公钥加密要发送的信息,接收方用自己的私钥解密信息。
8、常用的HTTP状态码有哪些?
答:常见的状态码有五种,分别是:
- 第一种是以1开头的状态码,这种状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
- 第二种是以2开头的状态码,这种状态码表示服务器成功处理了客户端的请求 ,常见的有两个:
「200 OK」
:这是最常见的成功状态码,如果不是头部请求,服务器返回的响应头都会有 body 数据。「204 No Content」
:与200相同,只不过服务器返回的响应头中没有 body 数据。
- 第三种是以3开头的状态码,这种状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向,常见的有两个:
「301 Moved Permanently」
:表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。「302 Found」
:表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
- 第四种是以4开头的状态码,这种状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义,常见的有四个:
「400 Bad Request」
:表示客户端请求的报文有错误。「401 Unauthorized」
:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用。「403 Forbidden」
:表示服务器禁止访问资源,并不是客户端的请求出错。「404 Not Found」
:表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。(输入了错误的URL)。
- 第五种是以5开头的状态码,这种状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。
「500 Internal Server Error」
:服务器发生不可预期的错误,与 400 类似,服务器具体发生了什么错误,我们并不知道。「501 Not Implemented」
:表示客户端请求的功能还不支持「502 Bad Gateway」
:通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。「503 Service Unavailable」
:表示服务器当前很忙,暂时无法响应客户端
9、常见的请求类型有哪些?
答:如下:
为了方便记忆,可以将PUT
、DELETE
、POST
、GET
理解为客户端对服务端的增删改查。
- PUT:上传文件,向服务器添加数据,可以看作增
- DELETE:删除文件
- POST:传输数据,向服务器提交数据,对服务器数据进行更新。
- GET:获取资源,查询服务器资源。
10、GET和POST区别有哪些?
答:从以下四个方面讲:
作用
- GET用于
获取资源
,POST用于传输实体主体
。
参数位置
- GET的参数放在URL中,POST的参数存储在实体主体中,并且
GET方法提交的请求
的URL中的数据最多是2048
字节,POST请求没有大小限制
。
安全性
- GET方法因为参数放在URL中,
GET安全性相对于POST较差一些
。
幂等性
GET方法
是具有幂等性
的,而POST方法不具有幂等性
。这里幂等性指客户端连续发出多次请求,收到的结果都是一样的.