当前位置: 首页 > ds >正文

【C++八股文】计算机网络篇

 网络协议核心知识点详解

TCP头部结构

TCP头部包含多个关键字段,每个字段都有其特定作用:

  • 16位源端口:标识发送方应用程序的端口号
  • 16位目的端口:标识接收方应用程序的端口号
  • 32位序号:保证数据包有序传输的唯一标识
  • 32位确认序号:期望收到的下一个数据包的序列号
  • 4位首部长度:以4字节为单位计算头部实际长度
  • 6位标志位:包含SYN、ACK、FIN等控制标志
  • 16位窗口大小:指示接收方可用的缓冲区空间
  • 16位校验和:用于检测数据传输中的错误
  • 16位紧急指针:标识紧急数据的位置

重要提示:TCP报文不包含IP地址信息,仅通过端口号标识应用程序。一个完整的TCP连接需要四元组来唯一标识:(源IP地址,源端口,目的IP地址,目的端口)。

完整C++后端八股文:>> C++八股文(完整版)<<

三次握手的重要性

TCP建立连接需要三次握手,主要目的包括:

  1. 初始化序列号:双方交换初始序列号(ISN),确保数据包按正确顺序组装
  2. 参数协商:交换最大报文段长度(MSS)、窗口大小等关键参数
  3. 防止历史连接干扰:避免网络中延迟的旧连接请求被误认为新连接请求

TCP粘包问题分析与解决

UDP协议不存在粘包问题,因为UDP是基于数据报的传输方式,每个数据包都有明确边界。TCP粘包问题产生的主要原因包括:

  • 发送方启用Nagle算法,将多个小数据包合并发送以提高网络效率
  • 接收方应用程序未能及时从缓冲区读取数据,导致多个数据包堆积

解决方案:

  1. 封包与拆包:在数据前添加固定长度的包头,指明数据体长度
  2. 特殊分隔符:使用特定字符序列(如\r\n)标记数据包边界
  3. 关闭Nagle算法:通过设置TCP_NODELAY选项立即发送数据

HTTP协议原理

HTTP是应用层协议,基于请求-响应模型在客户端与服务器间通信。主要特点包括:

  • 明文传输:所有数据以未加密形式传输
  • 无状态:服务器不保存客户端的状态信息,每次请求独立处理
  • 灵活可扩展:支持多种数据格式和请求方法

HTTP与HTTPS的区别

  1. 安全性:HTTP明文传输,易被窃听和篡改;HTTPS通过SSL/TLS加密传输数据
  2. 身份认证:HTTPS需要数字证书验证服务器身份,HTTP无此机制
  3. 端口号:HTTP使用80端口,HTTPS使用443端口
  4. 性能开销:HTTPS加密解密过程消耗更多计算资源
  5. SEO影响:搜索引擎优先收录HTTPS网站

HTTPS建立连接的过程:

  1. 客户端发送支持的加密套件列表
  2. 服务器返回数字证书和选定的加密方式
  3. 双方通过非对称加密协商对称密钥
  4. 使用对称密钥加密实际传输数据

HTTP/1.1的改进

相比HTTP/1.0,HTTP/1.1引入多项重要改进:

  • 持久连接:允许在单个TCP连接上发送多个请求和响应
  • 范围请求:支持通过Range头请求资源的特定部分
  • 新增Host头:支持虚拟主机,多个域名共享同一IP地址
  • 扩展方法:新增OPTIONS、PUT、DELETE等请求方法
  • 缓存优化:提供更灵活的缓存控制机制

GET与POST方法对比

  • 用途差异:GET用于获取资源,POST用于创建或修改资源
  • 参数位置:GET参数显示在URL中,POST参数放在请求体中
  • 安全性:POST相对更安全,参数不暴露在URL中
  • 长度限制:GET受URL长度限制,POST无此限制
  • 幂等性:GET是幂等的,多次执行结果相同;POST非幂等

Cookie与Session机制

Cookie和Session都是用于维护会话状态的技术:

  • 存储位置:Cookie存储在客户端,Session存储在服务器端
  • 安全性:Session更安全,敏感信息不暴露在客户端
  • 生命周期:Cookie可设置长期有效,Session随会话结束而失效
  • 依赖关系:Session依赖Cookie传递会话ID
  • 性能影响:Session需要服务器存储空间,高并发时影响性能

Session优化方案包括Session集群共享和Session Ticket机制。

TCP与UDP协议对比

  • 连接方式:TCP面向连接,需要建立和断开过程;UDP无连接
  • 可靠性:TCP提供确认重传机制保证可靠传输;UDP尽最大努力交付
  • 数据边界:TCP是字节流,可能粘包;UDP保留数据包边界
  • 头部开销:TCP头部20-60字节,UDP头部仅8字节
  • 适用场景:TCP适合可靠性要求高的场景;UDP适合实时性要求高的场景

三次握手与四次挥手详解

