计算机网络面试要点【万字精华图文并茂,助你直取offer】

在面试过程中,难免会有面试官问你计算机网络的问题。本片文章将用问答的形式来总结面试中常见的计算机网络的问题。本文较长,建议素质三连。先码后看。

Q1:HTTP和HTTPS的区别?

答:

  1. 端口不同,HTTP是80端口,HTTPS是443端口
  2. 传输方式不同,HTTP是明文传输,HTTPS是通过SSL加密过后再进行传输
  3. HTTPS需要CA证书或者是企业自己制作的证书,HTTP不需要
  4. HTTP是无状态的:协议对客户端没有状态存储,对事物没有记忆能力。
    无连接的:完成一个请求之后会断开连接,请求同一个资源会重新连接(HTTP1.1之前)
    基于请求和响应的:客户端发起请求,服务端响应。
    简单快速灵活的。
  5. HTTP无法保证数据完整性,HTTPS可以

Q2:HTTPS的流程?

在这里插入图片描述

答:HTTPS的流程可以分为两次HTTP请求,又可以进一步细分为8步:

  1. 客户端向服务器发起HTTPS请求,并连接到服务器的443端口,传输客户端SSL协议的版本号,加密算法的种类,产生的随机数Num1,一起其他常见信息
  2. 服务端向客户端发送服务端SSL协议的版本号,选取的从客户端发来的安全性最高的加密算法,随机数Num2
  3. 服务器将自己的数字证书(即公钥)发送给客户端
  4. 客户端在收到服务器发来的后开始验证证书的合法性和有效性,验证通过后即生成一个用于对称加密的随机值(预主密钥),
  5. 客户端将Num1,Num2,预主密钥组装成一个会话秘钥,然后通过证书中的公钥来加密会话秘钥。
  6. 客户端将加密过后的会话秘钥发送给服务端,服务端接收到后,用私钥解密,得到Num1,Num2,还有预主密钥。然后将Num1,Num2,预主密钥组装成一个会话秘钥(与客户端相同)
  7. 客户端利用会话秘钥发送一条加密后的信息给服务端,验证服务端能否正常解析加密后的消息,并通知服务端握手过程结束
  8. 服务端利用会话秘钥发送一条加密后的信息给客户端,验证客户端能否正常解析加密后的消息并通知客户端握手过程结束

Q3:TCP三次握手原理?

答:
在这里插入图片描述
字段含义:
SYN:请求同步,当SYN=1的时候,这条报文不携带数据(只进行握手)
ACK:确认接受码,当ACK=1的时候,代表请求被接受
seq:TCP会将数据进行拆分打包,然后随机生成一个数,作为数据包的第一个编号。加入随机生成的1000,那么这些数据包的编号起点就是1000.而seq代表了本次请求中最后一个数据包的编号
ack:想要请求的下一个数据包的编号,也就是我刚收到的最后一个数据包的编号+1,即seq+1。同时也代表了我确认收到了这个 数字之前的所有数据包。


在知道了上面字段的含义之后,我们就可以非常清楚的了解到TCP三次握手的全过程。

步骤1:服务端创建传输控制块TCB,然后进入监听状态准备接受监听客户端发来的请求
步骤2:客户端创建传输控制块TCB,然后向服务器发起同步请求,并生成随机数seq,然后将进入SYN-SENT状态(同步已请求状态)
步骤3:服务器收到建立连接的请求后,如果同意连接,则将确认接受码ACK设为1,然后j进入SYN-RCVD(同步收到)状态,生成自己的seq,并同时向客户端发出连接请求(TCP建立的是全双工模式),同时将自己的ack设为客户端发来的seq+1.
步骤4:客户端进程收到服务端发来的确认消息后和连接请求后,也向服务端返回确认消息,与步骤三类似。同时客户端进入ESTABLISHED(已建立连接)状态。
步骤5:服务端在收到确认消息之后,也进入ESTABLISHED(已建立连接)状态,TCP握手过程结束。

Q4:TCP握手过程为什么是三次而不是两次或者四次?

答:

  1. 因为TCP新建立的是全双工,就像是一条马路,两个方向的路都修好了路才算通了。要经历:
    ①我请求连接你---->②我同意你的连接请求,通知我也请求连接你—>③我同意你的连接请求
    这个过程。
  2. 为了防止已经失效了的数据进入服务器,产生脏数据。想象这样一个场景,客户端向服务器发送了一个请求,但由于网络原因,在某个节点滞留了一段时间,这段时间内客户端重新想服务器发送了请求,双方建立了连接,交换数据之后断开了连接。此时服务器收到了这条古老的消息之后,会重新给客户端发出确认连接,并请求建立连接,但客户端觉得自己并没有主动和你建立连接,所以不会同意服务端的连接请求,避免了一次无用的TCP连接。

