计算机网络面试题总结

讲一下计算机网络的体系结构

可以分为7层,从上到下依次是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

书中一般分为5层,从上到下依次是应用层、传输层、网络层、数据链路层、物理层

一般使用的是TCP/IP 四层模型,从上到下依次是应用层、传输层、网络层、网络接口层

那说一下为什么要进行网络分层

分层主要是因为解耦,专注于某项功能的实现,就比如我们后台进行开发的时候,需要分为对数据库操作Mapper层,业务操作Service层,前后端数据交互Controller层

所以网络作为一个复杂的系统,分层可以让各个功能简化去实现,将一个大的问题简化,同时分层也就使得整体显得灵活,上层只受下层的影响。各层也就只需要独立去实现自己的功能

讲一下应用层的常见协议

HTTP,超文本传输协议

SMTP,简单邮件传输协议

DNS

FTP

POP3/IMAP

TELENT

SSH

讲一下DNS协议

DNS协议是将域名解析为相应的IP地址的一个协议

说一下DNS的过程

浏览器输入一个网站的时候,首先需要去获取它的域名,因此先去查看本地的DNS缓存,是否有该域名对应的IP地址,如果没有,就需要由本地DNS服务器去请求地区DNS服务器,查询是否有,如果没有,则让本地服务器再去请求根DNS服务器,返回对应的顶级DNS服务器,然后本地服务器再去请求对应的顶级服务器,获取对应的IP地址,缓存到本地服务器,然后就可以进行网站的访问

-----------------------------------

说一下 HTTP 与 HTTPS的区别

首先,HTTP是一个超链接文本协议,主要是用来规范浏览器和服务端的交互,同时也是一个无状态的协议,因为下一次打开浏览器再发出的请求与上一次毫无关联。

而HTTPS是基于 HTTP的基础上,利用 SSL/TLS进行加密的加密协议,它对要传输的数据不再是明文传输,而会将数据加密后再进行传输,并且从HTTP的80端口,改为了443端口

由于HTTPS需要去加密,所以在资源消耗上来说,HTTPS是比HTTP消耗更多的一个服务资源。

那SSL 和 TLS 有具体的区别么?

其实没有太大的区别,TLS就是基于SSL之上的一个新版本,在SSL 3.0 升级后,新的版本就被命名为TLC 1.0。

说一下SSL / TLS的工作原理

有两个过程,一个是非对称加密的过程,另一个是对称加密的过程

非对称

非对称加密的过程就是采用公钥和私钥,当在进行通信的时候,私钥只有双方各自拥有,公钥则可被所有人访问,可以把公钥放到证书中。

当需要访问的时候,请求证书获取要发送方的一个公钥,用自己的私钥加密后的信息,再用获取到的公钥去加密,然后将加密后的信息发送给接收方,

同时,接收方通过发送方的证书或其他方式获取公钥,先使用自身的私钥对加密的信息解密,然后,再用获取到的公钥进行解密,就获取到了要传输的数据。

对称

这个要传输的数据就可以是一个会话密钥,因为不可能每次都去使用公私钥去加密一个数据,一个过程繁琐,第二个就是消耗肯定更大,毕竟需要两次加密,解密,所以就可以用这个传输的会话密钥去加密数据,因为只有双方知道这个会话密钥,也可以保证传输的保密性,不会被他人窃听。

如何确保公私的依赖性?

客户端在发送https请求前,先获取目标服务器的一个证书,如果证书是经过CA机构颁发,没有过期,没有违法的,就可以得到一个信任,证书上包括目标服务器的公钥

如何确保证书的真伪?

简单来说就是通过数字签名,因为大家相信CA机构,所以只需要在请求证书的时候,被请求方 S 去请求CA机构颁发证书,S 获得 被CA机构使用私钥加密消息摘要的签名 的证书,发送给请求方A,请求方A只需要使用CA机构的公钥去解密,验证摘要是否被修改

讲一下HTTP 1.0 和 1.1有什么区别

分为5个方面吧

响应状态码

​ 1.0只有16种,1.1就加入了大量状态码

缓存处理

​ 1.0的时候使用一个EXPIRES 标签来标记一个响应体的时间,还有LAST-MODIFIED标签最后一次修改的时间,如果未被修改就直接从缓存中拿,如果被修改就发回新的,并返回 200(OK),1.1的时候,就在请求头加了一个Cache-Control,增加了灵活性和拓展性,主要是更加细致了

连接方式

​ 1.0的时候使用的是短连接,也就是说每次请求都会去创建一次TCP请求,请求结束就关闭,由于这样会造成大量的浪费,在1.1的时候就默认KEEP-ALIVE,默认是一个长连接,也就是说建立连接后不会断开,而是保持这个状态,当然也不会一直去保持,会在长时间没有响应后去断开

host头处理这方面

​ 1.0没有考虑多个主机名绑定到同一个IP地址的问题,就假如,http://www.example.com/login.html ,会请求成 GET /login.html,不会去加入主机名,因此就在1.1中加入了host字段,新增主机名,就如上例,会加入example.com

带宽优化

​ 1.1 的时候加入了范围请求,可以请求一部分数据,也就是续传下载的类似功能

​ 1.1的时候加入了100的状态码,对于某些较大的文件,可以响应这些请求,指示请求是否可被正常执行

​ 1.1加入了对数据的压缩,对不同的采用不同编码,比如内容编码和传输编码之类

讲一下你知道的响应状态码

100:请求大资源预热

200:成功请求

302:临时被移动

400:请求语法错误

401:未被授权

403:被禁止,拒绝请求

