当前位置: 首页 > news >正文

网站建设总体规划包括哪些黑色大气网站源码

网站建设总体规划包括哪些,黑色大气网站源码,网站后台更新前台更新不,哪个网站做恒生指数最安全一. 前言 Socket Buffer的数据包在穿越内核空间的TCP/IP协议栈过程中#xff0c;数据内容不会被修改#xff0c;只是数据包缓冲区中的协议头信息发生变化。大量操作都是围绕sk_buff结构体来进行的。 sk_buff结构的成员大致分为3类#xff1a;结构管理域#xff0c;常规数据…一. 前言 Socket Buffer的数据包在穿越内核空间的TCP/IP协议栈过程中数据内容不会被修改只是数据包缓冲区中的协议头信息发生变化。大量操作都是围绕sk_buff结构体来进行的。 sk_buff结构的成员大致分为3类结构管理域常规数据域和网络功能配置相关域。 二. sk_buff数据结构体解析 1. 结构管理域 *next和prev sk_buff会被链入到一个双链表中next指向链表的下一个成员prev指向链表的前一个成员。链表的头是一个sk_buff_head的结构体如下所示 struct sk_buff_head {/* These two members must be first. */struct sk_buff *next;struct sk_buff *prev;__u32 qlen;spinlock_t lock; }; 其中qlen表示链表中sk_buff结构实例成员的个数lock用于对双链表操作的保护的锁防止并发访问链表。示意图如下 内核管理Socket Buffer的优点某个Socket Buffer的状态变化了需要将Socket Buffer在各队列之间移动时无需复制整个缓冲区只需要修改prev和next指针就可以将Socket Buffer的缓冲区从一个队列放入到另一个队列管理。例如struct usbnet结构体如下 struct usbnet {......struct sk_buff_head rxq;struct sk_buff_head txq;struct sk_buff_head done;struct sk_buff_head rxq_pause;...... } struct sock *sk 指向拥有该Socket Buffer的套接字数据结构的指针。当数据是由本机的应用产生将要对外发送时或从网络来的数据包的目的地址是本机的应用程序时这个数据域需要被设置。 套接字本质是端口号加IP用来唯一识别系统中的网络应用程序。sk_buff-sk数据域表示网络数据包最终应该送给到哪个应用程序。如果是需要从本机Forward的数据包sk应该被设置为空。 unsigned int len 表示数据包的实际的长度也就是sk_buff-data指向的数据的实际长度。sk_buff-len在数据包通过协议栈的各层时其值也会发生变化因为各层的协议头信息在不断加入或从Socket Buffer中去掉因为sk_buff-len包含了协议头的长度。 sk_buff-len包括两个部分主缓冲区的数据长度和各个分片数据的长度。 unsigned int data_len data_len只是计算了被分了片的数据块长度。所以data_len应该要等于或小于len。 __u16 mac_len 数据链路层协议头的长度。 __u16 hdr_len hdr_len是针对克隆数据包时使用的它表示克隆的数据包的头长度。 static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb) {......n-hdr_len skb-nohdr ? skb_headroom(skb) : skb-hdr_len;...... } atomic_t users 引用计数所有使用该sk_buff缓冲区的进程计数。这个参数的作用是防止sk_buff还在使用就被释放了。任何进程要使用sk_buff时应该对sk_buff-users加1使用完后应该对sk_buff-users减1。通常加和减操作分别使用skb_get和free_skb函数这样做更安全。 unsigned int truesize 记录整个Socket buffer的大小即sk_buff数据结构的长度和数据包的长度和。它是由alloc_skb函数将其初始化为lensizeof(sk_buff)。 sk_buff_data_t tail sk_buff_data_t end unsigned char *head*data Socket Buffer的数据缓冲区的内容包括TCP/IP协议栈各层的协议头信息负载数据。这是最终在网络上传送的内容。以上的几个域代表数据包缓冲区中各个信息的边界。 head和end指向整个数据包缓冲区的起始和结束地址data和tail指向实际数据的起始和结束地址各层的协议处理函数可以在data和head之间的空隙处填写头信息在tail和end之间放新数据。 void (*destructor)(...) destructor函数指针可以在sk_buff数据结构初始化时指向Socket Buffer的析构函数。在释放Socket Buffer时完成具体的清除工作。当sk_buff不属于任何套接字时析构函数不需要初始化。 2. 常规数据域 ktime_t tstamp 描述数据包到达内核的时间。由接收数据包处理函数netif_rx调用net_timestamp(skb)来对该数据域赋值。 struct net_device *dev dev是指向代表网络设备数据结构的指针。它表示该数据包是通过哪个网络设备接收或传送的。当网络设备从网络上收到一个数据包时设备驱动程序将该域更新为一个net_device类型的指针指向接收该数据包的网络设备。 static int fe_poll_rx(struct napi_struct *napi, int budget,struct fe_priv *priv, u32 rx_intr) {...... skb-protocol eth_type_trans(skb, netdev);...... }__be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev) {......skb-dev dev;...... } char cb[48] 控制缓冲区(Control Buffer),是各层协议在处理数据包时存放私有信息或变量的地方。各层协议可以自由使用该控制缓冲区。控制缓冲区大小是48字节如果在传输层UDP协议用控制缓冲区来存放它的udp_skb_cb数据结构。 struct udp_skb_cb {union {struct inet_skb_parm h4; #if IS_ENABLED(CONFIG_IPV6)struct inet6_skb_parm h6; #endif} header;__u16 cscov;__u8 partial_cov; };内核定义了宏来访问控制缓冲区一下代码是UDP访问其私有数据的宏。 #define UDP_SKB_CB(__skb) ((struct udp_skb_cb *)((__skb)-cb)) 以下是在初始化过程中对UDP数据包做校验和时填写控制缓冲区代码 static inline int udp4_csum_init(struct sk_buff *skb, struct udphdr *uh,int proto) {......UDP_SKB_CB(skb)-partial_cov 0;UDP_SKB_CB(skb)-cscov skb-len;...... } r如果需要让控制缓冲区的信息跨协议层传送必须克隆sk_buff。 __wsum csum csum用于存放发送数据的校验和。发送数据包时我们将数据从用户地址空间复制到内核地址空间同时以相应的算法计算数据包的校验和存放在该数据域。 csum_start/csum_end 存放接收数据的校验和。csum_start以skb-head为起始地址的偏移量指出校验和从数据什么位置开始计算。csun_offset以csum_start为起始地址的偏移量指出校验和存放的地址。 __u8 ip_summed 描述网络设备是否可用硬件对IP数据进行校验编码和解码。ip_summed是两位描述网络设备硬件对校验和的支持它是设备驱动程序反馈的信息。ip_summed的值可以如下 CHECKSUM_NONE网络设备不具备计算校验和的功能。 CHECKSUM_UNNECESSARY不需要对数据包计算校验和这个值一般用于lookback设备。 CHECKSUM_COMPLETE网络硬件具有计算校验和的功能。 CHECKSUM_PARITAL针对输出数据包要求设备对有hard_start_xmit函数发送的数据包做校验和教养和的范围从csum_start指明的地址起始到数据包结束处校验和存放在csum_startcsum_offset的地址。 __u32 priority priority数据域是用来实现质量服务Quality of serviceQoS功能特性的。QoS描述了数据包传送的优先级别。例如网络视频数据、语音数据需要QoS以保证视频、语音的流畅。 __be16 protocol 接收数据包的网络层协议如IP协议。它标志了网络数据包应传给TCP/IP协议栈网络层的哪个协议处理函数。protocol域协议的完整定义在include/linux/if_ether.h头文件中。该域是由网络适配器的驱动程序调用相关函数来填写的。 __u16 vlan_tci 虚拟局域网的标记控制信息Vlan Tag Control Information。 sk_buff_data_t transport_header sk_buff_data_t network_header sk_buff_data_t mac_header 以上3个域是sk_buff结构中描述Linux内核网络协议栈中各层协议头在网络数据包的位置信息。他们含义如下transport_header表示传输层协议头在网络数据包中的地址network_header编号网络协议头在网络数据包中的地址mac_header表示数据链路层协议头在网络数据包中的地址。 在64位系统中这3个协议值表示相应的协议头在网络数据包中的地址是以skb-head为起始的偏移量在32位系统中sk_buff_data_t的类型就为指针存放各层协议头在网络数据包中的起始地址。 如下 // include/linux/skbuff.h #if BITS_PER_LONG 32 #define NET_SKBUFF_DATA_USES_OFFSET 1 #endif#ifdef NET_SKBUFF_DATA_USES_OFFSET typedef unsigned int sk_buff_data_t; #else typedef unsigned char *sk_buff_data_t; #endif 三. 总结 本文主要学习了struct sk_buff结构的一些字段的含义和用途为后续的网络协议栈的学习打好基础。
http://www.hkea.cn/news/14273042/

