前端实现双代号网络图,linux网络代码结构

 2023-09-25 阅读 25 评论 0

摘要:linux网络代码结构:四层 1、设备驱动,Linux/drivers/net/3c501.c 2、网络核心,linux/net/core/dev.c,struct net_device, 3、网络协议族,包括tcp/ip、ipx等协议,linux/net/ipv4 4、网络接口socket层,linux/net/sock

linux网络代码结构:四层
1、设备驱动,Linux/drivers/net/3c501.c
2、网络核心,linux/net/core/dev.c,struct net_device,
3、网络协议族,包括tcp/ip、ipx等协议,linux/net/ipv4
4、网络接口socket层,linux/net/socket.c

1->2: 第一层调用netif_rx()(net/core/dev.c 1214行) 通过*dev_base指向的设备链,把数据传递给第二层。

3->2: 网络接口核心层通过dev_queue_xmit()(net/core/dev.c,line975)这个函数向上层提供统一的发送接口,也就是说无论是IP,还是ARP协议,通过这个函数把要发送的数据传递给这一层,想发送数据的时候就调用这个函数就可以了。前端实现双代号网络图、dev_queue_xmit()做的工作最后会落实到dev->hard_start_xmit(),而dev->hard_start_xmit()会调用实际的驱动程序来完成发送的任务。例如上面的例子中,调用dev->hard_start_xmit()实际就是调用了el_start_xmit()。什么是LINUX。 
2->3: IP协议接收数据是通过ip_rcv()函数的,而ARP协议是通过arp_rcv()的,网络接口核心层只要通过这个数组就可以把数据交给上层函数了。 
 通过dev_add_pack注册第三层接收消息的函数。
3->4: 在linux/net/ipv4/protocol.c,往数组inet_protos[MAX_INET_PROTOS] 里面添加协议是通过函数inet_add_protocol()实现的,删除协议是通过 inet_del_protocol()实现的。在linux/net/ipv4/protocol.c的上部,我们可以看到其它协议层的处理函数是tcp_v4_rcv(), igmp_rcv(), udp_rcv(), icmp_rcv()。
4->3: ???

IP层处理方式:
1、本地
2、转发
3、不可能

dev_add_pack()是注册ip层内容的,及网络核心层在什么条件下把消息发给网络协议层;
inet_add_protocol()是注册传输层的,包含tcp、icmp、igmp;
socket_register()是注册socket的。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/94613.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息