【持续更新】计算机网络试题

发布于:2025-06-13 ⋅ 阅读:(20) ⋅ 点赞:(0)

问题1

请简要说明TCP/IP协议栈的四层结构,并分别举出每一层出现的典型协议或应用。

答案

应用层:ping,telnet,dns

传输层:tcp,udp

网络层:ip,icmp

数据链路层:arp,rarp

问题2

下列协议或应用分别属于TCP/IP协议栈哪一层?

ARP,TCP,DNS,ICMP,TELNET

答案

arp:数据链路层

tcp:传输层

dns:应用层

icmp:网络层

telnet:应用层

问题3

简述以下协议的主要作用:

ARP,ICMP,TCP,UDP

答案

arp:网络层使用IP地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,因此网络层必须先将目标机器的IP地址转化成其物理地,才能使用数据链路层提供的服务。

icmp:用于网络诊断和差错报告,查询服务,比如ping就是用icmp查询的。

tcp:面向连接的可靠传输协议

udp:无连接的不可靠传输协议

dns:提供机器域名到IP地址的转换

问题4

简述ping命令从应用层到物理层的典型数据传输流程,涉及哪些协议?

答案

ping命令通过ICMP协议在网络层传递数据,最终通过IP协议封装,经过数据链路层(如以太网)发送到物理媒介。

问题5

“socket”在传输层和应用层之间,请解释socket的作用,以及为什么需要socket接口。

答案

socket是应用层与传输层之间的接口,应用程序通过socket与TCP/UDP通信,实现网络数据的收发。

问题6

linux系统中有用户空间和内核空间,请说明这两者的区别,并举例说明哪些协议或应用运行在用户空间,哪些运行在内核空间。

答案

  • 用户空间:应用程序运行的空间,如ping、telnet、DNS等
  • 内核空间:操作系统内核管理的空间,如TCP、UDP、IP、ICMP、ARP等协议的实现

问题7

TCP和UDP分别依赖于哪一层的协议进行数据传输?ICMP和IP之间是什么关系?

答案

  • TCP和UDP都依赖于IP协议进行数据传输
  • ICMP是IP协议的辅助协议,属于网络层,常用于网络诊断

问题8

请结合UDP协议的特性,回答下列问题:

  1. 为什么UDP协议在数据报成功发送后会立即丢弃内核缓冲区中的数据?这样做的优缺点是什么?
  2. 如果应用层需要保证数据可靠送达,UDP协议本身能否满足?如果不能,应该如何实现?
  3. 假设你在用UDP实现一个文件传输程序,如何设计数据重发机制?请简要描述你的思路。
  4. 与TCP相比,UDP在数据管理和可靠性方面有何不同?请举例说明。

答案

1.

  • UDP丢弃数据是因为它不保证可靠性,减少了内存占用和协议复杂度,提高了效率。
  • 优点:简单、快速、资源消耗少。缺点:数据丢失后无法自动重发,可靠性低。

2.

  • UDP本身不能保证数据可靠送达。
  • 应用层需要实现超时重传、确认应答等机制来保证可靠性。

3.

  • 设计思路:为每个数据包编号,发送后等待接收方确认(ACK)。如果超时未收到ACK,则重发该数据包。重复直到收到确认或达到最大重发次数。

4.

  • TCP会为每个数据包保存副本,直到收到确认才释放,自动重发丢失的数据,保证可靠性。
  • UDP不保存副本,不自动重发,可靠性由应用层保证。例如:视频直播用UDP,文件下载用TCP。

问题9

请结合以太网帧的最大传输单元(MTU)和IP分片机制,回答下列问题:

  1. 什么是MTU?以太网的典型MTU值是多少?MTU的大小受什么因素影响?
  2. 如果一个IP数据报的长度超过了底层网络的MTU,会发生什么?请简要描述IP分片的过程。
  3. 在IP分片过程中,分片后的每个数据包都有哪些必要的头部信息?接收端如何将分片的数据包重新组装为原始数据报?
  4. 请解释以下场景:某主机A向主机B发送一个2000字节的IP数据报,经过的以太网MTU为1500字节。请问该数据报会如何被分片?每个分片的大小是多少?分片的数量是多少?(假设IP头部为20字节,且不考虑其他选项)
  5. IP分片可能带来哪些问题?在实际网络设计中,如何尽量避免IP分片?

答案

