计算机网络面试题(一)

187 阅读22分钟

1.OSI 的七层模型分别是?各自的功能是什么?

  • 应用层,负责给应用程序提供统一的接口;
  • 表示层,负责把数据转换成兼容另一个系统能识别的格式;
  • 会话层,负责建立、管理和终止表示层实体之间的通信会话;
  • 传输层,负责端到端的数据传输;
  • 网络层,负责数据的路由、转发、分片;
  • 数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;
  • 物理层,负责在物理网络中传输数据帧;

 

 

  1. 为什么需要三次握手?两次不行?

三次握手是为了建立可靠的通信连接,并确保双方都准备好发送和接收数据。两次握手是不够的,原因如下: 1. 确认双方的通信能力:第一次握手是客户端向服务器发送一个请求,确认服务器是否可用、连通性是否正常。第二次握手是服务器向客户端发送一个确认信号,表示服务器能够响应。这样,双方都确认了彼此的通信能力。

 2. 同步序列号:第三次握手是客户端再次向服务器发送一个确认信号,同时也将序列号同步到服务器。这是为了确保双方同步了初始序列号,使得后续数据的顺序性能够得到保证。

3. 防止已失效的连接请求导致的资源浪费:如果只有两次握手,那么客户端向服务器发送了一个连接请求,但服务器并没有收到,可能是因为网络问题或者是延迟较高。如果此时客户端没有收到服务器的响应并主动关闭连接,服务器可能仍然会以为客户端想要建立连接。这样会导致服务器资源的浪费,而三次握手可以解决这个问题。 因此,通过三次握手可以确保双方都具备通信能力,序列号同步,以及减少因失效连接请求导致的资源浪费。

 

 

  1. 为什么需要四次挥手?三次不行?

1. 第一次挥手(FIN):主动关闭方发送一个 FIN 报文段给被动关闭方,表示主动关闭方已经没有数据要发送了。 2. 第二次挥手(ACK):被动关闭方收到 FIN 报文段后,发送一个 ACK 报文段作为确认,但此时被动关闭方可能还有数据要发送。 3. 第三次挥手(FIN):被动关闭方等到数据发送完毕后,发送一个 FIN 报文段来关闭连接。 4. 第四次挥手(ACK):主动关闭方收到 FIN 报文段后,发送一个 ACK 报文段作为确认,并进入 TIME-WAIT 状态等待一段时间,以确保被动关闭方收到了确认。 四次揮手过程的目的是确保双方都能完成数据的传输和确认,并确保双方都认为连接已经关闭。如果只进行三次握手来关闭连接,可能会导致数据丢失或连接状态不一致的情况发生。因此,四次挥手是为了保证连接的完整性和可靠性。

 

 

  1. TCP与UDP有哪些区别?各自应用场景?

TCP(传输控制协议)和UDP(用户数据报协议)是互联网上两种常见的传输协议,它们有以下区别: 1. 连接性:TCP是面向连接的协议,建立可靠的、有序的数据传输连接,而UDP是无连接的协议,不需要事先建立连接。 2. 可靠性:TCP提供可靠的数据传输,通过序列号、确认应答和重传机制确保数据完整性,而UDP不提供可靠性保证,传输过程中即使有丢包也不会重传。 3. 速度:由于TCP提供了广泛的错误检测和纠正机制,会引入一些额外的开销,因此相对而言速度较慢;而UDP没有这些机制,传输速度相对较快。 4. 数据量和分包:TCP没有固定的数据包大小限制,适用于大数据量传输,并且会将数据进行分包,确保分割和重组的正确性;UDP的数据包大小限制为64KB,适用于小数据包传输,不进行分包。 在应用场景方面: - TCP适用于对可靠性要求较高的应用,如网页浏览、电子邮件、文件传输等。 - UDP适用于对实时性要求较高、数据丢失可容忍的应用,如音视频传输、实时游戏等。

 

 

  1. HTTP1.0,1.1,2.0 的版本区别

