协议的种类
什么是协议
协议是计算机通信中双方遵循的规则和约定,定义了数据格式、传输方式、错误处理等关键细节。
协议的划分
按网络分层模型划分
物理层协议
功能:定义物理介质(如电缆、光纤)上的信号传输方式。
例子:RS-232(串口通信)、以太网的物理层标准(如1000BASE-T)。
数据链路层协议
功能:管理直接相连设备间的数据传输(帧同步、错误检测)。
例子:以太网(MAC层)、Wi-Fi(IEEE 802.11)、PPP(拨号协议)。
网络层协议
功能:实现跨网络的寻址和路由选择。
例子:IP(IPv4/IPv6)、ICMP(Ping)、BGP(路由协议)。
传输层协议
功能:端到端通信,保证数据可靠/不可靠传输。
例子:TCP(可靠传输)、UDP(低延迟传输)。
应用层协议
功能:面向具体业务场景的通信规则。
例子:HTTP、FTP、SMTP、DNS。
按应用场景划分
下面举几个例子
消息传递协议
用途:分布式系统中消息队列或中间件的通信。
特点:支持发布/订阅、持久化、事务等特性。
例子:
Kafka协议:基于TCP的二进制协议,优化高吞吐、分区和消费者组管理。
RocketMQ协议:阿里自研,支持事务消息、顺序消息,基于长连接。
AMQP:标准化协议(如RabbitMQ),支持消息确认、路由规则(Exchange/Queue)。
MQTT:轻量级,适用于物联网(低带宽、不稳定网络)。
远程调用协议(RPC)
用途:跨进程或跨机器的方法调用。
特点:需定义接口、参数序列化、传输机制。
例子:
Dubbo协议:阿里开源,默认基于Netty的二进制协议,支持负载均衡、服务治理。
gRPC:基于HTTP/2和Protobuf,支持多语言、流式通信。
Thrift:Facebook开源,跨语言RPC框架,含二进制序列化协议。
Web服务协议
用途:基于Web的客户端-服务端交互。
例子:
HTTP/HTTPS:无状态请求-响应模型,RESTful API的基础。
WebSocket:全双工通信,适用于实时应用(如聊天、游戏)。
SOAP:基于XML的协议,支持复杂事务和安全扩展。
数据库访问协议
用途:客户端与数据库服务器的交互。
例子:
MySQL协议:基于TCP的二进制协议,支持查询、事务、预处理语句。
PostgreSQL协议:支持扩展数据类型和流式结果集。
文件传输协议
用途:文件上传、下载或同步。
例子:
FTP/SFTP:传统文件传输,支持目录操作。
BitTorrent:P2P协议,分块下载和多源加速。
物联网协议
用途:低功耗设备通信。
例子:
CoAP:基于UDP的轻量协议,适用于传感器网络。
LoRaWAN:长距离低功耗广域网协议。
安全协议
用途:加密通信或身份认证。
例子:
TLS/SSL:加密HTTP(HTTPS)、邮件等。
OAuth2:授权协议,用于第三方应用访问用户资源。
JAVA项目中使用到的协议
下面以springboot web项目举例
应用层协议
HTTP/HTTPS
用途:Web 应用的核心协议,用于浏览器/客户端与服务器之间的通信。
Spring Boot 中的使用:
通过 @RestController 和 @RequestMapping 注解定义 HTTP 接口。
支持 GET/POST/PUT/DELETE 等 HTTP 方法。
HTTPS 通过配置 SSL 证书(server.ssl.*)启用加密通信。
server:
port: 8080
ssl:
key-store: classpath:keystore.jks
key-store-password: secret
WebSocket
用途:实现全双工实时通信(如聊天室、实时通知)。
Spring Boot 中的使用:
使用 @EnableWebSocket 和 WebSocketHandler 实现 WebSocket 服务端。
通过 STOMP(Simple Text Oriented Messaging Protocol)子协议增强消息路由能力。
传输层协议
TCP
用途:提供可靠的、面向连接的字节流传输。
Spring Boot 中的使用:
数据库连接(如 MySQL JDBC 驱动默认使用 TCP 协议)。
Redis、RabbitMQ 等中间件通过 TCP 与 Spring Boot 通信。
UDP
用途:无连接、低延迟但不可靠的传输(如日志收集、实时监控)。
Spring Boot 中的使用:
通过 java.net.DatagramSocket 实现 UDP 客户端/服务端。
集成第三方库(如 Netty)处理 UDP 请求。
安全协议
OAuth2.0
用途:授权框架,用于第三方应用访问用户资源。
Spring Boot 中的使用:
使用 spring-security-oauth2 或 spring-security 5.x+ 实现 OAuth2 服务。
支持授权码模式、密码模式等。
JWT(JSON Web Token)
用途:无状态的身份验证令牌,通过 HTTP Header 传输。
Spring Boot 中的使用:
使用 jjwt 库生成和解析 JWT。
通过 Spring Security 过滤器验证 JWT。
消息协议
AMQP(Advanced Message Queuing Protocol)
用途:消息队列通信(如 RabbitMQ)。
Spring Boot 中的使用:
通过 spring-boot-starter-amqp 集成 RabbitMQ。
使用 @RabbitListener 注解消费消息。
KAFKA协议
ROCKETMQ协议
服务发现与配置协议
Eureka(基于 HTTP)
用途:服务注册与发现(Spring Cloud Netflix)。
数据库协议
JDBC
用途:Java 数据库连接标准,底层依赖数据库厂商协议(如 MySQL 的 mysql-connector-java)。
Spring Boot 中的使用:
配置 DataSource 并集成 ORM 框架(如 JPA、MyBatis)。
其他协议
SMTP/POP3/IMAP
用途:邮件发送与接收。
Spring Boot 中的使用:
通过 spring-boot-starter-mail 集成 JavaMail。
总结
外部通信:HTTP/HTTPS、WebSocket、gRPC。
内部通信:TCP(数据库、中间件)、AMQP/MQTT(消息队列)。
安全:OAuth2.0、JWT、SSL/TLS。
服务治理:Eureka(HTTP)、Spring Cloud Config(HTTP)。
开发者需要根据性能需求(如 gRPC 的高效性)、安全性(HTTPS/JWT)和业务场景(如实时通信选择 WebSocket)灵活选择协议。