当前位置:  互联网>综合
本页文章导读:
    ▪Linux内核网络报文简单流程      Linux下的网卡驱动中通常会提供类似XXX_rx的接收函数 该函数处理与具体硬件相关的寄存器操作 包括中断检查,数据状态检查,错误检查等 在确认有数据抵达后读取数据或从DMA的接收环中.........
    ▪词权重计算及应用          本文讨论如何计算词(有时候称特征向量)权重和向量空间模型及其应用。本文的“文档”是指查询对象,它们可以使一条条单独的记录或者是一本书的各章,还可以是一个网页,.........
    ▪【虚拟主机篇】asp页面实现301重定向方法      301重定向在很多地方都需要用到,也是seo中常见的问题。比如确定首选域或更换网站域名的时候都要用到301重定向。301重定向的方法有好几种,拿ASP类网站来说有:首页301重定向和全站301重定.........

[1]Linux内核网络报文简单流程
    来源: 互联网  发布时间: 2013-10-19

Linux下的网卡驱动中通常会提供类似XXX_rx的接收函数

该函数处理与具体硬件相关的寄存器操作

包括中断检查,数据状态检查,错误检查等

在确认有数据抵达后读取数据或从DMA的接收环中获取数据地址

XXX_rx函数以skb为元数据结构组织报文数据

随后调用内核接口函数netif_rx或netif_receive_skb

这里会涉及到软中断的处理,NAPI的接收方式

但是最后都会走netif_receive_skb函数

 

现在内核中使用了RPS机制

将报文分散到各个cpu的接收队列中进行负载均衡处理

在netif_receive_skb函数中进行了封装

 

真正的数据处理从__netif_receive_skb_core函数开始

现在可以将该函数视为协议栈的入口函数

首先进行skb中报文头元数据的调整

如果是vlan报文则先从数据中提取至vlan_tci字段

将vlan标签的4个字节从数据移除

即在调用deliver_skb向上层传递报文数据时不含vlan标签

 

ptype_all链表的处理主要用于抓包

在应用程序中注册PF_PACKET族ETH_P_ALL的socket便可以得到所有的输入报文

也可以用于实现自定义的协议类型报文收发

随后内核会丢弃无法识别的报文

也可以在内核模块中使用dev_add_pack向ptype_all注册自定义的处理函数

 

如果接口上配置了输入流控

则根据具体的队列和分类规则决定继续处理或丢弃报文

 

对于vlan数据报文

将skb记录的输入接口修改为vlan虚接口

比如使用vconfig配置的eth0.100虚接口

再重复上述处理

 

内核提供了netdev_rx_handler_register接口函数向接口注册rx_handler

比如为网桥下的接口注册br_handle_frame函数

为bonding接口注册bond_handle_frame函数

这相对于老式的网桥处理更灵活

有了这个机制也可以在模块中自行注册处理函数

 

网桥的处理包括向上层提交和转发

发往本地的报文会修改入接口为网桥虚接口如br0

调用netif_receive_skb重新进入协议栈处理

对于上层协议栈见到的只有桥虚接口

需要转发的报文根据转发表进行单播或广播发送

netfilter在网桥的处理路径中从br_handle_frame到br_dev_queue_push_xmit设置了5个hook点

根据nf_call_iptables的配置还会经过NFPROTO_IPV4的hook点等

内核注册的由br_nf_ops数组中定义

可在模块中自行向NFPROTO_BRIDGE族的几个hook点注册函数

ebtables在netfilter框架NFPROTO_BRIDGE中实现了桥二层过滤机制

配合应用程序ebtables可在桥下自定义相关规则

 

处理完接口上的rx_handler后便根据具体的3层协议类型在ptype_base中寻找处理函数

比如ETH_P_IP则调用ip_rcv,ETH_P_IPV6则调用ipv6_rcv

这些函数都由dev_add_pack注册

可在模块中自定义协议类型处理函数

如果重复定义相同协议的处理函数则要注意报文的修改对后续流程的影响

 

IP报文进入ip_rcv后进行简单的检查便进入路由选择

根据路由查找结果调用ip_local_deliver向上层提交或调用ip_forward进行转发

向上层提交前会进行IP分片的重组

在ip_local_deliver_finish中会根据报文中4层协议类型调用对应的处理函数

处理函数由接口函数inet_add_protocol注册

针对TCP或UDP进行不同处理,最后唤醒应用程序接收数据

向外发送和转发数据经由ip_output函数

