C语言必背100代码系列-第九篇:网络编程进阶
C语言必背100代码系列文章目录
核心内容:Hello World、条件判断、循环结构、数组基础、函数定义等。
核心内容:数组排序、字符串处理、多维数组、字符匹配、内存拷贝等。
核心内容:指针运算、动态内存分配、结构体指针、函数指针、内存泄漏检测等。
核心内容:阶乘递归、汉诺塔、分治算法、回溯算法、动态规划基础等。
核心内容:链表、栈、队列、二叉树、哈希表、图的基本操作。
核心内容:文本文件读写、二进制文件操作、日志管理、CSV/JSON解析等。
核心内容:快速幂、素数测试、进制转换、矩阵运算、蒙特卡洛模拟等。
核心内容:进程控制、线程同步、信号处理、套接字编程、系统调用封装等。
核心内容:TCP/UDP通信、HTTP请求、WebSocket、SSL/TLS加密、网络抓包等。
第九篇:网络编程进阶
想驾驭万级并发?本文深度拆解网络编程十大核心场景——用C语言穿透TCP协议栈,从TIME_WAIT陷阱到epoll百万连接优化,从原始套接字抓包到Protobuf跨平台通信,既有DNS缓存穿透、连接池复用的性能绝技,更有WebSocket/RFC6455协议栈实现!无论你是攻坚高并发服务的架构师,还是备战大厂系统设计岗的开发者,这里都有让你突破瓶颈的实战密码:SHA1握手密钥生成、边缘触发模式调优、BBR拥塞控制彩蛋……用3万字代码+协议解析图,构建你的网络编程知识星图!
1. TCP状态迁移(ss命令分析)
bash
# 实时监控TCP连接状态 |
|
ss -s --tcp |
- 典型输出:
TCP: 1234 (estab 567, closed 432, orphaned 3, ...) |
- 状态说明:
- ESTABLISHED:活跃连接。
- TIME_WAIT:主动关闭方等待2MSL。
- CLOSE_WAIT:被动方未调用close()。
- 应用场景:排查连接泄漏、端口耗尽问题。
- 工具替代:
- netstat -s(统计信息)。
- Wireshark(协议级分析)。
2. 原始套接字(抓包实现)
c
#include <stdio.h> |
|
#include <string.h> |
|
#include <unistd.h> |
|
#include <arpa/inet.h> |
|
#include <sys/socket.h> |
|
#define ETH_P_ALL 0x0003 |
|
int main() { |
|
int sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); |
|
if (sock == -1) { |
|
perror("socket failed"); |
|
return 1; |
|
} |
|
unsigned char buffer[65536]; |
|
while (1) { |
|
ssize_t len = recv(sock, buffer, sizeof(buffer), 0); |
|
if (len < 0) { |
|
perror("recv failed"); |
|
continue; |
|
} |
|
struct ethhdr *eth = (struct ethhdr *)buffer; |
|
printf("Src MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", |
|
eth->h_source[0], eth->h_source[1], eth->h_source[2], |
|
eth->h_source[3], eth->h_source[4], eth->h_source[5]); |
|
// 解析IP/TCP/UDP头(需偏移以太网头长度) |
|