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

通讯的基础概念:涵盖串行通信、并行通信、TCP、UDP、Socket 等关键概念和技术

一、通信基础概念

1. 串行通信与并行通信
  • 串行通信
    • 定义:通过一条线路逐位传输数据,每个字节包含起始位、数据位、校验位和停止位。
    • 特点
      • 传输稳定,但速度较慢(因逐位传输)。
      • 常用接口:RS-232、RS-485、USB(本质为串行,但通过协议模拟并行)。
      • 应用场景:工业控制(如 Modbus RTU)、嵌入式设备通信。
  • 并行通信
    • 定义:通过多条线路同时传输多个比特位,同时接收和发送多个字节 (如 8 位数据总线)。
    • 特点
      • 传输速度快,但线路成本高(需多条物理线路)。
      • 应用场景:早期计算机内部总线(如 ISA、PCI)、打印机并行接口。
2. 关键术语
  • 比特(bit):二进制最小单位,如10101111为 8 比特。
  • 字节(byte):1 字节 = 8 比特,是数据传输的基本单位。
  • 波特率(Baud Rate):单位时间内传输的数据,定位是位每秒,即bit/s。波特率用bps表示 ,每秒传输的比特数,常见值:9600bps、115200bps。
  • 校验位:用于检测数据传输错误,常见方式:奇偶校验、CRC 校验、LRC 校验。
  • 停止位:标识字节传输结束,通常为 1 或 2 位。

二、TCP 与 UDP 协议

1. TCP(传输控制协议)
  • 特点
    • 面向连接:通信前需建立连接(三次握手),结束后释放连接(四次挥手)。
    • 可靠传输:通过序列号、确认应答、重传机制确保数据完整性。
    • 流式传输:无固定数据边界,数据可能分块传输(需应用层处理分包)。
  • 应用场景:对可靠性要求高的场景,如文件传输(FTP)、网页浏览(HTTP)、邮件(SMTP)。
  • 端口示例:HTTP(80)、HTTPS(443)、FTP(21)。
2. UDP(用户数据报协议)
  • 特点
    • 无连接:无需建立连接,直接发送数据报(不可靠传输,可能丢包)。
    • 高效快速:无额外开销,适合实时性要求高的场景。
    • 数据报边界:每个 UDP 包有固定边界,适合小数据量传输。
  • 应用场景:实时音视频(如视频会议、在线游戏)、DNS 解析、传感器数据上报。
  • 端口示例:DNS(53)、SNMP(161)、DHCP(67/68)。

三、Socket 编程基础

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象

Server:服务器

Client:客户端

HH牛码

1. 核心概念
  • Socket(套接字)
    • 网络通信的端点抽象,封装了 IP 地址和端口号,用于标识网络中的进程。
    • 分为流式套接字(TCP)数据报套接字(UDP)
  • IP 地址:标识网络中的设备,如192.168.1.2(内网)、8.8.8.8(谷歌 DNS)。
  •  IP 中还包括 ICMP 协议和 ARP 协议
  • ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。
  • ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。
  • 端口号:标识设备中的应用程序,范围:0~65535(0~1023 为系统保留端口,如 HTTP 80)。
  • 网卡驱动程序负责控制网卡硬件
  • 硬件负责实际的收发操作
2. TCP Socket 通信流程

socket客户端:

1.创建Socket对象,绑定IP,构建链接

2.发送send

3.接收数据Receive,注意,需要持续性接收,加While,异步操作Task,取消CancellationTokenSource

4.注意,有链接就应该有断开 (3*)

socket服务端:

        1.创建socket对象,绑定IP,启用监听

        2.监听对象的获取使用Accept方法

        3.推送消息的方法跟客户端相同都是Send

  • 服务端步骤

    1. 创建 Socket:指定协议族(IPv4)、套接字类型(流式)、协议(TCP)。
      Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      
    2. 绑定 IP 和端口:关联本地 IP 和端口号。
      IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);  
      serverSocket.Bind(endpoint);
      
    3. 监听连接:设置最大连接队列。
      serverSocket.Listen(10); // 最多允许10个等待连接
      
    4. 接受连接:阻塞等待客户端连接。
      Socket clientSocket = serverSocket.Accept(); // 阻塞直至客户端连接
      
    5. 收发数据:通过Send()Receive()读写数据。
    6. 关闭连接:释放资源。
      clientSocket.Close();  
      serverSocket.Close();
      
  • 客户端步骤

    1. 创建 Socket:同上。
    2. 连接服务端:指定服务端 IP 和端口。
      Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
      clientSocket.Connect("127.0.0.1", 8888);
      
    3. 收发数据:同上。
    4. 关闭连接
