计算机网络常见面试题

1、谈一谈对OSI七层模型和TCP/IP四层模型的理解?

        为了增强通用性和兼容性,计算机网络都被设计成层次结构,每一层都遵守一定的规则。因此有了OSI这样一个抽象的网络通信参考模型,按照这个标准使计算机网络系统可以互相连接;

OSI七层模型

1、物理层:通过网线,光缆等物理方式将电脑连接起来,传递的数据是比特流;

2、数据链路层:首先,把比特流封装成数据帧的格式,对0,1进行分组。电脑连接起来后,数据都经过网卡来传输,而网卡上会定义全世界唯一的MAC地址。然后再通过广播的形式向局域网内所有电脑发送数据,再根据数据中MAC地址和自身对比判断是否是发给自己的;

3、网络层:广播的形式太低效,为了区分哪些MAC地址属于同一个子网,网络层定义了IP和子网掩码,通过对IP和子网掩码进行与运算就知道是否是同一个子网,再通过路由器和交换机进行传输。IP协议属于网络层的协议;

4、传输层:有了网络层的MAC+IP地址之后,为了确定数据包是从哪个进程发送过来的,就需要端口号,通过端口来建立通信,比如TCP和UDP属于这一层的协议;

5、会话层:负责建立和断开连接;

6、表示层:为了使数据能够被其他的计算机理解,再次将数据转换为类一种格式,例如文字、视频、图片等;

7、应用层:最高层,面对用户,通过计算机网络和最终呈现给用户的页面。

TCP/IP四层模型

TCP/IP四层模型其实是对OSI模型的简化

1、数据链路层:也称为网络访问层、网络接口层。包含了OSI模型中的物理层和数据链路层,把电脑连接起来;

2、网络层:也叫IP层,处理IP数据包的传输、路由、建立主机之间的通信;

3、传输层:就是为两台主机设备提供端到端的通信;

4、应用层:包含OSI模型的会话层、表示层、应用层,提供一些常见的协议规范,例如FTP,HTTP,SMTP等。

总结下来就是:物理层通过物理手段把电脑连接起来,数据链路层负责对比特流的数据进行分组,网络层用来建立主机到主机的通信,传输层负责建立端口到端口之间的通信,应用层最终负责建立连接,数据格式转换,最终呈现给用户。

 2、为什么网络要分层?

主要有以下三点原因:

  1. 各层之间相互独立:各层之间相互独立,各层之间不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能就可以了(可以简单理解为接口调用)。这个和我们对开发时系统进行分层是一个道理。
  2. 提高了整体灵活性 :每一层都可以使用最适合的技术来实现,你只需要保证你提供的功能以及暴露的接口的规则没有改变就行了。这个和我们平时开发系统的时候要求的高内聚、低耦合的原则也是可以对应上的。
  3. 大问题化小 : 分层可以将复杂的网络间题分解为许多比较小的、界线比较清晰简单的小问题来处理和解决。这样使得复杂的计算机网络系统变得易于设计,实现和标准化。 这个和我们平时开发的时候,一般会将系统功能分解,然后将复杂的问题分解为容易理解的更小的问题是相对应的,这些较小的问题具有更好的边界(目标和接口)定义。

3、谈谈TCP协议的3次握手过程?

TCP通过三次握手建立客户端到服务器之间的TCP连接

  • 第一次握手:
    • 客户端先向服务器发送一个TCP数据包,首部格式为:SYN = 1,ACK = 0,表示这一个请求建立连接的数据包;
  • 第二次握手:
    • 服务器收到客户端发送的第一个数据包后,根据 SYN = 1,ACK = 0,判断这是一个主动请求建立连接的数据包;
    • 若服务器同意连接,则服务器向客户端发送一个数据包进行回应,首部格式为:SYN = 1,ACK = 1,其中ACK = 1表示服务器同意连接。
  • 第三次握手:
    • 客户端收到服务器的确认后,再给服务器发送一个数据包,首部格式为:SYN = 0,ACK = 1SYN = 0表示双方已经同意建立连接,ACK = 1表示客户端收到服务器的确认数据包。

 4、TCP协议为什么要3次握手?2次,4次不行吗?

