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

linux C — udp,tcp通信

(一)内核态与用户态​

  操作系统为隔离资源访问权限,划分出内核态与用户态。应用程序默认运行于用户态,仅能访问受限资源;执行 IO 等底层操作时需切换至内核态,因内核态拥有硬件访问与系统资源管理的最高权限。​

  从用户态到内核态的切换通过系统调用实现,操作系统会校验操作合法性。此机制隔离用户程序与系统核心,提升稳定性。例如文件读取:用户态程序无法直接访问磁盘,通过系统调用进入内核态后,由内核文件系统与磁盘驱动协作完成操作。​

(二)应用程序接收网络数据流程​

  1. 数据传输路径:网络数据先抵达网卡,经物理层和数据链路层处理后,进入内核态 Socket 缓冲区,再通过内核态到用户态的切换,拷贝至用户缓冲区供应用程序处理。​
  2. 关键作用:网卡是数据入口并做初步处理;内核 Socket 缓冲区暂存数据并按协议栈预处理;用户缓冲区是应用程序直接操作的数据区域。​

(三)同步 / 异步与阻塞 / 非阻塞​

  1. 同步与异步:同步需等待操作完成才继续执行,逻辑简单但并发效率低;异步无需等待,通过回调或事件通知获取结果,并发能力强但实现复杂。​
  2. 阻塞与非阻塞:阻塞时进程 / 线程暂停等待 IO 完成;非阻塞时 IO 操作立即返回状态,程序可轮询检查,避免阻塞但需控制轮询间隔。​

二、计算机网络概述​

(一)计算机网络定义​

计算机网络是通过通信设备和线路连接地理分散的计算机,借助网络软件实现数据通信与资源共享的系统,打破地理限制,实现信息交换与软硬件资源共享。​

(二)网络分类(按地域)​

类型​

范围​

特点​

典型应用​

局域网(LAN)​

办公室、校园等几千米内​

高传输速率、低误码率、易管理​

企业内部资源共享、校园网教学资源访问​

城域网(MAN)​

城市范围,几十到上百千米​

速率介于 LAN 和 WAN 之间​

城市政务网、教育城域网​

广域网(WAN)​

跨国家 / 大洲​

传输距离长,速率相对较低​

互联网、跨国企业异地互联​

万维网​

基于互联网的应用服务​

通过 HTTP 协议访问网页资源​

电子商务、社交媒体、在线教育​

(三)IP 与域名​

  1. IP 地址​
  • IPv4:32 位,点分十进制表示,地址空间约 43 亿个,分公网和局域网 IP,面临地址枯竭问题。​
  • IPv6:128 位,冒分十六进制表示,地址空间极大,且在安全性、性能等方面有改进。​
  1. 域名:IP 地址的易记文本表示,通过 DNS 解析为 IP 地址。解析过程为用户输入域名后,浏览器向 DNS 服务器查询,最终获取 IP 地址建立连接。​

三、网络 IO 模型​

(一)IO 定义​

IO 即输入 / 输出操作,是程序与外部设备、其他程序或网络主机间的数据交换过程,如键盘输入、文件读写、网络数据收发等。​

(二)IO 模型应用场景​

  1. 网络编程:管理网络通信,不同模型适配不同并发需求,如 Nginx 用 IO 多路复用处理高并发 HTTP 请求。​
  2. 文件操作:管理文件读写,优化磁盘 IO 性能,如大数据处理用异步 IO 提升效率。​
  3. 数据库管理:影响数据库性能,如 MySQL 的 InnoDB 用预读和异步 IO 优化读写。​
  4. 标准输入输出:命令行程序的键盘输入和屏幕输出,依赖操作系统缓冲区管理。​

(三)主要 IO 模型​

  1. 阻塞 IO 模型​
  • 工作原理:IO 操作未完成时,进程 / 线程阻塞等待。​​
#include <stdio.h>​#include <unistd.h>​#include <fcntl.h>​​int main() {​char buffer[1024];​int fd = open("file.txt", O_RDONLY);​// 阻塞读取文件,若数据未就绪则等待​ssize_t bytes_read = read(fd, buffer, sizeof(buffer));​printf("Read %zd bytes\n", bytes_read);​close(fd);​return 0;​}​
  • 特点:实现简单,高并发下资源浪费严重。​
  1. 非阻塞 IO 模型​
  • 工作原理:IO 操作未完成时立即返回错误,程序轮询检查。​
#include <stdio.h>​#include <fcntl.h>​#include <errno.h>​​int main() {​char buffer[1024];​int fd = open("file.txt", O_RDONLY | O_NONBLOCK);​while (1) {​ssize_t bytes_read = read(fd, buffer, sizeof(buffer));​if (bytes_read > 0) {​printf("Read %zd bytes\n", bytes_read);​break;​} else if (bytes_read == -1 && errno != EAGAIN) {​perror("Read error");​break;​}​// 无数据时执行其他任务​usleep(100000);​}​close(fd);​return 0;​
  • 特点:避免阻塞,轮询消耗 CPU 资源。​
  1. IO 多路复用模型​
  • 工作原理:通过系统调用监控多个 IO 通道,就绪后再处理。​
