热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux内核skb处理流程图,Linux内核VLAN学习笔记

四、发送流程对于L5来说,一般的网络通讯,首先是建立一个socket结构,sockfdsocket(AF_INET,SOCK_RAW,pr

四、发送流程

对于L5来说,一般的网络通讯,首先是建立一个socket结构,sockfd = socket(AF_INET,SOCK_RAW,protocol->p_proto)执行系统调用sys_socketcall(/net/socket.c),接着sendto函数调用系统调用sys_sendto(/net/socket.c),处理完用户空间和内核空间的转换后,进入L3。

L3层一方面包装好sk_buffer,一方面调用ip_route_output_flow路由表查询函数,找到net_device网卡设备,内核中的vlan模块就是注册了这样一个模拟的网络设备(eth0.y)。

对于L2来说, L3协议栈通过dev_queue_xmit(dev.c)调用dev->hard_start_xmit(),关联到了具体的网络设备处理函数,从而调用了vlan_dev_hard_start_xmit(vlan_dev.c),在这里生成vlan tag头,并压入sk_buffer中,然后找到真实的网络设备(real_dev),再次调用dev_queue_xmit,进入真实的网卡驱动L1层。

对于L1来说,hard_start_xmit就是fcc_enet.c的fcc_enet_start_xmit函数,将L2层送来的skb压入队列中,修改寄存器,将报文发送出去。注意到这时候的skb已经是一个很完整的结构了,可以很容易对skb做各种判断和处理,此次的按协议划分vlan最后就是在这里完成。虽然到现在也觉得在这里修改实在是太不优雅,太不易扩展了,但不得不承认,因为skb的完整,在这里修改的工作量是最小的,而且不需要对Linux内核网络框架有什么深入的了解就可以着手修改。

发送流程图

a6efb3d465477924a9b97d8013afabbe.png0b1331709591d260c1c78e86d0c51c18.png



推荐阅读
  • 1、概念共享内存:共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同malloc()函数向不同进程返回了指向同一个 ... [详细]
  • MQ的使用
    安装环境:linuxredhatactivemq版本:5.8.01.从http:activemq.apache.orgdownload.html地址下载 ... [详细]
  • handler机制_Handler机制与原理
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Handler机制与原理相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 手机49kbps转换比特率256Kpbs{‘corpus_no’:‘7045177033217452815’,‘err_msg’:‘success.’,‘err_no’:0,‘re ... [详细]
  • log4cpp概述与使用实例一、log4cpp概述Log4cpp是一个开源的C类库,它提供了C程序中使用日志和跟踪调试的功能,它的优点如下࿱ ... [详细]
  • 前端微服务二
    为了解决庞大的一整块后端服务带来的变更与扩展方面的限制,出现了微服务架构(Microservices):微服务是面向服务架构(SOA)的一种变体,把应用程序设计成一系列松耦合的细粒 ... [详细]
  • python中的分布式爬虫框架有哪些
    这篇文章主要介绍了python中的分布式爬虫框架有哪些,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带 ... [详细]
  • 互联网世界 9 种基本的商业模式
    互联网世界9种基本的商业模式一个商业模式是运行一个公司的方法;通过该模式的运作,一个公司能维持自己的生存,就是说,能有收益。商业模式意味着一个公司是如何通过在价值链中定位自己,从而获 ... [详细]
  • 1.研究背景及其意义互联网从发展到至今,已经深入到人们的日常生活中,并且不论老人还是小孩,多少都会接触到互联网。在这个越来越信息化的社会& ... [详细]
  • 为什么需要有应用层缓冲区?muduo网络库使用IO复用,并且文件描述符使用非阻塞模式,如果使用阻塞模式那么read、write就会阻塞在 ... [详细]
  • JavaScript语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。因此在Node.js中&#x ... [详细]
  • 序本文主要研究一下nacosServiceManager的removeInstanceServiceManagernacos-1.1.3namingsrcmainjavacomal ... [详细]
  • 系统不能本文来源gaodai$ma#com搞$代*码*网连接数据库,关键要看两个数据:1、数据库系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设 ... [详细]
  • IIS6.0提供一个重新设计的万维网发布服务(WorldWideWebPublishingService)架构,可以帮助你为你的网站构建更好的性能、可靠、可扩展性(scalabil ... [详细]
  • 简介时间同步是指以中心控制系统的标准时钟作为基准使各分布系统和终设备的时钟与中心控制系统时钟进行同步的过程。随着5G和工业5.0的到来,网络终端设备和网络业务的飞速增 ... [详细]
author-avatar
caozhizhao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有