自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 资源 (1)
  • 收藏
  • 关注

原创 lubuntu16.04firefox升级后web上没有声音

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2019-02-24 20:24:46 281

原创 virtio前端驱动能够通知后端的原理

我们知道VM里的virtio后端驱动在发送报文的时候,当准备好之后需要通知后端。通知的函数是调用调用关系 virtqueue_kick--> virtqueue_notify-->vp_notify/* the notify function used when creating a virt queue */bool vp_notify(struct virtqueue *vq...

2018-12-06 14:34:15 1100

转载 VM跨主机通信ovs配置

如果位于不同物理主机上的两个VM需要通信,那么底层的虚拟交换机ovs需要配置tunnel端口。OVS中支持添加隧道(Tunnel)端口,常见隧道技术有两种gre或vxlan。隧道技术是在现有的物理网络之上构建一层虚拟网络,上层应用只与虚拟网络相关,以此实现的虚拟网络比物理网络配置更加灵活,并能够实现跨主机的L2通信以及必要的租户隔离。不同隧道技术其大体思路均是将以太网报文使用隧道协议封装,然后使...

2018-11-27 10:13:37 2898

原创 Linux下ovs bridge等如何收从内核接管报文处理

参考Linux内核收包流程,函数调用链是:硬件中断 -->do_IRQ–>handle_irq–>e1000_intr_msix_rx–>__napi_schedule(&adapter-&amp

2018-11-16 11:15:23 775

原创 PCI/PCIE之总线、设备枚举

先思考一个问题,系统配置PCI设备的时候,需要指明Bus Device Function Register构成的地址,但是系统如何知道主板上有多少总线,设备呢?整个系统的PCI拓扑需要系统去枚举遍历,使用的深度优先遍历算法,详见PCI的6.6.2章节。下面以Linux内核代码分析来加深PCI配置的理解。按照参考3的描述,pci相关的初始化应该是如下顺序。pcibus_class_init()...

2018-11-14 15:30:17 5810

原创 PCI,PCIE之基础

PCIE之前接触过,但是总是感觉理解的很肤浅,这里针对之前模糊的地方重新梳理一些概念,不是很系统讲PCIE,如果想系统的理解,请参考文末的连接。PCIE空间概念:PCIE空间分为配置空间,IO空间,Memory空间,这些空间属于系统空间的一部分(PCI配置空间是通过两个端口CFCh和CF8h访问的,CFCh端口存放Bus/Device/Function + registerd地址,CF8h存放...

2018-11-08 10:55:51 3201

原创 ioremap

ioremap将物理地址转换为内核虚拟地址,通常内核态设备驱动程序会使用这个虚拟地址访问寄存器,访问的内核接口诸如readb/readw/readl/writeb/writew/writel等。[Sparse ](http://www.voidcn.com/article/p-myfoctyx-dh.html)...

2018-11-07 16:59:20 2234

原创 gdb拾遗

如果要调试的程序是release版本(release版本不带debug信息),需要手动加载debug信息文件。可以进入gdb后symbol-file debugFIle 手动加载,也可以gdb -s debugFile -e progRam -c core指定参数启动gdb调试静态函数和静态全局变量,可以 break fileName.c::staticfunctionName ...

2018-11-01 11:35:12 320

原创 VxLAN MTU

VxLAN中的VTEP不处理IP分片报文,如果VTEP收到IP分片将直接丢弃?暂且记录,后面找找原因。

2018-10-31 16:21:56 2838 1

原创 NAT与VoIP

通常NAT地址转换只针对IP头中的地址,如果payload中也含有地址信息(后续业务流程这个地址会放到IP头中),NAT是无法满足的。例如VoIP中的SIP协议(Session Initiation Protocol)SIP INVITE request from a phone on a local network参考https://www.n2net.net/agent-blog/sip...

2018-10-30 17:30:48 385

转载 虚拟分片重组

IP包的分片和重组,第一个分片有完整的TCP/UDP协议头信息,即端口信息,而其它分片则没有,而当这些分片经过防火墙的时候,防火墙就犯难了,对于第一个分片,如果是合规的,合规就是公司安全策略允许得流量,则允许通过;对于其它分片则只有IP信息,没有TCP/UDP端口信息,允许还是不允许?如果允许,如果是攻击包或者病毒包,对公司安全是一个威胁,防火墙的作用又何在?如果不允许,那合规的流量因为这些分片被...

2018-10-30 16:00:35 913

原创 SNAT和DNAT的应用场景

SNAT 源NAT,即对IP头中的源地址进行地址转换,一般是内网地址转为公网地址,主要用于内部主机访问外部网络。外部主机无法访问内网主机。DNAT目的NAT,即对IP头中的目的地址进行地址转换,一般用于隐藏对外提供服务的网络设备的真实IP,提供服务的网络设备一般位于DMZ区域,外部用户可以通过公网地址访问该服务。SNAT和DNAT一般在防火墙上开启。...

2018-10-30 15:55:47 2771

转载 IP分片与重组

IP层的分片和重组分别发生在什么时候?IP分片发生在IP层,不仅源端主机会进行分片,中间的路由器也有可能分片,因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。而分片数据的重组只会发生在目的端的IP层。IP分片和TCP分段有什么区别?IP分片的原因是MTU, TCP分段的原因是MSS.作者:shinez...

2018-10-30 15:23:03 1137

原创 网络安全之基于流量的攻击类型

DoS 拒绝服务DDoS 分布式拒绝服务DRDoS 分布式反射拒绝服务:公网上有很多公共的服务如redis、mongodb、memcache、NTP、UPnP等,攻击者对这些服务发送伪造的请求。如:Hi memcache,请把缓存的数据发给我。我的IP是受害者。 这种攻击叫反射攻击。全球几十万的弱验证开放服务一起给受害者发送数据。...

2018-05-18 22:05:14 1451

转载 数字证书认证过程(https为例)

https://blog.csdn.net/abinge317/article/details/51791856RSA非对称加密的2个用途:加密(防窃听)RSA非对称加密会用到一对密钥,分别称为公钥和私钥,公钥加密之后的数据可以通过私钥来进行解密,私钥加密的数据也同样可以用对应的公钥进行解密。在web数据传输过程中,由于客户端和服务器端是多对一的关系,因此可以让所有的客户端持有相同的公钥,服务器持...

2018-05-18 21:38:26 8713 2

原创 netfilter hook实验

    上一篇点击打开链接介绍了netfilter的机制,本篇通过一个极简单的内核模块实践一下该机制。

2018-05-11 22:23:24 805

原创 Linux netfilter HOOK机制

    Linux系统上TCP/IP协议栈在内核态(DPDK等在用户态收包情况例外),用户态如果想要干预报文的处理就需要向内核态注入hook函数,如Linux的iptables,netfilter框架中的HOOK机制即是提供该功能的。通过之前分析ip报文的内核处理路径点击打开链接可知,内核中有如下5个hook点,他们和iptables中chain一一对应。对应hook函数在内核中是NF_HOOK调...

2018-05-11 21:00:59 824

原创 TCP的TIME_WAIT状态

TCP链接的Client和Server拆除链接时,主动close链接的一方会出现该状态,原因有二(以Client主动close为例):1,如果没有TIME_WAIT状态,Client主动关闭时,Client发送ACK后即关闭本端链接。如果ACK传输过程中丢失的话,Server会重发FIN,Client收到该FIN由于本端链接已经关闭,会发送RST给Server,导致Server端关闭异常。    ...

2018-03-19 14:45:21 242

原创 libvirt xml定义虚拟机方式,如何定义使用virtio网卡

默认情况下xml中定义的网络设备是rtl8139,如果要提高性能可以选择使用virtio虚拟化网卡,xml中如何配置?在xml中<interface type="xx">字段下 <model type="virtio"/> 这相当于前端驱动,是在VM中使用的,后端驱动可以用qemu <driver name="qemu"/> 或者vhost方式&l...

2018-03-15 20:06:08 1641

原创 当IP分片遇上NAT

    关于NAT原理的介绍请参考点击打开链接,如上述参考文章所述NAT节约公网地址的同时也带来一些问题,考虑最常用的NAPT模式,当NAT网关收到Server端发来的IP分片时,由于只有第一个IP分片中包含传输层信息(端口,协议等),后续的IP分片到NAT网关时,NAT网关将无法直接根据本分片信息还原出原来的内网IP,需要NAT特殊处理甚至重组分片(虚拟重组,真正的重组是在Client上进行的)...

2018-03-13 17:47:07 1171

原创 移动网络MSS

概念:MSS:即Max Segment Size,MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能,TCP协议在3次握手建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大...

2018-03-13 17:24:19 670

原创 NAT网络地址转换

转自点击打开链接1. IPv4协议和NAT的由来今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣。他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需。企业利用互联网发布信息,传递资料和订单,提供技术支持,完成日常办公。然而,Internet在给亿万用户带来便利的同时,自身却面临一个致命的问题:构建这个无所不能的Internet的基础IPv4协议已经不...

2018-03-13 16:14:02 887

原创 Centos7 非对称路由导致收到sctp init建链报文不响应

Centos7主机上创建sctp协议socket监听192.168.10.14地址36412端口,10.10.10.227主机运行sctp客户端程序connect  192.168.10.14:36412地址。Centos7主机接口配置如下[root@localhost ~]# ifconfig ens32: flags=4163 mtu 1500 inet 192.168

2017-12-24 15:24:29 1309

原创 Linux 内核收发包流程

收包流程:传统方式和NAPI方式收包流程是有差异的,如图所示。传统收包是中断,驱动处理完后直接调用netif_rx将报文送入内核处理,内核将报文skb挂到该CPU的softnet_data结构input_pkt_queue队列上, 为了统一传统收包和NAPI设备收包的处理,内核为所有不使用NAPI的驱动程序提供一个虚拟设备,叫做积压设备,每个CPU一个积压设备,对应结构softnet_...

2017-08-13 12:05:11 9844

原创 新内核模块引用其他模块中的全局变量,编译报错处理方式

1. 被引用模块中全局变量EXPORT_SYMBOL2. 引用模块的Makefile中设置KBUILD_EXTRA_SYMBOLS=/path/to/be/quotedko/Module.symvers;即KBUILD_EXTRA_SYMBOLS指向被引用ko的Module.symvers

2017-08-13 11:44:41 3292

原创 Linux开启Lockdep检测内核死锁

Lockdep是内核检测deadlock的手段,默认没有开启,需要make menuconfig增加配置开启,https://stackoverflow.com/questions/20892822/how-to-use-lockdep-feature-in-linux-kernel-for-deadlock-detection

2017-08-13 11:29:00 3832

原创 记一次内核soft lockup的定位记录

产品大用户场景下运行一段时间即报“xxx localhost kernel: BUG: soft lockup - CPU#0 stuck for 23s! [xxx:15825]” 错误,内核日志调用栈显示是在获取锁时失败,检查[ 4663.527008] device p1p1 entered promiscuous mode[ 4712.445

2017-08-12 12:23:22 1656

原创 插入内核模块失败提示"Invalid module format"

产品需要编译自己的定制内核+内核模块,下载内核源码定制修改后rpmbuild方式(点击打开链接)编译升级内核,如下方式编译内核模块 make -C $(kernel_source) SUBDIRS=`pwd`  modules;其中kernel_source直向内核源码,但是insmod插入编译的ko时,提示 “insmod: ERROR: could not insert module xx

2017-06-24 11:05:30 12324 1

转载 ovs virtio vhost通信流程

转自:点击打开链接版本说明qemu version:2.6.0kernel version:3.10.102简而言之vhost模块需要提前加载,注册一个misc的设备,供虚拟机启动时候使用。虚拟机创建的时候,会初始化一个tap设备,然后启动一个vhost_$(qemu-kvm_pid)的线程,配置vring等承载数据的队列。guest和hos

2017-06-18 21:30:03 4741

转载 TCP/IP

转载:http://zhaozhanxu.com/2016/07/17/Linux/2016-07-17-Linux-Kernel-Pkts_Processing6/版本说明Linux版本: 3.10.103网卡驱动: ixgbe协议头注意上图中的五个非常重要的东西:Sequence Number是包的序号,用来解决网络包乱序(r

2017-06-18 20:07:25 695

原创 接口IP丢失问题

业务需要内核模块中申请并注册了一个虚拟以太接口,alloc_etherdev_mq-->register_netdev-->dev_open之后,ifconfig可以看到该接口,但是配置ip后过一会ip经常会莫名消失。定位过程中wireshark抓包发现该虚拟接口经常是发送几次DHCP请求广播报文后,ip跟着消失。最终发现是NetworkManager导致,关闭该服务,ip不再丢失。没有深入研究,

2017-01-21 22:03:29 445

原创 SELinux阻止某些程序运行的处理方法

背景:    产品运行在服务器上,之前是root身份ssh远程登录服务器进行业务配置等,客户质疑不专业,不安全,要求产品提供专业的命令行。命令行移植开源quagga的vtysh实现了(vtysh移植后续单独开帖记录),服务器上本地开启vtysh也可以运行,但是ssh远程无法登录vtysh,经过一番折腾发现是SElinux阻止了,网上给出的方法都是关闭了之,这里给出方法不关闭SELinux服务也

2017-01-21 21:27:24 4486

原创 e1000驱动收包描述符和skb

Rx Desc Register是与接收描述符环有关的有4个寄存器:RDBA存放描述符缓冲的首地址,作为基地址共64位包括各32位的高低地址,  RDH和RDT是头尾指针,存放相对基址的偏移量,RDH的值由硬件增加,表示指向下一次DMA将用的描述符RDT由软件增加 表示下一次要处理并送交协议栈的有关描述RDLEN:为缓冲区分配的总空间的大小上述寄存器的初始化在e1000_o

2017-01-08 10:53:35 1082

转载 VxLAN

转自:http://blog.csdn.net/freezgw1985/article/details/16354897/一 . 为什么需要Vxlan1. vlan的数量限制   4096个vlan远不能满足大规模云计算数据中心的需求2. 物理网络基础设施的限制   基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署3. TOR交

2016-10-08 20:11:30 924

原创 Linux调度时机

上篇介绍了调度http://blog.csdn.net/kklvsports/article/details/52494246,其中也提到了调度时机有,中断,异常;进程退出,睡眠;进程创建,被唤醒,优先级改变时;进程阻塞,如阻塞在信号量,互斥锁。本章针对各个场景分析1. 中断异常s3c2410_timer_init-->setup_irq(IRQ_TIMER4, &s3c2410_

2016-09-16 21:21:26 933

原创 Linux进程调度

说明如下引用代码对应的kernel版本是2.6.34I. Linux进程调度的函数schedule,先看一下schedule的实现。/* * schedule() is the main scheduler function. */asmlinkage void __sched schedule(void){ struct task_struct *prev, *next; u

2016-09-11 20:55:28 716

原创 Linux 驱动注册(driver_register)流程probe方法的选择

driver_register -->bus_add_driver-->driver_attach-->driver_attach-->drv.probe上面的调用顺序是驱动注册的流程,最终会调用drv->probe方法,对比plant_form总线和pci总线发现,plant_form总线的probe方法为空,pci总线的probe方法不为空(对比platform_bus_type和pci_

2016-08-28 22:32:13 2508

原创 Linux 进程状态转换

1. Linux进程状态和状态转换

2016-08-21 16:48:35 3878 1

原创 kmalloc内存申请标志及应用场景

场景标志进程上下文,可以睡眠GFP_KERNEL进程上下文,不可以睡眠GFP_ATOMIC中断处理程序GFP_ATOMIC软中断GFP_ATOMICtaskletGFP_ATOMIC用于DMA的内存,可以睡眠GFP_DMA|GFP_KERNEL用于DMA的内存,不可以睡眠GFP_DM

2016-08-17 21:08:15 618

原创 Linux 设备驱动模型,I2C驱动,sys文件系统(1)

Linux sys文件系统和驱动模型是紧密相关的,本系列以I2C驱动为例总结整理。

2015-08-15 21:48:32 846

S3C2510(ARM)芯片的vxWorks BSP

S3C2510(ARM)芯片的vxWorks BSP代码,参考

2012-09-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除