【嵌入式Linux应用开发基础】网络编程(1):TCP/IP协议栈
目录
一、TCP/IP协议栈分层与核心协议
2.1. 应用层
2.2. 传输层
2.3. 网络层
2.4. 链路层
二、嵌入式Socket编程关键步骤
2.1. TCP服务端流程
2.2. TCP客户端流程
三、TCP/IP协议栈的配置与调试
四、嵌入式场景优化策略
4.1. 资源管理
4.2. 性能调优
4.3. 健壮性保障
五、TCP/IP协议栈在嵌入式Linux中的应用
六、常见问题
6.1. 连接建立问题
6.2. 数据传输异常
6.3. 协议栈配置陷阱
6.4. 资源限制问题
6.5. 实时性调试技巧
6.6. 特殊场景优化
七、参考资料
TCP/IP协议栈是嵌入式Linux系统中实现网络通信的核心组件。它负责处理从应用层到物理层的各种网络协议,确保数据在网络中的可靠传输。
一、TCP/IP协议栈分层与核心协议
TCP/IP协议栈是一个分层的网络通信模型,每一层负责特定的网络功能。常见的协议栈模型包括OSI七层模型和TCP/IP四层模型。在嵌入式Linux中,网络协议栈通常基于TCP/IP四层模型,这四层自下而上依次为链路层、网络层、传输层和应用层。

