【C++上岸】C++常见面试题目--网络篇(第二十三期)
划重点! 本期涵盖10大高频网络面试题,助你轻松拿Offer~ [🚀]
文章目录
- 📊 1. OSI与TCP/IP协议栈对应关系
- 🚦 2. 流量控制原理
- 🔗 3. TCP/IP数据链路层交互过程
- 📬 4. IP层如何区分报文类型与目标应用
- 🤝 5. UDP的connect函数
- ⏳ 6. TCP的TIME_WAIT状态理解
- ❓ 7. 为什么需要TIME_WAIT
- 🌐 8. 输入URL到页面展示全流程
- 📡 9. ICMP协议及作用
- 🛰️ 10. 路由器 vs 交换机
📊 1. OSI与TCP/IP协议栈对应关系
OSI七层模型 | TCP/IP四层模型 | 核心协议举例 |
---|---|---|
应用层 | 应用层 | HTTP, FTP, DNS |
表示层 | ↑ | SSL/TLS (加密/压缩) |
会话层 | ↑ | NetBIOS (会话管理) |
传输层 | 传输层 | TCP, UDP |
网络层 | 网络层 | IP, ICMP, ARP |
数据链路层 | 链路层 | Ethernet, PPP |
物理层 | ↑ | 网线/光纤等物理介质 |
👉 关键点:TCP/IP将OSI上三层合并为"应用层",下两层合并为"链路层"。🔍
🚦 2. 流量控制原理
核心机制:滑动窗口(Sliding Window)
- 原理:接收方通过窗口大小告知发送方可接收的数据量上限,避免数据淹没。
公式:Wrecv=Rbuf−LpendingW_{recv} = R_{buf} - L_{pending}Wrecv=Rbuf−Lpending
其中 RbufR_{buf}Rbuf 是接收缓冲区大小,LpendingL_{pending}Lpending 是待处理数据长度。 - 动态调整:接收方实时更新窗口值(如TCP头部
Window Size
字段),发送方据此调整发送速率。
👉 场景:若接收方处理慢,窗口缩小为0,发送方暂停传输(Zero Window Probe机制)。
🔗 3. TCP/IP数据链路层交互过程
数据链路层处理相邻节点间通信:
- 封装成帧:将IP数据包封装为帧,添加首部(源/目的MAC地址)和尾部(校验和)。
- 透明传输:特殊字符转义(如PPP协议的
0x7E
转0x7D 0x5E
)。 - 差错检测:CRC循环冗余校验,错误帧直接丢弃。
- 介质访问:
- 以太网:CSMA/CD(载波监听多路访问/冲突检测)
- 无线网络:CSMA/CA(冲突避免)
📬 4. IP层如何区分报文类型与目标应用
- 区分协议:IP头部
Protocol
字段标识传输层协议类型(如6=TCP
,17=UDP
)。 - 定位应用:传输层头部包含端口号(Port),例如:
- TCP 80端口 → HTTP服务
- UDP 53端口 → DNS服务
👉 底层实现:内核通过socket
绑定的端口号将数据交给对应进程。
🤝 5. UDP的connect函数
UDP本是无连接的,但connect()
可建立默认远端地址:
- 作用:
- 后续
send()
/recv()
无需指定地址(提高效率)。 - 内核直接过滤非该地址的报文(提升安全性)。
- 后续
- 伪代码示例:
sockfd = socket(AF_INET, SOCK_DGRAM, 0); connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); // 绑定默认地址 send(sockfd, buffer, strlen(buffer), 0); // 无需再指定目标地址
⚠️ 注意:不触发三次握手,仅本地记录地址!💡
⏳ 6. TCP的TIME_WAIT状态理解
TIME_WAIT是TCP四次挥手后主动关闭方的最终状态:
- 持续时间:2×MSL2 \times MSL2×MSL(MSL=Maximum Segment Lifetime,通常30s~2min)。
- 状态转换流程:
主动关闭方:FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED\text{主动关闭方:FIN\_WAIT\_1 → FIN\_WAIT\_2 → TIME\_WAIT → CLOSED} 主动关闭方:FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
❓ 7. 为什么需要TIME_WAIT
设计目的:
- 确保最后一次ACK到达:若ACK丢失,被动方重发FIN,主动方可再次响应。
- 消除旧连接残留报文:等待2MSL使网络中旧数据包失效,避免新连接被干扰。
👉 案例:服务器高并发时,短连接过多导致TIME_WAIT堆积,需调整内核参数(如net.ipv4.tcp_tw_reuse
)。
🌐 8. 输入URL到页面展示全流程
- DNS解析:查询URL对应IP(递归+迭代查询)。
- TCP连接:与服务器三次握手建立连接。
- HTTP请求:发送GET/POST请求(HTTPS还需TLS握手)。
- 服务器处理:返回HTML/CSS/JS等资源。
- 浏览器渲染:
- 解析HTML构建DOM树
- 解析CSS生成样式规则
- 执行JS → 渲染页面 → 显示内容
⏱️ 优化点:CDN加速、HTTP/2多路复用。
📡 9. ICMP协议及作用
ICMP(Internet Control Message Protocol) 是网络层"哨兵":
- 功能:
- 错误报告(如
Destination Unreachable
) - 诊断工具(如
ping
用ICMP Echo Request/Reply
测试连通性) - 路径控制(如
TTL Exceeded
提示路由循环)
- 错误报告(如
- 封装位置:封装在IP包内,协议号=1。
🛰️ 10. 路由器 vs 交换机
维度 | 路由器 | 交换机 |
---|---|---|
工作层级 | 网络层(Layer 3) | 数据链路层(Layer 2) |
寻址依据 | IP地址 | MAC地址 |
核心功能 | 跨网段路由、NAT、防火墙 | 局域网内高速转发 |
典型场景 | 连接不同网络(如家宽→互联网) | 连接同网段设备(如办公室PC互联) |
💎 总结:掌握这些核心知识点,面试官直呼内行!
转发+收藏,助你轻松上岸!🎯💻
✨ 恭喜你坚持到这里!👏 本期我们覆盖了计算机网络中的基本原理,并实战解决了十个高频面试题。记住:理解其中的实现思想比硬背八股更重要,多练习才能在面试中游刃有余。😊 如果有疑问,欢迎评论区讨论~ 下期见!🚀