包括IP的分片,ARP学习,MAC地址的修改或填充等

netfilter在从ip_rcv到ip_output间设置了5个hook点

向各个点的链表中注册处理函数或使用iptables工具自定义规则

实现报文处理的行为控制

 

报文的发送最后汇聚到队列发送函数dev_queue_xmit

在接口up的时候dev_activate会创建默认的队列规则

这里也涉及到接口驱动初始化的时候软件多队列与硬件多队列

配合tc工具可以在报文发送前进行流量控制等

 

最终报文发送到dev_hard_start_xmit调用接口注册的动作函数ndo_start_xmit

发送前会检查ptype_all链表,支持抓包处理等

如果是虚拟接口则通常调用其对应物理接口的发送函数

到这里内核对报文的控制便结束了

根据不同网卡驱动的实现,操作寄存器等由物理层将数据发送出去

 

整个调用链相对较长

每个点都包含大量的细节

主线都是围绕元数据结构skb的处理

 

 

作者:zahuopuboss 发表于2013-3-26 11:32:34 原文链接
阅读:25 评论:0 查看评论

    
[2]词权重计算及应用
    来源: 互联网  发布时间: 2013-10-19

    本文讨论如何计算词(有时候称特征向量)权重和向量空间模型及其应用。本文的“文档”是指查询对象,它们可以使一条条单独的记录或者是一本书的各章,还可以是一个网页,或者xml文件等。

1 归一化

    在讨论词权重和向量空间模型前需要先了解下归一化的概念。归一化(normailization)方法有两种形式。第一种形式是把数变为(0,1)之间的小数,方便计算。第二种是把有量纲(量纲是指单位)表达式变为无量纲表达式,这样归一化后统一了单位,方便比较,而且归一化后比较的数值才有意义。

2 词权重表示TF-IDF

    词频-逆文档频率(term frequency-inverse document frequency,TF-IDF) 的概念被公认为信息检索中最重要的发明。在搜索、文献分类和其他相关领域有广泛的应用。

    在计算机中光有词是不能计算的,需要把词转换为数字,这个数字能代表该词对文档中的重要程度,这个数字就是词的权重。权重的设定必须满足下面两个条件:

1)一个词预测主题能力越强,权重就越大,反之,权重就越小。我们在网页中看到“云计算”这个词,或多或少地能了解网页的主题。我们看到“应用”一次,对主题基本上还是一无所知。因此,“云计算“的权重就应该比”应用“大。

2) 应删除词(如的等停顿词)的权重应该是零。

2.1 词频

    如果用词项t在文档d中出现的次数来表示词频,那么包含某些词多的文档应该比包含它们少的文档相关。当然,这个办法有一个明显的漏洞,就是长的文档比短的文档占便宜,因为长的文档总的来讲包含的关键词要多些。因此我们需要根据文档的长度,对关键词的次数进行归一化,也就是用关键词的次数除以文档的总字数。我们把这个商称为词的频率(term frequency,TF)。

2.2逆文档频率

    如果一个关键词只在很少的文档中出现,我们通过它就容易锁定搜索目标,它的权重也就应该大。反之如果一个词在大量文档中出现,我们看到它仍然不很清楚要找什么内容,因此它应该小。概括地讲,假定一个关键词t在Dt个文档中出现过,那么Dt越大,t的权重越小,反之亦然。在信息检索中,使用最多的权重是逆文档频率(Inversedocument frequency 缩写为IDF),它的公式为

IDF=log(D/Dt)

其中D是全部文档数。比如,我们假定中文文档数是D=10亿,应删除词“的”在所有的文档中都出现,即 Dt=10亿,那么它的IDF=log(10亿/10亿)= log(1) = 0。假如专用词“云计算”在两百万个文档中出现,即Dw=200万,则它的权重IDF=log(500) =6.2。又假定通用词“应用”,出现在五亿个文档中,它的权重IDF= log(2)则只有 1。也就只说,在文档中找到一个“云计算”的比配相当于找到九个“应用”的匹配。

2.3 TF-IDF权重计算

对于每篇文档中的每个词(一般是指关键字及特征向量),可以将其TF和IDF组合在一起形成每个词最终的权重,计算公式如下

TF-IDF=TF*IDF

TF-IDF按照如下的方式对文档d中的词项t赋予权重:

(1)当t只在少数几篇文档中多次出现时,权重取值最大(此时能够对这些文档提供最强的区分能力);

(2)当t在一篇文档中出现次数很少,或者在很多文档中出现,权重取值次之(此时对最后的相关度计算作用不大);

