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时间。

Network | sk_buff

时间: 2024-08-07 12:30:47

Network | sk_buff的相关文章

Linux Network Related Drive

catalog 1. 通过套接字通信 2. 网络实现的分层模型 3. 网络命名空间 4. 套接字缓冲区 5. 网络访问层 6. 网络层 7. 传输层 8. 应用层 9. 内核内部的网络通信 1. 通过套接字通信 Linux的设计思想是"万物皆文件",从开发者角度来看,外部设备在Linux(以及UNIX)中都是普通文件,通过正常的读写操作即可访问,但是对于网卡而言,情况会复杂的多.网卡的运作方式与普通的块设备和字符设备完全不同,一个原因是(所有层次)使用了许多不同的通信协议,为建立连接需

Docker实践(4)—network namespace与veth pair

network namespace 创建network namespace # ip netns add blue # ip netns list blue 添加网口到namespace 先创建veth # ip link add veth0 type veth peer name veth1 在当前namespace可以看到veth0和veth1 # ip link list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue stat

struct sk_buff 结构

struct sk_buff可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用.    这个结构被网络的不同层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变. L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会添加一个L3的头部.添加头部比在不同层之间拷贝数据的效率更高.由于在缓冲区的头部 添加数据意味着要修改指向缓冲区的指针,这是个复杂

virtio network驱动分析

本文以virtio网络驱动为例,分析virtio驱动是如何处理网络IO的,驱动的定义如下 static struct virtio_device_id id_table[] = { { VIRTIO_ID_NET, VIRTIO_DEV_ANY_ID }, { 0 }, }; static unsigned int features[] = { VIRTIO_NET_F_CSUM, VIRTIO_NET_F_GUEST_CSUM, VIRTIO_NET_F_GSO, VIRTIO_NET_F_M

sk_buff结构

sk_buff结构用来描述已接收或者待发送的数据报文信息:skb在不同网络协议层之间传递,可被用于不同网络协议,如二层的mac或其他链路层协议,三层的ip,四层的tcp或者udp协议,其中某些成员变量会在该结构从一层向另一层传递时发生改变,从上层向下层传递需要添加首部,从下层向上层传递需要移除首部: 1 /* skb头结构 */ 2 struct sk_buff_head { 3 /* These two members must be first. */ 4 /* 通过下面两个指针成员将skb

Bulk network packet transmission

Bulk network packet transmission 译文作者:zhangzl2013 译文链接:http://www.cnblogs.com/zhangzl2013/p/bulk_network_packet_transmission.html 原文作者:Jonathan Corbet 原文链接:Bulk network packet transmission 本文有可能会被转载,从而导致评论留言的碎片化.想参与评论和探讨的同学,请找到原文或译文的原始地址,与原文或译文作者互动讨论

【linux驱动分析】之dm9000驱动分析(三):sk_buff结构分析

[linux驱动分析]之dm9000驱动分析(一):dm9000原理及硬件分析 [linux驱动分析]之dm9000驱动分析(二):定义在板文件里的资源和设备以及几个宏 [linux驱动分析]之dm9000驱动分析(四):net_device结构体 [linux驱动分析]之dm9000驱动分析(五):另外几个重要的结构体 [linux驱动分析]之dm9000驱动分析(六):dm9000_init和dm9000_probe的实现 [linux驱动分析]之dm9000驱动分析(七):dm9000的卸

Linux内核--网络协议栈深入分析(二)--sk_buff的操作函数

本文分析基于Linux Kernel 3.2.1 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7972647 更多请查看网络栈分析专栏http://blog.csdn.net/column/details/linux-kernel-net.html 作者:闫明 1.alloc_skb()函数 该函数的作用是在上层协议要发送数据包的时候或网络设备准备接收数据包的时候会调用alloc_skb()函数分配sk_buff结构体,需要释

Linux内核:sk_buff解析

sk_buff 目录 1 sk_buff介绍 2 sk_buff组成 3 struct sk_buff?结构体 4 sk_buff成员变量 4.1 Layout布局 4.2 General通用 4.3 Feature-specific功能相关 5 sk_buff管理和操作函数 5.1缓冲区操作函数skb_reserve??skb_put??skb_push??skb_pull 5.2发送tcp报文示例 5.3?缓冲区分配.克隆和释放函数alloc_skb??skb_clone??pskb_cop