event.data.fd = fd;​epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd, &event);​while (1) {​int n = epoll_wait(epoll_fd, events, 10, -1);​for (int i = 0; i < n; i++) {​if (events[i].data.fd == fd && events[i].events & EPOLLIN) {​char buffer[1024];​ssize_t bytes_read = read(fd, buffer, sizeof(buffer));​printf("Read %zd bytes\n", bytes_read);​close(fd);​return 0;​}​
  • 特点:高效管理多 IO 通道,适合高并发场景,如 Nginx 基于 epoll 实现高性能。​
  1. 信号驱动 IO 模型​
  • 工作原理:注册信号处理函数,IO 就绪时内核发送信号触发处理。​
  • 特点:无需轮询,信号处理复杂,兼容性有限。​
  1. 异步 IO 模型​
  • 工作原理:内核完成 IO 操作后通过回调通知应用程序。​
  • 特点:IO 与程序任务并行,并发性能优,实现复杂需系统和语言支持。​

四、网络体系结构与协议​

(一)网络体系结构​

OSI 七层模型从下到上为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,各层功能明确,协同完成网络通信。TCP/IP 协议族更简洁,对应四层为网络接口层、网络层、传输层、应用层。​

(二)各层核心内容​

  1. 物理层:处理物理介质信号传输,定义电气、机械等特性,涉及网卡、中继器等设备。​
  2. 数据链路层:将比特流组织成帧,进行差错检测和介质访问控制,协议有以太网、PPP,设备有交换机。​
  3. 网络层:负责跨网络路由和寻址,核心协议为 IP,还有 ICMP 等辅助协议,设备为路由器。​
  4. 传输层:提供端到端数据传输服务,TCP 面向连接且可靠,UDP 无连接且高效,通过端口号标识应用程序。​
  5. 会话层:管理应用程序会话连接,功能多由应用层或传输层结合程序逻辑实现。​
  6. 表示层:处理数据格式转换、加密解密和压缩解压,保障数据正确理解。​
  7. 应用层:直接为用户程序提供服务,协议有 HTTP/HTTPS、FTP、SMTP、DNS 等。​

(三)TCP/IP 协议族概述​

各层对应 OSI 模型及核心协议:网络接口层对应物理层和数据链路层,含以太网等协议;网络层以 IP 为核心;传输层有 TCP 和 UDP;应用层集成各类用户协议,简洁实用,适应不同网络环境。​

(四)网络 IO 模型与协议关联​

TCP 因复杂可靠性机制,高并发下常用 IO 多路复用或异步 IO;UDP 简单,适用非阻塞或 IO 多路复用。协议分层处理会影响 IO 延迟,高效 IO 模型可减少切换和拷贝开销提升效率。

http://www.xdnf.cn/news/16246.html

相关文章:

  • 【Chrome】下载chromedriver的地址
  • 深入解析浏览器存储方案:Cookie、localStorage和sessionStorage特性与应用
  • GPU 服务器ecc报错处理
  • Java排序算法之<冒泡排序>
  • 单片机(STM32-ADC模数转换器)
  • 优思学院|QC七大手法之一的检查表应如何有效使用?
  • CSS 盒子模型学习版的理解
  • 数据结构 二叉树(1)
  • yarn在macOS上的安装与镜像源配置:全方位指南
  • 从 SQL Server 到 KingbaseES V9R4C12,一次“无痛”迁移与深度兼容体验实录
  • Orbbec开发---数据流与数据流操作
  • ZLMediaKit 源代码入门
  • Spring 策略模式实现
  • 【DeepRare】疾病识别召回率100%
  • SpringBoot学习路径二--Spring Boot自动配置原理深度解析
  • 教培机构如何开发自己的证件照拍照采集小程序
  • 萤石云替代产品摄像头方案萤石云不支持TCP本地连接-东方仙盟
  • 深入解析Hadoop MapReduce中Reduce阶段排序的必要性
  • 《Uniapp-Vue 3-TS 实战开发》自定义环形进度条组件
  • 人工智能冗余:大语言模型为何有时表现不佳(以及我们能做些什么)
  • 【js】ES2025新语法糖
  • 缓存HDC内容用于后续Direct2D绘制.
  • C#(基本语法)
  • SQLite中SQL的解析执行:Lemon与VDBE的作用解析
  • 机器学习笔记(三)——决策树、随机森林
  • 使用Python绘制金融数据可视化工具
  • 云原生可观测-日志观测(Loki)最佳实践
  • MinIO:云原生对象存储的终极指南
  • IT领域需要“落霞归雁”思维框架的好处
  • 互联网金融项目实战(大数据Hadoop hive)