网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

运输与应用层面试问题 – 计算机网络

更新时间:2026年03月27日   作者:spoto   标签(Tag):

传输层和应用层是TCP/IP模型中的关键组成部分,它们确保了通信的可靠性,同时也为用户提供高级的网络服务。 传输层通过TCP和UDP等协议来负责端到端的传输、错误控制以及流量控制。而应用层则提供了诸如HTTP、FTP、DNS和SMTP等服务。 深入了解这些层面对于诊断网络问题、优化性能以及应对技术相关的面试至关重要。

请解释TCP的3-way握手机制是如何工作的,同时讨论这种机制所带来的潜在漏洞。

过程/步骤:

  • SYN:客户端发送一个带有初始序列号的SYN数据包。
  • SYN-ACK:服务器以SYN-ACK响应(即确认了客户端的序列号,并提供了自己的序列号)。
  • ACK:客户端发送ACK信号,从而完成连接的建立。

目的:确保双方对初始序列号达成一致,从而实现可靠的、同步的通信。

漏洞/弱点:

  • 容易受到SYN洪水攻击:攻击者发送大量SYN请求,但始终无法完成握手过程。这样一来,服务器的半开放连接队列就会不断填充。
  • 可能导致服务拒绝攻击(DoS攻击)。

缓解措施:SYN Cookie、防火墙、入侵防御系统以及速率限制措施。

TCP与UDP在可靠性方面有何不同?为什么仍然会选择使用UDP呢?

TCP:传输控制协议

  • 面向连接的协议。
  • 通过序列号、确认信号以及重传机制来实现可靠性。
  • 提供错误检测功能,同时还能进行拥塞控制与流量控制。
  • 更高的运营成本。

UDP:用户数据报协议

  • 无连接型,不可靠(没有确认信号,需要重新传输)。
  • 低运营成本,更快的交付速度。
  • 没有拥塞/流量控制。

为什么优先选择UDP呢:

  • 实时应用(如 VoIP、游戏、流媒体等)更看重低延迟,而非可靠性。
  • 较小的数据包丢失是可以接受的;而重复传输则会对性能产生更大的负面影响,而不是带来帮助。

3. 在传输层通信中,端口号发挥着什么作用?临时端口又是如何被使用的呢?

端口号的作用:

  • 识别主机上具体的应用程序/服务。
  • 例如:HTTP的端口为80,HTTPS的端口为443。DNS的端口为53。
  • 允许在同一IP地址上同时运行多个服务。

短暂存在的港口:

  • 临时分配的地址,由客户端操作系统动态分配(范围:约49152到65535)。
  • 用于外部连接。
  • 每个会话都通过一个独特的标识符来标识,这个标识符包括源IP地址、源端口、目标IP地址以及目标端口。
  • 允许同时建立多个连接(例如,打开多个浏览器标签页)。

4. 请说明TCP中的拥塞控制与流控制之间的区别。

流量控制(接收端):

  • 确保发送方不会让接收方的缓冲区负担过重。
  • 该机制是通过TCP头部中的接收窗口字段来管理的。
  • 保护最终目标设备。

拥塞控制(网络侧):

  • 可以防止发送者向网络发送过多的流量,从而避免网络拥塞现象的发生。
  • 算法:慢启动、拥塞避免、快速重传、快速恢复。
  • 保护网络路径。

差异:

  • 流量控制 = 端到端缓冲管理。
  • 拥塞控制意味着对带宽进行管理,从而防止网络出现拥塞现象。

5. 从应用层性能的角度来看,HTTP/2在哪些方面改进了HTTP/1.1?

HTTP/1.1 限制条款:

  • 排队阻塞机制:每个连接只能有一个请求被处理。
  • 重复发送头部信息会导致极高的处理成本。
  • 每页上的连接数量利用效率低下。

HTTP/2的改进:

  • 多路复用:通过单一的TCP连接实现多个数据流,从而消除应用程序层中的排队阻塞问题。
  • 头部压缩技术(HPACK):减少了重复性的头部处理开销。
  • 服务器推送:服务器可以在客户端请求资源之前主动发送这些资源。
  • 二进制框架:比基于文本的HTTP/1.1协议更高效的解析方式。

结果:延迟显著减少,页面加载速度更快,在高延迟或数据丢失的网络环境中也能获得更好的性能。

6. 比较持续型与非持续型的HTTP连接,以及它们对性能的影响。

非持久性连接(HTTP/1.0)

  • 每个HTTP请求/响应都需要一个独立的TCP连接。对于包含多个对象的网页(如HTML、CSS、JavaScript以及图片),浏览器会打开多个TCP连接,这会导致每次都需要进行三次握手和慢启动操作,从而增加了处理时间。
  • 影响/后果:延迟较高,带宽使用效率低下。

持久性(HTTP/1.1及后续版本):

  • 一个TCP连接可以同时处理多个请求,这些请求可以顺序处理,也可以并行处理(通过流水线/多路复用技术实现)。
  • 影响:减少了握手操作,降低了延迟,页面加载速度也更快了。

注意:持久连接能够显著提升网络性能,同时还能降低设置成本。