HTTP 1.0,1.1和2.0是不同版本的HTTP协议,它们在以下几个方面有所区别: 1. 持久连接:HTTP 1.0每次请求/响应都会建立一次连接,请求完成后就会断开连接;而HTTP 1.1引入了持久连接,允许在同一连接上发送多个请求和接收多个响应,减少了连接建立和关闭的开销。HTTP 2.0也支持持久连接,并进一步优化了传输效率。 2. 多路复用:HTTP 1.0和1.1在同一时刻只能发送一个请求,并且必须按照请求的顺序进行响应。而HTTP 2.0引入了多路复用的功能,可以在同一连接上同时发送多个请求和接收多个响应,大大提高了并发性能。 3. 请求/响应头压缩:HTTP 1.0和1.1的请求和响应头信息都是明文传输,占用了很多带宽。HTTP 2.0使用了首部压缩算法,可以对请求和响应头进行压缩,减少了数据传输量。 4. 优化传输:HTTP 2.0采用了二进制协议,与文本协议的HTTP 1.0和1.1相比,传输效率更高。此外,HTTP 2.0还支持服务器主动推送,可以在客户端请求前提前将相关文件推送给客户端,提高页面加载速度。 需要注意的是,虽然HTTP 2.0在性能方面有所提升,但实际应用中的性能表现还要考虑网络状况、服务器配置和应用的具体实现等因素。

 

 

  1. POST和GET有哪些区别?各自应用场景?

POST和GET是HTTP协议中两种常用的请求方法。 区别: 1. 参数位置:GET请求参数以查询字符串的形式附加在URL的末尾,而POST请求的参数包含在请求体中。 2. 数据传输量:GET请求对参数的长度有限制,通常不超过2048个字符,而POST请求没有此限制。 3. 安全性:由于GET请求参数直接暴露在URL中,所以相对不安全,而POST请求的参数在请求体中,相对更安全。 4. 可见性:GET请求的参数在URL中可见,可以被书签、浏览器历史记录等访问到,而POST请求的参数不会显示在URL中。 应用场景: - GET适合用于获取资源或进行幂等操作,比如查看网页、读取数据等,因为GET请求是可缓存的、幂等的,可以被浏览器收藏和书签化。 - POST适合用于提交、修改或删除资源,因为POST请求对数据有写操作,并且不会将数据暴露在URL中。比如提交表单、上传文件等操作。

 

  1. HTTP 哪些常用的状态码及使用场景?
  • 200:请求被正常处理
  • 204:请求被受理但没有资源可以返回
  • 206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
  • 301:永久性重定向
  • 302:临时重定向
  • 303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
  • 304:发送附带条件的请求时,条件不满足时返回,与重定向无关
  • 307:临时重定向,与302类似,只是强制要求使用POST方法
  • 400:请求报文语法有误,服务器无法识别
  • 401:请求需要认证
  • 403:请求的对应资源禁止被访问
  • 404:服务器无法找到对应资源
  • 500:服务器内部错误
  • 503:服务器正忙

 

  1. HTTP状态码301和302的区别,都有哪些用途?

HTTP状态码301和302都属于重定向状态码,用于指示浏览器或搜索引擎请求的资源已被永久或临时移动到了新的位置。它们的区别在于: 1. 301 Moved Permanently(永久重定向):当服务器返回301状态码时,它表示所请求的资源已被永久移动到新的URL地址。浏览器会缓存这个重定向信息,并在以后的请求中直接访问新的URL。搜索引擎也会将旧的URL索引更新到新的URL上。这种重定向适用于需要永久更改URL的情况,例如网站改名或更改目录结构等。 2. 302 Found(临时重定向):当服务器返回302状态码时,它表示所请求的资源暂时移动到了新的URL地址。浏览器会在每次请求时都访问原始URL,并根据服务器返回的新URL进行重定向。搜索引擎会将旧的URL保留在索引中,并不会将其更改为新的URL。这种重定向适用于临时性的转移,例如网站维护期间或临时重定向到另一个服务。 总结起来,301用于永久重定向,搜索引擎会更新索引到新的URL,而302用于临时重定向,搜索引擎会保留原始URL。

 

 

  1. 在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?