Q5:TCP四次挥手的原理?

答:
在这里插入图片描述
字段含义:
在四次挥手的过程中,只有一个是新的字段:
FIN:顾名思义,Finish,当本次请求中的FIN=1的时候,代表了这是一个断开连接的请求。

然后四次挥手的过程就是这样的:

  1. 主动地一方(假设是客户端)服务端发出断开连接的请求,同时可能携带了一部分数据,客户端进入FIN-WAIT-1(终止等待1)状态。
  2. 服务端收到了客户端发来的请求之后,若是同意断开连接,则将数据报中的ACK设置为1,同时将自己想要发送给客户端的数字包编号等信息发出,然后服务端就进入了CLOSE-WAIT(关闭等待)状态。此时TCP通知上层应用客户端向服务端的TCP连接已经断开,但若此时服务端仍然有数据想要发送给客户端也是可以的。
  3. 客户端在收到服务端发来的确认请求之后,将自己的状态设置为:FIN-WAIT-2(终止等待2)状态。等待服务器释放连接,同时还可能要继续接收服务端发来的信息。
  4. 服务端在没有想要发送的信息之后,向客户端发出一个断开连接的请求,同时这个请求中可能包含了一些数据。然后自己进入LAST-ACK(最后确认)状态,等待客户端发出最后的确认。
  5. 客户端收到服务端发来的断开连接请求之后,发出确认报文,同时自己进入TIME-WAIT(时间等待)状态。但注意此时TCP连接还未释放,必须等在2τ(tao)的时间(τ为一个报文段的最长寿命)。
  6. 服务端收到确认消息之后,进入CLOSED状态。撤销TCB后,就结束了这次的TCP连接。

Q6:为什么是四次挥手?为什么要等待2τ的时间?

答:
首先因为TCP建立的是全双工模式。四次挥手的过程是:①客户端发出断开连接的请求----->②服务器同意断开连接------>③服务器发出断开连接的请求------>④客户端同意断开连接

其次,与握手过程相比较,我们可以发现多出来的一次就是因为双方不是同事断开连接的。所以得请求两次,确认两次。
之所以客户端要等待2τ的原因,是因为在客户端发出同意服务端断开连接的消息之后,这个消息可能服务端不能在第一时间收到,导致服务端会重新请求断开连接。这个过程会在2t的时间内结束。如果在2τ时间内客户端再次收到了断开连接的请求,它会重新发送确认消息,并重置2t计时器。
在这里插入图片描述
如果客户端发出的确认信息如果没有到达服务端的话,一定会在2τ时间内再次收到请求。如果客户端发出的消息没有假设客户端发出的确认信息如果没有到达服务端的,而服务端已经等待了自己发出的消息最长时间+可能收到的确认消息的最长时间 = 2τ,此时它会立即重发,而此时相对服务端来说刚过了1τ的时间,假设服务端重发了请求,那么这个请求肯定会在1τ的时间内到达,所以客户端需要等待2τ时间再进入关闭状态。
与此同时还可以等待本次连接中所有报文全部在网络中失效,以免影响下次连接。

Q7:TCP与UDP的区别?

答:

  1. TCP是面向连接的,必须先进行连接,然后才能进行数据交换。UDP是无连接的,不需要连接就可以发送数据。
  2. TCP提供了可靠的服务,一般情况下无差错,不丢失,不重复,且按顺序到达,而UDP是尽最大努力交付,不保证可靠。
  3. TCP发送的时候,形式是字节流。UDP发送的时候形式是数据报。
  4. UDP的传输效率比TCP高,能保证较好的实时性。
  5. TCP只能提供1:1的的通信,而UDP可以提供一对一,一对N,N对1,N对N的数据交流
  6. TCP占用较多的资源,TCP头部长度为20字节,而UDP仅有8字节

Q8:TCP的几大特点?

答:

1. 滑动窗口与流量控制
在这里插入图片描述
每一个TCP连接都维护着一组滑动窗口,我们想象我们的数据在一条锁链上,当到达的数据位于窗口的左边界的时候,窗口会缓慢移动,来控制数据的收发。每次接受数据或炸发送数据或者确认数据都是在窗口内。但窗口的大小并不是固定的。TCP会根据对方发来的数据包中的信息来调节窗口的大小,进而控制流量。

