计算机网络面试题(二)

182 阅读24分钟
  1. TCP 的主要特点是什么?

TCP(传输控制协议)是一种常用的网络传输协议,其主要特点包括: 1. 可靠性:TCP使用确认和重传机制来确保数据的可靠传输。当接收方收到数据后会发送确认消息给发送方,如果发送方在合理的时间内没有收到确认消息,就会重新发送数据。 2. 有序性:TCP保证数据按照发送的顺序到达接收方。每个数据包都有一个序列号,接收方根据序列号将数据包按照正确的顺序重新组装。 3. 流量控制:TCP使用滑动窗口机制来控制发送方发送数据的速率,保证接收方的接收能力不被超出。当接收方的缓冲区快满时,会发送通知给发送方,限制其发送速率。 4. 拥塞控制:TCP通过拥塞窗口和拥塞避免算法来控制网络的拥塞程度。当网络负载过高时,TCP会自动减少发送速率,以避免更严重的拥塞。 5. 支持全双工通信:TCP允许同时进行双向通信,发送方和接收方可以在同一时间内发送和接收数据。 总的来说,TCP通过其可靠性、有序性、流量控制和拥塞控制等特性,确保了数据在网络中的高效传输和交互。

 

 

  1. UDP 的主要特点是什么?

用户数据报协议(User Datagram Protocol,UDP)是一种无连接的传输层协议,以下是UDP的主要特点: 1. 无连接性:UDP在通信前不需要建立连接,发送方直接将数据发送给接收方。这使得UDP的开销较小,但也导致了数据的不可靠性。 2. 简单性:UDP的协议头部相对较小,仅包含源端口号、目标端口号、长度和校验和等基本信息。这使得UDP的处理过程简单,适用于一些对实时性要求较高的应用。 3. 高效性:由于无需建立连接和维护状态等额外开销,UDP具有较低的延迟和传输性能较好的特点。这使得UDP在实时流媒体、在线游戏等对时间敏感的应用中广泛应用。 4. 不可靠性:由于UDP的无连接性,数据报可能会在传输过程中丢失、重复、乱序或被损坏。UDP本身没有提供重传和流量控制等机制,因此无法保证数据的可靠性。 总的来说,UDP适用于对实时性要求较高、对数据可靠性要求较低的应用场景,如实时语音、视频通话,以及在线游戏等。

 

 

  1. TCP 和 UDP 分别对应的常见应用层协议有哪些?

TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常见的传输层协议,它们分别对应着不同的应用层协议。 TCP常见的应用层协议有: 1. HTTP(Hypertext Transfer Protocol):用于在Web浏览器和Web服务器之间传输超文本数据,即网页内容。 2. FTP(File Transfer Protocol):用于在客户端和服务器之间传输文件。 3. SMTP(Simple Mail Transfer Protocol):用于在邮件服务器之间发送和接收电子邮件。 4. POP3(Post Office Protocol Version 3):用于从邮件服务器上收取电子邮件。 5. SSH(Secure Shell):用于通过加密的方式远程登录到服务器或计算机。 UDP常见的应用层协议有: 1. DNS(Domain Name System):用于将域名解析为对应的IP地址。 2. DHCP(Dynamic Host Configuration Protocol):用于自动配置IP地址和其他网络设置。 3. TFTP(Trivial File Transfer Protocol):用于在客户端和服务器之间传输小型文件。 4. SNMP(Simple Network Management Protocol):用于网络设备之间的管理和监控。 需要注意的是,这里列举的只是一些常见的应用层协议,实际上还有许多其他协议也使用TCP或UDP作为传输层协议。

 

  1. 为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?

Time-wait 状态是 TCP 协议中用来处理已经结束的连接的状态。在一个 TCP 连接终止之后,要保证在 time-wait 状态的等待期间,所有的报文都从网络中消失,以免与后续的连接产生混淆。为了确保这一点,RFC 793 中建议等待 2MSL 的时间。 MSL 表示 Maximum Segment Lifetime,它是一个 TCP 报文在网络中存活的最长时间。2MSL 是为了确保即使在网络中存在延迟或报文丢失的情况下,之前的连接状态已彻底消失。 等待 2MSL 的时间,可以保证之前的连接状态被完全清除,并且可靠地避免了旧的报文与新的连接发生冲突。这样做可以确保网络的可靠性和稳定性。

 

 

  1. 保活计时器的作用?