如果在数据传送完成后,您不希望断开连接并保持连接活跃,一种常见的方法是使用长轮询(Long Polling)技术或者 WebSocket。这些技术允许客户端与服务器之间保持持久的连接,并允许在没有新数据到达时保持该连接处于挂起状态。 在长轮询中,客户端向服务器发送一个请求,在服务器端等待新数据到达。如果服务器在数据准备好后立即响应,则客户端收到响应并立即发起下一个请求。如果服务器没有即时响应,则客户端保持连接打开并保持挂起状态,直到响应准备好或超时。 WebSocket则提供了一种全双工通信的方式,可以让浏览器与服务器之间进行持久的双向通信。通过在浏览器中建立 WebSocket 连接,服务器和客户端可以随时进行相互通信,以便在任何时候传送数据。 选择使用哪种技术取决于您的需求和项目背景。长轮询比较简单,并且与旧版的浏览器兼容性较好。而 WebSocket 提供了更高效的通信方式,适用于实时性要求较高的场景。

 

 

  1. HTTP 如何实现长连接?在什么时候会超时?

HTTP协议本身是一种短连接协议,每次请求完成后就会断开连接。然而,可以通过某些技术实现长连接,也称为HTTP Keep-Alive。 要实现长连接,客户端在发送HTTP请求时可以在请求头中添加"Connection: keep-alive"字段。这样,服务器在响应完成后不会立即关闭连接,而是保持连接打开状态,使得客户端可以在同一连接上发送多个请求。 长连接的超时时间不是固定的,而是由服务器或网络设备设置的。在默认情况下,HTTP Keep-Alive连接会在一段时间后超时,断开连接。这个超时时间通常由服务器的配置、网络设备或负载平衡器来决定。超时时间可以是几秒到几分钟不等,具体取决于配置。 需要注意的是,长连接不是永久保持的,服务器和客户端都有可能在一定时间无活动后断开连接。因此,在编写客户端或服务器时,应考虑连接的超时和恢复机制,以确保连接的可靠性和稳定性。

  1. TCP 如何保证有效传输及拥塞控制原理

TCP(传输控制协议)通过以下机制来保证有效传输和拥塞控制原理: 1. 确认和重传(Acknowledgment and Retransmission):发送方在接收到数据包后,会向接收方发送确认消息(ACK)。如果发送方在一定时间内没有收到ACK,则会认为数据包丢失并进行重传,确保数据的可靠传输。 2. 滑动窗口(Sliding Window):发送方和接收方之间通过滑动窗口的方法控制数据的流量。发送方根据接收方的处理能力动态调整发送数据的数量,而接收方通过确认消息和窗口大小来告知发送方可以接收的数据量。 3. 拥塞控制(Congestion Control):TCP使用拥塞控制机制来避免网络拥塞的发生。当网络出现拥塞的迹象时,TCP会降低发送速率,减少拥塞的程度。拥塞控制算法包括慢启动、拥塞避免和快速恢复。 - 慢启动(Slow Start):发送方在开始传输时,以指数增加的方式增加发送速率,直到网络出现拥塞。 - 拥塞避免(Congestion Avoidance):当网络出现拥塞时,发送方通过线性增加的方式增加发送速率,控制拥塞程度。 - 快速恢复(Fast Recovery):当发送方检测到数据包丢失时,通过减少发送速率,触发拥塞控制机制,以尽快恢复正常传输。 总的来说,TCP通过确认和重传、滑动窗口和拥塞控制机制来保证数据的可靠传输和控制网络拥塞。这些机制使得TCP成为可靠且广泛应用的传输协议。

 

 

  1. IP地址有哪些分类?

IP地址根据其用途和分配方式,可以分为以下两大分类: 1. IPv4(Internet Protocol version 4):IPv4是目前广泛使用的IP地址标准,它由32位数字组成,以点分十进制表示(例如,192.168.0.1)。IPv4地址空间有限,约有42亿个可用地址,随着互联网的发展,IPv4地址逐渐短缺。

2. IPv6(Internet Protocol version 6):IPv6是IPv4的继任者,通过使用128位的地址空间来扩展IP地址的数量。IPv6地址以冒号分隔的八组四位16进制数的格式表示(例如,2001:0db8:85a3:0000:0000:8a2e:0370:7334)。IPv6地址空间庞大到足以满足未来的互联网需求。 以上是IP地址的两个主要分类。

 

  1. GET请求中URL编码的意义

