当前位置:首页>Linux>嵌入式Linux网络编程 知识点大纲

嵌入式Linux网络编程 知识点大纲

  • 2026-09-17 15:03:00
嵌入式Linux网络编程 知识点大纲

一、网络基础与协议栈

  • OSI七层模型与TCP/IP四层模型
    • 各层功能、协议、数据单元
  • 数据链路层
    • MAC地址、ARP/RARP协议、MTU
  • 网络层
    • IP协议(IPv4/IPv6)、ICMP(Ping与差错报告)、IGMP(组播管理)
    • IP分片与重组、TTL
    • 路由基础(路由表、网关)
  • 传输层
    • TCP:可靠传输、流量控制、拥塞控制、三次握手/四次挥手、状态机
    • UDP:无连接、高效、广播/多播基础
    • 端口号与知名服务对应关系
  • 应用层
    • HTTP/HTTPS、MQTT、CoAP、FTP、DNS、NTP/SNTP 等协议概念

二、Socket编程基础

  • 套接字类型
    • SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)、SOCK_RAW(原始套接字)
  • 核心API及流程
    • socket() → bind() → listen() → accept() → send()/recv() → close()
    • UDP:sendto() / recvfrom(),以及connect()在UDP中的作用
    • shutdown() 与 close() 的区别(半关闭)
  • 地址结构
    • 通用地址 struct sockaddr,IPv4专用 sockaddr_in,IPv6专用 sockaddr_in6
    • Unix Domain Socket地址 sockaddr_un
  • 字节序与IP转换
    • 主机序/网络序转换:htonl, htons, ntohl, ntohs
    • IP地址转换:inet_pton() / inet_ntop()(替代过时的inet_addr/inet_ntoa)
  • 错误处理
    • 基于errno,常见错误码(EAGAIN、EINTR、ECONNRESET等)

三、TCP编程深度解析

  • TCP生命周期
    • 连接建立(三次握手)与终止(四次挥手)的状态迁移
    • TCP状态分析(netstat/ss观察)
  • 基本服务端/客户端模型
    • 多进程:fork(),僵尸进程处理(SIGCHLD/waitpid),进程池
    • 多线程:pthread_create,线程安全,线程池,线程分离状态
    • I/O多路复用:非阻塞I/O + select/poll/epoll
    • 迭代服务器(单进程循环)
    • 并发服务器设计模式:
  • TCP粘包/拆包问题
    • 产生原因(字节流无边界)
    • 解决方案:定长包、分隔符(如 \r\n)、长度前缀(包头+包体)
  • 心跳与保活
    • 应用层心跳设计
    • TCP KeepAlive(SO_KEEPALIVE, TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNT)
  • 优雅关闭与半关闭
    • shutdown() 的使用场景
    • SO_LINGER 选项、TIME_WAIT 状态影响与重用
  • 性能选项
    • Nagle算法与 TCP_NODELAY
    • 延迟确认、滑动窗口、拥塞窗口基础

四、UDP编程与广播/组播

  • UDP基本通信
    • 服务器/客户端模型(无需连接)
    • connect() 的妙用(绑定对端,接收异步错误)
  • 广播
    • 子网广播地址计算,SO_BROADCAST 选项
    • 限制与适用场景
  • 组播(多播)
    • 组播地址范围(D类),IGMP协议作用
    • 加入/离开组播组:IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP
    • 发送组播:IP_MULTICAST_TTL 与 IP_MULTICAST_IF
  • 可靠UDP简介
    • RUDP、KCP、UDT等概念(嵌入式领域可能涉及)

五、高级I/O与I/O多路复用

  • 五种I/O模型
    • 阻塞、非阻塞、多路复用、信号驱动、异步I/O(概念对比)
  • 非阻塞I/O
    • fcntl() 设置 O_NONBLOCK
    • 配合循环读取(处理 EAGAIN)
  • select
    • 描述符集合操作(FD_ZERO, FD_SET等)
    • 缺陷:描述符数量限制(FD_SETSIZE)、每次复制、O(n)轮询
  • poll
    • struct pollfd 使用,消除数量限制,但仍为线性扫描
  • epoll(Linux核心多路复用机制)
    • API:epoll_create1, epoll_ctl, epoll_wait
    • 水平触发(LT)与边缘触发(ET)的区别、非阻塞配合
    • EPOLLONESHOT 保证线程安全
    • 惊群效应及解决(SO_REUSEPORT、EPOLLEXCLUSIVE)
  • 信号驱动I/O
    • SIGIO、fcntl 设置 F_SETOWN/F_SETSIG
    • 实际应用较少,了解原理
  • 异步I/O
    • POSIX AIO(aio_read/aio_write)与Linux原生AIO
    • 优缺点,通常使用Reactor模式替代

六、Unix域套接字与进程间通信

  • Unix Domain Socket (AF_UNIX)
    • 流式 SOCK_STREAM 与数据报 SOCK_DGRAM
    • 绑定路径文件(需关注权限与清理)及抽象命名空间
  • socketpair
    • 创建双向通信管道,常用于父子进程/线程间
  • 与其他IPC对比
    • 管道/FIFO、消息队列、共享内存,根据场景选择