保活计时器(Keep-Alive Timer)是一个常见的网络协议中的机制,其作用是确保网络连接持续有效,防止连接因长时间的不活跃而被关闭。 保活计时器工作方式如下: 1. 在建立网络连接后,保活计时器开始计时。 2. 如果在指定时间内没有任何数据传输,保活计时器会发送一个空的保活包(Keep-Alive Packet)给对方,并等待回应。 3. 如果对方收到保活包并回应,表示连接仍然有效,保活计时器重新计时。 4. 如果在指定时间内没有收到对方的回应,表示连接可能已经失效,保活计时器会关闭连接。

保活计时器的作用是: 1. 保持连接活跃:在长时间没有实际数据传输的情况下,保活计时器发送保活包以确保连接仍然有效,防止连接被过早关闭。 2. 检测连接状态:保活计时器可以用来检测连接是否仍然有效,避免因为网络故障、设备故障或其他原因导致的连接断开。 3. 节省资源:保活计时器可以及时关闭无效的连接,释放资源,提高网络的效率和性能。 总的来说,保活计时器在网络通信中起到了保持连接稳定和有效的作用,提高了通信的可靠性和可用性。

 

 

  1. TCP 协议是如何保证可靠传输的?

TCP(传输控制协议)通过以下方式保证可靠传输: 1. 确认和重传:在发送数据时,TCP会分割数据成为小的数据块(称为段),接收方会针对每个收到的段发送一个确认(ACK)回执给发送方。如果发送方在一定时间内没有接收到ACK确认,它就会将数据段重新发送。 2. 序列号和排序:每个TCP段都有一个唯一的序列号,接收方会使用这些序列号将数据段按正确的顺序重组,从而确保数据正确传输。 3. 滑动窗口:为了提高传输效率,TCP使用了滑动窗口的机制。滑动窗口定义了在没有收到确认之前,发送方可以发送的数据量。通过调整滑动窗口的大小,可以优化网络传输的吞吐量和延迟。 4. 拥塞控制:TCP通过拥塞控制算法来避免网络拥塞。当网络出现拥塞时,TCP会减少发送速率以避免进一步加剧网络拥塞,并通过增加发送速率来逐渐恢复。 5. 超时重传:如果发送方在一定时间内没有收到确认,并且数据段被确认为丢失或损坏,发送方将会重新发送这些数据段,以确保数据的可靠传输。 通过这些机制,TCP可以在不可靠的IP网络上提供可靠的数据传输。

 

 

  1. 谈谈你对停止等待协议的理解?

停止等待协议是一种简单的可靠数据传输协议。它在发送方发送数据后,会等待接收方确认收到数据后才发送下一个数据包。接收方在收到数据后会发送一个确认信号给发送方,表示已经成功接收到该数据。如果发送方在一定时间内没有收到确认信号,就会认为数据丢失,需要重新发送。 停止等待协议的优点是简单易实现,适用于小规模的网络环境。但是它的效率较低,发送方在等待接收方的确认信号过程中处于空闲状态,浪费了一部分时间。 此外,停止等待协议对于长时间延迟或发生丢包的网络环境也不够适用,因为发送方需要等待确认信号,在网络延迟较高或发生丢包时会导致传输效率下降。 总的来说,停止等待协议是一种简单可靠的数据传输协议,适用于小规模、低延迟、低丢包率的网络环境。

 

 

  1. 谈谈你对 ARQ 协议的理解?

提到ARQ自动重传请求(Automatic Repeat-reQuest),就会想到TCP滑动窗口机制,没错ARQ协议是对滑动窗口的一个很好的实现。

ARQ协议主要包含:停等ARQ协议连续ARQ协议,其中连续ARQ协议是为了解决停等ARQ协议信道利用率低的问题,目前传统的连续ARQ协议有回退N帧ARQ协议选择性重传ARQ协议

注意:  AQR协议的一个特点是:发送窗口的大小 <= 窗口总数

停等ARQ协议(stop-and-wait)

停等ARQ协议相当于发送窗口和接收窗口大小均为1的滑动窗口协议。即发送方发送一个帧后,必须接收到一个确认帧(ACK)才能发送下一个。

原理:

1.     点对点发送数据报,等待接收端回复并开始计时

2.     等待开始时,发送端停止发送新数据包

3.     当数据包没有成功被接收端接收时,接收端不发送ACK包,发送端将继续等待一段时间并重新发送数据包

4.     重复以上步骤,直到接收到接收端发来的ACK

优点:

原理简单,广泛运用于分组交换网络。

缺点:

较长的等待时间,使得数据传输速度低。低速传输时频道利用率较高,高速传输时频道利用率较低。

连续ARQ协议(Continuous ARQ)

为了克服停等ARQ协议长时间等待ACK的缺点,这个协议会连续发送一组数据包,然后再等待这些数据包的ACK。

