2.2.1 数据通信系统的模型

本文介绍了数据通信系统的三个主要部分:源系统、传输系统和目的系统。详细解释了调制解调器的功能及其在数据传输中的作用,并区分了模拟信号与数字信号的不同。此外,还介绍了码元的概念以及其在数字信号传输中的应用。
  • 一个数据通信系统分为三大部分:
    1、源系统(或发送端、发送方)
    2、传输系统(或传输网络)
    3、目的系统(或接收端、接收方)

  • 数据通信系统模型如下
    在这里插入图片描述
    上图中调制解调器有2个功能
    1、调制:将计算机发出的低频 数字信号 转换成传输媒介可以传输的 模拟信号
    2、解调:将来自传输媒介的 模拟信号 转换成计算机能识别的 数字信号

  • 通信的目的是传送 消息 ,如语音,文字,图像,视频等都是消息
    数据是运送消息的实体
    信号是数据的电气或电磁的表现

  • 信号可以分为两类
    1、模拟信号代表消息的参数 的取值是连续的,如上图用户家中的调制解调器到电话端局之间的用户线上传送的就是模拟信号
    2、数字信号代表消息的参数 的取值是离散的,如上图用户家中的计算机到调制解调器之间,或电话网中继线上传送的就是数字信号

  • 码元
    在使用 时间域(时域)波形 表示 数字信号 时,代表 不同离散数值基本波形 就是码元
    使用 二进制编码 时,只有两种不同的码元,一种代表 0态 ,一种代表 1态
    此外,一个码元所携带的信息量是不固定的 ,由 调制方式编码方式 决定

### 2.2 模块划分详细设计 #### 2.2.1 网络通信模块 **核心功能**: - 套接字管理(创建/绑定/监听) - 连接生命周期管理(accept/close) - 数据传输(send/recv封装) - 非阻塞I/O支持 - 连接超时处理 **接口设计**: ```c int create_listen_socket(int port); // 创建监听套接字 int set_nonblocking(int fd); // 设置非阻塞模式 ssize_t safe_recv(int fd, void *buf, size_t len); // 安全接收数据 ssize_t safe_send(int fd, const void *buf, size_t len); // 安全发送数据 ``` #### 2.2.2 HTTP解析模块 **组件划分**: 1. 请求解析器: - 解析请求行(method/path/version) - 解析头部字段(key-value存储) - 处理URL编码 - 支持chunked传输编码 2. 响应生成器: - 状态行生成 - 自动添加常用头部(Date/Server) - 支持Keep-Alive **数据结构**: ```c typedef struct { char method[8]; // GET/POST等 char path[1024]; // 请求路径 char version[16]; // HTTP版本 header_t *headers; // 头部链表 char *body; // 请求体 } http_request; typedef struct { int status_code; // 状态码 header_t *headers; // 响应头 FILE *body_file; // 响应体文件指针 } http_response; ``` #### 2.2.3 并发模型模块 **实现模式**: 1. 多线程版: - 线程池预初始化 - 任务队列管理 - 优雅退出机制 2. I/O多路复用版: - select/epoll封装 - 事件回调注册 - 定时器管理 **关键接口**: ```c // 线程池版本 void thread_pool_init(int max_threads); void submit_task(task_callback fn, void *arg); // IO复用版本 void event_loop_add(int fd, event_handler_t handler); void event_loop_run(); ``` #### 2.2.4 日志模块 **日志分级**: - DEBUG(调试信息) - INFO(正常请求记录) - WARN(异常情况) - ERROR(严重错误) **功能特性**: - 异步日志写入 - 日志文件滚动(按大小/时间) - 敏感信息过滤 - 请求追踪ID **接口示例**: ```c #define LOG(level, fmt, ...) \ log_write(level, __FILE__, __LINE__, fmt, ##__VA_ARGS__) void log_init(const char *path, int level); void log_request(const http_request *req); void log_response(int status, size_t bytes_sent); ``` **典型日志格式**: ``` [2023-08-20 14:30:45] INFO 192.168.1.100 "GET /index.html" 200 1532B [2023-08-20 14:31:02] ERROR socket.c:152 accept() failed: Too many open files ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值