相关文章:

  • 江西建设厅网站查询施工员九游手游平台app
  • 网站建设实验周志与总结制作网站单页
  • 百度数据网站电子商务网站建设策划书 服装 有详细数据库设计
  • 因脉网站建设公司怎么呀韩国萨wordpress
  • 国外做游戏的视频网站wordpress微信登录设置
  • 网站建设设计图图片seo网站关键字优化
  • 为什么有的网站点不开广西住房和城乡建设厅培训中心网站首页
  • 中国门户网站排行千海网站建设 小程序
  • 潍坊网站建设教程网页建站
  • 网站排名优化服务商数字营销成功案例
  • wordpress企业主题 视频深圳网络排名优化
  • php做的网站手机能看到公司画册模板
  • 高米店网站建设公司seo是啥软件
  • vs做网站时怎么弹出窗口wordpress 建战经营
  • 江西省建设厅网站首页做平面设计用哪个素材网站好
  • 网站升级方案同学会网站建设方案
  • 安康网站建设公司价格青岛官网seo公司
  • wordpress 仿站 菜单wordpress 开启模板
  • 莆田联客易外贸网站建设推广广告发布资质
  • 站长工具seo公司内部网站系统
  • 邢台网站推广报价二级域名查询入口
  • 网站建设百度经验石家庄专门做网站
  • 网站导航效果房产中介网站建设进度
  • 鸿邑网站建设网站架构师培训
  • 武清做网站公司免费多用户商城系统
  • 建设银行永泰支行网站湖南省郴州市安仁县
  • 闲鱼上做网站2022年最火的网页游戏
  • p2p金融网站建设获取当前分类的父级wordpress
  • 朝阳周边网站建设app免费下载入口
  • 河南送变电建设有限公司网站中国建设银行电脑版