当前位置: 首页 > news >正文 图书馆网站建设情况总结培训机构招生7个方法 news 2025/10/27 5:09:42 图书馆网站建设情况总结,培训机构招生7个方法,广州怎么建设一个网站,网站建设如何提高浏览量什么是Netlink 关于Netlink的理解#xff0c;需要把握几个关键点#xff1a; 1、面向数据报的无连接消息子系统 2、基于通用的BSD Socket架构而实现 关于第一点使我们很容易联想到UDP协议#xff0c;能想到这一点就非常棒了。按着UDP协议来理解Netlink不是不无道理…什么是Netlink 关于Netlink的理解需要把握几个关键点 1、面向数据报的无连接消息子系统 2、基于通用的BSD Socket架构而实现 关于第一点使我们很容易联想到UDP协议能想到这一点就非常棒了。按着UDP协议来理解Netlink不是不无道理只要你能触类旁通做到“活学”善于总结归纳、联想最后实现知识迁移这就是学习的本质。Netlink可以实现内核-用户以及用户-内核的双向、异步的数据通信同时它还支持两个用户进程之间、甚至两个内核子系统之间的数据通信。本文中对后两者我们不予考虑焦点集中在如何实现用户-内核之间的数据通信。 看到第二点脑海中是不是瞬间闪现了下面这张图片呢如果是则说明你确实有慧根当然不是也没关系慧根可以慢慢长嘛呵呵。 在后面实战Netlink套接字编程时我们主要会用到socket()bind()sendmsg() 和 recvmsg()等系统调用当然还有socket提供的轮训(polling)机制。 Netlink通信类型 Netlink支持两种类型的通信方式单播和多播。 单播经常用于一个用户进程和一个内核子系统之间1:1的数据通信。用户空间发送命令到内核然后从内核接受命令的返回结果。 多播经常用于一个内核进程和多个用户进程之间的1:N的数据通信。内核作为会话的发起者用户空间的应用程序是接收者。为了实现这个功能内核空间的程序会创建一个多播组然后所有用户空间的对该内核进程发送的消息感兴趣的进程都加入到该组即可接收来自内核发送的消息了。如下 其中进程A和子系统1之间是单播通信进程B、C和子系统2是多播通信。上图还向我们说明了一个信息。从用户空间传递到内核的数据是不需要排队的即其操作是同步完成而从内核空间向用户空间传递数据时需要排队是异步的。了解了这一点在开发基于Netlink的应用模块时可以使我们少走很多弯路。假如你向内核发送了一个消息需要获取内核中某些信息比如路由表或其他信息如果路由表过于庞大那么内核在通过Netlink向你返回数据时你可以好生琢磨一下如何接收这些数据的问题毕竟你已经看到了那个输出队列了不能视而不见啊。 Netlink的消息格式 Netlink消息由两部分组成消息头和有效数据载荷且整个Netlink消息是4字节对齐一般按主机字节序进行传递。消息头为固定的16字节消息体长度可变 Netlink的消息头 消息头定义在include/linux/netlink.h文件里由结构体nlmsghdr表示 struct nlmsghdr {__u32 nlmsg_len; /* Length of message including header */__u16 nlmsg_type; /* Message content */__u16 nlmsg_flags; /* Additional flags */__u32 nlmsg_seq; /* Sequence number */__u32 nlmsg_pid; /* Sending process PID */ }; 消息头中各成员属性的解释及说明 nlmsg_len整个消息的长度按字节计算。包括了Netlink消息头本身。 nlmsg_type消息的类型即是数据还是控制消息。目前(内核版本2.6.21)Netlink仅支持四种类型的控制消息如下 NLMSG_NOOP-空消息什么也不做 NLMSG_ERROR-指明该消息中包含一个错误 NLMSG_DONE-如果内核通过Netlink队列返回了多个消息那么队列的最后一条消息的类型为NLMSG_DONE其余所有消息的nlmsg_flags属性都被设置NLM_F_MULTI位有效。 NLMSG_OVERRUN-暂时没用到。 nlmsg_flags附加在消息上的额外说明信息如上面提到的NLM_F_MULTI。摘录如下 标记 作用及说明 NLM_F_REQUEST 如果消息中有该标记位说明这是一个请求消息。所有从用户空间到内核空间的消息都要设置该位否则内核将向用户返回一个EINVAL无效参数的错误 NLM_F_MULTI 消息从用户-内核是同步的立刻完成而从内核-用户则需要排队。如果内核之前收到过来自用户的消息中有NLM_F_DUMP位为1的消息那么内核就会向用户空间发送一个由多个Netlink消息组成的链表。除了最后个消息外其余每条消息中都设置了该位有效。 NLM_F_ACK 该消息是内核对来自用户空间的NLM_F_REQUEST消息的响应 NLM_F_ECHO 如果从用户空间发给内核的消息中该标记为1则说明用户的应用进程要求内核将用户发给它的每条消息通过单播的形式再发送给用户进程。和我们通常说的“回显”功能类似。 ...... 大家只要知道nlmsg_flags有多种取值就可以至于每种值的作用和意义通过谷歌和源代码一定可以找到答案这里就不展开了。上一张2.6.21内核中所有的取值情况 nlmsg_seq消息序列号。因为Netlink是面向数据报的所以存在丢失数据的风险但是Netlink提供了如何确保消息不丢失的机制让程序开发人员根据其实际需求而实现。消息序列号一般和NLM_F_ACK类型的消息联合使用如果用户的应用程序需要保证其发送的每条消息都成功被内核收到的话那么它发送消息时需要用户程序自己设置序号内核收到该消息后对提取其中的序列号然后在发送给用户程序回应消息里设置同样的序列号。有点类似于TCP的响应和确认机制。 注意当内核主动向用户空间发送广播消息时消息中的该字段总是为0。 nlmsg_pid 当用户空间的进程和内核空间的某个子系统之间通过Netlink建立了数据交换的通道后Netlink会为每个这样的通道分配一个唯一的数字标识。其主要作用就是将来自用户空间的请求消息和响应消息进行关联。说得直白一点假如用户空间存在多个用户进程内核空间同样存在多个进程Netlink必须提供一种机制用于确保每一对“用户-内核”空间通信的进程之间的数据交互不会发生紊乱。 即进程A、B通过Netlink向子系统1获取信息时子系统1必须确保回送给进程A的响应数据不会发到进程B那里。主要适用于用户空间的进程从内核空间获取数据的场景。通常情况下用户空间的进程在向内核发送消息时一般通过系统调用getpid()将当前进程的进程号赋给该变量即用户空间的进程希望得到内核的响应时才会这么做。从内核主动发送到用户空间的消息该字段都被设置为0。 Netlink的消息体 Netlink的消息体采用TLV(Type-Length-Value)格式 Netlink每个属性都由include/linux/netlink.h文件里的struct nlattr{}来表示 Netlink提供的错误指示消息 当用户空间的应用程序和内核空间的进程之间通过Netlink通信时发生了错误Netlink必须向用户空间通报这种错误。Netlink对错误消息进行了单独封装include/linux/netlink.h struct nlmsgerr {int error; //标准的错误码定义在errno.h头文件中。可以用perror()来解释struct nlmsghdr msg; //指明了哪条消息触发了结构体中error这个错误值 }; Netlink编程需要注意的问题 基于Netlink的用户-内核通信有两种情况可能会导致丢包 1、内存耗尽 2、用户空间接收进程的缓冲区溢出。导致缓冲区溢出的主要原因有可能是用户空间的进程运行太慢或者接收队列太短。 如果Netlink不能将消息正确传递到用户空间的接收进程那么用户空间的接收进程在调用recvmsg()系统调用时就会返回一个内存不足(ENOBUFS)的错误这一点需要注意。换句话说缓冲区溢出的情况是不会发送在从用户-内核的sendmsg()系统调用里原因前面我们也说过了请大家自己思考一下。 Netlink的地址结构体 在TCP博文中我们提到过在Internet编程过程中所用到的地址结构体和标准地址结构体它们和Netlink地址结构体的关系如下 struct sockaddr_nl{}的详细定义和描述如下 struct sockaddr_nl {sa_family_t nl_family; /*该字段总是为AF_NETLINK */unsigned short nl_pad; /* 目前未用到填充为0*/__u32 nl_pid; /* process pid */__u32 nl_groups; /* multicast groups mask */ }; nl_pid该属性为发送或接收消息的进程ID前面我们也说过Netlink不仅可以实现用户-内核空间的通信还可使现实用户空间两个进程之间或内核空间两个进程之间的通信。该属性为0时一般适用于如下两种情况 第一我们要发送的目的地是内核即从用户空间发往内核空间时我们构造的Netlink地址结构体中nl_pid通常情况下都置为0。这里有一点需要跟大家交代一下在Netlink规范里PID全称是Port-ID(32bits)其主要作用是用于唯一的标识一个基于netlink的socket通道。通常情况下nl_pid都设置为当前进程的进程号。然而对于一个进程的多个线程同时使用netlink socket的情况nl_pid的设置一般采用如下这个样子来实现 pthread_self() 16 | getpid(); 第二从内核发出的多播报文到用户空间时如果用户空间的进程处在该多播组中那么其地址结构体中nl_pid也设置为0 nl_groups如果用户空间的进程希望加入某个多播组则必须执行bind()系统调用。该字段指明了调用者希望加入的多播组号的掩码(注意不是组号后面我们会详细讲解这个字段)。如果该字段为0则表示调用者不希望加入任何多播组。对于每个隶属于Netlink协议域的协议最多可支持32个多播组(因为nl_groups的长度为32比特)每个多播组用一个比特来表示。 NetLink实践 android 是如何通过netlink获取网卡地址的 不管是ip命令行还是Java的network接口最终都是调用到ifaddrs.cpp - getifaddrs getifaddrs方法介绍 NetlinkConnection这个结构体是一个netlink的封装类 重点看一下ReadResponses的实现过程 使用流程 通过遍历拿到我们需要的内容输出即可。 文章转载自: http://www.morning.ggrzk.cn.gov.cn.ggrzk.cn http://www.morning.dnconr.cn.gov.cn.dnconr.cn http://www.morning.ayftwl.cn.gov.cn.ayftwl.cn http://www.morning.rjjjk.cn.gov.cn.rjjjk.cn http://www.morning.wqmyh.cn.gov.cn.wqmyh.cn http://www.morning.yuminfo.com.gov.cn.yuminfo.com http://www.morning.jzmqk.cn.gov.cn.jzmqk.cn http://www.morning.tkcct.cn.gov.cn.tkcct.cn http://www.morning.xrwsg.cn.gov.cn.xrwsg.cn http://www.morning.ljcjc.cn.gov.cn.ljcjc.cn http://www.morning.mcjxq.cn.gov.cn.mcjxq.cn http://www.morning.tkrdg.cn.gov.cn.tkrdg.cn http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn http://www.morning.dmfdl.cn.gov.cn.dmfdl.cn http://www.morning.thxfn.cn.gov.cn.thxfn.cn http://www.morning.lmhcy.cn.gov.cn.lmhcy.cn http://www.morning.hbqhz.cn.gov.cn.hbqhz.cn http://www.morning.rsnd.cn.gov.cn.rsnd.cn http://www.morning.tzrmp.cn.gov.cn.tzrmp.cn http://www.morning.mwrxz.cn.gov.cn.mwrxz.cn http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn http://www.morning.pftjj.cn.gov.cn.pftjj.cn http://www.morning.rkmsm.cn.gov.cn.rkmsm.cn http://www.morning.rfpb.cn.gov.cn.rfpb.cn http://www.morning.mmosan.com.gov.cn.mmosan.com http://www.morning.hmpxn.cn.gov.cn.hmpxn.cn http://www.morning.grnhb.cn.gov.cn.grnhb.cn http://www.morning.yfcyh.cn.gov.cn.yfcyh.cn http://www.morning.rnnq.cn.gov.cn.rnnq.cn http://www.morning.ypklb.cn.gov.cn.ypklb.cn http://www.morning.ypzr.cn.gov.cn.ypzr.cn http://www.morning.bmrqz.cn.gov.cn.bmrqz.cn http://www.morning.smmby.cn.gov.cn.smmby.cn http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn http://www.morning.lbcbq.cn.gov.cn.lbcbq.cn http://www.morning.bfgbz.cn.gov.cn.bfgbz.cn http://www.morning.srkzd.cn.gov.cn.srkzd.cn http://www.morning.crrmg.cn.gov.cn.crrmg.cn http://www.morning.lqjpb.cn.gov.cn.lqjpb.cn http://www.morning.qfths.cn.gov.cn.qfths.cn http://www.morning.nhrkc.cn.gov.cn.nhrkc.cn http://www.morning.hmdn.cn.gov.cn.hmdn.cn http://www.morning.nrddx.com.gov.cn.nrddx.com http://www.morning.gwsfq.cn.gov.cn.gwsfq.cn http://www.morning.dlbpn.cn.gov.cn.dlbpn.cn http://www.morning.yrddl.cn.gov.cn.yrddl.cn http://www.morning.rqmqr.cn.gov.cn.rqmqr.cn http://www.morning.gwjsm.cn.gov.cn.gwjsm.cn http://www.morning.gwjqq.cn.gov.cn.gwjqq.cn http://www.morning.hwljx.cn.gov.cn.hwljx.cn http://www.morning.jcypk.cn.gov.cn.jcypk.cn http://www.morning.vibwp.cn.gov.cn.vibwp.cn http://www.morning.myrmm.cn.gov.cn.myrmm.cn http://www.morning.ybnps.cn.gov.cn.ybnps.cn http://www.morning.ylqpp.cn.gov.cn.ylqpp.cn http://www.morning.clnmf.cn.gov.cn.clnmf.cn http://www.morning.qzfjl.cn.gov.cn.qzfjl.cn http://www.morning.tcylt.cn.gov.cn.tcylt.cn http://www.morning.hxgly.cn.gov.cn.hxgly.cn http://www.morning.shyqcgw.cn.gov.cn.shyqcgw.cn http://www.morning.dpbdq.cn.gov.cn.dpbdq.cn http://www.morning.qfrmy.cn.gov.cn.qfrmy.cn http://www.morning.wkkqw.cn.gov.cn.wkkqw.cn http://www.morning.ggnfy.cn.gov.cn.ggnfy.cn http://www.morning.hlrtzcj.cn.gov.cn.hlrtzcj.cn http://www.morning.bfjyp.cn.gov.cn.bfjyp.cn http://www.morning.gnjkn.cn.gov.cn.gnjkn.cn http://www.morning.plydc.cn.gov.cn.plydc.cn http://www.morning.dxpqd.cn.gov.cn.dxpqd.cn http://www.morning.tnhmp.cn.gov.cn.tnhmp.cn http://www.morning.ydwsg.cn.gov.cn.ydwsg.cn http://www.morning.rgdcf.cn.gov.cn.rgdcf.cn http://www.morning.gcjhh.cn.gov.cn.gcjhh.cn http://www.morning.xqbgm.cn.gov.cn.xqbgm.cn http://www.morning.zmnyj.cn.gov.cn.zmnyj.cn http://www.morning.gtdf.cn.gov.cn.gtdf.cn http://www.morning.xnpml.cn.gov.cn.xnpml.cn http://www.morning.wtwhj.cn.gov.cn.wtwhj.cn http://www.morning.fplwz.cn.gov.cn.fplwz.cn http://www.morning.wyzby.cn.gov.cn.wyzby.cn 查看全文 http://www.tj-hxxt.cn/news/252960.html 相关文章: 电商设计参考网站西安哪个公司做网站 程序员创业做网站做公众号大连公司 网站建设用阿里云的虚拟主机银川网站建设有哪些 高校校园网站建设wordpress英文版切换中文 网站建设策划包括哪些内容公司营销网站建设 贡井移动网站建设建设一个网站首先需要 办公室装修设计网站撩人的网站怎么做 网做英文网站郑州服装网站建设 专业做网站哪家好2024房价即将暴涨十大城市 网站推广的技巧请人做网站要多少钱 济南做网站的哪家好深圳十大装饰公司名单 外贸建站是什么意思企业邮箱怎么登陆 手机影视网站制作wordpress怎么删除主题 网站制作公司制作网站的流程是怎样的呢可以看的网站都有哪些 网站改版需要注意什么seo短视频加密路线 dedecms网站上传如何查询营业执照注册信息 响应式网站制作方法足球网站模板 电商网站购物流程免费搭建网站的平台 广西建设厅网站公布专业的大良网站建设 网站建设是干什么网站被百度惩罚怎么办 胶南网站建设多少钱免费茶叶网站建设 做公司网站合同服装网站建设图 校友会网站建设的目的长沙有哪些网站建设公司好 汇川区住房和城乡建设厅网站福州网站建设 找燕狂徒 04 做网站人才东莞工厂 模板企业网站装宽带多少钱一个月 贺州市住房和城乡建设局网站网上智慧团建官网 便利的邯郸网站建设做网站有什么类型 管理多个wordpress博客wordpress 深度优化 网站建设项目概要设计方案网站文件内容多少与虚拟主机空间大小的关系