3. UDP Socket 通信流程
  • 无连接,无需监听和接受连接,直接发送 / 接收数据报:
    // 服务端
    Socket udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);  
    udpServer.Bind(new IPEndPoint(IPAddress.Any, 8888));  
    byte[] buffer = new byte[1024];  
    IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, 0);  
    int length = udpServer.ReceiveFrom(buffer, ref clientEndPoint); // 接收数据报// 客户端
    Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);  
    byte[] data = Encoding.UTF8.GetBytes("Hello UDP");  
    udpClient.SendTo(data, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888)); // 直接发送数据报
    

四、虚拟串口与调试工具

  • 虚拟串口驱动
    • 在单台计算机上模拟两个串口(如 COM1 和 COM2),用于调试串口通信程序。
    • 应用场景:开发时无硬件设备,通过虚拟串口测试串口协议(如 Modbus RTU)。
  • 调试工具
    • 串口调试助手:模拟硬件设备,发送 / 接收串口数据(如 Modbus Poll/Slave)。
    • 网络调试助手:测试 Socket 通信,支持 TCP/UDP 收发(如 NetAssist)。

五、总结:协议选择指南

场景推荐协议 / 技术理由
工业设备近距离通信Modbus RTU(串行)简单可靠,适合 RS-485 总线,支持主从模式。
远程可靠数据传输TCP + Socket面向连接,保证数据完整性,适合文件传输、配置指令下发。
实时音视频流UDP + Socket低延迟,允许少量丢包,适合音视频实时传输。
跨网络设备互联Modbus TCP基于以太网,支持跨网段通信,适合物联网平台对接。
临时调试或老旧设备Modbus ASCII(串行)可读性强,便于人工分析,适合数据量小的场景(如早期 PLC)。

通过理解不同协议的特点和适用场景,可针对性选择通信方案,优化数据传输的效率和可靠性。

相关文章:

  • [AI Workflow] 基于多语种知识库的 Dify Workflow 构建与优化实践
  • 统计术语学习
  • 零信任架构:重塑网络安全的IT新范式
  • AI与思维模型【76】——SWOT思维模型
  • PyTorch生成式人工智能实战(3)——分类任务详解
  • Unity3D Lua集成技术指南
  • 含锡废水处理的经济效益
  • Android APP 热修复原理
  • java.lang.ArrayIndexOutOfBoundsException: 11
  • 时间序列预测模型比较分析:SARIMAX、RNN、LSTM、Prophet 及 Transformer
  • 51单片机中断
  • Electron从入门到入门
  • Nacos简介—2.Nacos的原理简介
  • Linux:进程间通信->匿名管道实现内存池
  • 深入剖析 Vue 双向数据绑定机制 —— 从响应式原理到 v-model 实现全解析
  • Android中的多线程
  • ubuntu20.04安装x11vnc远程桌面
  • 如何成功防护T级超大流量的DDoS攻击
  • 【Leetcode 每日一题】2845. 统计趣味子数组的数目
  • 汽车售后 D - PDU 和 J2543 详细介绍
  • 蚂蚁财富28亿港元要约收购耀才证券,筹谋香港券商牌照
  • 东阿至聊城公交票价取消八折优惠:运行成本高昂
  • 嫦娥五号月球样品将借给这些国家机构
  • 印控克什米尔26名游客遭恐袭丧生后,印度对巴宣布多项反制措施
  • 北京顺义:做好潮白河大桥事故善后处置,举一反三排查风险
  • 上金所:调整黄金、白银延期部分合约保证金水平和涨跌停板