2. 拥塞控制
与流量控制不同,流量控制仅仅针对TCP连接的双方,而拥塞控制是监听整个网络的负载情况。拥塞控制主要有一下几个手段:
①慢启动:不要一开始就发送大量的数据,先探测一下网络地拥塞程度,然后有小到大的调整拥塞窗口
②拥塞避免算法:
在这里插入图片描述
拥塞避免算法可以让拥塞窗口缓慢增长,每经过一个往返时间,就把拥塞窗口+1,这样避免了拥塞窗口增长过快的问题。而在碰到拥塞的情况下会执行乘法减小算法,将拥塞窗口的值减半,然后进入慢开始算法来控制拥塞窗口的大小,同时调整ssthresh的值。

③快重传:
快重传规定了在接收方收到一个失序的报文段的时候,会立即发出确认信息,来提醒发送方进行重新发送。而不用等待接收方返回的确认信息。大家看图应该就可以理解了。
在这里插入图片描述
④快恢复
当发送方连续收到三次确认信息后,会执行乘法减半算法,将拥塞窗口的大小调整为原来的一半。但并不会执行慢开始算法。因为发送方认为此时的网络并不拥塞,所以会直接执行拥塞控制算法。
在这里插入图片描述

Q9:计算机网络的体系结构?

答:
在这里插入图片描述

计算机网络在互联网发展初期中采用的是最左面的这种体系结构。而OIS在后期又提出了七层网络体系结构。我们结合这样两种模型来分析计算机网络体系结构。
在这里插入图片描述
图为网络体系结构与各个层所包含的协议

在这里插入图片描述
图为网络体系结构与各个层所包含的中间件

①物理层:参考模型的最低层,也是OSI模型的第一层,实现了相邻计算机节点之间比特流的透明传送,并尽可能地屏蔽掉具体传输介质和物理设备的差异,使其上层(数据链路层)不必关心网络的具体传输介质。我们可以理解为在整个网线上流动的二进制流,以及一部分的物理设备。

②数据链路层:接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。数据链路层的三大功能:透明传输,封装成帧,差错控制

③:网络层:网络层使用的是ip协议,提供的是一种尽力而为的服务。网络层主要有以下功能:接收来自传输层的数据,并将其封装为IP分组,然后选择合适的路径和路由发送出去。接收链路层传来的数据,并检查ip地址,如果ip地址正确,则去掉分组头,将数据交给传输层。处理网络的路由选择,流量控制以及拥塞控制

④传输层:在端到端之间提供可靠的透明数据传输

⑤应用层:包含各种应用协议
⑤会话层:OSI模型的第五层,用户应用程序和网络层之间的接口

⑥表示层:OSI模型的第六层,对应用中的数据进行编码,压缩与解压缩,加密和解密

⑦应用层:OSI模型的第七层,为用户的应用程序提供网络服务

Q10:计算机网络中的常见协议的作用?

  1. HTTP:超文本传输协议,使用了80端口,HTTPS使用了443端口
  2. FTP:文件传输协议,使用了21端口
  3. SMTP:邮件传输协议,用于发送邮件 使用25端口
  4. POP3:邮件接收协议,使用了110端口
  5. DNS: 域名解析协议,用于将域名映射到IP地址,使用了53号端口
  6. ICMP:Internet控制报文协议,用于在IP主机和路由器之间传递控制信息
  7. ARP:正向解析协议,用于通过已知的IP地址来确定对应的MAC地址
  8. RARP: 反向解析协议,用于通过MAC地址获取对应的IP地址
  9. TFTP:简单文件传输协议,用来在客户机和服务器之间进行开销不大的简单文件传输的协议,端口号是:69

Q11:IP地址怎么分类?

答:

IP地址编址方案将IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D、E类作为多播和保留使用,为特殊地址。

每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。A~E类地址的特点如下:

  • A类地址:以0开头,第一个字节范围:0~127;

  • B类地址:以10开头,第一个字节范围:128~191;

  • C类地址:以110开头,第一个字节范围:192~223;

  • D类地址:以1110开头,第一个字节范围为224~239;

  • E类地址:以1111开头,保留地址

Q12:HTTP网络请求中常见状态码及其含义?

答:

1XX:临时响应,请求正在处理中

  • 100(继续):请求者应该继续请求
  • 101(切换协议):请求这要求服务器切换协议,服务器已确认并准备开始切换

