网络知识指南

TCP三次握手&四次挥手 TCP 三次握手 客户端发送 SYN 包请求连接,服务端返回 SYN+ACK 确认并请求连接,客户端再返回 ACK 确认,双方进入 ESTABLISHED 状态。 graph LR A[客户端] -->|1、SYN=1, Seq=x| B[服务端] B -->|2、SYN=1, ACK=1, Seq=y, Ack=x+1| A A -->|3、ACK=1, Seq=x+1, Ack=y+1| B A -->|4、ESTABLISHED| C[连接建立完成] B -->|4、ESTABLISHED| C 作用:建立可靠的双向连接,确保通信双方确认彼此的接收和发送能力。 过程: 第一次握手(客户端 → 服务端): 客户端发送带有 SYN=1,Seq=x 的报文,进入 SYN_SENT 状态,请求建立连接。 第二次握手(服务端 → 客户端): 服务端收到后,发送 SYN=1,ACK=1,Seq=y,Ack=x+1 的报文,进入 SYN_RCVD 状态,确认客户端请求并发起自身连接请求。 第三次握手(客户端 → 服务端): 客户端发送 ACK=1,Seq=x+1,Ack=y+1 的报文,进入 ESTABLISHED 状态。服务端收到后也进入 ESTABLISHED 状态,连接建立完成。 TCP 四次挥手 主动关闭方先发送 FIN 包请求关闭,被动关闭方返回 ACK 确认(此时仍可发送剩余数据)。 被动关闭方数据发送完毕后,再发送 FIN 包请求关闭,主动关闭方返回 ACK 确认,并进入 TIME_WAIT 状态(等待 2MSL 确保最后一个 ACK 到达),被动关闭方收到后立即关闭。 graph LR D[主动关闭方] -->|1、FIN=1, Seq=m| E[被动关闭方] E -->|2、ACK=1, Seq=n, Ack=m+1| D E -->|3、FIN=1, ACK=1, Seq=p, Ack=m+1| D D -->|4、ACK=1, Seq=m+1, Ack=p+1| E D -->|5、TIME_WAIT| F[等待超时后关闭] E -->|5、CLOSED| G[立即关闭] 作用:终止连接,确保双向数据传输都已完成,资源可安全释放。 过程: ...

2025-07-21 · FLY的狐狸

SpringCloud常见面试题

Spring Cloud 最新架构概览 截至 2025 年,Spring Cloud 的架构已全面拥抱云原生技术,主要包括以下核心组件: 服务发现:Nacos 2.0 成为首选,支持动态服务发现、配置管理和服务元数据管理 API 网关:Spring Cloud Gateway 4.0 全面支持 WebFlux 和响应式编程 负载均衡:Spring Cloud LoadBalancer 替代 Ribbon,提供更轻量的客户端负载均衡 断路器:Sentinel 取代 Hystrix,提供更强大的流量控制和熔断降级能力 配置中心:Nacos Config 或 Apollo 成为主流选择,支持实时配置刷新 分布式链路追踪:Micrometer Tracing + Zipkin/Skywalking 组合,兼容 OpenTelemetry 标准 服务间通信:OpenFeign 支持响应式编程,与 WebClient 协同工作 Spring Cloud Gateway架构设计与核心原理详解 Spring Cloud Gateway 基于响应式编程模型(WebFlux + Reactor),通过 动态路由匹配(Predicate 断言)和 过滤器链(GlobalFilter/GatewayFilter) 实现请求转发,集成服务发现(如 Nacos)、负载均衡(Ribbon)及熔断限流(Hystrix/Sentinel),以非阻塞 I/O 模型支撑高并发,保障微服务网关的高性能与可扩展性。 一、架构设计 1. 分层模型 Spring Cloud Gateway 采用 四层分层架构,支持高并发与动态扩展: 网络层(Netty Server) 基于 Netty 实现异步非阻塞 I/O,单线程处理万级并发连接。 支持 HTTP/2、WebSocket 协议,通过 ReactorNettyServer 封装请求为 ServerWebExchange 对象。 路由层(Route Matching) ...

2025-07-21 · FLY的狐狸

SpringBoot框架基础介绍

