📡 C++网络面试题精讲:从Socket到HTTP协议,一篇搞定!

面试官最爱问的网络八股文,看完直接拿offer! 💪
文末附赠 「网络协议速查表」 🎁



🖥️ 一、Socket编程核心函数

服务端流程
  1. socket():创建套接字(int socket(int domain, int type, int protocol);
    • 例:int server_fd = socket(AF_INET, SOCK_STREAM, 0);
  2. 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));  
    
  3. listen():监听连接请求(listen(server_fd, backlog);
  4. accept():接受客户端连接(返回新socket)
    int client_socket = accept(server_fd, nullptr, nullptr);  
    
客户端流程
  1. connect():连接服务器
    connect(client_fd, (sockaddr*)&server_addr, sizeof(server_addr));  
    
  2. send()/recv():收发数据(TCP)
    • send(socket, buffer, size, flags);
    • recv(socket, buffer, size, flags);

💡 函数详解

  • accept():阻塞直到有新连接,返回专属通信socket
  • send() 可能只发送部分数据,需循环调用!
  • 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?

  1. 确保最后一个ACK到达(防止服务端重发FIN)
  2. 让旧连接的报文在网络中消失(避免新连接收到脏数据)
  3. 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(证书颁发机构)签发的电子身份证,用于验证服务器身份。

包含内容
  1. 公钥
  2. 持有者信息(域名、组织等)
  3. 证书有效期
  4. CA的数字签名
  5. 签名算法(如SHA256-RSA)

🔒 HTTPS流程
客户端用CA公钥验证证书签名 → 验证通过后取出服务器公钥加密数据


📬 六、GET vs POST

特性 GET POST
数据位置 URL中(明文) 请求体(可加密)
安全性 低(浏览器缓存) 较高
数据长度 受URL长度限制 无限制
幂等性 ✅(多次请求结果相同)
典型场景 搜索、翻页 登录、支付

🎫 七、Session机制

是什么?

服务端存储的用户状态信息(如登录状态、购物车数据)。

工作流程
  1. 客户端登录 → 服务端创建Session(存储于内存/Redis)
  2. 返回SessionID(通常通过Cookie传递)
  3. 后续请求携带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状态转换图稳赢!


恭喜你坚持到这里!👏 本期我们覆盖了计算机网络中的基本原理,并实战解决了九个高频面试题。记住:理解其中的实现思想比硬背八股更重要,多练习才能在面试中游刃有余。😊 如果有疑问,欢迎评论区讨论~ 下期见!🚀

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