计算机网络面试题

yishuai
0
2025-06-22

计算机网络面试题

1、OSI、TCP/IP、五层协议

OSI:物理层,数据链路层、网络层、运输层、会话层、表示层、应用层

TCP/IP:网络接口层,网际层,运输层,应用层

五层协议:物理层、数据链路层、网络层、运输层、应用层

1.1、应用层

应用层是通过应用进程直接的交互,来完成特定的网络应用

应用层协议 定义的是应用进程之间的通信和交互规则

常见的应用层协议有:HTTP、FTP、DNS、SMTP、POP3等

1.2、运输层

运输层的主要任务 负责向两台主机进程之间的通信,提供通用的数据传输服务

通用是指,不针对特定的应用程序,而是多个应用都可以用同一种运输服务

主要协议是:TCP、UDP

1.3、网络层

网络层的任务是:选择合适的网间路由和交换结点,确保数据及时传送

把运输层产生的报文和用户数据进行封装成分组和包,网络层采用IP协议,所以也叫IP数据报

1.4、数据链路层

负责两台主机之间的数据传输,数据链路层将网络层的IP数据报组装成帧,在节点中传输帧,帧中包含数据,和一些必要的控制信息(如同步信息、地址信息、差错控制)

1.5、物理层

实现相邻计算机节点之间的比特流透明传送,尽可能的屏蔽 具体的传输介质的差异,和物理设备的差异

2、TCP三次握手与四次挥手(重点)

2.1、什么是三次握手

三次握手

客户端和服务端双方都要确定,对方的接收和发送正常,自己的接受和发送正常

客户端服务端
第一次握手客户端发送正常,服务端接收正常
第二次握手客户端发送和接收正常,服务端发送和接收正常
第三次握手服务端发送正常,客户端接收正常

对这里进行解释:按照传输过程,第三次握手服务端才能确定自己的发送是正常的!

  • 第一次:因为只有一个SYN信号,所以服务端能确定对方发送功能正常,自己的接收功能正常
  • 第二次:客户端通过服务端返回的ack,确定服务端发送和接收功能正常,自己发送和接收也正常
  • 第三次:服务端通过对方回复的ack,确定自己的发送功能正常,对方的接收功能正常

2.2、什么是四次挥手

四次挥手

四次挥手是为了保证,双方都能够准确的关闭

第一次挥手客户端告诉服务端,即将要关闭连接
第二次挥手服务端告诉客户端,我收到了你的关闭请求信号,但是你等等,我数据没发完
第三次挥手服务端告诉客户端,我发完了数据,可以关闭连接啦
第四次挥手客户端告诉服务器,好滴,那我们都关闭连接

2.3、为什么要三次握手?两次行不行,四次行不行?

三次握手主要是确保连接的可靠性

  • 两次:假如只有两次握手,当客户端的第一次请求在某个位置卡住了,客户端产生超时重传,当它们传输完了,双方关闭了链接,之后那个卡主的请求又发过去了,它们双方马上又会重新建立起来链接,这样子浪费了资源
  • 四次:可以,但是没必要,三次就能建立起来稳定的连接通道,没必要用四次来建立连接,省点时间和资源

2.4、为什么要四次挥手?三次行不行,五次行不行?

四次挥手是为了确保双方都能正确的关闭连接通道,且不造成数据丢失,或一方关闭,一方开启的情况

  • 三次:分两种情况:
    • 第一种:服务端把ack和fin信号一起传输,这样子就能三次挥手即可,但是,服务端可能数据没有传输完,所以并不会立即回复信号,客户端就会以为,服务端没收到,那就触发了超时重传机制,然后服务端就一直传送数据,客户端就一直超时重传。所以才会把ack信号和fin信号分开,收到客户端的信号就立刻回复ack,表示收到了客户端的信号,数据传送完了,再回复fin信号,表示可以双方都可以关闭通道了
    • 第二种:客户端收到服务端的fin信号后,不回复服务端,这样子就只需要三次挥手。但是,如果省略了这一次回复信号,可能服务端发送的fin信号在半路上丢了,服务端自己关闭了连接,客户端还在傻傻的等着服务端的回应,从而一直得不到关闭。你可能会问,那么客户端的最后一次丢了咋办?所以有了2msl的等待时间,请看后面。
  • 五次:可以,但是没必要,四次就能完全关闭双方的通道,没必要多一次,省点时间和资源

2.5、客户端最后一次回复,为什么要等2MSL

MSL表示报文存活的最长时间,2msl就是两倍报文最长存活时间。