7. DNS缓存的工作原理是什么?它带来了哪些风险?

机制/运作方式:

  • DNS响应会在不同的层级上被缓存:
  • 浏览器缓存
  • 操作系统缓存解析器
  • 这是ISP的递归DNS服务器缓存机制。这样可以减少查询时间,避免重复查找操作。

风险:

  • DNS缓存欺骗:攻击者会注入伪造的DNS记录,从而将用户引导至恶意网站。
  • 过期的缓存条目:如果记录没有及时更新,用户可能会访问到已经过期的IP地址。

缓解措施:DNSSEC(数字签名)、较短的TTL值以及缓存的刷新。

8. 请说明QUIC在传输层操作方面与TCP+TLS有何不同。

传统的TCP + TLS协议:

  • 在进行安全数据传输之前,需要先进行三路TCP握手以及TLS握手操作。
  • 容易受到“先到者优先”原则的干扰,即丢失一个数据包会导致整个数据流延迟。

QUIC(基于UDP协议):

  • 将传输与加密功能(TLS 1.3)整合在单一握手过程中,从而实现更快速的配置过程。
  • 独立地对流进行多路复用,可以避免“队列头阻塞”的问题。
  • 连接迁移:QUIC通过标识符来识别连接,而不是通过IP地址或端口来识别。因此,在Wi-Fi与4G网络之间切换时,整个过程非常流畅。

注意:QUIC提供了更快、更可靠的传输方式,非常适合处理网络流量。因此,QUIC实际上构成了HTTP/3的基石。

9. SMTP在应用层中的角色是什么?它与IMAP和POP3有什么不同?

SMTP(简单邮件传输协议):

  • 用于在不同邮件客户端、邮件服务器以及目标服务器之间发送电子邮件。
  • 默认端口:25(服务器到服务器的通信),587(客户端提交信息所使用的端口)。

POP3(邮政邮件协议):

  • 将电子邮件下载到本地设备上。
  • 通常,服务器上的副本会被删除,从而导致各设备之间无法实现同步。

IMAP(互联网邮件访问协议):邮件存储在服务器上,支持多设备同步操作,包括邮件的读取/未读状态以及文件夹的同步功能。

注意:SMTP:发送邮件;POP3:仅提供下载功能;IMAP:支持多设备同步访问。

10. TCP是如何处理乱序的数据包的?为什么这一点对应用程序的性能来说非常重要呢?

处理/操作:

  • TCP会给每个字节分配一个序列号。
  • 接收器会先处理那些顺序混乱的数据包,直到所有丢失的数据包都到达为止。
  • ACK只确认最后接收到的连续字节数据。重复的ACK会触发快速重传。

为什么这很重要:

  • 确保数据的可靠性。
  • 然而,频繁的重排序会导致不必要的重传,进而降低网络吞吐量。

注意:TCP能够确保数据的有序传输,但代价是当遇到高延迟或复杂网络环境时,其性能会下降。例如,在无线网络或多路径网络中,TCP的性能就会受到影响。

11. TCP是如何处理数据包丢失的问题的?又是如何确保数据能够按序传输的呢?

数据包丢失处理:TCP为各个数据段分配序列号,并通过ACK信号来确认数据的传输是否成功。如果在一定时间内没有收到ACK信号,那么TCP会重新发送丢失的数据段。这个时间就是“重传超时时间”。

顺序配送:接收器使用序列号来重新排序那些顺序不连贯的片段,然后再将它们传递给应用程序。

优化措施:

  • 快速重传:在收到三个重复的确认信号后,会重新发送该段数据,而无需等待RTO的到来。
  • 选择性确认技术(Selective Acknowledgment, SACK):允许接收方向发送方告知究竟收到了哪些部分的数据,从而避免不必要的重传。

12. 为什么TCP同时使用序列号和确认号呢?

序列号:

  • 能够唯一地标识TCP流中传输的每个数据字节。
  • 确保各个段的正确排序(这有助于重新组装那些顺序混乱的数据包)。
  • 在重新传输时,可以避免数据的重复。

致谢编号:

  • 请指出来自另一端的下一个预期字节数据。
  • 请提供关于流量控制和重传处理的反馈意见。

注意:同时使用这两种方式可以确保双向的可靠性:发送方可以准确知道哪些字节被接收到了,而接收方则能够正确地重新排序并验证接收到的数据段。

13. 与TCP相比,UDP在处理实时应用程序方面有何优势?

UDP的特性:

  • 无连接模式,无需进行握手操作。
  • 无需进行任何重传或确认操作。
  • 数据包没有进行排序。

实时处理的优势:

  • 低延迟:数据在无需等待确认信号的情况下就能立即被发送出去。
  • 对损失的容忍度:实时应用(如VoIP、视频流媒体、在线游戏等)更希望出现较小的数据包丢失情况,而不是延迟。
  • 降低的抖动水平:无延迟的连续传输确保了更流畅的播放体验。

注意:UDP以速度和及时性为代价来牺牲可靠性,而实时应用程序正是需要这种特性的。

14. 请解释TCP中滑动窗口协议的工作原理。

