嵌入式Linux网络编程 知识点大纲
嵌入式Linux网络编程 知识点大纲
一、网络基础与协议栈
- IP协议(IPv4/IPv6)、ICMP(Ping与差错报告)、IGMP(组播管理)
- TCP:可靠传输、流量控制、拥塞控制、三次握手/四次挥手、状态机
- HTTP/HTTPS、MQTT、CoAP、FTP、DNS、NTP/SNTP 等协议概念
二、Socket编程基础
SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)、SOCK_RAW(原始套接字)
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
- 主机序/网络序转换:
htonl, htons, ntohl, ntohs - IP地址转换:
inet_pton() / inet_ntop()(替代过时的inet_addr/inet_ntoa)
- 基于
errno,常见错误码(EAGAIN、EINTR、ECONNRESET等)
三、TCP编程深度解析
- 多进程:
fork(),僵尸进程处理(SIGCHLD/waitpid),进程池 - 多线程:
pthread_create,线程安全,线程池,线程分离状态 - I/O多路复用:非阻塞I/O +
select/poll/epoll
- 解决方案:定长包、分隔符(如
\r\n)、长度前缀(包头+包体)
- TCP KeepAlive(
SO_KEEPALIVE, TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNT)
SO_LINGER 选项、TIME_WAIT 状态影响与重用
四、UDP编程与广播/组播
connect() 的妙用(绑定对端,接收异步错误)
- 加入/离开组播组:
IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP - 发送组播:
IP_MULTICAST_TTL 与 IP_MULTICAST_IF
- RUDP、KCP、UDT等概念(嵌入式领域可能涉及)
五、高级I/O与I/O多路复用
- 阻塞、非阻塞、多路复用、信号驱动、异步I/O(概念对比)
- 描述符集合操作(
FD_ZERO, FD_SET等) - 缺陷:描述符数量限制(
FD_SETSIZE)、每次复制、O(n)轮询
struct pollfd 使用,消除数量限制,但仍为线性扫描
- API:
epoll_create1, epoll_ctl, epoll_wait - 水平触发(LT)与边缘触发(ET)的区别、非阻塞配合
- 惊群效应及解决(
SO_REUSEPORT、EPOLLEXCLUSIVE)
SIGIO、fcntl 设置 F_SETOWN/F_SETSIG
- POSIX AIO(
aio_read/aio_write)与Linux原生AIO
六、Unix域套接字与进程间通信
- Unix Domain Socket (AF_UNIX)
- 流式
SOCK_STREAM 与数据报 SOCK_DGRAM
七、协议无关编程与域名解析
- 替代
gethostbyname,支持IPv4/IPv6双栈 addrinfo 提示参数(ai_family, ai_socktype, ai_flags等)
getaddrinfo → socket → bind/connect
/etc/resolv.conf, 解析顺序(/etc/hosts, DNS, mDNS)
getaddrinfo_a(glibc),libcares 等,避免网络解析阻塞
八、套接字选项与系统调优
SO_REUSEADDR(快速重启,TIME_WAIT重用)SO_RCVBUF/SO_SNDBUF(缓冲区大小)SO_RCVTIMEO/SO_SNDTIMEO(超时)
TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNTTCP_DEFER_ACCEPT(推迟accept直到收到数据)
IP_ADD_MEMBERSHIP, IP_MULTICAST_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
- Ping(ICMP Echo Request/Reply)实现
- 抓包基础(绕过协议栈,配合
PF_PACKET或libpcap)
十、并发模型与高性能服务器设计
- Reactor(事件驱动,如基于epoll的单线程循环)
- 半同步/半反应堆(业务线程池 + epoll监听)
- 多进程/多线程 Event Loop +
SO_REUSEPORT(内核级负载均衡)
sendfile()、splice() 用于文件传输
十一、嵌入式Linux网络编程特色
- 文件描述符上限管理(
ulimit、sysconf)
- lwIP、uIP 在嵌入式Linux中的替代或裸机使用(API差异了解)
- MQTT客户端:Eclipse Paho、mosquitto库
- HTTP(S):libcurl、tinyHTTP,TLS库(OpenSSL、wolfSSL、mbedTLS)
- SNTP客户端实现,时间同步对TLS证书验证的重要性
- 使用接口(如Netlink)获取/设置IP、路由(
rtnetlink) - DHCP客户端(udhcpc)集成,WiFi配网与WPA supplicant交互
- 工具链选择,动态/静态链接注意事项(libc依赖、体积)
十二、网络安全基础
- OpenSSL/mbedTLS API流程:
SSL_CTX_new, SSL_new, SSL_set_fd, SSL_connect/accept, SSL_read/SSL_write
- 缓冲区溢出、输入校验、权限最小化(
chroot、capabilities)
十三、调试、分析与工具
- Wireshark 协议分析技巧(Follow Stream、统计)
netstat, ss, /proc/net/tcp
strace -e network 追踪网络相关系统调用
/proc/sys/net/ 调整参数,查看丢包统计 (netstat -s)
十四、推荐实战项目
- 基于epoll的简易HTTP服务器(支持静态文件、长连接)
- MQTT数据采集客户端(集成MQTT库、SSL双向认证)
- 使用原始套接字实现Ping/Traceroute工具
- 简易网络聊天室(多线程 + epoll + 协议解析)
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。