分为通信协议、数据交换协议、进程间通信方法
通信协议
物理层
功能 完成信号传输
通信方式与数据传输方式 单工通信、半双工通信、双工通信;串行传输、并行传输
信号类型 基带信号(0,1)、宽带信号(频分复用)
信号编解码/调制解调 数字信号、模拟信号
传输介质 电缆、光缆、电磁波
数据链路层
提供的服务 保证信号可以从一个节点传递到下一个节点。主要功能如下:成帧(数据帧封装)、链路接入(链路建立与释放)、差错控制(数据校验与重传)、流量控制(保证接收与发送同步)、访问控制(共享介质的网络避免数据同时发送)
功能设备 专用的网络适配器(网卡)、交换机、集线器、网桥。
PPP(Point to Point Protocol) 点对点协议链路层协议,主要用于在全双工的串行链路上进行点到点的数据传输,衍生产品应用非常广泛。
HDLC(High-level Data Link Control) 高级数据链路控制协议,支持半双工半双工、全双工传送,支持点到点、多点结构,支持交换型、非交换型信道。主要用于早期的计算机网络与某些特殊领域
以太网(Ethernet) 局域网(Local Area Network, LAN)通信协议。包含物理层和数据链路层标准,设备之间主要是通过网线与中继器等完成连接,也可以完成点对点连接。
WiFi 无线局域网通信协议。包含物理层和数据链路层标准,设备之间通过特定频段电磁波与无线接入点连接。
其它协议 蓝牙、NFC、SLIP、LAPB、Token Ring等
网络层
提供的服务 在不同的网络节点之间进行数据包的路由选择和转发。主要功能如下:数据分组、路由选择、子网掩码区分、NAT(私有IP与公共IP转换)、路由协议适配、拥塞控制、虚电路服务(保证稳定的数据连接)、QoS(数据优先级管理)、隧道技术(通过网络层封装一种协议为另一种协议来穿越防火墙)
主要设备 路由器、3层交换机、防火墙
IP(Internet Protocol) 定义数据包格式与寻址方式,利用路由器完成数据分组、路由选择等基础功能。
ICMP协议 基于IP协议,用于调试网络层异常状态
其它协议 提供的服务都存在对应的实现方法与协议,它们都是基于IP协议与硬件属性完成的数据处理。
传输层
提供的服务 实现端到端的通信,用于处理应用层的消息,按照协议标准下发到网络层,面向数据流的协议不保证数据边界。主要功能如下:端到端连接、数据分段、流量控制、错误纠正、拥塞控制、基于端口的多路服用、QoS(数据优先级管理)、可靠传输或不可靠传输
TCP(Transmission Control Protocol) 以上服务全部支持,可以保持长连接。
UDP(User Datagram Protocol) 相比网络层,仅提供端口复用、错误纠正等基础功能。
TLS/SSL (Transport Layer Security/Secure Sockets Layer) 基于TCP协议,对数据进行加密与端点认证。如电子邮件、文件传输、网页浏览等。
DCCP (Datagram Congestion Control Protocol) 基于UDP协议,提供了拥塞控制。如在线游戏和多媒体流等
SCTP (Stream Control Transmission Protocol) 兼顾TCP、UDP特点,使用多个IP地址来建立连接,比TCP更安全高效,如电信应用、网际电话(VoIP)和即时通讯等。
RTP(Real-time Transport Protocol)一种网络传输协议,专为在互联网上提供具有实时特性的端到端通信服务而设计。它主要应用于音频、视频等多媒体数据的实时传输。RTP通常与RTCP一起使用
应用层
- HTTP (Hypertext Transfer Protocol) / HTTPS (HTTP Secure): HTTP 是用于分布式、协作式和超媒体信息系统的应用层协议,主要用于网页浏览。HTTPS 则是HTTP的安全版,通过SSL/TLS协议提供加密通讯和数据安全。按照请求/响应模型实现。
- WebSocket:基于TCP协议通信,基于HTTP请求的握手。使用全双工通信,适合频繁的数据发送。
- STOMP:一般是基于WebSocket协议通信,支持点对点和发布/订阅两种消息模型。
- SMTP (Simple Mail Transfer Protocol): 用于在互联网上传送电子邮件的标准协议。
- POP3 (Post Office Protocol version 3) 和 IMAP (Internet Message Access Protocol): 分别是两种用于接收电子邮件的协议,其中POP3下载邮件至本地设备,而IMAP允许用户在服务器上管理邮件。
- FTP (File Transfer Protocol): 用于在网络上进行文件传输的协议,支持上传和下载。
- DNS (Domain Name System): 将人类可读的域名转换为IP地址的系统,使得用户可以通过域名访问网站。
- SSH (Secure Shell): 提供安全的远程登录和其他网络服务的协议,常用于管理远程服务器。
- TLS/SSL (Transport Layer Security/Secure Sockets Layer): 虽然工作在传输层,但常常提及于应用层,用于加密网络通信,保护数据的隐私和完整性。
- FTP over TLS/SSL (FTPS): FTP协议的加密版本,通过TLS/SSL来保护文件传输过程中的数据安全。
- SFTP (Secure File Transfer Protocol): 一种安全的文件传输协议,通常运行在SSH之上,提供加密的数据传输。
- Telnet: 远程终端协议,允许用户登录到远程主机并进行操作,但现在已较少使用,多被SSH取代。
- SNMP (Simple Network Management Protocol): 用于网络设备管理和监控的协议,可以收集网络信息、修改设备配置等。
- NTP (Network Time Protocol): 用于同步网络中各个计算机的时间,确保时间的一致性。
- XMPP (Extensible Messaging and Presence Protocol): 灵活、易扩展、成熟、强大、复杂的即时通讯协议。基于XML格式使用TCP连接,实现客户端、网关、服务器之间的通信。
- WebRTC协议:WebRTC旨在使浏览器之间的实时音视频通信、数据共享变得简单,无需安装额外插件。
其它
PCI-E协议
PCI-Express(peripheral component interconnect express),简称PCIE,是一种高速串行计算机扩展总线标准,主要用于扩充计算机系统总线数据吞吐量以及提高设备通信速度。
类似于OSI网络模型,包括应用层、事务层、数据链路层和物理层。这些层次专注于点对点的通信效率、数据包的封装与解封装、错误检测与纠正、以及电气信号的传输等
数据交换协议
数据交换协议是一种规则或标准,用于定义两个或多个系统之间如何格式化、传输和解析数据,以确保数据能够被正确地理解和处理。在软件系统开发和网络通信中,数据交换协议起着至关重要的作用,它确保了不同系统之间的互操作性,无论这些系统是基于什么样的硬件或软件平台。
数据交换协议的关键目标包括:
- 标准化:定义数据的结构和格式,使得发送方和接收方能够遵循相同的规则来编码和解码数据。
- 可靠传输:确保数据在传输过程中保持完整,可能包括错误检测和纠正机制。
- 高效传输:优化数据的打包和传输方式,减少不必要的开销,提高通信速度。
- 安全性:在某些协议中,还涉及数据加密和验证措施,以保护数据免受未经授权的访问或篡改。
文本数据协议
- **XML (eXtensible Markup Language)**:一种可扩展的标记语言,被广泛用于网络服务和数据存储,因其灵活性和自描述性而成为数据交换的基石。
- **JSON (JavaScript Object Notation)**:轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成,现已成为Web服务和应用程序间数据交换的首选格式。
- **YAML (YAML Ain’t Markup Language)**:一种直观、易读的数据序列化格式,比json语法更多,体积更小,常用于配置文件和数据交换。
- **TOML (Tom’s Obvious, Minimal Language)**:另一种轻量级的配置文件格式,设计初衷是为了易于阅读、编辑,并且可以直接映射到哈希表结构,适用于配置文件。
- **CSV (Comma-Separated Values)**:逗号分隔值格式,是一种简单的表格数据存储格式,广泛应用于数据导入导出
- INI(nitialization File) 初始化文件。这种文件格式被用来存储软件或操作系统的配置设置,包括但不限于启动参数、用户偏好设置、路径信息等。INI文件是一种简单的文本文件,其内容通常由节(Sections)、键(Keys)和值(Values)组成,使用等号(=)分隔键和值,节则用方括号([])包围。
二进制数据协议
- **Protocol Buffers (Protobuf)**:主要用于高性能、跨平台的通信和数据存储。广泛应用于分布式系统、微服务架构、文件存储格式和配置文件。它的优势在于高效的二进制编码、快速的序列化/反序列化速度以及严格的schema定义,支持多种编程语言。
- Apache Avro:适用于大数据处理场景,特别是Hadoop生态系统中。Avro提供了动态的数据模式,支持模式演化,非常适合需要灵活数据结构和强兼容性的场景,如数据管道、数据湖存储和实时数据处理系统。
- FlatBuffers:特别适合游戏开发和实时系统,因为它们需要低延迟和高吞吐量的数据访问。FlatBuffers可以在不进行解析的情况下直接访问数据,这对于需要快速响应和频繁数据交换的应用来说非常关键。
- Cap’n Proto:适用于需要极致性能和低延迟的实时系统,如金融交易平台、游戏服务器、实时数据分析等。Cap’n Proto通过零拷贝和持久化数据结构来减少内存使用和提升性能。
- MessagePack:适用于需要JSON的灵活性但又追求更高性能的应用,如移动应用、游戏、实时消息系统等。它减小了数据体积,提高了数据处理速度,同时保持了与JSON的兼容性。
- gRPC:适用于构建高性能、低延迟的微服务和分布式系统。gRPC通过HTTP/2提供双向流、连接复用、流控等特性,支持复杂服务交互和高并发场景,如API服务、实时通信应用和云基础设施。
- **MQTT (Message Queuing Telemetry Transport)**:主要用于物联网(IoT)场景,如传感器网络、智能家居、工业自动化等。MQTT设计用于在资源有限的网络环境下进行高效、可靠的数据传输,支持低功耗设备的长距离通信。
- Cbor:一种类似Json的数据格式,但是使用二进制编码,避免了Json不兼容二进制数据的问题
进程通信(IPC)
常用进程通信方法
- 管道(Pipes):分为无名管道和命名管道,允许进程间单向或双向传递数据流。
- 消息队列(Message Queues):提供了一种异步通信的方式,消息发送者将消息放入队列,接收者可以从队列中读取消息,消息可以是先进先出(FIFO)或其他模式。
- 信号量(Semaphores):主要用于同步进程,控制对共享资源的访问,包括二进制信号量和计数信号量。
- 共享内存(Shared Memory):直接在内存中划分一块区域供多个进程访问,是最直接也是最快的IPC方式,但需要额外的同步机制来避免冲突。
- 套接字(Sockets):虽然主要用在网络通信中,但在同一台机器上也可以使用,支持TCP/IP和UDP等多种通信协议。
- 信号(Signals):一种进程间的简单通信方式,用于通知接收进程有某种事件发生,如进程终止、用户中断等。
- 内存映射文件(Memory-Mapped Files):将文件映射到内存中,多个进程可以通过操作内存映射区域来实现数据共享。
- **AIDL (Android Interface Definition Language)**:Android提供的一种接口描述语言,用于定义进程间通信的接口。AIDL文件编译后生成Java代码,使得进程间可以通过Binder机制进行通信。
- 远程过程调用(RPC):在一个进程跨系统或网络调用另一个进程的函数