滑动窗口协议允许TCP在需要收到确认之前,先发送多个数据段。

窗口大小:决定了有多少未被处理的数据仍然处于“流动”状态。

操作/执行方式:

  • 发送方可以传输多达窗口大小的数据。
  • 当ACK信号到达时,窗口会“向前移动”,从而允许新的数据被发送出去。

好处:

  • 高效的带宽利用率。
  • 支持流水线处理机制(即同时处理多个待处理的数据包)。

15. 为什么尽管TLS/SSL是在TCP之上运行的,它仍然被归类为应用层协议呢?

TLS/SSL的作用:为应用程序之间交换的数据提供保密性(加密)、完整性(哈希处理)以及身份验证功能(证书)。

定位:

  • 它位于TCP协议之上,而低于像HTTP、SMTP、FTP这样的应用程序协议。
  • 不会改变TCP的传输功能(如连接性、可靠性等)。

应用层分类的原因:

  • 安全服务是针对特定应用程序而设计的(例如,HTTPS、FTPS)。
  • 它本质上是一个由应用程序调用的库/服务,而不是TCP系统本身的一部分。

注意:TLS/SSL可以被视为一种应用层协议,它能够增强通信的安全性,而无需对TCP协议进行任何修改。

16. DNS缓存在应用层是如何工作的呢?

当DNS查询得到解析结果后,该结果(IP地址)会被存储在多个级别的本地DNS缓存中。

  • 浏览器缓存(最快的查找方式)
  • 操作系统缓存(系统级)
  • ISP缓存(由多个用户共同使用)

这样做可以缩短查询时间,减少DNS服务器的负担,同时提升浏览速度。缓存条目会根据其TTL(生存时间)值而过期。

17. TCP是如何避免“愚蠢窗口现象”的?

问题(SWS):这种情况发生在发送方或接收方都选择使用极小的窗口大小时,这会导致带宽的无效利用(因为需要传输太多的小数据包)。

预防(通过TCP实现):

  • 发送端(Nagle算法):在收到ACK或MSS(最大段大小)确认之前,请不要发送小型数据包。
  • 接收端(克拉克的解决方案):请不要宣传那些窗口尺寸非常小的产品;等到有足够的缓冲空间之后再开展宣传活动吧。

注意:这样就能避免数据被分割成过于小的数据包,从而实现高效的传输。

18. 请解释一下TCP中的“连接拆除”这一概念。

TCP连接终止是一个包含四个步骤的FIN握手过程:

  1. 发送方发送FIN信号,以表明不再有数据需要传输。
  2. 接收方确认了FIN信号。
  3. 接收方在准备关闭时,会发送自己的FIN信号。
  4. 发送方确认了接收方的FIN信号。

这样可以确保系统在关闭时不会丢失任何数据。

19. 为什么TCP在重传过程中会使用指数式退避策略?

  • 工作/运作如果某个时间段内发生超时,TCP会在下一次尝试时将重传超时时间翻倍(从1秒变为2秒,再变为4秒……)。
  • 原因:通过避免不必要的重传,可以防止网络在拥塞时出现崩溃的情况。这样,路由器就有足够的时间来处理那些等待处理的数据包。
  • 优势:自适应且公平的处理方式——既考虑了重传的必要性,又兼顾了网络的稳定性。

注意:指数型退避机制对于TCP的拥塞控制至关重要,它能够确保在高负载情况下系统的稳定性。

20. Nagle算法在TCP协议中解决了什么问题?它又可能在什么时候造成负面影响呢?

问题已解决:

  • 通过将多个小型数据包合并为较少但较大的数据包,从而减少了网络拥塞现象。
  • 在传输小块数据的应用中尤其有用(例如,按键操作产生的数据)。

工作:TCP会延迟发送较小的数据段,直到前一个数据段被确认之后,才会继续发送后续的数据。

有害案例:

  • 它会导致交互式应用程序出现延迟现象,比如在线游戏和VoIP等场景,因为这些场景需要实时传输数据。
  • 这种延迟现象被称为“Nagle + 延迟的ACK问题”。

注意:Nagle的方法确实提升了效率,但可能会对那些需要低延迟、实时处理的应用程序造成负面影响。

21. 请比较TCP和UDP的校验和机制。为什么UDP的校验和是可选的呢?

TCP校验和:

  • 强制性的。
  • 包含头部信息、数据内容以及伪头部信息(源地址/目标地址)。
  • 确保可靠性:如果发生比特错误,系统会检测到并重新传输数据。

UDP校验和:

  • 在IPv4协议中,这是可选的;而在IPv6协议中,这是必需的。
  • 包括标题、数据以及伪标题。
  • 如果校验和字段的值为 0,则意味着该字段“未被使用”。

在UDP协议中,原因是可选的。

  • UDP通常用于实时应用程序中(如VoIP、视频流传输等),因为这些应用对速度的要求较高,而可靠性则相对不那么重要。
  • 应用程序可以自行实现自己的错误检测机制。

注意:TCP要求极高的可靠性,而UDP则适用于需要低延迟的场景,能够提供更灵活的传输方式。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料