【C++上岸】C++常见面试题目--网络篇(第二十五期)
大家好!😊 欢迎来到C++面试系列的第二十五期——网络篇!网络知识是面试中的高频考点,尤其对C++后端开发岗位至关重要。今天,我将详细拆解10个常见问题,包括HTTPS安全机制、HTTP请求过程、DNS解析等,助你轻松上岸!💡 记得收藏哦,面试前翻一翻,信心满满!🚀
1. HTTPS是如何保证数据传输的安全?
HTTPS(HTTP Secure)通过SSL/TLS协议为HTTP添加加密层,确保数据传输的机密性、完整性和认证性。核心机制如下:
- 机密性:使用对称加密算法(如AES)加密数据,防止窃听。密钥通过非对称加密(如RSA)安全交换。例如,非对称加密基于数学难题,私钥解密公式:m=cdmod nm = c^d \mod nm=cdmodn,其中ccc是密文,ddd是私钥。
- 完整性:哈希算法(如SHA-256)生成消息摘要,确保数据未被篡改。哈希值计算:h=SHA256(m)h = \text{SHA256}(m)h=SHA256(m)。
- 认证性:数字证书验证服务器身份,防止中间人攻击。证书由CA(证书颁发机构)签发,包含公钥和签名。
整个过程就像给数据加了“保险箱”🔒,攻击者无法破解!面试时强调TLS握手流程(见问题8),得分点满满~👍
2. 完整的HTTP请求过程包括哪些内容
一个完整的HTTP请求从用户输入URL到页面渲染,经历多个步骤:
- DNS解析:将域名(如www.example.com)转换为IP地址。
- TCP连接:通过三次握手建立可靠连接(SYN, SYN-ACK, ACK)。
- HTTP请求:客户端发送请求报文(如GET /index.html)。
- 服务器处理:服务器解析请求,生成响应(如HTML内容)。
- HTTP响应:服务器返回状态码(如200 OK)和数据。
- 渲染与关闭:客户端渲染内容,通过四次挥手关闭TCP连接。
整个过程耗时毫秒级,但涉及网络分层(应用层、传输层等)。🤔 记住,DNS和TCP是基础,面试官爱问细节!
3. 请你说一说DNS解析过程
DNS(域名系统)解析将人类可读域名转为机器IP地址,过程如下:
- 本地缓存检查:客户端先查本地DNS缓存,命中则直接返回IP。
- 递归查询:若缓存未命中,向本地DNS服务器发起请求。
- 迭代查询:本地DNS服务器依次查询根DNS、顶级域(TLD)DNS、权威DNS。
- 根DNS返回TLD地址(如.com)。
- TLD DNS返回权威DNS地址(如example.com)。
- 权威DNS返回目标IP。
- 结果返回:本地DNS缓存IP并返回客户端。
例如,查询www.example.com时,可能路径:客户端 → 本地DNS → 根DNS → .com TLD → example.com权威DNS。全程高效,像“快递员”📦 层层派送!面试时画图解释更直观~🎯
4. 详细介绍网络加密算法
网络加密算法分为三类,确保数据安全:
- 对称加密:加密和解密用同一密钥,速度快,适合大数据传输。
- 算法:AES(高级加密标准),密钥长度128/256位。
- 公式:加密c=Ek(m)c = E_k(m)c=Ek(m),解密m=Dk(c)m = D_k(c)m=Dk(c),其中kkk是密钥,mmm是明文。
- 非对称加密:公钥加密,私钥解密,解决密钥分发问题。
- 算法:RSA,基于大数分解难题。
- 公式:加密c=memod nc = m^e \mod nc=memodn,解密m=cdmod nm = c^d \mod nm=cdmodn,其中(e,n)(e, n)(e,n)是公钥,(d,n)(d, n)(d,n)是私钥。
- 哈希函数:生成固定长度摘要,确保数据完整性。
- 算法:SHA-256,输出256位哈希值。
- 公式:h=SHA256(m)h = \text{SHA256}(m)h=SHA256(m),抗碰撞性强。
HTTPS结合这些算法(如TLS用RSA交换AES密钥),形成“安全盾牌”🛡️。面试时举例应用场景,如RSA用于证书验证!
5. 一次完整的HTTP请求所经历几个步骤
一次HTTP请求从发起到结束,共6个核心步骤:
- DNS解析:解析域名到IP地址(耗时约10-100ms)。
- TCP连接:三次握手建立连接(SYN → SYN-ACK → ACK)。
- HTTP请求发送:客户端发送请求报文(方法如GET,路径如/index.html)。
- 服务器处理:服务器执行逻辑(如读取文件或查询数据库)。
- HTTP响应返回:服务器发送响应(状态码如200,数据如HTML)。
- 连接关闭:四次挥手释放TCP资源(FIN → ACK → FIN → ACK)。
如果是HTTPS,步骤3前需TLS握手。整个过程像“接力赛”🏃♂️,每个环节依赖下层协议。面试时结合问题2,突出TCP/IP模型!
6. 如果已经建立了连接,但是客户端突然出现故障了怎么办
当TCP连接已建立,但客户端故障(如崩溃或断网),服务器通过以下机制处理:
- TCP Keep-Alive:服务器定期发送探测包(如每60秒),检测客户端活动。
- 若客户端无响应(超时,如默认2小时),服务器关闭连接。
- 应用层超时:HTTP服务器设置超时阈值(如30秒无数据传输),主动终止连接。
- 资源回收:系统内核回收TCP套接字资源,防止“僵尸连接”。
这就像“心跳检测”❤️🔥,确保资源不浪费。面试时提到TCP的可靠性设计,加分!😊
7. HTTP 如何实现长连接?在什么时候会超时?
HTTP长连接(Keep-Alive)允许多个请求复用同一TCP连接,减少开销:
- 实现方式:通过HTTP头部
Connection: keep-alive
启用。客户端和服务器协商后,保持连接开放。 - 超时机制:
- 空闲超时:服务器设置超时时间(如Apache默认5秒),若期间无新请求,关闭连接。
- 最大请求数:限制单个连接处理的请求数(如100个),达到后关闭。
- 客户端超时:浏览器可能主动关闭空闲连接(如30秒)。
长连接提升性能,但需平衡资源。超时就像“自动关机”⏰,防止浪费!面试时对比短连接,强调HTTP/1.1默认支持。
8. HTTPS的加密流程是怎样的
HTTPS加密流程基于TLS握手,共4个阶段:
- ClientHello:客户端发送支持的加密套件和随机数。
- ServerHello:服务器选择加密套件,返回随机数和数字证书。
- 密钥交换:客户端验证证书,用服务器公钥加密预主密钥(非对称加密)。
- 公式:c=(pre-master key)emod nc = (\text{pre-master key})^e \mod nc=(pre-master key)emodn。
- 会话密钥生成:双方用随机数和预主密钥派生对称会话密钥(如AES密钥)。
- 加密通信:后续数据用会话密钥对称加密传输。
整个过程高效安全,耗时约100-300ms。面试时拆解为“握手+加密”两步,考官直呼专业!🔐
9. IP地址有哪些分类
IP地址分为五类,基于IPv4地址结构:
- Class A:首位为0,范围1.0.0.0–126.255.255.255,用于大型网络(如ISP)。
- 网络号:8位,主机号:24位。
- Class B:首位10,范围128.0.0.0–191.255.255.255,用于中型网络(如大学)。
- 网络号:16位,主机号:16位。
- Class C:首位110,范围192.0.0.0–223.255.255.255,用于小型网络(如企业)。
- 网络号:24位,主机号:8位。
- Class D:首位1110,范围224.0.0.0–239.255.255.255,用于组播。
- Class E:首位1111,范围240.0.0.0–255.255.255.255,保留实验用。
现在多用CIDR(无类别域间路由)替代分类,灵活划分子网。面试时提IPv6更全面!🌐
10. 说下ARP协议的工作过程
ARP(地址解析协议)将IP地址映射到MAC地址,工作过程如下:
- 检查缓存:主机先查本地ARP缓存,命中则直接使用MAC地址。
- 广播请求:若未命中,主机广播ARP请求包(包含目标IP)。
- 目标回复:目标主机收到请求,单播回复ARP响应包(包含自身MAC地址)。
- 更新缓存:请求主机缓存MAC地址,用于后续数据帧传输。
例如,主机A(IP_A)想发数据给主机B(IP_B):
- A广播:“谁有IP_B的MAC?”📢
- B回复:“我是IP_B,MAC是XX:XX:XX!”
- A记录并发送数据。
ARP像“地址簿”📇,确保局域网通信顺畅。面试时结合以太网帧解释,更生动!
总结
搞定这10个网络问题,C++面试网络篇就稳了!🎉 记住:HTTPS安全靠加密、HTTP过程重步骤、DNS解析是基础、加密算法分三类、故障处理用超时、长连接省资源、IP分类要清晰、ARP工作像查询。多练习概念,面试时对答如流~💪 下期见,祝你早日上岸!🚀
(网络知识不难,学完你就是“协议大师”🧙♂️!有问题评论区留言~👇)