(3)如果t在所有文档中都出现,那么权重取值最小。

3 向量空间模型

    通过用TF-IDF表示词的权重,就可以把文档看成是一个向量(vector),其中的每个分量都对应词典中的一个词,分量值为词的权重值(可用TF-IDF计算,也有其他方法计算权重值)。当某词在文档中没有出现时,其对应的分量值为0。这种向量形式对于评分和排序十分重要。一系列文档在同一向量空间中的表示被称为向量空间模型(vector space model,简称VSM),它是信息检索领域一系列相关处理的基础,比如文档的评分、文档的分类及聚类。

    用向量空间模型,一组文档的集合可以看成向量空间中的多个向量,每个词对应一个坐标轴,文档在每个坐标轴上的值是对应词的权重Weight。那么文档d对应的向量为



4 应用 4.1 文档相关性

(1)简单的文档相关性计算,可以用文档中的每个词的权重(TF-IDF)加权求和,即

  TF1*IDF1 + TF2*IDF2 +... + TFN*IDFN。

(2)用余弦定理判断文档相似度

    学过向量代数的人都知道,向量实际上是多维空间中有方向的线段。如果两个向量的方向一致,即夹角接近零,那么这两个向量就相近。而要确定两个向量方向是否一致,这就要用到余弦定理计算向量的夹角了。可以用余弦定理判定文档的相似度。
    余弦定理对我们每个人都不陌生,它描述了三角形中任何一个夹角和三个边的关系,换句话说,给定三角形的三条边,我们可以用余弦定理求出三角形各个角的角度。假定三角形的三条边为 a, b 和 c,对应的三个角为 A, B 和 C,那么角 A 的余弦为

如果我们将三角形的两边 b 和 c 看成是两个向量,那么上述公式等价于

其中分母表示两个向量 b 和 c 的长度,分子表示两个向量的内积。

同样在向量空间下,可以用余弦定理对两篇文档的相似度进行计算,如下图



举一个具体的例子(这个例子来自《数学之美》),假如文章 X 和文章 Y 对应向量分别是x1,x2,...,x64000 和y1,y2,...,y64000,那么它们夹角的余弦等于,


    
[3]【虚拟主机篇】asp页面实现301重定向方法
    来源: 互联网  发布时间: 2013-10-19
301重定向在很多地方都需要用到,也是seo中常见的问题。比如确定首选域或更换网站域名的时候都要用到301重定向。301重定向的方法有好几种,拿ASP类网站来说有:首页301重定向和全站301重定向。

首页301重定向的方法:

<%
website=request.ServerVariables("Server_name")
'获取当前访问的域名
if website="zzrpjc.com" then
'判断如果你的域名如果是icoa.cn
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.zzrpjc.com/"
'做301重定向到www.icoa.cn
end if
%>

<%@ Language=VBScript %>
<%
Response.Status=”301 Moved Permanently”
Response.AddHeader “Location”, “http://www.zzrpjc.com/”
%>

全站301重定向的方法:
<%
currentdomain= request.ServerVariables("SERVER_NAME") '获取地址栏中当前的域名。
currenturl=request.ServerVariables("url") '获取地址栏中的域名后的ASP文件名。
currentrequest=request.ServerVariables("QUERY_STRING") '获取地址栏中?后面的参数
'如果你当前浏览的是老的PR查询地址http://zzruipu.com/product_show.asp?id=395。则获得的currentdomain为zzruipu.com,currenturl为/product_show.asp,currentrequest为id=395
If currentdomain="zzruipu.com" Then '因为www.zzruipu.com和zzruipu.com是公用所有文件。所以这里加个判定,只有当当前浏览的域名是zzruipu.com的时候才做301跳转,只有才能实现就算是公用文件,一个空间绑定多个域名,实现老域名跳转到新的域名。

 moveurl="http://www.zzruipu.com"&turl   '重新组合为http://www.zzruipu.com/product_show.asp

 If currentrequest<>"" Then
  moveurl=moveurl&"?"&trequest  '因为还有参数,所以将参数也组合到新的跳转地址中去。
 End if
 '跳转。
 Response.Status="301 Moved Permanently"  '以下两句实现301永久性跳转
 Response.AddHeader "Location",moveurl
End if
%>