Spring Boot 是基于 Spring 框架的开源开发框架,由 Pivotal 团队于 2014 年推出,旨在简化 Spring 应用的初始搭建和开发流程。以下是其核心特性、应用场景及技术价值的全面解析: 一、核心特性与技术优势 1. 约定优于配置(Convention Over Configuration) 自动配置机制:通过 @EnableAutoConfiguration 注解,根据类路径依赖自动配置组件(如数据库连接池、Web 服务器) 默认配置优化:提供合理的默认值(如内嵌 Tomcat 服务器),开发者仅需关注业务逻辑,减少 XML 配置 2. 起步依赖(Starter Dependencies) 场景化依赖管理:通过 spring-boot-starter-* 模块快速集成常用功能(如 spring-boot-starter-web 整合 Web 开发所需依赖) 版本统一控制:BOM(Bill of Materials)确保依赖版本兼容性,避免冲突 3. 嵌入式服务器与独立运行 内嵌容器:支持 Tomcat、Jetty、Undertow,无需部署 WAR 包,直接运行 JAR 文件 生产级监控:集成 Actuator 模块,提供健康检查、指标采集、审计日志等运维功能 4. 开发效率增强 热部署:通过 Spring DevTools 实现代码修改自动重启,提升调试效率 命令行工具:支持快速生成项目骨架、执行数据库迁移等操作 二、典型应用场景 1. 微服务架构 服务快速启动:每个微服务独立打包,通过 Spring Cloud 实现服务注册、负载均衡 云原生支持:与 Docker、Kubernetes 深度集成,适应容器化部署需求 2. RESTful API 开发 简化 Web 开发:通过 @RestController 和 @RequestMapping 快速定义接口 JSON 处理:默认集成 Jackson 库,实现对象与 JSON 的自动转换 3. 数据访问与持久化 ORM 整合:支持 JPA、MyBatis,通过 spring-boot-starter-data-jpa 简化数据库操作 连接池管理:内置 HikariCP(默认)或 Druid,优化数据库连接性能 4. 批处理与异步任务 Spring Batch:处理大规模数据导入/导出,支持事务管理和错误重试 @Async 注解:实现异步方法调用,提升系统吞吐量 三、版本演进与技术升级 版本系列 关键特性 适用场景 1.x 初始版本,支持 Java 8,集成 Tomcat 8 传统企业级应用 2.x 支持响应式编程(WebFlux)、Java 11+ 高并发、云原生应用 3.x 默认使用 Jakarta EE 9+,移除 Java 8 兼容 现代化微服务架构 升级建议:从 2.x 到 3.x 需注意包名变更(如 javax → jakarta)和废弃 API 的替换 ...

2025-07-21 · FLY的狐狸

Redis核心用法:从数据结构到分布式锁,小白也能轻松入门

一、Redis简介 Redis(全称为Remote Dictionary Server)是一个开源的高性能键值对存储系统,具有快速、灵活和可扩展的特性。它是一个基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。 Redis 的一些主要特点和用途: 高性能:Redis 数据存储在内存中,因此能够提供极快的读写操作。它采用单线程模型和异步 I/O,避免了多线程的竞争和阻塞,从而达到了非常高的性能。 数据结构多样:Redis 支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据结构提供了丰富的操作命令,使得开发者可以方便地处理各种数据需求。 持久化支持:Redis 提供了两种持久化方式,即快照(Snapshotting)和日志追加(Append-only file,AOF)。快照方式将 Redis 内存数据以二进制格式写入磁盘,而 AOF 则通过追加记录 Redis 的操作命令来实现持久化。 发布/订阅:Redis 支持发布/订阅模式,可以用作消息代理。发布者将消息发送到指定的频道,订阅者则可以接收和处理这些消息。这种模式在构建实时通信、事件驱动系统和消息队列等场景中非常有用。 分布式缓存:Redis可以通过主从复制和分片来实现数据的分布式存储和高可用性。主从复制可以将数据复制到多个从节点,实现读写分离和数据备份。而分片则可以将数据分布在多个Redis节点上,实现横向扩展和负载均衡。 事务支持:Redis 支持事务,开发者可以将多个操作组合成一个原子性的操作序列,保证这些操作要么全部执行成功,要么全部不执行。 功能丰富:Redis不仅仅是一个简单的缓存,它还提供了许多其他功能,如事务支持、Lua脚本执行、定时任务、原子操作等。这使得开发者可以在Redis中实现更复杂的应用逻辑。 Redis 是一个功能丰富的存储系统,适用于多种场景,包括缓存、会话存储、排行榜、实时分析等。它有广泛的应用,并且拥有活跃的社区支持。 二、Redis五种数据结构 Redis 可以存储键和常用的五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 2.1 字符串(Strings) 2.1.1 基础介绍 Redis 里的字符串是动态字符串,会根据实际情况动态调整。类似于 Go 里面的切片-slice,如果长度不够则自动扩容。 至于如何扩容,方法大致如下:当 length 小于 1M 的时候,扩容规则将目前的字符串翻倍;如果 length 大于 1M 的话,则每次只会扩容 1M,直到达到 512M。 新增、修改操作 set key value 查询操作 get key 2.1.2 字符串底层数据结构 String是用SDS(简单动态字符串)来实现的。String类型一共有三种存储方式。 长度小于等于44字符时采用embstr 长度大于44字符时采用raw 当值为整数时采用int 2.1.3 SDS结构 ...

2025-07-15 · FLY的狐狸

HTTP协议详解:互联网通信的基石