三次握手过程:

  1. 客户端发送SYN=1和初始序列号seq=x
  2. 服务器回应SYN=1、ACK=1,携带自己的序列号seq=y和确认号ack=x+1
  3. 客户端发送ACK=1,确认号ack=y+1

四次挥手过程:

  1. 主动关闭方发送FIN=1和序列号seq=u
  2. 被动关闭方回应ACK=1和确认号ack=u+1
  3. 被动关闭方发送FIN=1和序列号seq=v
  4. 主动关闭方回应ACK=1和确认号ack=v+1

TIME_WAIT状态的作用是确保最后一个ACK到达对端,并让旧连接的数据包在网络中消失。

流量与拥塞控制

流量控制通过滑动窗口机制实现,接收方通过窗口大小字段告知发送方可用的缓冲区空间。

拥塞控制采用多种算法:

  • 慢启动:初始窗口指数增长
  • 拥塞避免:达到阈值后线性增长
  • 快重传:收到3个重复ACK立即重传
  • 快恢复:调整阈值后直接进入拥塞避免阶段

浏览器访问网页全过程

  1. DNS解析:将域名转换为IP地址
  2. TCP连接:与服务器建立TCP连接
  3. 发送HTTP请求:构建并发送请求报文
  4. 接收HTTP响应:接收并解析服务器响应
  5. 渲染页面:解析HTML、CSS和JavaScript,渲染页面
  6. 连接释放:完成数据传输后关闭TCP连接

常见网络攻击与防御

  • SQL注入:通过输入恶意SQL代码攻击数据库。防御:参数化查询、输入验证
  • DDoS攻击:大量请求耗尽服务器资源。防御:流量清洗、CDN分发
  • ARP欺骗:伪造MAC地址窃取数据。防御:静态ARP绑定、ARP监控
  • XSS跨站脚本:注入恶意脚本代码。防御:输入转义、内容安全策略

高频面试题精粹

1.UDP如何实现可靠传输?
通过应用层添加序列号、确认机制和重传定时器,模拟TCP的可靠性保证

2.常见HTTP状态码

  • 200:请求成功
  • 206:部分内容
  • 301/302:重定向
  • 404:资源不存在
  • 499:客户端提前关闭连接
  • 500:服务器内部错误
  • 504:网关超时

3.HTTP/2主要特性:

  • 二进制分帧提高传输效率
  • 多路复用解决队头阻塞问题
  • 头部压缩减少开销
  • 服务器主动推送资源

4.网络层与传输层区别:
网络层负责主机到主机的通信,关注IP数据报的路由和转发;传输层负责进程到进程的通信,提供端到端的可靠性保证。

5.粘包问题解决方式:

  • 设置立即发送标志禁用Nagle算法
  • 添加长度字段标识数据包大小
  • 使用特殊分隔符标记数据包边界

推荐阅读:【C++八股文】操作系统篇

http://www.xdnf.cn/news/19273.html

相关文章:

  • 企业级-搭建CICD(持续集成持续交付)实验手册
  • Web开发工具一套式部署Maven/Nvm/Mysql/Redis
  • 【问题】Windows的dockerdesktop/wsl虚拟化支持问题总结
  • 2025年OE SCI2区TOP,势场蚁群算法+无人水面艇路径规划,深度解析+性能实测
  • RustDesk(跨平台远程桌面软件) v1.4.1 中文绿色版
  • 根据并发和响应延迟,实现语音识别接口自动切换需求
  • 「日拱一码」058 机器学习——监督学习
  • CesiumJS 封装 - 初始化与配置
  • 《零基础入门AI:YOLOv2算法解析》
  • 【菜狗每日记录】VSCode远程连接多个账号、创建环境
  • Linux Shell 脚本基础002
  • Day16(前端:JavaScript基础阶段)
  • 8月科技前沿速递 | 存算一体开发者社区月报
  • HCIE考试截图及作答文件上传流程
  • Baseline|基线
  • 在vue/react项目中单独引入一个js文件,在js文件中使用DOMContentLoaded函数querySelectorAll为空数组解决办法
  • OpenCV轮廓近似与Python命令行参数解析
  • 第四十七天(jndi注入)
  • 柳州市委常委、统战部部长,副市长潘展东率队首访深兰科技集团新总部,共探 AI 赋能制造大市与东盟合作新局
  • 前端vue框架实现反向代理详解
  • 响应式编程框架Reactor【3】
  • 【物联网】关于 GATT (Generic Attribute Profile)基本概念与三种操作(Read / Write / Notify)的理解
  • OpenAI Sora深度解析:AI视频生成技术如何重塑广告电商行业?影业合作已落地
  • WebGIS开发智慧校园(8)地图控件
  • 【实时Linux实战系列】实时自动化测试框架
  • [vmware][ubuntu]一个linux调用摄像头截图demo
  • 常见视频封装格式对比
  • LeetCode 317 离建筑物最近的距离
  • 科技赋能医疗:陪诊小程序系统开发,让就医不再孤单
  • mysql中表的约束