回退N帧ARQ协议(Go-Back-N)

原理:

1.     接收端丢弃从第一个没有收到的数据包开始的所有数据包

2.     发送端收到NACK后,从NACK中指明的数据包开始重新发送

选择性重传ARQ协议(Selective Repeat)

原理:

1.     发送端连续发送数据包但对每个数据包都设有个一个计时器

2.     当在一定时间内没有收到某个数据包的ACK时,发送端只重新发送那个没有ACK的数据包

 

 

  1. 谈谈你对滑动窗口的了解?

TCP滑动窗口是TCP协议中的一种流量控制机制。它用于管理发送端和接收端之间的数据传输速率,以确保数据流的可靠性和效率。 TCP滑动窗口的概念基于接收窗口和发送窗口之间的双向通信。发送窗口表示发送端能够连续发送的数据量,接收窗口表示接收端能够接收的数据量。通过动态调整窗口的大小,TCP滑动窗口可以适应不同网络条件和数据流量。 在数据传输过程中,发送窗口会以一个固定大小的窗口单位发送数据段,一旦接收端确认接收到数据,发送窗口会向前滑动,继续发送下一个窗口单位的数据。如果发送窗口超过接收窗口的大小,接收端会发送一个调整窗口大小的通知给发送端,以控制数据的传输。 TCP滑动窗口的主要目的是实现流量控制和拥塞控制,以避免网络拥塞和丢包等问题。通过动态调整窗口大小,TCP可以根据网络的实际情况来控制数据的发送速率,以确保可靠的数据传输。 总之,TCP滑动窗口是TCP协议中一种用于流量控制的机制,通过动态调整发送和接收窗口的大小,以适应不同的网络条件和数据传输需求。它是确保可靠数据传输的重要组成部分。

 

 

  1. 谈下你对流量控制的理解?

流量控制是指在网络或系统中管理和限制数据流量的过程。它的主要目的是确保系统资源的有效利用,防止由于过多的流量导致系统崩溃或无法正常工作。 在一个系统中,流量控制通常包括以下几个方面的考虑: 1. 流量监测:通过对数据流量的监测和分析,了解当前系统的负载情况以及流量的变化趋势。 2. 流量限制:根据系统的性能及承载能力,设置合理的上限,限制系统接受的流量数量或速率。 3. 流量调度:当流量超过系统能够处理的范围时,必须对流量进行调度和优先级排序,确保关键任务的顺利执行。 4. 流量分配:在多个用户或服务之间合理分配系统资源,以提高整体的效率和用户体验。 5. 流量报警与防护:当流量异常或超过可接受范围时,及时发出警告或采取相应的防护措施,以避免系统崩溃或遭受攻击。 通过流量控制,可以使系统在高流量情况下仍能保持稳定,并优化资源利用,提高系统的可靠性和性能。

 

 

  1. 谈下你对 TCP 拥塞控制的理解?使用了哪些算法?

TCP拥塞控制是一种网络流量控制机制,在网络拥塞情况下,通过动态调整数据传输速率,以保持网络的稳定性和可靠性。 TCP使用了四种主要的拥塞控制算法来处理不同的拥塞情况: 1. 慢启动(Slow Start):在连接刚开始时,TCP发送方以指数增加的速率增加发送数据量,直到网络出现拥塞。 2. 拥塞避免(Congestion Avoidance):一旦网络发生拥塞,TCP减小发送速率,并以线性增加的速率逐渐增加发送数据量,以避免进一步加重网络拥塞。 3. 快速重传(Fast Retransmit):当收到乱序丢失的确认时,TCP可以进行快速重传,而不必等待超时时钟过期。 4. 快速恢复(Fast Recovery):在进行快速重传后,TCP通过减小拥塞窗口的大小来控制发送速率,同时稍后恢复到拥塞避免状态。 这些算法共同作用,通过动态调整发送速率和拥塞窗口大小来适应网络拥塞情况,从而保持TCP传输的稳定性和可靠性。

 

 

  1. 什么是粘包?

粘包(Packet Congestion)是在网络通信中出现的一种现象。它指的是在发送方发送的数据包在接收方接收时,由于一些原因,多个数据包可能会被组合成一个更大的数据包一起传输,导致接收方无法准确地解析和处理这些数据包。 通常,粘包问题可能会出现在高负载、高速传输或不可靠网络环境中。可能的原因包括网络延迟、网络拥塞、发送方连续发送数据包等等。 对于程序开发者而言,处理粘包问题是很重要的。一种解决粘包问题的常见方法是在数据包中添加特定的分隔符,接收方通过检测和解析分隔符来区分各个数据包。另一种方法是在数据包中添加长度头,接收方首先读取长度头,再根据长度头的信息来准确地分割数据包。 总之,粘包是网络通信中常见的问题,但可以通过设计合理的协议和数据解析机制来解决。

 

 

  1. TCP 黏包是怎么产生的?