2.1. 应用层
-
协议: HTTP、FTP、MQTT(物联网常用)、CoAP(轻量级)
-
开发接口: Socket API(如
send()/recv()) -
嵌入式场景: 优先选择轻量级协议(如MQTT),减少资源占用。
2.2. 传输层
-
TCP
-
特点:可靠传输、面向连接、流量控制(滑动窗口)
-
嵌入式优化:调整
TCP_KEEPALIVE参数保活连接,避免资源耗尽。
-
-
UDP
-
特点:无连接、低延迟,适用于实时数据传输(如传感器数据)。
-
注意点: 需在应用层实现可靠性(如重传机制)。
-
2.3. 网络层
-
IP协议: 处理数据包路由,需关注
MTU(最大传输单元)分片问题。 -
ICMP: 用于网络诊断(如
ping命令)。
2.4. 链路层
-
ARP/RARP: IP与MAC地址转换,嵌入式设备需处理ARP缓存。
-
物理驱动: 适配具体硬件(如Wi-Fi模块、以太网PHY芯片)。
二、嵌入式Socket编程关键步骤
在嵌入式Linux系统中,TCP/IP协议栈的实现主要基于socket编程接口。socket编程接口允许开发者使用C语言编写网络应用程序,直接访问Linux TCP/IP协议栈的功能。通过socket接口,开发者可以实现网络通信、数据传输等功能。
2.1. TCP服务端流程
int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建TCP套接字
struct sockaddr_in addr = { .sin_family = AF_INET,.sin_port = htons(8080),.sin_addr.s_addr = INADDR_ANY
};
bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)); // 绑定地址
listen(sockfd, 5); // 监听,设置backlog数while(1) {int client_fd = accept(sockfd, NULL, NULL); // 接受连接char buffer[1024];recv(client_fd, buffer, sizeof(buffer), 0); // 接收数据send(client_fd, "Response", 9, 0); // 发送数据close(client_fd); // 关闭连接(长连接场景需循环处理)
}
2.2. TCP客户端流程
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_addr = {.sin_family = AF_INET,.sin_port = htons(8080),.sin_addr.s_addr = inet_addr("192.168.1.100")
};
connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); // 连接服务器
send(sockfd, "Hello", 6, 0); // 发送数据
三、TCP/IP协议栈的配置与调试
在嵌入式Linux系统中,网络协议栈的配置与调试通常通过以下工具和文件进行:
- ifconfig:用于配置网络接口的IP地址、子网掩码等参数。
- route:用于配置路由表,决定数据包的传输路径。
- /etc/network/interfaces:定义网络接口的配置文件。
- ping:用于测试网络连通性。
- netstat:用于查看网络连接状态和统计信息。
- tcpdump:用于抓取和分析网络数据包。
在调试过程中,开发者可以使用这些工具和文件来检查网络配置、物理连接、路由表、网络带宽等参数,以确保网络通信的可靠性和效率。
四、嵌入式场景优化策略
4.1. 资源管理
-
连接数控制: 使用
select/poll/epoll实现I/O多路复用,避免多线程开销。 -
内存优化: 设置合理接收缓冲区大小(
SO_RCVBUF),避免内存碎片。
4.2. 性能调优
-
TCP参数调整:
int enable = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)); // 端口复用
setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(int)); // 禁用Nagle算法
- UDP高并发: 使用多线程或
SO_REUSEPORT分散负载。
4.3. 健壮性保障
-
错误处理: 检查所有系统调用返回值,处理
EINTR(信号中断)、ECONNRESET(连接重置)等错误。 -
超时机制: 设置
SO_RCVTIMEO/SO_SNDTIMEO防止阻塞。
五、TCP/IP协议栈在嵌入式Linux中的应用
TCP/IP协议栈在嵌入式Linux系统中有广泛的应用场景,包括但不限于:
- 嵌入式设备远程监控:通过TCP/IP协议栈实现嵌入式设备与监控服务器之间的远程通信和数据传输。
- 智能家居系统:嵌入式Linux设备作为网关,通过Wi-Fi或以太网连接到家庭网络,通过MQTT或CoAP等协议实现设备间的通信和数据转发。
- 工业控制系统:嵌入式Linux设备通过Modbus/TCP或OPC UA等协议与PLC(可编程逻辑控制器)、传感器等设备通信,实现数据采集和控制。
六、常见问题
6.1. 连接建立问题
①三次握手失败
-
典型现象:
connect()返回ETIMEDOUT或ECONNREFUSED -
嵌入式特有原因:
-
硬件看门狗导致握手超时(需调整TCP重传时间)
-
低功耗设备间歇性休眠导致ACK丢失
-
-
调试方法:
# 查看TCP重传参数
sysctl net.ipv4.tcp_retries2
# 实时抓包(需交叉编译tcpdump)
adb shell tcpdump -i eth0 -w /tmp/cap.pcap
②端口占用冲突
-
嵌入式系统常见场景:
-
多个服务绑定相同端口(如Web服务与自定义服务冲突)
-
快速重启时TIME_WAIT状态阻塞
-
-
解决方案:
// 设置SO_REUSEADDR选项
int opt = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
6.2. 数据传输异常
①零窗口问题(Zero Window)
-
嵌入式特有表现:
-
内存不足导致接收窗口收缩
-
高优先级任务阻塞网络线程
-
-
优化策略:
# 调整内核接收缓冲区
sysctl -w net.ipv4.tcp_rmem="4096 87380 6291456"
# 使用内存池管理网络缓冲区
②小包传输效率低
-
典型场景:传感器频繁发送小数据包
-
优化方案:
-
启用TCP_CORK/Nagle算法平衡延迟与吞吐量
-
应用层协议合并(如每100ms打包发送一次)
-
int flag = 1;
setsockopt(sock, IPPROTO_TCP, TCP_CORK, &flag, sizeof(flag)); // 开始积压
// ...多次send...
flag = 0;
setsockopt(sock, IPPROTO_TCP, TCP_CORK, &flag, sizeof(flag)); // 立即发送
6.3. 协议栈配置陷阱
①ARP缓存不足
-
问题表现:局域网设备频繁掉线
-
嵌入式优化:
# 调整ARP缓存表大小
sysctl -w net.ipv4.neigh.default.gc_thresh3=2048
# 禁用ARP过滤(针对特定网卡)
echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_filter
②MTU不匹配
-
典型案例:VPN隧道中的TCP MSS问题
-
诊断命令:
ifconfig eth0 mtu 1492 # 针对PPPoE场景
ip route show | grep mtu
6.4. 资源限制问题
①文件描述符耗尽
-
嵌入式环境限制:
-
默认ulimit -n可能仅1024
-
EPIPE错误频发
-
-
系统级优化:
# 修改limits.conf
echo "* soft nofile 8192" >> /etc/security/limits.conf
# 内核级调整
sysctl -w fs.file-max=65535
②内存碎片化
-
表现特征:长期运行后分配大块内存失败
-
解决方案:
-
使用SLAB分配器替代默认malloc
-
预分配内存池
-
#define BUF_POOL_SIZE 1024*1024
static uint8_t mem_pool[BUF_POOL_SIZE] __attribute__((aligned(64)));
6.5. 实时性调试技巧
①网络延迟测量
# 使用内核时间戳(需CONFIG_NETWORK_PHY_TIMESTAMPING)
ethtool -T eth0
# 应用层精确计时
clock_gettime(CLOCK_MONOTONIC, &ts);
②中断风暴诊断
-
现象:系统吞吐量骤降
-
排查工具:
cat /proc/interrupts | grep eth0
# 调整NAPI权重
echo 50 > /sys/class/net/eth0/queues/rx-0/rps_weight
6.6. 特殊场景优化
①低功耗网络唤醒
-
实现策略:
-
使用Wake-on-LAN(WOL)模式
-
配置PHY寄存器实现魔术包唤醒
-
// 设置PHY唤醒功能
phy_write(phydev, MII_BMCR, BMCR_ISOLATE | BMCR_PDOWN);
②安全加固要点
-
嵌入式特有风险:
-
未更新的CVE漏洞(如BlueBorne)
-
硬件调试接口暴露
-
-
加固措施:
# 禁用危险协议
iptables -A INPUT -p tcp --dport 23 -j DROP # 禁用Telnet
# 启用TCP加固选项
sysctl -w net.ipv4.tcp_syncookies=1
综上所述,TCP/IP协议栈在嵌入式Linux网络编程中扮演着至关重要的角色。通过深入了解TCP/IP协议栈的结构、功能、配置与调试方法以及应用场景,开发者可以更好地实现嵌入式设备的网络通信和数据传输功能。
七、参考资料
- 《TCP/IP 详解 卷 1:协议》
- 作者:[美] Richard A. Deal,[美] Douglas Comer 著,范建华、胥光辉等译。
- 简介:这本书是 TCP/IP 领域的经典之作,对 TCP/IP 协议栈的各层协议进行了深入剖析,包括网络接口层、网络层、传输层和应用层。书中不仅详细讲解了协议的工作原理,还配有大量的示例和实际网络中的抓包分析。无论是初学者还是有一定经验的开发者,都能从这本书中获得对 TCP/IP 协议栈的全面而深入的认识。
- 《UNIX 网络编程 卷 1:套接字联网 API》
- 作者:[美] W. Richard Stevens 著,杨继张、尤晋元等译。
- 简介:主要围绕 UNIX 环境下的网络编程展开,对使用套接字进行网络通信的各种 API 进行了详细介绍。书中包含丰富的代码示例,涵盖了 TCP 和 UDP 编程的各个方面,如套接字的创建、连接、数据传输等。
- 《Linux 内核设计与实现(第 3 版)》
- 作者:[美] Robert Love 著,陈莉君、康华等译。
- 简介:虽然不是专门针对 TCP/IP 协议栈,但其中有关于 Linux 内核网络子系统的章节,详细介绍了 Linux 内核中 TCP/IP 协议栈的实现原理和机制。
- Linux 内核网络子系统文档
- 简介:Linux 内核官方提供了关于网络子系统的详细文档,其中包含了 TCP/IP 协议栈在 Linux 内核中的实现原理、配置选项和编程接口等信息。这些文档可以帮助开发者深入了解 Linux 内核中网络协议栈的工作机制,以及如何对其进行定制和优化。文档可以在 Linux 内核源码树的
Documentation/networking目录下找到。
- 简介:Linux 内核官方提供了关于网络子系统的详细文档,其中包含了 TCP/IP 协议栈在 Linux 内核中的实现原理、配置选项和编程接口等信息。这些文档可以帮助开发者深入了解 Linux 内核中网络协议栈的工作机制,以及如何对其进行定制和优化。文档可以在 Linux 内核源码树的
- Beej's Guide to Network Programming
- 网址:Beej's Guide to Network Programming
- 简介:这是一个免费的在线网络编程教程,以清晰易懂的语言介绍了网络编程的基础知识和使用套接字进行 TCP/IP 编程的详细步骤。教程中包含大量的代码示例和解释,适合初学者快速入门网络编程。同时,对于有一定经验的开发者,也可以从中获取一些实用的编程技巧和思路。
- MDN Web Docs - HTTP
- 网址:HTTP | MDN
- 简介:虽然 HTTP 是应用层协议,但它是基于 TCP/IP 协议栈实现的重要应用之一。MDN 的 HTTP 文档详细介绍了 HTTP 协议的工作原理、请求和响应格式、状态码等内容。对于嵌入式 Linux 应用开发中涉及到 Web 服务或网络应用的开发者来说,学习 HTTP 协议是非常有必要的,而 MDN 的 HTTP 文档是一个很好的学习资源。
- lwIP(Lightweight IP)
- 网址:lwIP - A Lightweight TCP/IP stack - Summary [Savannah]
- 简介:lwIP 是一个轻量级的 TCP/IP 协议栈,专门为嵌入式系统设计。它具有代码量小、占用资源少的特点,非常适合在资源受限的嵌入式设备中使用。。
- Linux 内核源码
- 网址:The Linux Kernel Archives
- 简介:Linux 内核源码是学习 TCP/IP 协议栈在实际操作系统中实现的最佳资源之一。在 Linux 内核源码中,包含了完整的 TCP/IP 协议栈实现代码,通过阅读和分析这些代码,开发者可以深入了解协议栈的各个模块是如何协同工作的,以及如何在 Linux 内核中进行网络编程和优化。可以使用 Git 工具从 Linux 内核官方仓库下载最新的内核源码进行学习。
相关文章:
【嵌入式Linux应用开发基础】网络编程(1):TCP/IP协议栈
目录 一、TCP/IP协议栈分层与核心协议 2.1. 应用层 2.2. 传输层 2.3. 网络层 2.4. 链路层 二、嵌入式Socket编程关键步骤 2.1. TCP服务端流程 2.2. TCP客户端流程 三、TCP/IP协议栈的配置与调试 四、嵌入式场景优化策略 4.1. 资源管理 4.2. 性能调优 4.3. 健壮性保…...
OpenCalib(七)二维码检测
1. 前言 前面无论是对棋盘格标靶还是圆形标靶检测时,一般都需要将所有标靶全部检出,这样才能根据标靶的分布确定每个标靶的相对位置。举个例子,对于5x5分布的棋盘格,如果我们只检出4x4排列的棋盘格,那么它在整个棋盘格中可能存在4种分布,此时我们无法确认检测结果中各个棋…...
DeepSeek在初创企业、教育和数字营销领域应用思考
如今,像 DeepSeek 这样的人工智能工具正在改变企业的运营方式,优化流程并显著提高生产力。通过重复任务的自动化、大量数据的分析以及内容创建效率的提高,组织正在寻找新的竞争和卓越方式。本文介绍了 DeepSeek 如何用于提高三个关键领域的生…...
BUUCTF--[极客大挑战 2019]RCE ME
目录 URL编码取反绕过 异或绕过 异或的代码 flag 借助蚁剑中的插件进行绕过 利用动态链接库 编写恶意c语言代码 进行编译 然后再写一个php文件 将这两个文件上传到/var/tmp下 运行payload 直接看代码 <?php error_reporting(0); if(isset($_GET[code])){$code$_G…...
【K8s】专题十六(2):Kubernetes 包管理工具之 Helm 使用
本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全…...
使用anaconda装虚拟环境
1. 下载好anaconda, 可以参考 笔记 2. 创建虚拟环境 # 创建新环境 # (Conda 允许创建任意 Python 版本的环境,与基础环境无关。) # 需要指定python版本,不指定就没有 conda create -n xxx_env python3.8 3. 查看有哪些anacond…...
玩转Docker | 使用Docker搭建Vikunja任务管理应用
玩转Docker | 使用Docker搭建Vikunja任务管理应用 前言一、 Vikunja介绍Vikunja 简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Vikunja服务下载镜像创建容器检查容器状态检查服务端口安全设置四、访问Vikunja应用注册账号访问Vikunja主页五…...
VMware NSX 4.X Professional V2(2V0-41.24)题库2
What are two supported host switch modes? (Choose two.) A. Overlay Datapath B. Secure Datapath C. Standard Datapath D. Enhanced Datapath E. DPDK Datapath 答案:CD 完整题库见文章底部! Which is an advantage of an L2 VPN in an NSX 4.x …...
算法-数据结构-图的构建(邻接矩阵表示)
数据定义 //邻接矩阵表示图 //1.无向图是对称的 //2.有权的把a,到b 对应的位置换成权的值/*** 无向图* A B* A 0 1* B 1 0*/ /*** 有向图* A B* A 0 1* B 0 0*/import java.util.ArrayList; import java.util.List;/*** 带权图* A B* A 0 1* B 0 0*/ p…...
ARCGIS国土超级工具集1.4更新说明
ARCGIS国土超级工具集V1.4版本,功能已增加至54 个。本次更新在V1.3版本的基础上,新增了“拓扑问题修复工具”并同时调整了数据处理工具栏的布局、工具操作界面的选择图层下拉框新增可选择位于图层组内的要素图层功能、数据保存路径新增了可选择数据库内的…...
Ollama+Cherrystudio+beg-m3+Deepseek R1 32b部署本地私人知识库(2025年2月win11版)
之前综合网络各方面信息得到的配置表: 在信息爆炸的时代,数据安全和个性化需求愈发凸显。搭建本地私人知识库,不仅能确保数据的安全性,还能根据个人需求进行个性化定制,实现知识的高效管理和利用。随着技术的不断发展…...
Websocket、WebRTC在大模型中的应用
文章目录 WebSocket简介Websocket流程图使用场景代码示例 WebRTC简介WebRTC(Web Real-Time Communication)流程图使用场景代码示例 大模型应用,使得 WebSocket, WebRTC 的使用频率越来越高,WebSocket提供了文本输入与大…...
C++ 顺序容器--vector容器详解
元素保存在连续的内存空间中。插入元素或者删除元素通常需要线性时间,当这些操作在尾部执行时,实际运行时间为摊还常量时间。随机访问某个元素的复杂度为常量时间。 1 vector 概述 vector 在<vector>头文件中被定义为一个带有2个类型参数的类模板…...
用Golang与WebAssembly构建高性能Web应用:详解`syscall/js`包
用Golang与WebAssembly构建高性能Web应用:详解syscall/js包 引言为什么选择syscall/js包?适用场景 syscall/js包概述syscall/js包的核心概念1. js.Global2. js.Value3. js.Func4. js.Null 和 js.Undefined syscall/js包在WebAssembly中的位置 环境配置与…...
LeetCode刷题 -- 23. 合并 K 个升序链表
小根堆排序与合并 K 个有序链表的实现 1. 介绍 本技术文档详细介绍了如何使用 小根堆(Min Heap) 实现 K 个有序链表的合并。 核心思想是: 使用 小根堆 维护当前最小的节点。每次取出堆顶元素(最小值)加入合并链表&…...
【每日八股】计算机网络篇(一):概述
OSI 的 7 层网络模型? OSI(Open Systems Interconnection,开放互联系统)是由国际标准化组织(ISO)提出的一种网络通信模型。 自上而下,OSI 可以被分为七层,分别是:应用层…...
业务应用和大数据平台的数据流向
概述 业务应用与大数据平台之间的交互是实现数据驱动决策和实时业务处理的关键环节。其交互方式多样,协议选择取决于数据流向、实时性要求及技术架构。一句话总结,数据流向可以是从业务应用写入大数据平台,也可以是大数据平台回写至业务应用…...
C语言中的文件和文件操作
文件操作 一、文件的打开和关闭二、文件的顺序读写fgetc和fputcfgets和fputsfscanf和fprintfsscanf和sprintffread和fwrite 三、文件的随机读写1.fseek2.ftell3.rewind 四、补充1.文件读取结束的判定2.文件缓冲区 一、文件的打开和关闭 流和标准流 流:想象为流淌着…...
插入排序:一种简单而直观的排序算法
大家好!今天我们来聊聊一个简单却非常经典的排序算法——插入排序(Insertion Sort)。在所有的排序算法中,插入排序是最直观的一个。 一、插入排序的基本思想 插入排序的核心思想是:将一个待排序的元素,插…...
2.24力扣每日一题--设计有序流
1656. 设计有序流 - 力扣(LeetCode) (设计一个可以存储n个字符串的数据结构,其中满足存在一个”指针“,用以展示当下是否还存在空间存储,每个字符串有自己ID需要存储) 数据结构: 字…...
本地Oracle数据库复制数据到Apache Hive的Linux服务器集群的分步流程
我们已经有安装Apache Hive的Linux服务器集群,它可以连接到一个Oracle RDS数据库,需要在该Linux服务器上安装配置sqoop,然后将Oracle RDS数据库中所有的表数据复制到Hive。 为了将本地Oracle数据库中的所有表数据复制到Apache Hive Linux服务…...
【R语言】ggplot2绘图常用操作
目录 坐标轴以及标签的相关主题 图例调整 字体类型设置 颜色相关 ggplot2如何添加带箭头的坐标轴? 标题相关主题调整 修改点图中点的大小 如何使得点的大小根据变量取值的大小来改变? 柱状图和条形图 坐标轴以及标签的相关主题 theme( # 增大X…...
正态分布的奇妙性质:为什么奇数阶中心矩(odd central moments)为零?
正态分布的奇妙性质:为什么奇数阶矩为零? 正态分布(Normal Distribution)是统计学中最常见的分布之一,它的钟形曲线几乎无处不在,从身高体重到测量误差,都能看到它的影子。除了均值和方差这两个…...
架构——Nginx功能、职责、原理、配置示例、应用场景
以下是关于 Nginx 的功能、职责、原理、配置示例、应用场景及其高性能原因的详细说明: 一、Nginx 的核心功能 1. 静态资源服务 功能:直接返回静态文件(如 HTML、CSS、JS、图片、视频等)。配置示例:server {listen 80…...
涉密载体管控系统革新:RFID技术引领,信息安全新境界
行业背景 文件载体管控系统DW-S402是用于对各种SM载体进行有效管理的智能柜(智能管理系统),实现对载体的智能化、规范化、标准化管理,广泛应用于保密、机要单位以及企事业单位等有载体保管需求的行业。 随着信息化技术发展&…...
基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现
大家好,今天要和大家聊的是一款基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现。项目源码以及部署相关事宜请联系我,文末附上联系方式。 项目简介 基于 SpringBoot 的 “电影交流平台小程序” 系统设计与实现的主要使用者分为 管理员 和…...
【Rust中级教程】2.9. API设计原则之显然性(obvious) :文档与类型系统、语义化类型、使用“零大小”类型
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 2.9.1. 文档与类型系统 用户可能不会完全理解API的所有规则和限制。所以你写的API应该让你…...
git branch
文章目录 1.简介2.格式3.选项4.示例参考文献 1.简介 git branch 用于管理分支,包括查看、创建、删除、重命名和关联。 git branch 是 Git 版本控制系统中用于管理分支的命令。分支是 Git 的核心功能之一,允许开发者在同一个代码库中并行开发不同的功能…...
【网络编程】广播和组播
数据包发送方式只有一个接受方,称为单播。如果同时发给局域网中的所有主机,称为广播。只有用户数据报(使用UDP协议)套接字才能广播: 广播地址以192.168.1.0 (255.255.255.0) 网段为例,最大的主机地址192.168.1.255代表该网段的广…...
运维Crontab面试题及参考答案
Crontab 文件的六个域分别是什么?顺序如何? Crontab 文件用于设置定时执行任务,其六个域及顺序从左到右依次为:分钟(Minute)、小时(Hour)、日期(Day of month)…...
