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

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.dtcms.com/a/297644.html

相关文章:

  • Docker技术入门与实战(附电子书资料)
  • 第七章 愿景10 小杨的立项课
  • 【Practical Business English Oral Scene Interpretation】入职面试No.8~9
  • [NLP]UPF+RTL联合仿真的VCS命令及UPF-aware 波形工具的使用
  • 练习实践-基础设施-文件共享-windows和linux之间的文件共享-smb服务搭建
  • 开发笔记 | 优化对话管理器脚本与对话语音的实现
  • Day 21: 常见的降维算法
  • 5G基站信号加速器!AD8021ARZ-REEL7亚德诺 超低噪声高速电压放大器 专利失真消除技术!
  • Web前端:JavaScript Math对象应用 随机背景颜色生成器
  • 【STM32项目】智能家居(版本1)
  • 关于“PromptPilot”
  • 详解:YOLO 系列演进趋势
  • 计算机网络(第八版)— 第2章课后习题参考答案
  • day 35打卡
  • 图像梯度处理与边缘检测
  • Firefox 国际版关于标签页的一些常用设置
  • 电商数据采集API与爬虫技术结合的全网比价方案
  • 【Java、C、C++、Python】飞机订票系统---文件版本
  • 北斗短报文兜底、5G-A增强:AORO P1100三防平板构建应急通信网络
  • 【Agent】API Reference Manual(API 参考手册)
  • Elasticsearch-ik分析器
  • 【硬件】LT3763中文手册
  • 深入解析MongoDB分片原理与运维实践指南
  • 怎么放大单片机输出电流
  • k8s-MongoDB 副本集部署
  • vue2+node+express+MongoDB项目安装启动启动
  • pytest 测试报告生成方案有哪些?
  • Springboot整合springmvc
  • 基于Docker的GPU版本飞桨PaddleOCR部署深度指南(国内镜像)2025年7月底测试好用:从理论到实践的完整技术方案
  • 【赵渝强老师】MySQL中的数据库对象