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

C# 网络通讯核心知识点笔记

一、网络协议基础理论

1.1 OSI 七层参考模型

1.1.1 核心定义

OSI(Open System Interconnect,开放式系统互联)参考模型是 ISO(国际标准化组织)1985 年制定的网络互联框架,定义了七层网络结构,确保不同设备、系统间按统一规则传输数据,数据需经 “发送端层层向下封装→物理层传输→接收端层层向上解封装” 的流程传递。

1.1.2 七层结构与核心信息
层级名称核心功能常用协议 / 技术数据单位
7应用层为应用程序提供网络服务(如数据交互、请求响应)HTTP、HTTPS、FTP、SMTP、DNS、Telnet应用数据
6表示层数据格式转换、加密解密、压缩解压(确保接收端能识别数据)ASCII、UTF-8、Unicode、SSL/TLS、JPEG表示层数据
5会话层建立、管理、终止通信连接(如会话超时控制、连接恢复)ADSP、RPC、SQI会话层数据
4传输层提供端到端(端口到端口)的可靠 / 不可靠传输,控制数据流量TCP、UDP、SPX段(TCP)/ 数据报(UDP)
3网络层路由选择(确定数据传输路径)、IP 寻址(定位目标设备)IP(IPv4/IPv6)、ICMP、ARP、RARP数据包
2数据链路层物理地址(MAC 地址)寻址、帧同步、差错检测(如 CRC 校验)HDLC、PPP、IEEE 802.3(以太网)、WIFI
1物理层实现比特流(0/1 序列)与物理信号(电压、光信号)的转换,定义物理接口RS232、RS485、RJ-45、UART、V35比特流

1.2 核心协议分类与重点协议解析

1.2.1 协议分类
  • 传输层核心协议:TCP(可靠连接)、UDP(不可靠无连接)

  • 应用层常用协议:HTTP(80 端口)、HTTPS(443 端口,基于 SSL/TLS 加密)、FTP(文件传输,21 端口)

  • 串口协议:RS232(点对点,短距离)、RS485(多点通信,长距离抗干扰)、RS422(全双工,两点通信)

  • 物理接口协议:RJ-45(网口,以太网标准)、UART(通用异步收发传输器,串口底层)

1.2.2 必须掌握的协议(重点)
协议所属层级核心特点应用场景关键参数 / 注意事项
TCP传输层面向连接、可靠(无丢失 / 无重复 / 有序)、基于字节流、延时高、资源占用多聊天软件、文件传输(如 FTP)、HTTP需三次握手建立连接,四次挥手释放连接
UDP传输层无连接、不可靠(可能丢包 / 乱序)、基于数据报、延时低、资源占用少视频直播、实时语音、物联网传感器无需建立连接,直接发送,需自行处理丢包问题
IP网络层负责 IP 寻址(定位设备)、路由选择,无连接、不可靠所有 TCP/UDP 数据的底层传输分为 IPv4(32 位地址)和 IPv6(128 位地址)
HTTP应用层无状态、基于请求 - 响应模式、明文传输(不安全)网页浏览、API 接口(如 RESTful)默认端口 80,请求方法:GET/POST/PUT/DELETE
HTTPS应用层HTTP+SSL/TLS 加密,提供身份认证和数据加密(安全)支付、登录、敏感数据传输默认端口 443,需 SSL 证书验证
RS232物理层点对点通信、传输距离短(<15 米)、抗干扰弱、单工 / 半双工单片机与 PC 通信、老式设备调试9 针 / 25 针接口,需匹配波特率、数据位、校验位
RS485物理层多点通信(最多 32 个节点)、传输距离长(<1200 米)、抗干扰强、半双工工业控制(如 PLC)、传感器组网需终端电阻(120Ω)匹配,避免信号反射
1.2.3 需了解的协议
  • Telnet:应用层,远程登录协议(明文,不安全,多用于设备调试)

  • SMTP:应用层,邮件发送协议(配合 POP3/IMAP 接收邮件)

  • ARP:网络层,将 IP 地址转换为 MAC 地址(局域网内寻址)

  • RARP:网络层,将 MAC 地址转换为 IP 地址(如无盘工作站)

  • MIME:应用层,多用途互联网邮件扩展,定义邮件附件格式(如图片、文档)

二、TCP 深度解析

2.1 TCP 核心概念

  • 定义:Transmission Control Protocol(传输控制协议),传输层协议,基于 TCP/IP 协议簇,提供可靠的端到端传输。

  • TCP 连接标识:由4 元组唯一确定 ——(源 IP 地址、源端口号、目的 IP 地址、目的端口号)。

  • TCP 报文结构:固定首部 20 字节 + 可选首部(0-40 字节),核心字段包括:

    • 源端口 / 目的端口(各 2 字节):定位应用程序;

    • 序号(seq,4 字节):标识当前报文段数据的第一个字节序号;

    • 确认序号(ack,4 字节):期望接收的下一个字节序号(仅 ACK=1 时有效);

    • 标志位(6 个):SYN(建立连接请求)、ACK(确认)、FIN(释放连接)、RST(重置连接)、PSH(立即推送数据);

    • 窗口(2 字节):流量控制,标识接收端可接收的最大字节数。