HTTP协议详解:互联网通信的基石 一、HTTP协议的基本概念 定义:超文本传输协议(HyperText Transfer Protocol,HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是互联网数据通信的基础。 核心作用:规定了客户端(如浏览器)与服务器之间传输数据的格式和规则,实现网页、API等资源的请求与响应。 二、HTTP协议的发展历程 版本 发布时间 主要特点 HTTP/0.9 1991年 简单文本传输,仅支持GET请求,无响应头,连接一次性(请求后关闭)。 HTTP/1.0 1996年 引入请求/响应头,支持多种请求方法(POST、HEAD等),但仍为非持久连接。 HTTP/1.1 1999年 持久连接(Keep-Alive)、管道化请求、分块传输、缓存机制、虚拟主机等,成为应用最广泛的版本。 HTTP/2 2015年 二进制分帧、多路复用、头部压缩(HPACK)、服务器推送(Server Push),大幅提升性能。 HTTP/3 2022年 基于QUIC协议,使用UDP传输,解决HTTP/2的“队头阻塞”问题,支持更快的连接建立和弱网络适应。 三、HTTP协议的核心架构 客户端-服务器模型(C/S模型) 客户端(如浏览器、Postman)发送请求(Request),服务器接收并返回响应(Response)。 例:用户访问https://example.com时,浏览器向服务器发送HTTP请求,服务器返回网页内容。 无状态特性 服务器不保存客户端的历史请求信息,每次请求都是独立的,需通过Cookie、Session等机制实现状态管理。 四、HTTP请求与响应的结构 1. 请求(Request)的组成 请求方法 请求URL HTTP版本\r\n 请求头字段1: 值1\r\n 请求头字段2: 值2\r\n ...\r\n \r\n 请求体(可选) 请求方法:常用方法包括: GET:获取资源(如获取网页内容)。 POST:提交数据(如表单提交)。 PUT:更新资源。 DELETE:删除资源。 HEAD:获取资源头部信息(不返回内容)。 请求头示例: User-Agent:客户端标识(如浏览器类型)。 Content-Type:请求体的数据类型(如application/json)。 Authorization:认证信息(如Token)。 2. 响应(Response)的组成 HTTP版本 状态码 状态描述\r\n 响应头字段1: 值1\r\n 响应头字段2: 值2\r\n ...\r\n \r\n 响应体(资源内容,如HTML、JSON) 状态码分类: 1xx(信息类):如100 Continue,表示请求已接收,继续处理。 2xx(成功类):如200 OK(请求成功)、201 Created(资源创建成功)。 3xx(重定向类):如301 Moved Permanently(永久重定向)、302 Found(临时重定向)。 4xx(客户端错误):如400 Bad Request(请求格式错误)、401 Unauthorized(未授权)、404 Not Found(资源不存在)。 5xx(服务器错误):如500 Internal Server Error(服务器内部错误)、502 Bad Gateway(网关错误)。 响应头示例: Content-Type:响应体的数据类型(如text/html)。 Content-Length:响应体的字节长度。 Cache-Control:缓存策略(如max-age=3600表示缓存1小时)。 五、HTTP协议的关键特性 无连接与持久连接 HTTP/1.0默认无连接(每次请求后关闭连接),HTTP/1.1默认开启持久连接(Keep-Alive),可复用连接减少开销。 管道化(HTTP/1.1) 客户端可在同一连接中依次发送多个请求,无需等待前一个响应,提升效率。 缓存机制 通过Cache-Control、ETag、Last-Modified等头字段实现资源缓存,减少重复请求。 分块传输(Chunked Transfer) 大文件可拆分为多个块传输,避免内存溢出,适用于流式数据(如视频直播)。 六、HTTP与HTTPS的区别 特性 HTTP HTTPS 安全性 明文传输,不加密,易被窃听 基于TLS/SSL加密,数据传输安全 端口 默认80端口 默认443端口 证书 无需证书 需要CA颁发的SSL证书 性能 开销小,速度快 加密开销大,速度略慢 七、HTTP/2与HTTP/3的重大改进 HTTP/2的核心优化 二进制分帧:将请求和响应拆分为二进制帧,更高效地传输数据。 多路复用:同一连接中并行处理多个请求,解决HTTP/1.1的“队头阻塞”问题。 头部压缩:使用HPACK算法压缩请求头,减少传输数据量。 HTTP/3的升级 基于QUIC协议(UDP上层),支持更快的连接建立(0-RTT)和丢包重传,在弱网络环境下表现更优。 八、HTTP协议的应用场景 Web浏览:浏览器通过HTTP请求获取网页、图片、视频等资源。 API接口:后端服务通过HTTP提供RESTful API,供客户端调用(如JSON数据交互)。 微服务通信:微服务架构中服务间通过HTTP进行远程调用。 数据推送:通过HTTP流式传输(如SSE)实现服务器向客户端主动推送数据。 九、HTTP协议的未来趋势 HTTP/3的普及:随着QUIC协议的成熟,HTTP/3将逐步替代HTTP/2,尤其在移动网络和实时通信场景中。 与WebAssembly(WASM)结合:提升浏览器端的计算能力,拓展HTTP应用场景。 如需获取相关书籍,关注公众号【FLY的狐狸】回复【HTTP】即可 ...

2025-07-05 · FLY的狐狸