TCP黏包是一种网络传输中的现象,它发生在发送方将多个小的数据块打包成较大的数据块进行传输时。这种打包导致接收方在收到数据时无法准确地分辨每个数据块的界限。TCP黏包产生的主要原因如下: 1. 发送方数据发送速度过快:当发送方快速发送数据时,TCP协议可能会将多个数据块一起打包并作为一个TCP段发送到接收方。这样接收方在接收到数据时就会出现黏包现象。 2. 网络拥塞:当网络出现拥塞时,TCP协议会试图将数据打包成更大的数据块以提高网络传输效率。如果拥塞情况较长时间存在,可能会导致TCP黏包的发生。 3. TCP_nodelay选项未开启:TCP协议中有一个参数叫做TCP_nodelay,该参数默认关闭。当该参数关闭时,TCP会等待一段时间,尝试将多个小的数据块合并成较大的数据块再进行传输,从而导致黏包。 如何解决TCP黏包问题取决于具体的应用场景和需求。一些解决方案包括: - 使用消息边界:在应用层协议中定义消息边界,确保接收方可以准确地切分数据块。 - 增加消息长度信息:在消息传输前加入消息长度信息,接收方可以根据长度信息来准确地分割数据块。 - 使用定界符:在数据块之间添加特定的分隔符,接收方可以根据分隔符来辨别每个数据块的边界。 - 使用应用层协议:使用一些已经存在的应用层协议,如HTTP、WebSocket等,这些协议已经解决了黏包问题。 需要根据具体情况选择适合的解决方案来处理TCP黏包问题。

 

 

  1. 怎么解决拆包和粘包?

拆包和粘包是在网络通信中常见的问题,可以通过以下方法进行解决: 1. 定长包协议:在数据包的头部添加一个固定长度的字段来标识整个包的长度,接收方根据该字段来正确解析数据包,避免拆包和粘包现象的发生。 2. 分隔符协议:在数据包的末尾添加一个特定的分隔符,例如换行符或者其他特殊字符,在接收方根据分隔符将数据包进行拆分,确保每个数据包都能被正确解析。 3. 使用包头+包体结构:在数据包中添加包头部分和包体部分,包头用于标识包的长度等信息,包体包含实际的数据内容。接收方首先解析包头,然后根据包头中的长度信息来读取对应长度的包体数据,确保数据包的完整性。 4. 使用消息队列:引入消息队列作为中间层,发送方将数据包发送到消息队列中,接收方从消息队列中获取数据包进行处理,可以有效地解决拆包和粘包问题。 5. 应用层协议设计:在应用层自定义协议中,可以添加必要的协议字段,例如序列号、包序号等,以便接收方根据这些字段来判断和重组数据包。 需要根据具体的场景和需求选择适合的解决方案,并在实现过程中对数据进行合理的校验和验证,以确保数据的完整性和正确性。

 

 

  1. forward 和 redirect 的区别?

"Forward"和"redirect"是在网络编程中经常使用的两个术语,它们用于在网页请求和响应之间进行页面导航或跳转。它们之间的区别如下: 1. 转发(Forward):转发是在服务器端进行的页面跳转。当服务器接收到一个请求时,它可以将请求转发给另一个资源或页面进行处理,然后将处理结果发送回浏览器。在转发过程中,浏览器是不知道发生了转发的,它只知道最终返回的响应是由最初请求的资源生成的。 2. 重定向(Redirect):重定向是在客户端浏览器进行的页面跳转。当服务器接收到一个请求后,它会发送一个响应给浏览器,包含指示浏览器重新发送请求到另一个页面的信息。浏览器会根据响应中的重定向指示,自动发送新的请求,并最终加载重新定向的页面。在重定向过程中,浏览器知道发生了页面跳转。 总的来说,转发是在服务器端完成的页面跳转,而重定向是在客户端浏览器完成的页面跳转。

 

 

  1. HTTP 方法有哪些?

GET: 从服务器获取资源

POST: 在服务器新建资源

PUT: 在服务器更新资源

DELETE: 在服务器删除资源

HEAD: 获取资源的元数据

OPTIONAL: 查询对指定的资源支持的方法

 

  1. 在浏览器中输入 URL 地址到显示主页的过程?