1、TCP协议的三次握手的作用是为了在建立连接的时候,避免重复连接,防止旧的重复连接引起连接混乱的问题;

2、通过三次握手可以得到一个确认的可靠初始化序列号seq,用于进行可靠性传输。而通过两次握手无法初始化序列号seq;

综上所述,TCP最少需要三次握手来建立连接,当然也可以通过四次或者五次握手来建立连接,实现TCP连接的稳定性,但三次握手是最节省资源的连接方式。

5、谈谈TCP协议的四次挥手过程?

TCP协议通过四次挥手来释放客户端与服务器的连接

  • 第一次挥手:
    • 首先,客户端向服务器发送连接释放的请求数据包,并且通知发送数据,首部格式为:FIN = 1,ACK = 0
    • FIN = 0意味着客户端要主动释放客户端到服务器之间的TCP连接;
  • 第二次挥手:
    • 服务器收到连接释放的报文后,向客户端发送确认数据包,首部格式为:FIN = 0,ACK = 1;ACK = 1表示服务器收到客户端发送的数据包,同意客户端释放连接;
    • 通过第二次挥手,客户端到服务器方向的连接就释放了,TCP连接处于半关闭状态,此时客户端无法发送数据到服务器,但是服务器可以向客户端发送数据,客户端可以接收;
  • 第三次挥手:
    • 若服务器已经没有向客户端发送的数据了,其应用进程就通知TCP释放连接,并向客户端发送确认报文,首部格式为:ACK = 1,FIN = 1
      • 确认ACK = 1,表示服务器已经把需要发给客户端的数据发完了;
      • 终止FIN = 1,表示服务器要释放从服务器到客户端之间的连接;
    • 此时,服务器不在向客户端发送数据,但是可以接受数据。
  • 第四次挥手:
    • 客户端收到服务器的连接释放报文段后,向服务器发送确认报文,首部格式为:ACK = 1,FIN = 0
    • 确认ACK = 1,表示收到服务器 的确认报文,并同意服务器释放连接

6、什么是流量控制?

        简单来说,流量控制就是为了控制发送发的发送速率,保证接受方来得及接受;

        TCP连接的每一方都有固定大小的缓存空间,TCP的接受端只允许发送端发送接收端缓存区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失,从而实现流量控制;
        TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (即TCP 利用滑动窗口实现流量控制);
        接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。


7、什么是滑动窗口?

滑动窗口是TCP协议用来实现流量控制的一种机制;

发送方和接收方各自维护自己的缓存区,这个缓存区就是窗口。发送方的窗口大小由TCP首部的窗口字段决定;

发送方将窗口内容分为:已发送并确认,已发送未确认,未发送未超出接收方窗口范围,未发送但超出接收方窗口范围。随着接收方的确认,发送方将不断在窗口内向前滑动:

        接收方将窗口内容分为:接受已确认,未收到但可以接受。接收方读取窗口内容,并不断确认通知发送方,窗口向前滑动。接收方通过改变窗口大小,可以控制发送方的速率,从而实现流量控制。


8、什么是拥塞控制?

        发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,来决定发送方可以同时发送多少数据包。数据包的数量多与少,将决定网络中产生拥塞的可能性大与小。TCP主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复

  • 慢开始:拥塞窗口从1开始,采用加倍计算方式,由小到大逐渐增大。
  • 拥塞避免:慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd加 1,降低拥塞窗口的增长速度。
  • 快重传:在接收方,要求每次接收到报文段后,都应该对最后一个已收到的报文段进行确认,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
  • 快恢复:快恢复是配套快重传使用,当执行快重传时,就执行“乘法减小(ssthresh × 0.5)”算法,把慢开始门限 ssthresh 减半,同时执行拥塞避免,使拥塞窗口缓慢地线性增大。 


9、TCP和UDP有什么区别?

  • 面向连接:TCP协议需要建立连接,仅支持一对一通信;UDP协议无需建立连接,支持一对一、一对多、多对一和多对多的交互通信。
  • 可靠传输:TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输;UDP不保证可靠性传输。
  • 性能效率:TCP协议传输效率慢,需要较多的资源开销。UDP协议传输效率快,需要较少的资源开销。
  • 首部格式:TCP协议的首部需要20-60个字节,UDP协议需要8个字节。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农叮叮车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值