当前位置:主页 > 知识百科 > 生活百科 > 正文

linux网络协议栈分几层

发布时间:2021-11-17 23:56 来源:互联网 点击:0
网络在现如今离我们的生活很近,所以了解相关的网络协议栈很重要。linux网络协议栈分几层?了解网络安全常识,首先就要了解计算机网络安全有哪些基本注意事项,下面漂亮女人街小编就带您认识一下吧。(一)驱动程序层本文中以一个realtek8139系列网卡作为例子,因为其驱动只有一个c文件(/drivers/net/8139too.c),比较容易分析。读者

linux网络协议栈分几层

网络在现如今离我们的生活很近,所以了解相关的网络协议栈很重要。linux网络协议栈分几层?了解网络安全常识,首先就要了解计算机网络安全有哪些基本注意事项,下面漂亮女人街小编就带您认识一下吧。

(一)驱动程序层

本文中以一个realtek8139系列网卡作为例子,因为其驱动只有一个c文件(/drivers/net/8139too.c),比较容易分析。读者也可以参考e1000网卡的另一篇文章(点这里)。内核版本基于2.6.11。

驱动程序加载/注册主要包括以下的步骤:

(a)将设备驱动程序(pci_driver)添加到内核驱动程序链表中;

(b)调用每个驱动中的probe函数(其中重要一步就是初始化net_device对象)。

pci_module_init是一个宏定义,实际上就等于pci_register_driver函数。(在2.6.30内核版本中,直接变成了returnpci_register_driver(*rtl8139_pci_driver) )。pci_register_driver函数的注释说明了它的作用:register a new pci driver.Adds the driver structure to the list ofregistered drivers。

(二)设备无关层/网络协议层/协议无关接口socket层

系统初始化的过程中会调用do_basic_setup函数进行一些初始化操作。其中2.6.11内核中就直接包括了driver_init()驱动程序初始化,以及sock_init函数初始化socket层。然后do_initcalls()函数调用一组前缀为__init类型(这个宏就表示为需要在系统初始化时执行)的函数。与网络相关的以__init宏标记的函数有:net_dev_init初始化设备无关层;inet_init初始化网络协议层。

(a)net_dev_init(在文件/net/core/dev.c中):设备操作层

staticint __init net_dev_init(void)

{

if (dev_proc_init())

if(netdev_sysfs_init())

INIT_LIST_HEAD(*ptype_all);

for (i = 0; i <16; i )

INIT_LIST_HEAD(*ptype_base[i]);

for (i = 0; i

INIT_HLIST_HEAD(*dev_name_head[i]);

for (i = 0; i

INIT_HLIST_HEAD(*dev_index_head[i]);

//Initialise the packet receive queues.

for (i = 0; i < NR_CPUS; i ) {

struct softnet_data*queue;

queue =*per_cpu(softnet_data, i);

skb_queue_head_init(*queue->input_pkt_queue);

queue->throttle = 0;

queue->cng_level = 0;

queue->avg_blog = 10; /* arbitrary non-zero */

queue->completion_queue = NULL;

INIT_LIST_HEAD(*queue->poll_list);

set_bit(__LINK_STATE_START,*queue->backlog_dev.state);

queue->backlog_dev.weight =weight_p;

queue->backlog_dev.poll =process_backlog;

atomic_set(*queue->backlog_dev.refcnt, 1);

}

open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);

open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);

}

这个函数所做的具体工作主要包括:初始化softnet_data这个数据结构(每个CPU都有一个这样的队列,表示要交给此CPU处理的数据包);注册网络相关软中断(参见我关于软中断的文章,点这里)。

(b)inet_init(在文件/net/ipv4/af_inet.c中):网络层

由于各种网络协议是按照协议族(protocolfamily,PF或者address family,AF)为单位组织起来的。我们在这里仅以Internet协议族(AF_INET或者PF_INET,在内核中这二者是等价的)为例。

有时候这一层又被称为INETsocket层(对应的数据结构为struct sock),请注意与BSD socket层区别(对应数据结构为struct socket):BSD socket层提供一组统一的接口,与协议无关;但具体到网络层就必须与协议相关了,因此操作也会有一些不同。

关于网络安全小知识,漂亮女人街小编为您介绍和普及这么多了,看完上面的介绍,您对“linux网络协议栈分几层”这个问题了解多少了呢?想了解更多关于网络安全的其他相关知识,敬请关注我们网站上的详细内容介绍。


"小编整理不易,小礼物走一走,万分感谢!"
赞赏
漂亮女人街

真诚赞赏,手留余香

相关资讯

瓦斯罐用完怎么处理
瓦斯就是气体的意思,有时专指煤层中的可燃气体叫瓦斯。瓦斯是一般民众对气体燃料的通称,可分为液化石油气与天然气、煤气三大类。开发商说的瓦斯可能专指煤层气,应该和天然气没有大的区别。那么瓦斯罐用完怎么处理
白叶枯病的防治方法有哪些
白叶枯病主要发生于叶片及叶鞘上。初起在叶缘产生半透明黄色小斑,以后沿叶缘一侧或两侧或沿中脉发展成波纹状的黄绿或灰绿色病斑;病部与健部分界线明显;数日后病斑转为灰白色,并向内卷曲,远望一片枯槁色,那叶枯
机动车违反禁止标线指示扣几分
依据道路交通安全违法行为的严重程度,一次扣分的分值为:12分、6分、3分、2分、1分五种。而各种扣分行为都有详细内容。下面我为大家介绍一下机动车违反禁止标线指示扣几分。机动车违反禁止标线指示主要指以下违法
枣树常见的病害有哪些
无论是侵染性病害,还是非侵染性病害,受害部位都首先发生一系列的生理活动的改变,以力求适应这种变化了的环境,通常包括提高呼吸强度、改变代谢途径、产生抗性物质,以及局部细胞的自杀反应或过敏反应以限制病原物
女性中风前兆怎样预防
虽然大多数的中风发生在65岁以上的人群中,但约有10%的中风病例发生在45岁以下的人群之中,而且女性的发病风险要高于男性。那么女性中风前兆怎样预防?预防中风的重要性已经引起国内外医学界的重视,医学家们正从各个
老年人脑溢血的症状
随着年龄的一个增长,人身体免疫力也是随之降低。特别是到了中老年,也是各种疾病的一个高发期。就拿这个急性脑溢血来说吧,一般情况下,在医学上脑出血又称脑溢血,是指非外伤性脑实质内的自发性出血,病因多样,绝