七、协议无关编程与域名解析

  • 地址信息结构 getaddrinfo
    • 替代 gethostbyname,支持IPv4/IPv6双栈
    • addrinfo 提示参数(ai_family, ai_socktype, ai_flags等)
  • 名称到地址转换流程
    • getaddrinfo → socket → bind/connect
  • DNS解析原理简述
    • /etc/resolv.conf, 解析顺序(/etc/hosts, DNS, mDNS)
  • 异步DNS
    • getaddrinfo_a(glibc),libcares 等,避免网络解析阻塞

八、套接字选项与系统调优

  • 通用选项 (SOL_SOCKET)
    • SO_REUSEADDR(快速重启,TIME_WAIT重用)
    • SO_KEEPALIVE(TCP保活开关)
    • SO_LINGER(控制close行为)
    • SO_RCVBUF/SO_SNDBUF(缓冲区大小)
    • SO_RCVTIMEO/SO_SNDTIMEO(超时)
  • TCP层选项 (IPPROTO_TCP)
    • TCP_NODELAY, TCP_CORK
    • TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNT
    • TCP_DEFER_ACCEPT(推迟accept直到收到数据)
  • IP层选项 (IPPROTO_IP)
    • IP_ADD_MEMBERSHIP, IP_MULTICAST_TTL
    • IP_TOS, IP_TTL
  • 内核参数调优
    • /proc/sys/net/ipv4/:tcp_tw_reuse, tcp_keepalive_time, tcp_max_syn_backlog 等

九、原始套接字与底层编程

  • 原始套接字创建
    • socket(AF_INET, SOCK_RAW, protocol),需root权限或CAP_NET_RAW
    • 构造IP头部(IP_HDRINCL选项)
  • 典型应用
    • Ping(ICMP Echo Request/Reply)实现
    • 简单端口扫描或SYN扫描
    • 抓包基础(绕过协议栈,配合PF_PACKET或libpcap)
  • 数据链路层访问
    • AF_PACKET 套接字,混杂模式

十、并发模型与高性能服务器设计

  • 常见并发模型
    • Reactor(事件驱动,如基于epoll的单线程循环)
    • Proactor(异步I/O驱动,使用较少)
    • 半同步/半反应堆(业务线程池 + epoll监听)
    • 多进程/多线程 Event Loop + SO_REUSEPORT(内核级负载均衡)
  • 零拷贝技术
    • sendfile()、splice() 用于文件传输
    • mmap 与网络IO结合,减少内核用户态拷贝
  • 资源管理
    • 连接池、内存池、环形缓冲区
    • 定时器管理(时间轮、红黑树)

十一、嵌入式Linux网络编程特色

  • 资源受限挑战
    • 内存约束(栈大小、堆碎片)、CPU性能
    • 文件描述符上限管理(ulimit、sysconf)
  • 轻量级TCP/IP协议栈
    • lwIP、uIP 在嵌入式Linux中的替代或裸机使用(API差异了解)
    • 协议栈裁剪(内核编译配置,去掉不必要的网络模块)
  • 常用物联网协议库
    • MQTT客户端:Eclipse Paho、mosquitto库
    • CoAP:libcoap
    • HTTP(S):libcurl、tinyHTTP,TLS库(OpenSSL、wolfSSL、mbedTLS)
  • 网络时间同步
    • SNTP客户端实现,时间同步对TLS证书验证的重要性
  • 系统网络配置管理
    • 使用接口(如Netlink)获取/设置IP、路由(rtnetlink)
    • DHCP客户端(udhcpc)集成,WiFi配网与WPA supplicant交互
  • 交叉编译
    • 工具链选择,动态/静态链接注意事项(libc依赖、体积)

十二、网络安全基础

  • SSL/TLS编程
    • OpenSSL/mbedTLS API流程:SSL_CTX_new, SSL_new, SSL_set_fd, SSL_connect/accept, SSL_read/SSL_write
    • 证书验证、双向认证(CA、客户端证书)
  • 常见威胁防护
    • SYN Cookie、防端口扫描、DoS基础缓解
  • 安全编码
    • 缓冲区溢出、输入校验、权限最小化(chroot、capabilities)

十三、调试、分析与工具

  • 抓包分析
    • tcpdump 常用过滤表达式,旋转抓包
    • Wireshark 协议分析技巧(Follow Stream、统计)
  • 状态与连接查看
    • netstat, ss, /proc/net/tcp
    • lsof -i 查看进程占用端口
  • 系统调用与日志
    • strace -e network 追踪网络相关系统调用
    • gdb 调试多线程/多进程服务器
  • 性能测试
    • iperf3, netperf 测试带宽
    • 压测工具(ab, wrk, 自写客户端)
  • 内核调试
    • /proc/sys/net/ 调整参数,查看丢包统计 (netstat -s)

十四、推荐实战项目

  • 基于epoll的简易HTTP服务器(支持静态文件、长连接)
  • MQTT数据采集客户端(集成MQTT库、SSL双向认证)
  • 支持断线重连的心跳守护进程
  • 使用原始套接字实现Ping/Traceroute工具
  • 简易网络聊天室(多线程 + epoll + 协议解析)

最新文章

随机文章