当你在浏览器中输入URL地址并按下回车键时,以下步骤将导致主页显示: 1. 浏览器将解析URL(统一资源定位符),URL由以下部分组成:协议(例如http://或https://)、域名(例如gptgo.ai)、可选的端口号(指定服务器上的特定服务,默认为80)、路径(指定要获取的页面或资源的位置)和查询参数(包含附加信息)。 2. 浏览器将尝试解析域名。它将查询DNS(域名系统)服务器,以获取与域名相关的IP地址。 3. 一旦浏览器获得了服务器的IP地址,它将通过互联网建立与该服务器的连接。 4. 浏览器向服务器发送一个HTTP请求,该请求包含URL、请求类型(通常是GET)和其他相关信息(如浏览器的User-Agent)。 5. 服务器接收到请求后,会根据URL和其他信息来确定返回哪个页面或资源。它会查找请求的内容,并将其作为HTTP响应发送回浏览器。 6. 浏览器接收到服务器发送的响应后,会解析响应。如果响应是一个HTML页面,浏览器会渲染页面并将其显示给用户。 7. 用户最终在浏览器中看到GPTGO的主页。

 

 

  1. DNS 的解析过程?

DNS(Domain Name System)的解析过程如下: 1. 域名查询请求:当用户在浏览器中输入一个网址时,系统会首先将该域名发送到本地计算机的DNS解析器(一般由ISP提供)。 2. 本地缓存查询:DNS解析器首先会查询本地缓存,看是否有该域名对应的IP地址。如果有,解析器会直接返回结果,无需进行下一步。 3. 本地域名服务器查询:如果在本地缓存中没有找到对应的IP地址,DNS解析器会向本地域名服务器(由ISP提供)发送查询请求。 4. 递归查询:如果本地域名服务器也没有所需的解析结果,它会向根域名服务器发起递归查询。根域名服务器负责返回顶级域名服务器的地址。 5. 顶级域名服务器查询:一旦本地域名服务器获取了顶级域的服务器地址,它会向顶级域名服务器发起查询请求。顶级域名服务器负责返回二级域名服务器的地址。 6. 二级域名服务器查询:本地域名服务器向二级域名服务器发送查询请求,二级域名服务器返回对应的主机名。 7. IP地址返回:最终,本地域名服务器将获取到的IP地址返回给DNS解析器,并且将该结果保存到本地缓存中,以备后续使用。 8. IP地址返回给客户端:DNS解析器将获取到的IP地址返回给用户的浏览器,继续后续的网络连接过程。 以上是一个简化的DNS解析过程,涉及到多级域名服务器的查询和相应的数据传输过程。整个过程通常在几毫秒到几秒钟之间完成。

 

 

  1. 谈谈你对域名缓存的了解?

域名缓存是指计算机系统在向域名服务器请求特定域名的IP地址时,会将该IP地址暂时存储在本地缓存中,以便在之后的请求中使用。这样做的目的是为了提高网络访问速度和减轻域名服务器的负载。 当计算机系统首次访问一个特定域名时,它会向域名服务器发送查询请求,获取该域名对应的IP地址,然后将对应关系存储在本地缓存中一段时间。这样,在之后的请求中,如果系统需要再次访问同一域名,就可以直接使用缓存中的IP地址,而不必再次发送查询请求。 域名缓存的存在可以减少延迟时间,尤其是对于那些访问量较大的网站。通过避免重复的查询请求,能够提高用户的访问速度,并减少对域名服务器的负载。然而,缓存的持续时间是有限的,因为域名可能会更改其IP地址,或者缓存到期后需要进行更新。 总的来说,域名缓存是一种提高网络性能和效率的机制,对于加速网页加载和减轻域名服务器负担都起到了积极的作用。

 

 

  1. 谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?

HTTP长连接和短连接是指客户端和服务器之间的连接方式。 短连接是指每次客户端发送请求后,服务端接收到并处理完请求后即断开连接。在短连接中,每个请求都需要经过TCP的握手和挥手过程,这会增加额外的开销。短连接适用于请求响应时间敏感且连接数较少的场景,例如网页浏览或文件下载。 长连接是指客户端与服务器建立一次连接后,可以进行多次请求和响应。在长连接中,连接会一直保持打开状态,直到客户端或服务器明确关闭连接。长连接可以减少握手和挥手的开销,提高效率,适用于请求频繁的场景,例如实时通信、聊天应用或流媒体传输。 需要注意的是,长连接也需要考虑连接的持久性和资源占用问题。长时间保持连接可能会占用服务器资源,因此需要根据实际需求进行合理的配置和管理。 总之,短连接适用于响应时间敏感、连接数较少的场景,而长连接适用于请求频繁、保持实时通信的场景。