linux2.6内核网卡数据流过程

在Linux 2.6内核中,网络数据从网线到应用程序经历三次复制:首先,网卡通过DMA将电信号存入环形FIFO;然后,数据被复制到TCP/IP协议栈的sk_buff结构;最后,应用程序通过recv()函数将数据从协议栈缓冲区复制到用户进程缓冲区。sk_buff设计巧妙,是关键的中间层。
摘要由CSDN通过智能技术生成
linux 2.6版的内核,网络数据从网线到应用程序需经过3次copy,分别是:
1. 网线上的电信号经过网卡驱DMA到网卡的环形FIFO里;
2. 从网卡的接收环形FIFO里copy到TCP/IP协议栈的sk_buff里;
3. 应用程序的socket调用recv()函数从协议栈的buffer里copy到用户进程的buffer里。

步骤中的2, sk_buff结构体设计得非常精巧:
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值