JAVA EE初阶 - 预备知识(三)
一、中间件
中间件是一种处于操作系统和应用程序之间的软件,它能够为分布式应用提供交互、资源共享、数据处理等功能,是现代软件架构中不可或缺的一部分。下面从多个方面为你详细介绍中间件:
定义与作用
- 定义:中间件是连接两个或多个软件组件或应用程序的软件层,它屏蔽了底层操作系统和网络的复杂性,为开发者提供了统一的编程接口和开发环境,使得不同的应用程序可以方便地进行通信和协作。
- 作用
- 简化开发:开发者无需关注底层的通信细节和系统差异,只需使用中间件提供的接口进行开发,从而降低了开发难度和成本,提高了开发效率。
- 提高可移植性:中间件可以在不同的操作系统和硬件平台上运行,使得基于中间件开发的应用程序具有更好的可移植性。
- 增强系统的灵活性和扩展性:中间件提供了灵活的架构和接口,方便应用程序进行功能扩展和升级,能够适应不断变化的业务需求。
- 实现资源共享和协同工作:中间件可以实现不同应用程序之间的资源共享和协同工作,促进了企业内部和企业之间的信息集成和业务协同。
常见类型
- 数据库中间件
- 功能:主要用于连接应用程序和数据库,提供统一的数据库访问接口,实现数据库的分布式管理、负载均衡、数据复制等功能。
- 示例:MyCAT 是一个开源的数据库中间件,它可以将多个 MySQL 数据库进行整合,为应用程序提供统一的数据库访问服务,实现数据的分片存储和读写分离,提高数据库的性能和可用性。
- 消息中间件
- 功能:用于在不同的应用程序或进程之间进行消息传递和通信,实现异步通信、解耦和流量削峰等功能。
- 示例:RabbitMQ 是一个基于 AMQP(高级消息队列协议)的消息中间件,它支持多种消息传递模式,如发布 / 订阅、队列模式等,广泛应用于分布式系统中的异步通信场景。
- 应用服务器中间件
- 功能:为企业级应用提供运行环境和服务支持,包括事务管理、安全认证、资源池管理等功能,负责管理应用程序的生命周期和资源分配。
- 示例:Tomcat 是一个开源的 Servlet 容器和 Web 服务器,它可以运行 Java Web 应用程序,处理 HTTP 请求和响应,为开发者提供了一个简单易用的 Web 应用开发和部署环境。
- 缓存中间件
- 功能:用于临时存储经常访问的数据,减少对数据源(如数据库)的访问次数,提高系统的响应速度和性能。
- 示例:Redis 是一个高性能的内存缓存中间件,支持多种数据结构,可用于缓存数据、实现分布式锁、消息队列等功能。
- 交易中间件
- 功能:主要用于处理企业级的事务处理,保证交易的原子性、一致性、隔离性和持久性(ACID),提供事务管理、并发控制和故障恢复等功能。
- 示例:Tuxedo 是一种著名的交易中间件,广泛应用于金融、电信等领域的关键业务系统中,确保交易的安全和可靠。
应用场景
- 企业级应用开发:在企业资源规划(ERP)、客户关系管理(CRM)等大型企业级应用中,中间件可以实现不同模块之间的通信和数据共享,提高企业的管理效率和决策水平。
- 分布式系统架构:在分布式系统中,中间件可以解决不同节点之间的通信、协调和资源管理问题,实现系统的高可用性、可扩展性和容错性。例如,微服务架构中,通过消息中间件实现服务之间的异步通信和解耦。
- 云计算和大数据领域:中间件在云计算和大数据领域发挥着重要作用,如数据存储中间件可以实现海量数据的分布式存储和管理,消息中间件可以实现数据的实时传输和处理。
二、数据库中间件
数据库中间件是一种位于应用程序和数据库之间的软件层,它能够屏蔽不同数据库的差异,为应用程序提供统一的数据库访问接口,增强数据库的功能并提高数据库管理效率。以下从多个维度详细介绍数据库中间件:
功能特点
- 统一访问接口:不同类型的数据库(如 MySQL、Oracle、SQL Server 等)具有不同的访问协议和 API。数据库中间件提供了统一的访问接口,使得应用程序开发人员无需关心底层数据库的具体类型,只需使用中间件提供的标准接口进行数据库操作,从而降低了开发难度和成本,提高了代码的可移植性。
- 数据路由与分发:在分布式数据库环境中,数据库中间件可以根据一定的规则将用户的请求路由到合适的数据库节点上。例如,根据数据的分片规则将查询请求分发到存储相应数据的节点,实现数据的分布式处理和负载均衡。
- 数据整合与转换:当企业中存在多个不同的数据库系统时,数据库中间件可以对来自不同数据库的数据进行整合和转换,将其统一成应用程序能够处理的格式。比如,将不同数据库中的用户信息进行合并和标准化,方便应用程序进行统一管理和分析。
- 事务管理:数据库中间件提供事务处理功能,确保在分布式环境下的数据库操作满足原子性、一致性、隔离性和持久性(ACID)原则。它可以协调多个数据库节点之间的事务,保证数据的一致性和完整性。例如,在一个涉及多个数据库的订单处理系统中,数据库中间件可以保证订单的创建、库存的扣减等操作要么全部成功,要么全部失败。
- 监控与管理:数据库中间件具备监控和管理功能,可以实时监控数据库的性能指标(如吞吐量、响应时间、连接数等),并提供相应的管理工具,方便管理员对数据库进行配置、优化和维护。例如,通过中间件可以动态调整数据库的连接池大小,以适应不同的业务负载。
常见类型
- 读写分离中间件:主要用于提高数据库的读写性能。它将数据库的读操作和写操作分离,把读请求分发到多个从数据库节点上,而写请求则发送到主数据库节点。这样可以减轻主数据库的负载,充分利用从数据库的资源,提高系统的并发处理能力。例如,MyCat 可以实现 MySQL 数据库的读写分离。
- 分库分表中间件:当数据库的数据量和访问量不断增长时,单个数据库无法满足性能需求。分库分表中间件可以将数据分散存储在多个数据库和表中,实现数据的水平和垂直拆分。例如,ShardingSphere 可以对数据库进行灵活的分片操作,将大数据量的数据分散到多个数据库节点上,提高数据库的可扩展性和性能。
- 分布式事务中间件:用于解决分布式环境下的事务一致性问题。在分布式系统中,一个业务操作可能涉及多个数据库节点,分布式事务中间件可以协调这些节点之间的事务,保证数据的一致性。例如,Seata 是一个开源的分布式事务中间件,提供了多种分布式事务解决方案,如 AT 模式、TCC 模式等。
应用场景
- 大型企业应用:在大型企业中,通常存在多个不同类型的数据库系统,用于存储不同业务的数据。数据库中间件可以实现这些数据库之间的集成和统一管理,方便企业进行数据分析和决策。例如,企业的财务系统、人力资源系统和销售系统可能分别使用不同的数据库,通过数据库中间件可以将这些系统的数据进行整合,为企业管理层提供全面的业务信息。
- 高并发系统:对于高并发的互联网应用,如电商平台、社交网络等,数据库中间件可以通过读写分离、分库分表等技术提高数据库的性能和可扩展性,确保系统在高负载下的稳定运行。例如,在电商的秒杀活动中,数据库中间件可以将大量的读请求分发到多个从数据库节点上,避免主数据库因负载过高而崩溃。
- 云数据库服务:在云计算环境中,数据库中间件可以为用户提供更加灵活和高效的数据库服务。云服务提供商可以利用数据库中间件实现多租户管理、资源隔离和弹性扩展等功能,满足不同用户的需求。例如,阿里云的 PolarDB 数据库服务就采用了数据库中间件技术,为用户提供高性能、高可用的数据库服务。
三、缓存中间件
缓存中间件是一种位于应用程序和数据源(如数据库、文件系统等)之间的软件组件,其主要作用是临时存储经常访问的数据,以减少对数据源的访问次数,从而提高系统的响应速度、降低数据源的负载,并提升系统的整体性能。以下从多个方面详细介绍缓存中间件:
工作原理
缓存中间件通常基于 “局部性原理” 工作,该原理指出程序在运行过程中,会在一段时间内频繁访问相同或相近的数据。当应用程序发起数据请求时,缓存中间件首先检查请求的数据是否存在于缓存中:
- 缓存命中:如果数据存在于缓存中,即发生 “缓存命中”,缓存中间件会直接将缓存中的数据返回给应用程序,避免了对数据源的访问,大大缩短了数据响应时间。
- 缓存未命中:如果数据不在缓存中,即 “缓存未命中”,缓存中间件会从数据源中获取数据,将其存储到缓存中,然后再将数据返回给应用程序。这样,后续对相同数据的请求就可以直接从缓存中获取。
常见类型
- 内存缓存中间件:将数据存储在内存中,由于内存的读写速度极快,因此可以提供非常高的性能。常见的内存缓存中间件有 Redis 和 Memcached。
- Redis:支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),不仅可以作为简单的键值对缓存,还能实现复杂的数据处理和业务逻辑,如分布式锁、消息队列等。
- Memcached:是一个简单的分布式内存对象缓存系统,主要用于减轻数据库负载。它将数据以键值对的形式存储在内存中,适用于缓存一些简单的数据,如页面片段、数据库查询结果等。
- 分布式缓存中间件:用于在分布式系统中实现缓存功能,多个缓存节点通过网络连接组成一个集群,共同存储和管理缓存数据。分布式缓存可以提供更高的可扩展性和可用性,常见的分布式缓存中间件有 Redis Cluster 和 Hazelcast。
- 磁盘缓存中间件:将数据存储在磁盘上,适用于缓存数据量较大、对读写速度要求相对较低的场景。磁盘缓存可以作为内存缓存的补充,当内存缓存空间不足时,将部分数据存储到磁盘上。例如,一些数据库管理系统会使用磁盘缓存来提高数据的读写性能。
应用场景
- Web 应用:在 Web 应用中,缓存中间件可以缓存页面片段、静态资源(如 HTML、CSS、JavaScript 文件)和数据库查询结果等。例如,对于一些经常访问的新闻页面,可以将页面内容缓存到 Redis 中,当用户访问该页面时,直接从缓存中获取页面内容,而不需要重新生成页面,从而提高页面的响应速度。
- 数据库查询加速:对于一些频繁执行的数据库查询操作,可以将查询结果缓存到缓存中间件中。当再次执行相同的查询时,直接从缓存中获取结果,避免了重复的数据库查询操作,减轻了数据库的负载。例如,在电商系统中,商品列表的查询结果可以缓存到 Redis 中,减少对数据库的访问压力。
- 高并发场景:在高并发场景下,如秒杀活动、抢购活动等,缓存中间件可以作为流量缓冲层,将大量的请求先在缓存中处理,避免直接冲击后端的数据库。例如,在秒杀活动中,将商品的库存信息缓存到 Redis 中,当用户发起抢购请求时,先在 Redis 中进行库存检查和扣减操作,只有当库存足够时才将请求转发到后端的数据库进行处理。
优缺点
- 优点
- 提高性能:显著减少了数据的访问时间,提高了系统的响应速度,提升了用户体验。
- 降低负载:减少了对数据源(如数据库)的访问次数,降低了数据源的负载,延长了数据源的使用寿命。
- 扩展性强:分布式缓存中间件可以通过添加缓存节点来扩展缓存容量和处理能力,满足不断增长的业务需求。
- 缺点
- 数据一致性问题:由于缓存中的数据是数据源的副本,当数据源中的数据发生变化时,需要及时更新缓存中的数据,否则会导致数据不一致的问题。解决数据一致性问题需要额外的处理逻辑,增加了系统的复杂性。
- 缓存穿透、击穿和雪崩问题:缓存穿透是指大量请求访问不存在于缓存和数据源中的数据,导致请求直接穿透缓存访问数据源;缓存击穿是指某个热点数据在缓存中过期,大量请求同时访问该数据,导致请求直接访问数据源;缓存雪崩是指缓存中大量的数据同时过期,导致大量请求直接访问数据源,造成数据源压力过大甚至崩溃。需要采取相应的措施来预防和解决这些问题。
四、消息中间件
消息中间件是一种在分布式系统中用于消息传递的软件组件,它在不同的应用程序、进程或服务之间起到桥梁的作用,负责消息的发送、接收和管理。以下从多个方面详细介绍消息中间件:
基本概念与原理
- 概念:消息中间件以消息队列(Message Queue)为核心,发送者(生产者)将消息发送到队列中,接收者(消费者)从队列中获取消息进行处理。消息可以是文本、JSON 数据、二进制文件等各种格式,它封装了业务数据和相关的控制信息。
- 原理:其工作原理基于异步通信机制。生产者将消息发送到消息中间件后,不需要等待消费者处理消息,就可以继续执行后续的操作。消费者则可以根据自身的处理能力从队列中获取消息,实现了生产者和消费者之间的解耦。同时,消息中间件通常会提供消息的持久化、确认机制等,以确保消息的可靠传递。
主要功能
- 异步通信:允许不同的组件或服务之间进行异步消息传递,提高系统的并发处理能力和响应速度。例如,在一个电商系统中,用户下单后,订单服务可以将订单消息发送到消息中间件,然后立即返回响应给用户,而后续的库存扣减、物流通知等操作可以由其他服务异步处理。
- 解耦:将生产者和消费者分离,使得它们可以独立地进行开发、部署和扩展。生产者不需要知道消费者的具体信息,只需要将消息发送到指定的队列;消费者也不需要关心消息的来源,只需要从队列中获取消息进行处理。这样,当一个服务发生变化时,不会直接影响到其他服务,提高了系统的可维护性和灵活性。
- 流量削峰:在高并发场景下,消息中间件可以作为缓冲队列,将大量的请求消息暂存到队列中,然后由消费者按照一定的速率进行处理,避免系统因瞬间的高流量而崩溃。例如,在秒杀活动中,大量用户的抢购请求可以先发送到消息中间件的队列中,然后由库存服务按照一定的速率从队列中取出请求进行处理。
- 消息重试和补偿:当消息处理失败时,消息中间件可以提供消息重试机制,自动重新发送消息给消费者进行处理。如果多次重试仍然失败,还可以触发补偿机制,进行相应的回滚操作,保证数据的一致性。
- 消息排序和分组:某些消息中间件支持消息的排序和分组功能。例如,按照消息的发送顺序进行排序,或者将相关的消息分组,确保同一组的消息被同一个消费者处理,满足特定业务场景的需求。
常见类型
- RabbitMQ:基于 AMQP(高级消息队列协议)实现,具有高度的灵活性和可扩展性。它支持多种消息传递模式,如发布 / 订阅、队列模式、路由模式、主题模式等,提供了丰富的插件和管理界面,适用于各种规模的企业应用。
- Kafka:最初由 LinkedIn 开发,后来成为 Apache 开源项目。Kafka 具有高吞吐量、低延迟、可持久化、分布式等特点,适用于处理大规模的实时数据流,如日志收集、实时监控、流式计算等场景。
- ActiveMQ:是 Apache 旗下的一个老牌消息中间件,支持多种消息协议(如 AMQP、STOMP、MQTT 等),提供了丰富的企业级特性,如事务处理、消息持久化、集群等,广泛应用于企业内部的系统集成和消息通信。
- RocketMQ:由阿里巴巴开源的分布式消息中间件,具有高性能、高可用性、可伸缩性等特点。RocketMQ 支持顺序消息、事务消息等特殊类型的消息,在电商、金融等领域有广泛的应用。
应用场景
- 系统集成:在企业级应用中,不同的系统(如 ERP、CRM、OA 等)之间需要进行数据交互和业务协同。消息中间件可以作为系统集成的桥梁,实现不同系统之间的异步通信和数据共享。
- 异步处理:对于一些处理时间较长的任务,如文件处理、数据分析等,可以使用消息中间件将任务异步化。生产者将任务消息发送到队列中,消费者在后台异步处理这些任务,提高系统的响应速度和并发处理能力。
- 日志收集和分析:在分布式系统中,各个服务会产生大量的日志信息。使用消息中间件可以将这些日志信息收集到一个中心节点进行统一处理和分析,帮助运维人员及时发现系统问题和进行性能优化。
- 分布式事务:在分布式系统中,实现事务的一致性是一个挑战。消息中间件可以结合业务逻辑,实现最终一致性的分布式事务解决方案,确保数据在多个服务之间的一致性。
五、服务器中间件
应用服务器中间件是位于操作系统、数据库和应用程序之间的一类软件,它为企业级应用的开发、部署和运行提供了一个可靠、高效且可扩展的环境。以下从多个方面详细介绍应用服务器中间件:
⭐主要功能
- 提供运行环境:应用服务器中间件为应用程序提供了一个运行平台,负责管理应用程序的生命周期,包括加载、启动、监控和停止应用程序。它还提供了必要的系统资源,如内存、线程池等,确保应用程序能够稳定运行。
- 请求处理与分发:接收客户端的请求,并根据一定的规则将请求分发到相应的应用程序组件进行处理。例如,在一个 Web 应用中,应用服务器中间件可以根据请求的 URL 将请求路由到不同的 Servlet 或 JSP 页面进行处理。
- 事务管理:保证在分布式环境下的数据库操作满足原子性、一致性、隔离性和持久性(ACID)原则。当一个业务操作涉及多个数据库或服务时,应用服务器中间件可以协调这些操作,确保要么全部成功,要么全部失败,从而保证数据的一致性。
- 安全管理:提供安全认证、授权和数据加密等功能,保护应用程序和数据的安全。例如,对用户进行身份验证,确保只有合法的用户才能访问应用程序;对敏感数据进行加密传输,防止数据在传输过程中被窃取或篡改。
- 资源管理:管理应用程序所需的各种资源,如数据库连接池、线程池、缓存等。通过资源池技术,应用服务器中间件可以提高资源的利用率,减少资源的创建和销毁开销,从而提高应用程序的性能。
常见类型
- Web 应用服务器:主要用于处理 Web 应用程序的请求,提供 HTTP 服务。常见的 Web 应用服务器有 Apache Tomcat、Jetty 等。它们通常支持 Servlet、JSP 等 Web 技术,能够快速响应客户端的 HTTP 请求,将动态生成的页面返回给客户端。
- 企业级应用服务器:功能更为强大,提供了全面的企业级服务,如 EJB(Enterprise JavaBeans)容器、消息队列、分布式事务管理等。常见的企业级应用服务器有 Oracle WebLogic Server、IBM WebSphere Application Server 等。这些服务器适用于大型企业级应用的开发和部署,能够处理复杂的业务逻辑和高并发的请求。
- 轻量级应用服务器:具有体积小、启动速度快、配置简单等特点,适用于开发和部署小型应用程序或作为开发环境。例如,Spring Boot 内嵌的 Tomcat 或 Jetty 服务器,开发者可以快速搭建一个 Web 应用,而无需进行复杂的服务器配置。
应用场景
- 企业资源规划(ERP)系统:ERP 系统涉及企业的各个业务环节,如财务、采购、销售、生产等,需要处理大量的数据和复杂的业务逻辑。应用服务器中间件可以为 ERP 系统提供稳定的运行环境,实现数据的集中管理和业务流程的自动化。
- 客户关系管理(CRM)系统:CRM 系统用于管理企业与客户之间的关系,包括客户信息管理、销售机会跟踪、客户服务等功能。应用服务器中间件可以支持 CRM 系统的高并发访问,确保系统的响应速度和数据的安全性。
- 电子商务平台:电子商务平台需要处理大量的用户请求,如商品展示、购物车管理、订单处理等。应用服务器中间件可以通过负载均衡、缓存等技术提高平台的性能和可用性,保证用户在高并发情况下能够顺利购物。
- 金融交易系统:金融交易系统对数据的一致性和安全性要求极高,同时需要处理大量的实时交易。应用服务器中间件可以提供严格的事务管理和安全机制,确保交易的准确性和可靠性。
优势
- 提高开发效率:应用服务器中间件提供了丰富的 API 和开发框架,开发者可以利用这些工具快速开发应用程序,减少了开发时间和工作量。
- 增强系统的可维护性:通过将业务逻辑和系统管理分离,应用服务器中间件使得应用程序的结构更加清晰,便于维护和升级。当业务需求发生变化时,只需要修改相应的应用程序组件,而不会影响到整个系统的运行。
- 提升系统的性能和可用性:应用服务器中间件采用了多种技术来提高系统的性能和可用性,如负载均衡、集群、缓存等。这些技术可以有效地分担系统的负载,提高系统的响应速度和容错能力,确保系统在高并发情况下的稳定运行。
六、交易中间件
交易中间件是一种在分布式系统中,用于保障交易处理的完整性、一致性、可靠性和高效性的软件中间件。它在金融、电信、电商等众多对交易处理有严格要求的领域发挥着关键作用。以下从多个方面详细介绍交易中间件:
主要功能
- 事务管理
- 原子性保障:确保一个交易中的所有操作要么全部成功执行,要么全部失败回滚。例如在银行转账交易中,从转出账户扣款和向转入账户入账这两个操作必须作为一个整体,要么都完成,要么都不发生,避免出现部分操作成功而导致的数据不一致问题。
- 一致性维护:保证交易前后系统的数据状态符合业务规则和约束条件。比如在库存管理系统中,商品的销售交易完成后,库存数量的减少必须与销售数量一致。
- 隔离性实现:多个并发交易之间相互隔离,一个交易的执行不会受到其他交易的干扰。不同用户同时进行的转账交易不会相互影响各自的操作结果。
- 持久性保证:一旦交易成功提交,其结果将永久保存,即使系统出现故障也不会丢失。如在电商平台完成订单支付后,支付记录会被持久化存储。
- 通信管理
- 提供标准接口:为不同的应用程序提供统一的通信接口,屏蔽底层网络通信的复杂性。应用程序只需调用中间件提供的接口,无需关心具体的网络协议和通信细节。
- 支持多种通信协议:能够支持 TCP/IP、HTTP 等多种通信协议,以适应不同的网络环境和应用需求。
- 实现跨平台通信:允许运行在不同操作系统和硬件平台上的应用程序进行通信和交互,促进了分布式系统的集成和协同工作。
- 负载均衡
- 合理分配请求:根据各个服务器的负载情况,将交易请求均匀地分配到多个服务器上,避免某些服务器过载而其他服务器闲置,提高系统的整体处理能力和响应速度。
- 动态调整策略:实时监测服务器的性能指标,如 CPU 使用率、内存使用率等,并根据这些指标动态调整负载分配策略,确保系统在不同负载情况下都能高效运行。
- 错误处理与恢复
- 错误检测:实时监测交易处理过程中的各种错误,如网络故障、数据库连接失败等,并及时采取相应的措施。
- 故障恢复:当出现错误时,能够自动进行故障恢复,如重新连接数据库、重试失败的交易等,确保交易的连续性和可靠性。
常见类型
- Tuxedo:是一种经典的交易中间件,具有高性能、高可靠性和强大的事务处理能力,广泛应用于金融、电信等行业的关键业务系统。它提供了丰富的开发工具和管理功能,能够支持大规模的分布式交易处理。
- 国产交易中间件:近年来,国内也涌现出了一些优秀的交易中间件产品,如东方通的 TongEASY 等。这些国产中间件在性能、功能和可靠性方面不断提升,并且更贴合国内用户的需求和使用习惯。
应用场景
- 金融行业
- 银行核心业务系统:用于处理各种银行业务交易,如账户管理、转账汇款、信用卡交易等,确保交易的准确、及时和安全。
- 证券交易系统:支持股票、债券等证券的买卖交易,保证交易的实时性和一致性,同时处理大量的并发交易请求。
- 电信行业
- 计费系统:对用户的通话、短信、流量等使用情况进行计费处理,确保计费的准确性和公正性。
- 客户服务系统:处理用户的开户、销户、套餐变更等业务交易,提高客户服务的效率和质量。
- 电子商务行业
- 订单处理系统:负责处理用户的订单提交、支付、发货等交易流程,保证订单信息的完整性和一致性。
- 库存管理系统:在商品销售过程中,实时更新库存数量,确保库存数据的准确性和及时性。
优势
- 提高开发效率:交易中间件提供了丰富的功能和工具,开发者可以利用这些资源快速开发交易处理应用程序,减少了开发时间和工作量。
- 增强系统的可靠性和稳定性:通过提供事务管理、错误处理和恢复等功能,交易中间件能够有效地保障交易的可靠性和系统的稳定性,减少因故障导致的交易失败和数据丢失。
- 降低系统成本:通过负载均衡和资源管理等功能,交易中间件可以提高系统的资源利用率,降低硬件和软件的采购成本,同时减少系统的维护和管理成本。
七、网卡(信号转换作用 链路和物理的转换)
主要功能是实现计算机与局域网的连接,使计算机能够在网络中进行数据的发送和接收。它负责将计算机内部的数字信号转换为适合在网络介质(如网线、无线信号)上传输的信号,以及将接收到的网络信号转换为计算机能够识别的数字信号。例如,在办公室局域网中,计算机通过网卡连接到交换机,从而实现与其他计算机的数据共享和通信
当计算机要发送数据时,网卡从计算机内存中读取数据,按照网络协议的要求对数据进行封装,添加源地址、目的地址等控制信息,形成数据包。然后将数据包转换为相应的电信号(有线网卡)或无线信号(无线网卡),通过网络介质发送出去。接收数据时则进行相反的操作,将接收到的信号转换为数字数据并传送给计算机。
网卡主要工作在网络七层协议(OSI 模型)的数据链路层,也涉及物理层
数据链路层
- 帧封装与解封装:数据链路层的主要功能之一是将网络层传来的数据包封装成帧。网卡负责在发送数据时,把从计算机内存中获取的网络层数据包添加数据链路层的首部和尾部信息,形成帧。首部包含源 MAC 地址(网卡的物理地址)和目的 MAC 地址等信息,尾部包含帧校验序列(FCS)用于差错检测。例如,当你在局域网内的一台计算机向另一台计算机发送文件时,网卡会把文件数据封装成一个个帧,以便在局域网中传输。在接收数据时,网卡会对收到的帧进行解封装,去除数据链路层的首部和尾部,将网络层的数据包提取出来并交给上层处理。
- MAC 地址识别:每块网卡都有一个全球唯一的 MAC 地址,它是数据链路层用于识别网络设备的标识。网卡通过识别帧首部中的目的 MAC 地址,判断该帧是否是发给自己的。如果目的 MAC 地址与自己的 MAC 地址相符,网卡就会接收该帧;否则,网卡会忽略该帧。这使得数据能够准确地传输到目标设备。
物理层
- 信号转换与传输:物理层负责在物理介质上传输比特流。网卡需要将计算机内部的数字信号转换为适合在物理介质(如网线、光纤、无线信号)上传输的信号。对于有线网卡,它将数字信号转换为电信号(如以太网中使用的差分信号)通过网线传输;对于无线网卡,它将数字信号转换为无线电磁波信号进行传输。同时,网卡也负责接收物理介质上的信号,并将其转换为计算机能够处理的数字信号。
- 物理连接管理:网卡需要管理与物理介质的连接,例如检测网线是否插入、信号强度是否正常等。在以太网中,网卡通过自动协商机制与对端设备(如交换机)协商传输速率、双工模式等物理层参数,以确保数据的可靠传输。
网卡分类
- 按网络接口类型
- 以太网卡:使用以太网协议进行数据传输,是目前最常见的网卡类型,通常通过 RJ - 45 接口连接网线。
- 无线网卡:通过无线信号与无线路由器或无线接入点进行通信,摆脱了网线的束缚,方便移动设备接入网络。常见的无线网卡标准有 IEEE 802.11a/b/g/n/ac/ax 等。
- 光纤网卡:使用光纤作为传输介质,具有传输速率高、抗干扰能力强等优点,常用于高速网络骨干链路和数据中心。
八、以太网
传统以太网是有线局域网
- 技术定义与发展:以太网最初由施乐公司在 20 世纪 70 年代开发,后来被 IEEE 标准化为 IEEE 802.3 标准。它主要基于有线传输介质,如同轴电缆、双绞线(常见的网线)和光纤等,是一种在有限区域内将各种计算机、外部设备等互相连接起来组成的计算机通信网络。
- 典型应用场景:在办公室、学校、数据中心等场所,计算机、服务器、打印机等设备通常通过以太网线连接到交换机或路由器,构成一个有线局域网。例如企业办公网络中,员工的台式机通过网线接入公司的局域网,实现资源共享、文件传输和访问互联网等功能。
存在无线以太网
- 技术原理与标准:随着无线网络技术的发展,以太网的概念也扩展到了无线领域。无线以太网基于 IEEE 802.11 标准(也就是常说的 Wi - Fi),它同样采用了以太网的一些基本原理和协议,如载波监听多路访问 / 冲突避免(CSMA/CA)机制来控制网络中的数据传输,以实现无线设备之间的通信和联网。
- 应用场景:在家庭、商场、酒店等场所,智能手机、平板电脑、笔记本电脑等设备可以通过 Wi - Fi 连接到无线路由器,组成一个无线局域网,这其实也可以看作是以太网在无线环境下的应用。
相关文章:
JAVA EE初阶 - 预备知识(三)
一、中间件 中间件是一种处于操作系统和应用程序之间的软件,它能够为分布式应用提供交互、资源共享、数据处理等功能,是现代软件架构中不可或缺的一部分。下面从多个方面为你详细介绍中间件: 定义与作用 定义:中间件是连接两个或…...
百度热力图数据获取,原理,处理及论文应用6
目录 0、数据简介0、示例数据1、百度热力图数据日期如何选择1.1、其他实验数据的时间1.2、看日历1.3、看天气 2、百度热力图几天够研究?部分文章统计3、数据原理3.1.1 ** 这个比较重要,后面还会再次出现。核密度的值怎么理解?**3.1.2 Csv->…...
tcp连接的11种状态及常见问题。
tcp链接整体流程,如下图所示: TCP协议在连接的建立和终止过程中涉及11种状态,这些状态反映了连接的不同阶段。以下是每种状态的详细说明: 1. CLOSED 初始状态,表示没有活动的连接或连接已完全关闭。当应用程序关闭连…...
宝塔面板开始ssl后,使用域名访问不了后台管理
宝塔面板后台开启ssl访问后,用的证书是其他第三方颁发的证书 再使用 域名/xxx 的形式:https://域名:xxx/xxx 访问后台,结果出现如下,不管使用 http 还是 https 的路径访问都进不后台管理 这个时候可以使用 https://ip/xxx 的方式来…...
5.日常英语笔记
sprouted tater 发芽的土豆 fluid 液体,流体 The doctor recommended drinking plenty of fluids 医生建议多喝流质 适应新环境 adapt to the new environment adjust to the new surroundings get used to the new setting accommodate oneself to the new circu…...
利用工业相机及多光谱图像技术助力医疗美容皮肤AI检测方案
随着年轻人对皮肤的管理要求越来越高,“科技护肤”已成为线下医疗美业护肤行业转型升级之趋势。如何利用先进的图像识别技术和AI大数据分析,为医生和消费者提供个性化的皮肤诊断分析和护肤建议,利用工业相机及多光谱成像技术完美实现这一可能…...
qt QOpenGLTexture详解
1. 概述 QOpenGLTexture 是 Qt5 提供的一个类,用于表示和管理 OpenGL 纹理。它封装了 OpenGL 纹理的创建、分配存储、绑定和设置像素数据等操作,简化了 OpenGL 纹理的使用。 2. 重要函数 构造函数: QOpenGLTexture(const QImage &image,…...
【Zookeeper如何实现分布式锁?】
Zookeeper如何实现分布式锁? 一、ZooKeeper分布式锁的实现原理二、ZooKeeper分布式锁的实现流程三、示例代码四、总结一、ZooKeeper分布式锁的实现原理 ZooKeeper是一个开源的分布式协调服务,它提供了一个分布式文件系统的接口,可以用来存储和管理分布式系统的配置信息。 …...
mysql 学习16 视图,存储过程,存储函数,触发器
视图, 存储过程, 存储函数 触发器...
(前端基础)HTML(一)
前提 W3C:World Wide Web Consortium(万维网联盟) Web技术领域最权威和具有影响力的国际中立性技术标准机构 其中标准包括:机构化标准语言(HTML、XML) 表现标准语言(CSS) 行为标准…...
go设置镜像代理
前言 在 Go 开发中,如果直接从官方源(https://proxy.golang.org)下载依赖包速度较慢,可以通过设置 镜像代理 来加速依赖包的下载。以下是增加 Go 镜像代理的详细方法: 一、设置 Go 镜像代理 1. 使用环境变量设置代理…...
matlab数据处理:创建网络数据
% 创建网格数据 [X, Y] meshgrid(x_data, y_data); 如 x_data [1 2 3 4] X 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 XY_data [X(:), Y(:)]; % 将X和Y合并成一个向量 X(:)表示将矩阵排成一列 XY_data 1 …...
在企业内部私有化部署 DeepSeek 或其他 AI 大模型时,基于一般场景的最低硬件配置建议
1. 中央处理器(CPU) 核心数:至少 4 核心,支持多线程任务。频率:至少 2.5 GHz。CPU 型号:Intel Core i5 或更高(如 i7 或 i9),或 AMD Ryzen 5000 系列以上。多核支持&…...
DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【ArcGIS Pro二次开发】(87):样式_Style的用法
.Stylx类型的文件即为样式库文件,保存了符号样式。 1、根据名字获取当前工程中的style //获取当前工程中的所有style var ProjectStyles Project.Current.GetItems<StyleProjectItem>();//根据名字找出指定的style StyleProjectItem style ProjectStyles.F…...
Jetson Agx Orin平台JP6.0-r36.3版本修复了vi模式下的原始图像损坏(线条伪影)
1.问题描述 这是JP-6.0 GA/ l4t-r36.3.0的一个已知问题 通过vi模式捕获的图像会导致异常线条 参考下面的快照来演示这些线伪影 这个问题只能通过VI模式进行修复,不应该通过LibArgus看到。 此外,这是由于内存问题。 由于upstream已经将属性名称更改为“dma-noncoherent”…...
nlp|微调大语言模型初探索(2),训练自己的聊天机器人
前言 上篇文章记录了具体的微调语言大模型步骤,以及在微调过程中可能遇见的各种报错,美中不足的是只是基于开源数据集的微调,今天来记录一下怎么基于自己的数据集去微调大语言模型,训练自己的智能机器人!!&…...
如何搭建Wi-Fi CVE漏洞测试环境:详细步骤与设备配置
引言 随着Wi-Fi技术的普及,Wi-Fi网络成为了现代通信的重要组成部分。然而,Wi-Fi网络的安全性始终是一个备受关注的话题。通过漏洞扫描和安全测试,网络管理员可以及早发现并修复Wi-Fi设备中存在的安全隐患。本篇文章将详细介绍如何搭建Wi-Fi …...
【三维重建】FeatureGS:特征值优化的几何精度和伪影减少3DGS的重构
文章:https://arxiv.org/pdf/2501.17655 标题:FeatureGS: Eigenvalue-Feature Optimization in 3D Gaussian Splatting for Geometrically Accurate and Artifact-Reduced Reconstruction 文章目录 摘要一、引言二、相关工作:3D特征三、算法3…...
请解释一下Standford Alpaca格式、sharegpt数据格式-------deepseek问答记录
1 Standford Alpaca格式 json格式数据。Stanford Alpaca 格式是一种用于训练和评估自然语言处理(NLP)模型的数据格式,特别是在指令跟随任务中。它由斯坦福大学的研究团队开发,旨在帮助模型理解和执行自然语言指令。以下是该格式的…...
WPS的AI助手进化跟踪(灵犀+插件)
Ver V0.0 250216: 如何给WPS安装插件用以支持其他大模型LLM V0.1 250217: WPS的灵犀AI现在是DeepSeek R1(可能是全参数671B) 前言 WPS也有内置的AI,叫灵犀,之前应是自已的LLM模型,只能说是属于“能用,有好过无”,所…...
本地事务简介
本地事务简介 1 事务基本性质 数据库事务的几个特性:原子性(Automicity)、一致性(Consistency)、隔离性或独立性(islation)和持久性(Durability),简称ACID。 原子性:一系列的操作,其整体不可拆分,要么同时成功&#…...
Python入门全攻略(七)
面向对象-基础 类和对象 类是一个抽象的概念,对象是一个具体的概念。类是对象的模板和蓝图,用来定义对象的属性和方法,对象是类的实例,具有具体的属性和行为。 类的定义 使用class关键字加上类名来定义类,在类的代码块中,我们可以写一些函数,这些函数是对一类对象共…...
SpringBoot 统一功能处理之拦截器、数据返回格式、异常处理
目录 拦截器 一、什么是拦截器 二 拦截器的使用 三 拦截路径配置 四 拦截器的执行流程 统一数据返回格式 统一异常处理 拦截器 一、什么是拦截器 拦截器是Spring框架提供的核心功能之一,主要用来拦截用户的请求,在指定方法前后,根据业务…...
Javascript网页设计案例:通过PDF.js实现一款PDF阅读器,包括预览、页面旋转、页面切换、放大缩小、黑夜模式等功能
前言 目前功能包括: 切换到首页。切换到尾页。上一页。下一页。添加标签。标签管理页面旋转页面随意拖动双击后还原位置 其实按照自己的预期来说,有很多功能还没有开发完,配色也没有全都搞完,先发出来吧,后期有需要…...
js考核第三题
题三:随机点名 要求: 分为上下两个部分,上方为显示区域,下方为控制区域。显示区域显示五十位群成员的学号和姓名,控制区域由开始和结束两个按钮 组成。点击开始按钮,显示区域里的内容开始滚动,…...
新型基于Go语言的恶意软件利用Telegram作为C2通信渠道
研究人员发现了一种新型后门恶意软件,使用Go语言编写,并利用Telegram作为其命令与控制(C2)通信渠道。尽管该恶意软件似乎仍处于开发阶段,但它已经具备完整的功能,能够执行多种恶意活动。这种创新的C2通信方…...
【Python 语法】Python 正则表达式(regular expressions, regex)
1. 基本语法1.1 字符匹配1.2 元字符1.3 特殊字符1.4 分组和捕获1.5 断言2. 常用函数2.1 `re.match()`2.2 `re.search()`2.3 `re.findall()`2.4 `re.sub()`2.5 `re.split()`3. 进阶用法3.1 捕获组3.2 非捕获组3.3 预查Python 中的**正则表达式(regular expressions, regex)**是…...
STM32 如何使用DMA和获取ADC
目录 背景 摇杆的原理 程序 端口配置 ADC 配置 DMA配置 背景 DMA是一种计算机技术,允许某些硬件子系统直接访问系统内存,而不需要中央处理器(CPU)的介入,从而减轻CPU的负担。我们可以通过DMA来从外设…...
【原创】vue-element-admin-plus完成编辑页面中嵌套列表功能
前言 vue-element-admin-plus对于复杂业务的支持程度确实不怎么样,我这里就遇到了编辑页面中还要嵌套列表的真实案例,比如字典,主字典嵌套子信息,类似于一个树状结构。目前vue-element-admin-plus给出的例子是无法满足这个需求的…...
Java零基础入门笔记:(3)程序控制
前言 本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。 【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili Scanner对象 之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类&…...
拷打,数据库面经!
数据库必会面试题 1. 请解释数据库中的MVCC(多版本并发控制)机制,并说明其在MySQL InnoDB中的具体实现方式? 答案: MVCC是一种通过维护数据的历史版本实现高并发的技术,允许读操作不阻塞写操作࿰…...
Docker+DockerCompose+Harbor安装
安装docker # 安装yum工具 yum install yum-utils -y# 配置yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装docker yum install -y docker-ce-25.0.3 docker-ce-cli-25.0.3 containerd.io# 加载镜像 systemctl d…...
论文笔记(七十二)Reward Centering(一)
Reward Centering(一) 文章概括摘要1 奖励中心化理论 文章概括 引用: article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.0…...
在springboot加vue项目中加入图形验证码
后端 首先先要创建一个CaptchaController的类,可以在下面的代码中看到 在getCaptcha的方法里面写好了生成随机的4位小写字母或数字的验证码,然后通过BufferedImage类变为图片,顺便加上了干扰线。之后把图片转为Base64编码方便传给前端 为了…...
【系列专栏】银行IT的云原生架构-存储架构-数据库部署 10
银行 IT 的云原生架构:存储架构(数据库部署) 一、引言 在银行 IT 云原生架构的构建中,存储架构作为关键支撑,其性能、可靠性和扩展性直接影响着银行各类业务系统的运行效率与数据安全。而数据库作为数据存储与管理的…...
OpenGL ES -> 投影变换矩阵完美解决绘制GLSurfaceView绘制图形拉伸问题
GLSurfaceView绘制图形拉伸问题 假如在XML文件中声明GLSurfaceView的宽高为 android:layout_width"match_parent"android:layout_height"match_parent GLSurfaceView绘制的图形在Open GL ES坐标系中,而Open GL ES坐标系会根据GLSurfaceView的宽高将…...
【Three.js】JS 3D library(一个月进化史)
#春节过完了,该继续投入学习了~ 作为一个平面开发者,想要增进更多的技能,掌握web3D开发# 前置知识与技能 1. JavaScript 基础 - 掌握ES6语法(类、模块、箭头函数、解构等) - 熟悉异步编程(Promise、…...
在 debian 12 上安装 mysqlclient 报错
报错如下 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting mysqlclientUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/61/68/810093cb579daae426794bbd9d88aa830fae296e85172d18cb0f0e5dd4bc/mysqlclient-2.2.7.tar.gz (91 kB)Installi…...
wordpress主题插件开发中高频使用的38个函数
核心模板函数 get_header()/get_footer()/get_sidebar() – 加载模板部件 the_title()/the_content()/the_excerpt() – 显示文章标题、内容、摘要 the_post() – 循环中获取文章数据 bloginfo(‘url’) – 获取站点URL wp_head()/wp_footer() – 输出头部/尾部代码 wp_n…...
BMS项目-面试及答疑整理
1. SOC计算用的什么原理实现的? bms目前计算SOC使用的安时积分+开路电压首先得对电池有一个抽象得概念,把电池比作游泳池,电量比作游泳池里面的水,电流比作流入和流出得水流,那么充电也就是往游泳池里面灌入水流安时积分:对水流进行一个实时监测,比如1S一次监测,那么每…...
js第十二题
题十二:轮播图 要求: 1.鼠标不在图片上方时,进行自动轮播,并且左右箭头不会显示;当鼠标放在图片上方时,停止轮播,并且左右箭头会显示; 2.图片切换之后,图片中下方的小…...
LeetCode-76.最小覆盖子串
1、题目描述: 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须…...
CAS单点登录(第7版)20.用户界面
如有疑问,请看视频:CAS单点登录(第7版) 用户界面 概述 概述 对 CAS 用户界面 (UI) 进行品牌化涉及编辑 CSS 样式表以及一小部分相对简单的 HTML 包含文件,也称为视图。(可选&…...
【强化学习的数学原理】第08课-值函数近似-笔记
学习资料:bilibili 西湖大学赵世钰老师的【强化学习的数学原理】课程。链接:强化学习的数学原理 西湖大学 赵世钰 文章目录 一、例子:曲线拟合二、原理-目标函数介绍三、原理-优化算法和函数选择四、原理-示例与分析五、Sarsa和Q-learning六、…...
基于css实现正六边形的三种方案
方案一:通过旋转三个长方形生成正六边形 分析: 如下图所示,我们可以通过旋转三个长方形来得到一个正六边形。疑问: 1. 长方形的宽高分别是多少? 设正六边形的边长是100,基于一些数学常识,可以…...
React VS Vue
React 和 Vue 是目前最流行的两个前端框架,它们在设计理念、生态系统和开发体验上各有特点。以下是对 React 和 Vue 的全方位对比: 1. 核心设计理念 React 库而非框架:React 是一个用于构建 UI 的库,专注于视图层,其…...
CMake 编译工具
在使用 CMake 时,你可以通过指定工具链文件来设置编译器(如 GCC、G 或 Clang)。以下是具体步骤: 1. 创建工具链文件 首先,创建一个工具链文件(例如 toolchain.cmake),并在其中指定…...
el-tree选中数据重组成树
vueelement-ui 实现el-tree选择重新生成一个已选中的值组成新的数据树,效果如下 <template><div class"flex"><el-tree class"tree-row" :data"list" ref"tree" :props"{children: children, label: …...
IO、NIO解读和不同点,以及常用的文件流操作方法
java高级——IO、NIO解读和不同点,以及常用的文件流操作方法 前情提要文章介绍1. 什么是IO1.1 节点的分类1.2 传输方式 2. 七大传输方式解读2.1 File类解读2.1.1 创建文件的三种方式2.2.2 File的常用方法2.2.3 如何正确认识FileUtils 2.2 字节流(核心&am…...