widebright的个人空间

爱我所爱,记录编程和生活历程

PF_PACKET  往是专门用于抓包的,往系统网络层注册一个协议。然后所有的往外发的包和进来的包都会调到http://lxr.linux.no/linux+v3.4/net/packet/af_packet.c 这个文件里面 的packet_rcv() 函数,

其中 outgoing方向(出去的包)会在 dev_queue_xmit_nit里面遍历 ptype_all 链表进行所有网络协议处理的时候调用到packet_rcv 。

incoming  方向(从外面其他机器进来的包会在 netif_receive_skb 函数里面同样办法遍历 ptype_all进行处理的时候调用到packet_rcv 。

在之前的一篇文章

http://gmd20.blog.163.com/blog/static/16843923201011194136744/

里面有分析过了,但太久了又忘了出去方向的包是怎么又被发到PF_PACKET  的来了。唉!看看下面的吧,希望以后不会再次忘记了。

int dev_queue_xmit(struct sk_buff *skb)

2213                        if (!netif_tx_queue_stopped(txq)) {

2214                                rc = dev_hard_start_xmit(skb, dev, txq);

--------------------------------------

1938

    真TM的艺术。

    ————————

    硕大的身体、稀疏的羽毛、简单的线条、神态憨憨看似涂鸦之作的画,竟然能以25万元被拍走?2010年12月,《给大家欣赏一幅名画<鸟>售价25万人民币》的帖子惊现天涯论坛,引来网友口水无数,但仔细一看,该画作者竟然是著名当代艺术家叶永青。

    叶永青作品画中小脑袋、圆眼睛、胖肚子的“丑鸟”招来不少网友非议:“那鸟怀孕了么?实在欣赏不来。”“是在忽悠,还是嘲笑我们不懂艺术?”

    虽然多数网友都在调侃,但艺术刊物《顶层》杂志在其官方微博上对这幅作品做出了“严肃”解读:“看似随意甚至幼稚可笑的线条,其实是由一个个极小的三角形墨块精致组合而成。叶永青想表达的就是对陈旧绘画方式的嘲讽,他如此精心费力画出的东西,看起来却如此简单潦草。”

    对该作品拍出25万元,叶永青表示不清楚,简单描述后,叶永青对此的形容就是“天真一点,稚拙一点”的作品。

    叶永青说:“艺术家运用专业的方法,甚至像老太太绣花一样地去创作,但画出来的作品却像是用两分钟就能完成,这种复杂与容易的反差,让作品体现一种荒唐感。”

    对网友的质疑,叶永青并不担心:“画画不是要让别人明白,而是要面对自己的内心。”

    ————————

    这是怎样一

    -------------------------------------------------------

    Google Protocol Buffers 

    https://developers.google.com/protocol-buffers/docs/overview

    支持C/C++ python  java这些吧,压缩,序列号等。说是最初也是用于RPC的代码自动生成的。用的人比较多。

    --------------------------------------------------------

    The Apache Thrift       

    http://thrift.apache.org

    http://thrift.apache.org/docs/

    说是Facebook 开发的,支持的几乎所有的语言接口。 便于实现 rpc相关的服务吧。网上有的人好像很多啊

    --------------------------------------------------------

    XML   JSON

    XML这个都不用说了,JSON主要用于简单的网页上面的数据传输吧。javascript里面用起来比较方便。

    ------------------------------------------------------

    ASN.1

    电信协议很多用的这个来描述啊。 

    像 Erlang 这种重视电信应用的都有一个

    “ASN.1 compiler for Erlang”

    http://www.erlang.org/documentation/doc-5.2/lib/asn1-1.4/doc/html/asn1_ug.html

    网上应该也很多人写的 ASN.1到 XML  、 IDL 等的转换,有的很多asn.1  compile 可以自动生成 c /c++的代码。 比如

    http://www.research.ibm.com/trl/projects/xml/xss4j/docs/axt-readme.html

    http://lionet.info/asn1c/asn1c.cgi

    GNU Lib

    C++的模板的代码,最好全部放在一个头文件里面,不然编译的时候,可能看到链接器找不到模板函数的错误。简单的就是模板的实例化的时候找不到定义。书中给出了好几种解决办法

    除了 全部放在头文件的 这种“Inclusion Model”办法之外,还有利用C++关键字 export的办法,其他几种办法自己去看书吧。上次一个同事碰到这个问题了,我当时也不知道。不知道以后会不会忘记了,记录一下便于查找方便。

    C++ Templates - The Complete Guide.pdf 一书的

    Chapter 6. Using Templates in Practice  一章对这种现象进行了详细解释。

    With these conventions in mind, a common error about which beginning template programmers complain is illustrated

    by the following (erroneous) little program. As usual for "ordinary code," we declare the template in a header file:

    // basics/myfirst.hpp

    #ifndef MYFIRST_HPP

    #define MYFIRST_HPP

    // declaration of template

    template <typename T>

    void print_typeof (T const&);

    #endif // MYFIRST_HPP

    print_typeof() is the declaration of a simpl

    文章图片

    原文地址: 

    ZeroMq的架构文档

    http://www.aosabook.org/en/zeromq.html

    强烈建议读一下这个吧

    在线源码:

    https://github.com/zeromq/libzmq/tree/master/src

    1.

    i_engine.hpp  -> stream_engine.hpp

    有多种继承自i_engine的类

    调用socket api的代码就是在这里面。

    2.

    socket_base.hpp  ->  xsub_socket_t 

    session_base.hpp  -> xsub_session_t   (xsub.hpp   pair.hpp  push.hpp  pull.hpp ...)

    有多种继承自 socket_base 和session_base的 类。

    不同socket模式,主要是根据 pipe的对应关系区分,比如一对多,多对一的pipe对的维护和管理等。

    发送和接受时的群发的实现的就在这些相关的类里面实现。必须管理多个pipe对等。

    什么负载均衡啊也是在这一层里面做的。具体可以看上面实现类里面的对 lb.hpp dist.hpp  trie.hpp等类的实现,看看是怎么管理多个pipe对的。

    3.

    yqueue.hpp ->     ypipe.hpp ->     pipe.hpp 

    不同的对象通过 pipe&nbs

    The Architecture of Open Source Applications 的第二卷出来的了,又多了很多开源软件架构的文章。 

    自己去 http://www.aosabook.org/en/index.html 上面看吧。

    其中nginx 架构的,写的还是非常好的,对不了解这个东西的人来说,什么进程模型啊,关键结构啊,缓存,配置相关的,处理一个request的流程等。  模块的合作的。看了这种整体架构的文章,再去看代码就事半功倍了!!!

    http://www.aosabook.org/en/nginx.html

    另有 ZeroMQ 的 

    http://www.aosabook.org/en/zeromq.html

    其他的GIT的,等也有值得一看吧。

    图片

    靠,相册都没了。

    我觉得百度的人很sb啊,要做微博就做微博嘛,又想把空间的人气强制转过去。

    人家 腾讯,网易、新浪、搜狐也做了微博了,也没说把久博客的砍掉啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

                  有点像政府强制把农民赶到新农村里面去!跟gd把农民从旧中国骗到新中国一样!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    用来解决经典问题“persistently full buffer problem,” “bufferbloat”(http://queue.acm.org/detail.cfm?id=2071893)

    AQM (active queue management) 方面的一个算法?

    腾讯的文章 “浅谈过载保护”

    http://djt.qq.com/article-156-1.html

    Some queuing theory: throughput, latency and bandwidth

    http://www.rabbitmq.com/blog/2012/05/11/some-queuing-theory-throughput-latency-and-bandwidth/

    都对这种现象进行了解释, “浅谈过载保护”最后提到的一个解决办法

    -----------------------------------------

     对于“每个系统要有能力发现哪些是有效的请求,哪些是雪球无效的请求”,这里推荐一种方案:在该系统每个机器上新增一个进程:interface进程。Interface进程能够快速的从socket缓冲区中取得请求,打上当前时间戳,压入channel。业务处理进程从channel中获取请求和该请求的时间戳,如果发现时间戳早于当前时间减去超时时间(即已经超时,处理也没有意义),就直接丢弃该请求,或者应答一个失败报文。

    ------------------------------------------

    其实跟这个 CoDel (Controlled Delay Management) 算法有类似的思想吧。

    acm queue的原文在这里。

    Controlling Queue Delay

     by 

    http://www.chromi.org/archives/11043 

     Syntaxtic! 这个还好,比google里面另外一个语法高亮插件看起来好像好看一点。 进入“扩展选项”里面还可以设置代码风格和 字体大小。对我这种很喜欢用浏览器直接看代码的人来说,还真是不错!

    另外那个什么 Code Highlight 就不用装了,感觉暂时用不上,提供自己选择网页上的代码块还差不多。如果人家网页都有code标签一般也会自己提供高亮的了吧。