2.2 TCP 连接的 “三次握手” 与 “四次挥手”(面试重点)

2.2.1 三次握手(建立连接)

目的:确保客户端和服务器双方的发送、接收能力正常,同步序号。

  1. 第一次握手:客户端 → 服务器,发送报文:SYN=1,seq=x(x 为客户端初始序号,如 100);

  2. 第二次握手:服务器 → 客户端,响应报文:SYN=1,ACK=1,seq=y(服务器初始序号,如300),ack=x+1(确认收到客户端数据)

  3. 第三次握手:客户端 → 服务器,确认报文:ACK=1,seq=x+1,ack=y+1(确认收到服务器数据)

为什么需要三次握手? 避免 “失效的连接请求” 导致服务器资源浪费:若仅两次握手,客户端发送的请求报文因网络延迟到达服务器,服务器误判为新连接并分配资源,而客户端已超时重发,导致服务器资源闲置。

2.2.2 四次挥手(释放连接)

目的:确保双方数据均已传输完成,安全释放连接(TCP 是全双工,需双向关闭)。

  1. 第一次挥手:客户端(数据传输完成)→ 服务器,发送FIN=1,seq=x(客户端当前序号),表示客户端不再发送数据;

  2. 第二次挥手:服务器 → 客户端,响应ACK=1,ack=x+1,表示服务器确认收到关闭请求(此时服务器仍可向客户端发送数据);

  3. 第三次挥手:服务器(数据传输完成)→ 客户端,发送FIN=1,seq=y(服务器当前序号),表示服务器不再发送数据;

  4. 第四次挥手:客户端 → 服务器,响应ACK=1,ack=y+1,表示客户端确认收到关闭请求(客户端需等待 2MSL 后彻底释放连接,确保服务器收到确认)。

2.3 TCP 连接的三个阶段

  1. 连接建立阶段:通过三次握手完成,双方进入 “已建立连接” 状态;

  2. 数据传输阶段:基于字节流传输数据,通过序号、确认序号保证可靠性,通过窗口机制进行流量控制;

  3. 连接释放阶段:通过四次挥手完成,双方释放资源,断开连接。

三、UDP 深度解析

3.1 UDP 核心概念

  • 定义:User Datagram Protocol(用户数据报协议),传输层协议,无连接、不可靠的数据包传输。

  • UDP 报文结构:固定首部 8 字节,仅包含源端口、目的端口、长度、检验和,结构简单,传输效率高。

  • 核心特点:

    • 无连接:发送前无需建立连接,直接发送数据报;

    • 不可靠:不保证数据送达、不保证顺序、不重传丢失数据;

    • 面向数据报:每个数据报独立,大小限制(通常 < 65507 字节);

    • 低延时:无握手 / 挥手过程, overhead 小,适合实时场景。

3.2 TCP 与 UDP 的核心区别

对比维度TCPUDP
连接方式面向连接(三次握手建立,四次挥手释放)无连接(直接发送)
可靠性可靠(无丢失、无重复、有序)不可靠(可能丢包、乱序)
数据传输单位字节流(无边界,需应用层定义分隔)数据报(有边界,一次发送一个数据报)
流量控制支持(滑动窗口机制)不支持(需应用层自行处理)
拥塞控制支持(慢启动、拥塞避免等算法)不支持(可能导致网络拥塞)
延时高(握手 / 确认 / 重传耗时)低(无额外耗时)
资源占用高(需维护连接状态、序号、窗口等)低(无连接状态,结构简单)
应用场景文件传输、聊天、HTTP/HTTPS视频直播、实时语音、物联网传感器

四、Socket 与 C# 网络编程

4.1 Socket 核心概念

  • 定义:套接字(Socket)是应用层与 TCP/IP 协议簇通信的中间抽象层,封装了 TCP/UDP 的底层细节,为开发者提供统一的 API 接口。

  • Socket 与 TCP/UDP 的关系:Socket 不是协议,而是 “工具”—— 通过 Socket 可以实现 TCP 的连接式通信,也可以实现 UDP 的无连接通信。

  • C# 中的 Socket 封装:.NET Framework 提供了更易用的封装类,推荐优先使用:

    • TcpListener:TCP 服务器端,用于监听客户端连接;

    • TcpClient:TCP 客户端,用于与 TCP 服务器建立连接并传输数据;

    • UdpClient:UDP 客户端 / 服务器端,用于 UDP 数据报的发送与接收。

4.2 C# 中 TCP 通讯的核心流程