404:没有找到相应页面

500:服务器错误,无法完成请求

既然 HTTP 是无状态协议,那如何保存用户的状态

可以通过cookie 和 session,一般cookie用于保存账号密码和sessionID,也就是保存客户端的用户状态信息,而session则是在服务端保存客户的状态,常用于购物车之类的功能,服务端这边就可以通过cookie中记录的sessionID来确认相应的客户

那 cookie 如果被禁用了怎么办

如果cookie被禁用了,就可以通过直接附加到url的后面来传输sessionID,作为一个参数

-----------------------------------

传输层的协议有哪些

TCP 和 UDP

TCP 和 UDP协议有什么区别

TCP是面向连接的协议,实现了可靠传输,基于字节流进行传输。

UDP 是不需要建立连接的协议,只需要将数据发送给请求的一方就可以

一般来说,对于直播、视频,使用UDP更好,因为对于TCP来说,建立连接,保证可靠传输都需要消耗资源,耗费时间,可能就无法保证一个实时性。

而对于TCP连接,可以去做一些需要可靠传输的工作,比如文件传输,发送邮件等

说一下TCP如何保证可靠传输的

应用数据会被分割成适合TCP发送的数据块,可以一块块的进行传输

TCP会对每一块进行编号,确保这个传输过程是有序的

然后TCP的首部拥有校验和,可以确保数据传输的过程有没有损坏,丢失

然后TCP接收端会拒绝接受重复报文

流量控制,发送和接收方都有固定的缓冲大小,只允许发送缓冲区能接受的数据,当来不及处理的时候,就会去缩小这个缓冲区的大小,一般就去使用滑动窗口实现流量控制

拥塞控制:当网络拥塞的时候,会减少数据的发送

ARQ 协议:就是说每发完一个报文,需要等待接收方确认接收后,再发送下一个报文

超时重传;当TCP发出一个段后,启动一个定时器,如果没有确认报文回来,就会进行重发

详细讲一下ARQ协议

ARQ协议就是自动重传协议,也就是使用确认和超时的机制,来保证报文没有丢失,其中包括停止等待ARQ和连续ARQ

停止等待ARQ协议就是说发完一个分组就会停止,等待所有确认完毕,再开始,如果有超时就会使用自动重传ARQ来重传超时的报文

连续ARQ就是在一个窗口的所有分组可以连续发送,不需要等待确认,最后只需要累计确认

讲一下滑动窗口和流量控制

流量控制的目的就是为了控制发送方的发送速率,以便于接收方能够正常接收,TCP所使用的就是滑动窗口来实现一个流量控制,窗口大小动态改变,限制每次发送的分组数量

详细讲一下拥塞控制

拥塞控制就是说对网络资源的一个处理,超出了能处理的范围,需要调整所能处理的资源。

因此TCP就会维护一个拥塞窗口,来确定发送窗口的大小。

采用了四种算法,慢开始,拥塞避免,快重传,快恢复

慢开始就是说,当主机开始发送数据,如果立刻发送大量数据可能会导致数据拥塞,因此就需要逐步去增加,这里使用的是每次成2的指数级增加,当达到一个临界值之后,就需要采用拥塞避免算法了

拥塞避免算法是为了减缓一个增加的速度,不能再去按照慢开始的指数增加了,采用每次加一的次数增加窗口的大小,当遇到数据包丢失的时候,就会触发重新设置拥塞窗口为1,再进行一个慢开始,拥塞避免的过程

快重传算法是说如果一个数据报迟迟未有确认报文返回,每次返回的确认都是上一个数据包的确认,累计三次之后,就会立即触发重传机制,而不需要去等待一个超时重传,同时,也会把拥塞窗口减小到一半,防止网络阻塞问题的原因。在这之后就是执行一个快恢复的算法,也就是说不用再经历慢开始的一个阶段,直接去到拥塞避免的过程

说一下TCP 三次握手和四次挥手

三次握手就是客户端发起连接请求,发送SYN到服务端,服务端接收到请求后,发送SYN 和 ACK给客户端,客户端接收到后,再发送给服务端ACK确认接受,从而建立连接

四次挥手就是客户端发起了FIN请求断开连接,服务端接收到请求后返回ACK,然后继续处理服务端剩下的业务,在处理完了之后,再发送FIN到客户端,说明,可以断开连接,客户端接收到服务端的FIN后,就发送ACK,确认已经接收到服务端断开连接的请求,待服务端接收到ACK后,服务端正式断开连接,客户端这边在等待TIME_WAIT时间后去断开连接

为什么要三次握手,四次挥手

目的是为了建立可靠的通信通道,比如如果是两次握手的话,如果服务端接收到了请求,就去建立连接,然后发送SYN给客户端,如果这个报文丢失了,那么服务端这边的连接建立而客户端没有,会导致服务端资源的一个浪费

四次回收也是同样的原因,如果服务端这方断开后,报文丢失,也就会导致客户端连接保持,同理,客户端断开后,报文丢失,也可能会导致服务端保持着连接

-----------------------------------

说一下输入 URL 地址后的一个过程

比如,输入百度,www.baidu.com,首先是需要对百度的域名进行解析,用DNS将域名解析成IP地址,然后由浏览器发送HTTP请求到该IP地址,也就是建立了TCP连接,待服务端处理完请求后,返回HTML响应,然后浏览器显示HTML

URL 和 URI的区别是什么

URI :统一资源认证符,标识唯一的资源,就相当于身份证号

URL:统一资源定位符,也就是指明如何找到该资源,可以说是一种具体的URI,不仅可以标识,还可以定位资源的信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值