2XX:请求成功

  • 200(请求成功):服务器成功处理了请求,同时代表了服务器已经提供了请求的网页
  • 201(已创建):请求成功,并且服务器创建了新的资源
  • 202(已接收):服务器已经接受了请求,但是还没有处理
  • 203(非授权信息):服务器已经处理了请求,但返回的信息可能来自另一来源
  • 204(无内容):服务器成功处理了请求,但没有返回任何内容
  • 205(重置内容):服务器成功处理了请求,但没有返回任何内容,并且要求请求者重置文档视图(例如清空表单重新输入)
  • 206(部分内容):服务器成功处理了部分GET请求

3XX:重定向

  • 300(多种选择):针对该请求,服务器可执行多种操作
  • 301(永久移动): 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
  • 302(临时移动):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
  • 304(未修改):在上次请求之后,服务器未进行任何修改,未返回新内容
  • 3.5(使用代理):请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。

4XX:请求错误

  • 400(请求错误):使用了服务器不理解的请求语法
  • 401(未授权):对于需要登录的页面,在请求者未登录的情况下会返回此代码
  • 403(禁止):服务器拒绝了这个请求
  • 404(未找到):页面找不到
  • 405(方法禁用):服务器禁用请求的方法
  • 408(请求超时):服务器等候请求时发生超时

5XX:服务器错误

  • 500(服务器内部错误) :服务器内部发生错误
  • 503(服务不可用):服务器暂时不可用,稍等
  • 505(HTTP版本不支持):服务器不支持请求中所用的HTTP版本

Q13:从输入URL之后的过程?

  1. 发送HTTP请求之前,需要进行DNS解析,来获取相应的IP地址。浏览器会查看自己的缓存,操作系统的缓存,路由的缓存,ISP的缓存来解析这个DNS。
  2. 浏览器向服务器发起TCP连接,三次握手
  3. 握手成功后,浏览器向服务器发送HTTP请求,请求数据包
  4. 服务器收到请求之后,将数据返回到浏览器
  5. 浏览器收到HTTP响应
  6. 浏览器开始读取返回的HTML页面内容,进行解析和渲染页面
  7. 浏览器生成DOM树,解析CSS样式,JS交互
  8. 客户端和服务器进行交互
  9. (可选)ajax查询

Q14:HTTP请求方式?

  1. GET: 向特定路径资源发出请求,请求数据会暴露在URL中
  2. POST:向指定路径资源提交数据进行处理请求,数据包含在请求体中。
  3. OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,允许客户端查看,测试服务器的性能。
  4. HEAD: 向服务器请求与GET请求相一致的响应,在不返回响应体的情况下,拿到响应头中的元信息
  5. PUT: 从客户端向服务器传送数据取代指定的文档的内容
  6. DELETE: 请求服务器删除指定的页面
  7. TRACE:回显服务器收到的请求,用于测试或者诊断服务器
  8. CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务

Q15:GET与POST请求的区别?

  1. GET请求和POST请求没有本质上的区别,只是报文格式不同
  2. 从功能性讲,GET请求主要用于从服务器获取数据,POST请求主要用于向服务器提交数据。
  3. 从REST服务角度上讲,GET是幂等的,即读取同一个资源总会得到相同的数据。而POST请求不是幂等的,因为每次请求对服务器资源的改变并不是相同的。进一步的讲:GRT请求不会改变服务器的资源,而POST请求会改变服务器的资源。
  4. GET请求会将参与以key1=value1&key2=value2的明文形式,追加在URL之后,与URL以?连接。而POST请求会将参数放在请求体中。
  5. GET请求对传输数据的大小是有限制的(因为URL的长度有限),而POS请求对于参数没有大小限制。

Q16:DNS过程是什么?

  1. 检查浏览器是否有此条域名对应的ip地址的缓存
  2. 检查操作系统是否有该缓存
  3. 检查路由器是否有该缓存
  4. 检查本地IPS服务器缓存
  5. 如果上述过程还没有成功解析域名,则本地域名服务器向根域名服务器(Root Server)发出请求,根域名服务器返回这个 域名的顶级域名(.com,.cn,.org等)服务器的IP地址
  6. 本地域名服务器向顶级域名服务器发出请求,顶级域名服务器返回这个域名对应的nameserver的地址(网站注册的域名服务器)。
  7. 这个域名服务器解析该域名,返回对应的IP地址
  8. 本地域名服务器缓存这个域名,并将结果返回给用户
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值