在GET请求中,URL编码是一种将URL中的特殊字符转换为特定格式的编码方式。这是非常重要的,因为URL中包含许多特殊字符(如空格、符号和中文字符),而这些字符在URL中具有特殊的含义。 URL编码的主要目的是确保URL在传输过程中是可靠和有效的,不会因为特殊字符而引起解析问题或导致错误。它使用一种特殊的表示方式将特殊字符转换为16进制的ASCII码,并在每个转义字符前添加一个特殊字符 "%"。这样,URL编码确保了URL的正确传输和解析。 另外,URL编码也有助于保护URL的安全性。由于URL中包含敏感信息(如用户名、密码等),编码可以防止这些信息被恶意截取或篡改,从而提高了数据的安全性。 总之,URL编码在GET请求中起到了确保URL传输和解析的可靠性、有效性,以及保护URL中敏感信息的作用。

 

  1. 什么是SQL 注入?举个例子?

SQL注入是一种常见的网络攻击技术,通过在应用程序中的输入字段插入恶意的SQL代码,攻击者可以执行未经授权的数据库操作。这意味着攻击者可以执行删除、修改、插入数据,甚至可以获取敏感数据。 以下是一个简单的SQL注入的例子: 假设有一个登录表单,用户需要输入用户名和密码来验证身份。攻击者可以在用户名的输入字段中输入 ' OR '1'='1。于是生成的SQL语句会变成: 这里的 '1'='1' 始终为真,所以攻击者可以绕过身份验证,获取所有用户的数据甚至登录到系统中。这就是一个简单的SQL注入攻击的例子。

 

  1. 谈一谈 XSS 攻击,举个例子?

跨站脚本攻击(XSS)是一种常见的网络安全漏洞,攻击者利用这种漏洞在受害者的网站上注入恶意脚本,并在用户浏览网页时执行这些脚本。XSS攻击往往通过恶意链接、不安全的输入框、评论区域或用户提交的数据等途径进行。 举个例子,假设有一个网站具有一个搜索框,用户在搜索框中输入关键字后,网站会将搜索结果显示在页面上。如果该网站没有对用户输入进行充分的过滤和验证,那么攻击者可以通过在搜索框中输入恶意代码来进行XSS攻击。 例如,攻击者在搜索框中输入如下恶意代码: 当用户点击搜索或加载搜索结果时,恶意代码会被执行,弹出一个提示框显示"你的账户已被入侵!",这就是一个简单的XSS攻击示例。攻击者可以根据需要构造更具破坏性的攻击代码。 为了防止XSS攻击,网站开发者需要对用户输入进行充分的过滤和转义。这样可以确保用户输入不会被解析为恶意代码,从而保护用户的数据安全。

 

 

  1. 讲一下网络五层模型,每一层的职责?

网络五层模型,也称为OSI(开放系统互联)模型,是一种组织和描述计算机网络中不同功能的通信协议的模型。每一层都有不同的职责和功能,向上层提供服务,并与下层进行通信。 以下是网络五层模型各层的职责: 1. 物理层(Physical Layer):物理层是网络五层模型中最底层的层次。该层的任务是在网络设备之间传输原始的比特流。它负责定义传输媒介的电气、光学和机械特性,如电压、传输速率、接口连接类型等。 2. 数据链路层(Data Link Layer):数据链路层在物理层之上,通过物理链接提供可靠的数据传输。它提供了对数据帧的识别、错误检测和纠正机制,以及流量控制和访问媒体的方法。数据链路层还可以分割上层传输的数据,并将其封装成数据帧进行传输。 3. 网络层(Network Layer):网络层负责在网络中选择合适的路径,将数据从源主机发送到目标主机。它使用IP协议来处理数据包的路由和转发,并提供拥塞控制、逻辑寻址和数据包分片等功能。 4. 传输层(Transport Layer):传输层为应用程序之间的数据传输提供了可靠性和完整性。它负责分段和重建数据,同时还可以提供错误检测和纠正,以及流量控制和可靠的端到端通信。 5. 应用层(Application Layer):应用层是网络五层模型中最顶层的层次,它提供了网络应用程序与用户之间的接口。应用层协议包括HTTP、SMTP、FTP等,用于实现电子邮件、文件传输、网页浏览等应用。 这些不同层级的职责和功能协同工作,以实现网络通信的可靠性、可扩展性和灵活性。网络五层模型为网络中的各种协议和设备提供了一个标准的结构和框架。

 

 

  1. 简单说下 HTTPS 和 HTTP 的区别