假如客户端回复的最后一次信号丢失了,服务端收不到回复,那么就会以为他发送的fin信号丢失了,所以就会产生超时重传,再次发送fin信号,这时候客户端还能收到这个fin信号,就会再次给服务端发送一次回复信号,重置停止等待时间(又是一个2msl),直到服务端接收关闭,不会重发fin信号,这样子客户端就也会关闭掉了。

3、TCP、UDP协议的区别

TCPUDP
可靠的不可靠的
面向连接的无连接的
可靠的交付服务,传送数据保证无差错,不丢失,不重复,按序到达尽最大努力交付,但不保证可靠交付
只能是一对一的,点对点传输可以一对一,一对多,多对多
面向字节流面向报文的
TCP提供全双工通信,运行通信的双方的应用程序,在任何时候都能发送数据,两端都有发送缓存和接收缓存,用来临时存放双方通信的数据没有拥塞控制(网络堵塞也不会降低发送速率,常用于直播、实时会议等)
首部占20-60个字节首部占8个字节
文件传输、邮件发送等域名转换、直播、实时会议

3.1、如何让UDP实现可靠传输?

参考TCP协议,把TCP协议中传输层的控制机制,在UDP协议的应用层进行实现,如:确认机制,重传机制,窗口确认机制。

利用UDP实现可靠传输的例子:RUDP、RTP、UDT

4、TCP协议

4.1、如何保证可靠传输

  1. 将应用数据分割成TCP认为的,最适合发送的数据块
  2. TCP将每个数据包编号,接收方对数据包进行排序后,有序的传送给应用层
  3. 校验和,接受方和发送方采用相同的算法,对数据的首部和数据进行检验和计算,如果检验的值有差错,就会直接丢弃。
  4. 接收端丢弃重复的数据,且发送确认信号
  5. 流量控制:接受方和发送方,都有固定的缓冲空间,接收端只允许发送端发送,接收端的缓冲区所能容纳的数据,接受端来不及处理时,会提升发送端降低速率,防止丢包。流量控制协议采用的是滑动窗口协议。
  6. 拥塞控制:当网络拥塞时,减少数据的发送
  7. 停止等待协议:发完一个分组后就停止发送,等待对方的确认,收到确认后再发送下一组。若接收端接收到重复的分组,就会丢弃,并发送确认信号。超时重传:分组报文发送后,启动一个定时器,定时器结束之前,都没有接收到确认信号,就会重新发送这一分组的报文。

4.2 、 ARQ协议

4.2.1 、停止等待ARQ协议

发送完一个分组M1,就等待确认,收到确认后就继续发送,过了一段时间没收到确认,就会重新发送这一分组的报文,这是超时重传

4.2.2、连续ARQ协议

由于停止等待ARQ协议每次只发送一组数据包,效率太慢,

所以可以采用一次发送多个分组,不必发一个分组就停下来等待确认

接受方会对按序发送的最后一个分组发送确认,如果收到了最后的这个分组确认信号,代表所有的分组都已经全部正确接收到了。

缺点:不能正确回复已经收到的分组信息,假如发送了5个分组,3,4分组丢失了,接受方的确认序号只能回复2的确认,也就意味着3,4,5都需要重传,包括已经正确接收的5号分组。这种机制叫做回退N,需要退回来,再重新发送已经发送过的N个分组

5.1、滑动窗口协议

接受方和发送方各自维护一个滑动窗口,发送方叫发送窗口,接受方叫接收窗口。它允许发送方发送多个分组,而不需要等待确认(如果产生超时重传,就采用回退N协议)。

发送窗口和接收窗口都位于各自的缓冲区内部

发送窗口有四个概念区域:

  • 已发送且受到确认的数据区域(不在发送窗口中,还在缓冲区中)
  • 已发送但未收到确认的数据区域(位于发送窗口)
  • 允许发送还未发送的数据区域(位于发送窗口)
  • 发送窗口之外的缓冲区域(暂时不允许发送的数据)

接收窗口的四个概念区域:

  • 已发送确认并交付主机的数据区域(不在接收窗口和缓冲区域)
  • 未按序收到的数据(位于接收窗口中)
  • 允许接收的数据(位于接收窗口中)
  • 不允许接收的数据(位于发送窗口中)

规则:

  1. 已经发送,但是没收到确认的数据,需要先保留,以便于超时重传使用
  2. 发送方收到接收方的确认报文后,发送方窗口才可向前滑动几个序号
  3. 发送方一段时间没有收到确认信号后,需要采取回退N协议,回到最后收到确认信号的地方,重新发送这一部分的数据。
动物装饰