zoukankan      html  css  js  c++  java
  • Network | sk_buff

    sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。
        这个结构被不同的网络层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会添加一个L3的头部。添加头部比在不同层之间拷贝数据的效率更高。
        由于在缓冲区的头部添加数据意味着要修改指向缓冲区的指针,这是个复杂的操作,所以内核提供了一个函数skb_reserve。
        协议栈中的每一层在往下一层传递缓冲区前,第一件事就是调用skb_reserve在缓冲区的头部给协议头预留一定的空间。
        skb_reserve同样被设备驱动使用来对齐接收到包的包头。如果缓冲区向上层协议传递,旧的协议层的头部信息就没什么用了。例如,L2的头部只有在网络驱动处理L2的协议时有用,L3是不会关心它的信息的。但是,内核并没有把L2的头部从缓冲区中删除,而是把有效荷载的指针指向L3的头部,这样做,可以节省CPU时间。

  • 相关阅读:
    卸载软件
    SourceTree安装
    lombok安装及使用
    Element学习使用
    Vue基础学习
    SpringBoot与Swagger整合
    @Valid 数据校验 + 自定义全局异常信息
    Spring Boot 运行原理
    JNDI学习总结(一):JNDI到底是什么?
    Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理
  • 原文地址:https://www.cnblogs.com/linyx/p/3861881.html
Copyright © 2011-2022 走看看