1.

  • MTU(最大传输单元)是指数据链路层一次能够承载的最大数据字节数。
  • 以太网的典型MTU为1500字节。
  • MTU的大小受物理网络类型和链路层协议的限制。

2.

  • 如果IP数据报长度超过MTU,IP层会将数据报分片,每个分片单独封装并发送。
  • 分片后,每个分片都带有IP头部,包含分片偏移、标识等信息。

3.

  • 每个分片都包含原始IP头部的关键信息,如标识(Identification)、分片偏移(Fragment Offset)、更多分片标志(MF)。
  • 接收端根据标识和偏移将分片重新组装为完整的数据报。

4.

  • 2000字节数据报,IP头部20字节,数据部分1980字节。
  • 以太网MTU为1500字节,每个分片最大数据为1480字节(1500-20)。
  • 第一个分片:20字节头+1480字节数据;第二个分片:20字节头+500字节数据。
  • 分片数量为2。

5.

  • 问题:分片增加丢包风险,重组消耗资源,部分分片丢失会导致整个数据报丢失。
  • 避免方法:尽量控制应用层数据包大小,使用路径MTU发现(PMTUD)等技术,避免IP层分片。

问题10

结合socket API的功能,回答下列问题:

  1. socket API在网络编程中起什么作用?请简要说明socket API的两大核心功能。
  2. 在数据发送和接收过程中,socket API如何实现用户空间和内核空间之间的数据传递?请结合send和recv(或read/write)函数简要说明。
  3. 为什么需要将应用程序数据从用户缓冲区复制到内核TCP/UDP发送缓冲区?这样做的优缺点是什么?
  4. 除了数据收发,socket API还能实现哪些底层协议的精细控制?请举例说明可以通过socket API设置或获取哪些协议相关的参数。
  5. 请解释以下场景:一个应用程序通过socket发送数据,数据在内核中经历了哪些缓冲区?如果应用程序需要修改TCP的发送窗口大小或设置IP头部的某些选项,应该如何实现?
  6. 请简要说明socket API与TCP/UDP协议栈的关系。为什么说socket是应用层与传输层之间的桥梁?

答案

1.

  • socket API是应用程序与操作系统网络协议栈(如TCP/UDP)交互的接口。
  • 两大核心功能:
  1. 实现用户空间与内核空间之间的数据收发(如send/recv)。
  2. 允许应用程序精细控制底层协议参数(如setsockopt/getsockopt)。

2.

  • send/write:将用户缓冲区的数据复制到内核TCP/UDP发送缓冲区,由内核负责后续发送。
  • recv/read:将内核TCP/UDP接收缓冲区的数据复制到用户缓冲区,供应用程序读取。

3.

  • 这样做可以实现进程与内核的隔离,提高系统安全性和稳定性。
  • 优点:内核统一管理网络资源,支持多任务并发。
  • 缺点:多一次数据拷贝,可能带来性能开销。

4.

  • 可以通过socket API设置或获取协议参数,如:
  • 设置TCP的发送/接收缓冲区大小(SO_SNDBUF/SO_RCVBUF)
  • 设置IP头部选项(如IP_TTL、IP_TOS)
  • 启用/禁用Nagle算法(TCP_NODELAY)

5.

  • 数据流向:用户缓冲区 → 内核TCP/UDP发送缓冲区 → 网络。
  • 修改TCP窗口大小或IP选项:使用setsockopt函数设置相应的socket选项。

6.

  • socket API是应用层与传输层(TCP/UDP)之间的接口,应用程序通过socket与协议栈交互,实现网络通信。

问题11

请结合IP协议的无状态、无连接、不可靠特性,回答下列问题:

  1. 什么是“无状态(stateless)”服务?请结合IP协议的工作方式简要说明。
  2. 为什么说IP协议是无连接的?与面向连接的协议(如TCP)相比,这种设计有何优缺点?
  3. IP协议为什么被称为“不可靠”的?请举例说明在实际网络传输中可能出现哪些问题。
  4. 假设发送端连续发送了编号为N和N+1的两个IP数据报,接收端可能会遇到哪些情况?IP协议能否检测和处理这些情况?为什么?
  5. 如果IP协议无法保证数据的有序和不重复,为什么实际应用中数据通常是有序且无重复的?请结合TCP协议的机制简要说明。
  6. 请解释IP分片和重组的过程,以及IP协议在分片重组后如何处理数据报。

