【C++上岸】C++常见面试题目--网络篇(第二十一期)
📡 C++网络面试题精讲:从Socket到HTTP协议,一篇搞定!
面试官最爱问的网络八股文,看完直接拿offer! 💪
文末附赠 「网络协议速查表」 🎁
文章目录
- 📡 C++网络面试题精讲:从Socket到HTTP协议,一篇搞定!
- 🖥️ 一、Socket编程核心函数
- **服务端流程**
- **客户端流程**
- 🌐 二、URI vs URL
- ⏳ 三、TIME_WAIT与2MSL
- 🛌 四、服务端监听状态
- 🔐 五、数字证书详解
- **是什么?**
- **包含内容**:
- 📬 六、GET vs POST
- 🎫 七、Session机制
- **是什么?**
- **工作流程**:
- 🍪 八、Session vs Cookie
- 📡 九、IP地址 vs MAC地址
- **IP地址**
- **MAC地址**
- 💎 附:网络协议速查表
🖥️ 一、Socket编程核心函数
服务端流程
socket()
:创建套接字(int socket(int domain, int type, int protocol);
)- 例:
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
- 例:
bind()
:绑定IP和端口sockaddr_in address{}; address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(8080); bind(server_fd, (sockaddr*)&address, sizeof(address));
listen()
:监听连接请求(listen(server_fd, backlog);
)accept()
:接受客户端连接(返回新socket)int client_socket = accept(server_fd, nullptr, nullptr);
客户端流程
connect()
:连接服务器connect(client_fd, (sockaddr*)&server_addr, sizeof(server_addr));
send()/recv()
:收发数据(TCP)send(socket, buffer, size, flags);
recv(socket, buffer, size, flags);
💡 函数详解:
accept()
:阻塞直到有新连接,返回专属通信socketsend()
可能只发送部分数据,需循环调用!recv()
返回0表示连接关闭
🌐 二、URI vs URL
URI | URL |
---|---|
统一资源标识符 | 统一资源定位符 |
包含URL和URN | URL的子集 |
例:ISBN:978-7-04-052324 | 例:https://www.example.com/img/logo.png |
✅ 核心区别:URL强调资源位置,URI强调资源身份。所有URL都是URI,反之不成立!
⏳ 三、TIME_WAIT与2MSL
为什么客户端关闭后要等待2MSL?
- 确保最后一个ACK到达(防止服务端重发FIN)
- 让旧连接的报文在网络中消失(避免新连接收到脏数据)
- MSL(Maximum Segment Lifetime):报文最大生存时间(通常30s-2min)
⚠️ 公式:TIME_WAIT=2×MSL\text{TIME\_WAIT} = 2 \times \text{MSL} TIME_WAIT=2×MSL
面试考点:若服务器主动关闭连接,也会进入TIME_WAIT状态!
🛌 四、服务端监听状态
当listen()
后无客户端连接时:
- 进程状态:
阻塞
(默认行为) - 底层机制:内核将进程放入等待队列,直到
SYN
到达 - 优化方案:可通过
fcntl()
设置非阻塞模式!
📌 关键命令:
netstat -tuln | grep 8080
查看端口状态
🔐 五、数字证书详解
是什么?
由CA(证书颁发机构)签发的电子身份证,用于验证服务器身份。
包含内容:
- 公钥
- 持有者信息(域名、组织等)
- 证书有效期
- CA的数字签名
- 签名算法(如SHA256-RSA)
🔒 HTTPS流程:
客户端用CA公钥验证证书签名 → 验证通过后取出服务器公钥加密数据
📬 六、GET vs POST
特性 | GET | POST |
---|---|---|
数据位置 | URL中(明文) | 请求体(可加密) |
安全性 | 低(浏览器缓存) | 较高 |
数据长度 | 受URL长度限制 | 无限制 |
幂等性 | ✅(多次请求结果相同) | ❌ |
典型场景 | 搜索、翻页 | 登录、支付 |
🎫 七、Session机制
是什么?
服务端存储的用户状态信息(如登录状态、购物车数据)。
工作流程:
- 客户端登录 → 服务端创建Session(存储于内存/Redis)
- 返回SessionID(通常通过Cookie传递)
- 后续请求携带SessionID → 服务端检索对应数据
⚠️ 面试坑点:Session默认存储在服务器,Cookie存储在客户端!
🍪 八、Session vs Cookie
特性 | Session | Cookie |
---|---|---|
存储位置 | 服务端 | 客户端 |
安全性 | 高(数据不传输) | 低(可能被窃取) |
生命周期 | 会话结束/过期 | 可设置长期有效 |
存储大小 | 无限制(理论上) | ≤4KB |
💡 经典方案:将SessionID存入Cookie,敏感数据存Session!
📡 九、IP地址 vs MAC地址
IP地址
- 作用:网络层寻址(跨网络通信)
- 特性:
- 逻辑地址(可配置)
- 标识整个网络中的设备
- 例:
192.168.1.100
MAC地址
- 作用:数据链路层寻址(同一局域网内通信)
- 特性:
- 物理地址(烧录在网卡)
- 标识局域网内唯一设备
- 例:
00-B0-D0-63-C2-26
🌟 核心公式:
数据包=IP头部+MAC头部+Payload\text{数据包} = \text{IP头部} + \text{MAC头部} + \text{Payload} 数据包=IP头部+MAC头部+Payload
💎 附:网络协议速查表
TCP三次握手:SYN → SYN+ACK → ACK
TCP四次挥手:FIN → ACK → FIN → ACK
HTTP状态码: 200 OK 401 Unauthorized 404 Not Found 500 Internal Server Error
🚀 终极提示:面试时遇到协议问题,先画流程图!掌握TCP状态转换图稳赢!
恭喜你坚持到这里!👏 本期我们覆盖了计算机网络中的基本原理,并实战解决了九个高频面试题。记住:理解其中的实现思想比硬背八股更重要,多练习才能在面试中游刃有余。😊 如果有疑问,欢迎评论区讨论~ 下期见!🚀