注意:上面代码只能加在ASP文件代码中的最上面
以上方法都能实现让不带www的域名跳转到带www的域名上,也就是我们常说的301重定向。在这里lizhi125要提醒大家一下静态页面是无法实现301重定向的,也就是说代码只能加在动态页面中,最好是网站首页的开头。如,index.asp里面或者公共调用的文件(如conn.asp)里面。
作者:lizhi125 发表于2013-3-27 11:46:35 原文链接
阅读:0 评论:0 查看评论

    
最新技术文章:
▪用户及权限基础 2---- Linux权限    ▪用户及权限基础 3---- Linux扩展权限    ▪git 简明教程(1) --创建及提交
▪背包 代码    ▪json对象的封装与解析    ▪01背包,完全背包,多重背包 ,模板代码
▪apache安装详解    ▪HDU 4668 Finding string (解析字符串 + KMP)    ▪《TCP-IP详解 卷1:协议》学习笔记(二)
▪《TCP-IP详解 卷1:协议》学习笔记(持续更新...    ▪windows下使用swig    ▪gensim试用
▪Linux Shell脚本编程--nc命令使用详解    ▪solr对跨服务器表联合查询的配置    ▪递归和非递归实现链表反转
▪Linux磁盘及文件系统管理 1---- 磁盘基本概念    ▪Cholesky Decomposition    ▪HTTP协议学习
▪用C语言写CGI入门教程    ▪用hdfs存储海量的视频数据的设计思路    ▪java多线程下载的实现示例
▪【原创】eAccelerator 一个锁bug问题跟踪    ▪hadoop学习之ZooKeeper    ▪使用cuzysdk web API 实现购物导航类网站
▪二维数组中的最长递减子序列    ▪内嵌W5100的网络模块WIZ812MJ--数据手册    ▪xss 跨站脚本攻击
▪RobotFramework+Selenium2环境搭建与入门实例    ▪什么是API    ▪用PersonalRank实现基于图的推荐算法
▪Logtype    ▪关于端口号你知道多少!    ▪Linux基本操作 1-----命令行BASH的基本操作
▪CI8.7--硬币组合问题    ▪Ruby on Rails 学习(五)    ▪如何使用W5300实现ADSL连接(二)
▪不允许启动新事务,因为有其他线程正在该会...    ▪getting start with storm 翻译 第六章 part-3    ▪递归求排列和组合(无重复和有重复)
▪工具类之二:RegexpUtils    ▪Coding Interview 8.2    ▪Coding Interview 8.5
▪素因子分解 Prime factorization    ▪C# DllImport的用法    ▪图的相关算法
▪Softmax算法:逻辑回归的扩展    ▪最小生成树---Kruskal算法---挑战程序设计竞赛...    ▪J2EE struts2 登录验证
▪任意两点间的最短路径---floyd_warshall算法    ▪Sqoop实现关系型数据库到hive的数据传输    ▪FFMPEG采集摄像头数据并切片为iPhone的HTTP Stream...
▪Ubuntu 13.04 – Install Jetty 9    ▪TCP/IP笔记之多播与广播    ▪keytool+tomcat配置HTTPS双向证书认证
▪安装phantomjs    ▪Page Redirect Speed Test    ▪windows media player 中播放pls的方法
▪sre_constants.error: unbalanced parenthesis    ▪http headers    ▪Google MapReduce中文版
▪The TCP three-way handshake (connect)/four wave (closed)    ▪网站反爬虫    ▪Log4j实现对Java日志的配置全攻略
▪Bit Map解析    ▪Notepad 快捷键 大全    ▪Eclipse 快捷键技巧 + 重构
▪win7 打开防火墙端口    ▪Linux Shell脚本入门--awk命令详解    ▪Linux Shell脚本入门--Uniq命令
▪Linux(Android NDK)如何避免僵死进程    ▪http Content-Type一览表    ▪Redis实战之征服 Redis + Jedis + Spring (二)
▪Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源...    ▪利用SQOOP将ORACLE到HDFS    ▪django输出 hello world
▪python re    ▪unity3D与网页的交互    ▪内存共享基本演示
▪python join    ▪不再为无限级树结构烦恼,且看此篇    ▪python实现变参
▪打开文件数限制功能不断地制造问题    ▪Arduino Due, Maple and Teensy3.0 的 W5200性能测试    ▪Selenium实例----12306网站测试
▪基于协同过滤的推荐引擎    ▪C4.5决策树    ▪C#HTTP代理的实现之注册表实现
▪nosql和关系型数据库比较?    ▪如何快速比较这两个字符串是否相等?    ▪hdoj 1863 畅通工程 最小生成树---prime算法
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3