答案

1.

  • “无状态”指IP协议在通信双方之间不维护任何会话或上下文信息,每个IP数据报的发送、传输和接收都是独立的。
  • IP模块不会记录之前发送或接收过哪些数据报。

2.

  • IP协议是无连接的,发送数据前不需要建立连接,数据报可以独立传输。
  • 优点:简单、高效、适合广播和多播。
  • 缺点:无法保证数据顺序、完整性和可靠性。

3.

  • IP协议不保证数据一定能到达、不保证顺序、不保证不重复。
  • 可能出现丢包、乱序、重复等问题。

4.

  • 接收端可能先收到N+1,再收到N,或者收到多个N,甚至丢失N+1。
  • IP协议无法检测和处理乱序、重复或丢失,只要收到完整数据报就上交给上层协议。

5.

  • 实际应用中,TCP等面向连接的协议在IP之上实现了重传、排序、去重等机制,保证了数据的有序和无重复。
  • TCP通过序列号、确认应答、重传等机制实现可靠传输。

6.

  • IP分片:当数据报大于MTU时,IP协议将其分成多个分片,每个分片独立传输。
  • 重组:接收端IP模块根据分片信息将其重组为完整数据报,然后上交给上层协议。

问题12

1.IP协议的路由机制分为哪三个步骤?请简要说明每个步骤的作用

2.在Linux系统中,如何查看当前主机的路由表?请给出命令并解释输出结果。

3.一台主机要访问互联网上的某个服务器,但路由表中没有匹配的路由项,此时数据报会如何处理?

答案

1.

  • 步骤1:查找路由表中与目标IP完全匹配的主机IP地址。
  • 步骤2:查找路由表中与目标IP具有相同网络ID的网络IP地址。
  • 步骤3:使用默认路由项,通常指向网关。

2.

  • 命令:route -n或ip route show
  • 输出结果包含目标网络、网关、接口等信息。

3.

  • 如果路由表中没有匹配项,数据报会被丢弃,并可能返回“网络不可达”的ICMP错误。

问题13

请结合IP数据报转发子模块的工作流程,回答下列问题:

  1. IP数据报转发子模块对期望转发的数据报执行哪些操作?请简要说明每个步骤的作用。
  2. TTL(Time To Live)字段的作用是什么?为什么在转发数据报时需要检查TTL值?如果TTL值为0,数据报会如何处理?
  3. 什么是严格源路由选择选项?如果数据报的目标IP地址不是本机的某个IP地址,转发子模块会如何处理?
  4. ICMP重定向报文的作用是什么?在什么情况下,转发子模块会发送ICMP重定向报文?
  5. 请解释以下场景:一个IP数据报经过多个路由器转发,TTL值从初始值逐渐减为0,最终会发生什么?请结合TTL的作用说明。
  6. 在Linux系统中,如何查看当前主机的TTL值?请给出命令并解释输出结果。

答案

参考答案要点:

1.

  • 步骤1:检查数据报头部的TTL值,如果为0则丢弃。
  • 步骤2:检查严格源路由选择选项,如果目标IP不是本机IP,发送ICMP源站选路失败报文。
  • 步骤3:必要时发送ICMP重定向报文,指示更合理的下一跳路由器。
  • 步骤4:将TTL值减1。
  • 步骤5:处理IP头部选项。
  • 步骤6:必要时执行IP分片操作。

2.

  • TTL字段用于限制数据报在网络中的生存时间,防止数据报无限循环。
  • 每经过一个路由器,TTL值减1,如果减为0,数据报会被丢弃,并可能返回ICMP超时错误。

3.

  • 严格源路由选择选项要求数据报必须按照指定的路径传输。
  • 如果目标IP不是本机IP,转发子模块会发送ICMP源站选路失败报文给发送端。

4.

  • ICMP重定向报文用于通知发送端,存在更优的下一跳路由器。
  • 当路由器发现数据报的下一跳不是最优路径时,会发送ICMP重定向报文。

5.

  • 如果TTL值减为0,数据报会被丢弃,并可能返回ICMP超时错误,防止数据报在网络中无限循环。

6.

  • 命令:ping -c 1 <目标IP>,查看TTL值。
  • 输出结果中的TTL字段表示数据报的生存时间。

 参考来源:《Linux高性能服务器编程》