4.2.1 TCP 服务器端(TcpListener)
  1. 创建TcpListener实例,绑定 IP 地址和端口(如new TcpListener(IPAddress.Any, 8888));

  2. 调用Start()方法开始监听客户端连接;

  3. 调用AcceptTcpClient()方法(阻塞),等待客户端连接,返回TcpClient实例(代表与该客户端的连接);

  4. 通过TcpClient.GetStream()获取网络流(NetworkStream),用于读写数据;

  5. 数据传输完成后,关闭NetworkStreamTcpClient,调用TcpListener.Stop()停止监听。

4.2.2 TCP 客户端(TcpClient)
  1. 创建TcpClient实例,调用Connect(IPAddress, 端口)连接服务器;

  2. 通过GetStream()获取网络流,用于向服务器发送 / 接收数据;

  3. 数据传输完成后,关闭网络流和TcpClient

4.3 C# 中 UDP 通讯的核心流程

UDP 无连接,客户端和服务器端逻辑类似,均使用UdpClient

  1. 创建UdpClient实例,绑定本地端口(服务器端需固定端口,客户端可随机);

  2. 发送数据:调用Send(byte[] data, int length, IPEndPoint remoteEP),指定目标 IP 和端口;

  3. 接收数据:调用Receive(ref IPEndPoint remoteEP)(阻塞),接收来自指定端点的数据,返回字节数组;

  4. 通讯结束后,关闭UdpClient

注意:UDP 接收需通过IPEndPoint获取发送方的地址和端口,且需异步或多线程处理,避免阻塞主线程(如Task.Run(() => 接收逻辑))。

4.4 Socket 通讯的关键注意事项

  • TCP 服务器的多客户端处理:单个TcpListener一次只能处理一个客户端,需通过多线程(如ThreadPool.QueueUserWorkItem)或异步(AcceptTcpClientAsync)处理多个客户端连接;

  • 数据粘包 / 拆包:TCP 是字节流,可能出现 “粘包”(多个发送的数据合并接收)或 “拆包”(一个发送的数据分多次接收),需在应用层定义数据格式(如 “长度 + 数据”)解决;

  • UDP 数据报大小:UDP 数据报最大长度为 65507 字节(IP 首部 20 字节 + UDP 首部 8 字节),超过需在应用层分片;

  • 资源释放:网络流、TcpClient/UdpClient、TcpListener 需在使用后及时关闭,避免资源泄漏(推荐使用using语句自动释放)。

五、核心知识点总结

  1. 网络协议框架:OSI 七层模型是基础,重点关注传输层(TCP/UDP)、应用层(HTTP/HTTPS)、物理层(RS232/RS485/RJ-45);

  2. TCP 核心:面向连接、可靠传输,三次握手建立连接,四次挥手释放连接,4 元组标识连接;

  3. UDP 核心:无连接、不可靠传输,低延时,适合实时场景,需应用层处理可靠性问题;

  4. C# 编程:优先使用TcpListener/TcpClient/UdpClient封装类,避免直接操作底层 Socket;TCP 需处理多客户端和粘包,UDP 需注意数据报大小和异步接收;

  5. 协议选择原则:对可靠性要求高选 TCP,对延时要求高选 UDP;短距离设备通信选 RS232,长距离工业组网选 RS485,以太网通信选 RJ-45。

http://www.dtcms.com/a/426758.html

相关文章:

  • Ubuntu之apt安装ClickHouse数据库
  • 在线音乐网站开发现状网站全屏弹出窗口
  • 泛型在Java集合框架中的应用有哪些?
  • 服务器中使用Docker部署前端项目
  • mysql之二进制日志
  • 【完整源码+数据集+部署教程】染色体图像分割系统: yolov8-seg-KernelWarehouse
  • Docker MySQL 使用全流程
  • Visual Studio主题、字体、快捷键、开发环境设置,自用
  • 火山 19 混音伴音 接口
  • Bean精细化控制属性序列化反序列化
  • 前端权限模型——RBAC
  • 杭州知名网站建设公司电商网站建设好么
  • 不忘初心网站建设做网站的工具
  • VSCode实现字符串粘贴转义复制反转义
  • 第2章 三个小工具的编写(2)
  • 【DeepResearch】langgraph自主迭代研究能力的 AI 代理及分析
  • 专题:2025医药行业数智赋能与AI应用全景研究报告|附200+份报告PDF、数据仪表盘汇总下载
  • Alibaba Cloud Linux 3 +Docker 部署 ThinkPHP6 (宝塔环境)-问题篇
  • LeetCode 刷题【93. 复原 IP 地址】
  • Python类和对象----实例属性,类属性(这是我理解类和对象最透彻的一次!!)
  • 文档解析Logics-Parsing
  • 网站设计报价.doc网页端
  • IDEA中Add New Configuration找不到Tomcat
  • 学习笔记092——Windows如何将 jar 包启动设置成系统服务
  • React前端框架有哪些?
  • 文昌市建设局网站无锡工厂网站建设
  • 龙岗网站建设-信科网络深圳房地产论坛家在深圳
  • Ceph 分布式存储学习笔记(三):块存储和对象存储管理
  • Ubuntu22.4安装Samba服务器
  • 服务器安装Java与nginx与nacos