HTTP和HTTPS是用于在客户端(浏览器)和服务器之间传输数据的两种不同的协议。 HTTP(超文本传输协议)是一种不安全的协议,数据以明文形式在网络上传输。这意味着在传输过程中,第三方可以截取和查看传输的数据,存在安全风险。 HTTPS(安全超文本传输协议)则是一种通过使用SSL(安全套接字层)或TLS(传输层安全)协议来加密传输数据的安全协议。通过使用证书对服务器和浏览器进行身份验证,并对传输的数据进行加密,HTTPS协议保证了数据在传输过程中的机密性和完整性,减少了数据被窃取和篡改的风险。 因此,主要区别在于数据传输的安全性。使用HTTPS的网站可以通过浏览器地址栏的锁形图标来指示连接是安全的,用户的隐私和敏感信息在传输时更加安全。

 

 

  1. 对称加密与非对称加密的区别

对称加密和非对称加密是两种常见的加密算法,它们之间有几个主要的区别。 1. 密钥的数量:对称加密使用相同的密钥用于加密和解密数据,因此密钥的数量很少。而非对称加密使用一对密钥,即公钥和私钥,其中公钥用于加密数据,私钥用于解密数据。因此非对称加密涉及的密钥数量更多。 2. 速度和效率:对称加密算法一般较快,加密和解密的速度高,因为只需要进行简单的数学运算。而非对称加密算法通常较慢,因为涉及到复杂的数学运算和密钥管理。 3. 安全性:非对称加密算法相对较安全,因为公钥可以公开分享,而私钥必须保密。即使公钥被泄露,也不会对数据的解密造成威胁。而对称加密算法的密钥需要事先共享给接收者,因此密钥本身容易受到攻击。 4. 用途:对称加密通常用于大量的数据传输和加密存储,例如在计算机网络和数据库中。而非对称加密通常用于安全性要求较高的场景,例如数字签名、身份验证和密钥交换等。 需要注意的是,对称加密和非对称加密并不是相互排斥的,而是可以结合使用,以提供更强大的安全保护。

 

 

  1. 简单说下每一层对应的网络协议有哪些?

在计算机网络中,每一层都对应着不同的网络协议。以下是通常所用的网络协议分层模型: 1. 应用层:该层负责处理应用程序之间的通信。常见的应用层协议有HTTP、HTTPS、FTP、DNS等。 2. 传输层:该层负责在网络中的不同主机之间提供端到端的数据传输。常见的传输层协议有TCP(传输控制协议)和UDP(用户数据报协议)。 3. 网络层:该层负责在不同网络之间进行数据传输和路由选择。常见的网络层协议有IP(Internet协议)。 4. 数据链路层:该层负责提供对物理介质的访问并进行数据的传输和错误检测。常见的数据链路层协议有Ethernet、Wi-Fi等。 5. 物理层:该层负责在物理介质上传输比特流。常见的物理层标准有Ethernet(以太网)、Wi-Fi、光纤等。 这些协议按照分层模型的结构进行组织,每一层都有特定的功能和对应的协议。通过这种分层的方式,不同的协议可以更加灵活地进行组合和替换,以适应不同网络环境和需求。

 

 

  1. ARP 协议的工作原理?

ARP(地址解析协议)是一种网络协议,用于将IP地址转换为MAC地址。它的工作原理如下: 1. 当主机A知道要发送数据包到另一个主机B的IP地址时,它首先会检查本地ARP缓存表(ARP cache)中是否已经有对应的IP地址和MAC地址的映射。 2. 如果ARP缓存表中没有找到对应的映射,主机A将在本地网络广播一个ARP请求数据包,该请求包含主机A想要查询的目标IP地址。 3. 所有收到该ARP请求的主机都会检查自己的IP地址是否与请求中的目标IP地址匹配。如果匹配,则将自己的MAC地址作为响应发送回主机A。 4. 主机A收到来自主机B的ARP响应后,将目标IP地址和MAC地址的映射添加到它的ARP缓存表中。 5. 一旦主机A拥有了目标IP地址和MAC地址的映射,它就可以使用该映射将数据包直接发送到主机B,而无需进行ARP请求。 这样,ARP协议通过在本地网络中广播请求和响应来建立和维护IP地址与MAC地址之间的映射关系,以实现数据包的正确传递。