- 博客(10)
- 资源 (5)
- 收藏
- 关注
原创 内核网络命名空间
网络命名空间将内核网络协议栈(路由、流控、Netfilter、网桥等系统)虚拟成多个。内核默认创建的网络命名空间init_net。struct net init_net = { .count = ATOMIC_INIT(1), .dev_base_head = LIST_HEAD_INIT(init_net.dev_base_head),};网络命名空间创建...
2018-10-31 14:55:21 1987
原创 内核UDP隧道框架
目前内核支持的基于UDP隧道的协议有L2TP、IPSec、FOU/GUE、GENEVE和VXLAN等。内核为这些隧道协议提供了一个通用的UDP隧道框架,参见文件net/ipv4/udp_tunnel.c,共性的一些操作统一到了框架中。隧道创建对于隧道L2TP、FOU/GUE、GENEVE和VXLAN,隧道创建时,都需要在内核中新建一个UDP套接口,框架中的函数udp_sock_creat...
2018-10-29 15:16:59 4040
原创 Linux内核TUN/TAP设备驱动
Linux内核的TUN/TAP虚拟设备,不同于内核的其它设备,其发送和接收数据包都在网络协议栈内部完成,发送的数据包并不会离开协议栈进入到物理网络中,同样,也不会接收到从物理网络中进入协议栈的数据包。用户空间的设备节点/dev/net/tun用于读写TUN/TAP设备,内核中TUN/TAP设备在发送数据包时,将数据包发送到与/dev/net/tun文件描述符相关联的套接口,用户空间就可从设备节...
2018-10-26 15:20:39 14733 3
原创 GRE隧道封装协议及内核处理解析
Generic Routing Encapsulation (GRE)通用路由封装协议,基于IP网络层协议封装以太网报文,可用于在IPSec VPN网络间传输多播路由信息报文,或者在PPTP协议中,承载PPP数据报文。其在数据帧中的位置如下: |-------------------|----------------|----------------------|-----------...
2018-10-22 22:52:21 26276 3
原创 内核网络协议栈传输层协议框架
Linux内核支持的传输层协议包括传统的TCP,UDP,以及IPIP、GRE等隧道协议。内核协议栈使用net_protocol结构体表示其所支持的传输层协议,系统初始化或者相应协议模块加载时,具体的协议将根据协议号将其实现的net_protocol结构体注册到协议栈中,即以协议号为索引添加到全局结构体指针数组inet_protos[]中。inet_protos数据大小为MAX_INET_PR...
2018-10-19 15:40:06 2143
原创 Veth虚拟以太网设备对
内核网络中VETH设备表示一对虚拟的互联接口,可使用以下IP命令创建:$ sudo ip link add ep1 type veth peer name ep2$ ip link list5: ep2@ep1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group de...
2018-10-16 18:23:44 2967
原创 详解vhost-user协议及其在OVS DPDK、QEMU和virtio-net驱动中的实现
总述:OVS DPDK与QEMU之间如何通过vhost user协议通信vhost user协议的控制和数据通道所有的控制信息通过UNIX套接口(控制通道)交互。包括为进行直接内存访问而交换的内存映射信息,以及当数据填入virtio队列后需要出发的kick事件和中断信息。在Neutron中此UNIX套接口命名为vhuxxxxxxxx-xx;数据通道事实上由内存直接访问实现。客户机...
2018-10-16 12:34:19 10042
原创 IPv6本地链路地址生成方式
IPv6中定义的一种地址类别为本地链路地址Link-Local Addresses,协议中规定,每个IPv6接口必须要有本地链路地址,使用FE80::/10地址块,相同于IPv4中的169.254.0.0/16网段,尽在本地链路有效。Linux内核中定义了4中生成IPv6本地链路地址的方式,参见枚举类型in6_addr_gen_mode的定义:enum in6_addr_gen_mode {...
2018-10-15 11:34:19 27566 1
原创 QEMU的Vhost-User特性及Snabbswitch的Vhost-User应用
此文旨在向读者介绍Virtual Open Systems公司为QEMU开发的vhost-user特性在Snabbswitch软交换机中的使用。vhost-user的架构和Vapp软件也会涉及到。读者可跟随本文构建具有vhost-user特性的QEMU软件,并且同Vapp的参考实现进行测试。Vhost-User的产生基于QEMU/KVM的虚拟机访问外部网络的一种方法是通过virtio...
2018-10-12 12:46:22 2659 2
原创 UDP的checksum计算与硬件Offload
Linux内核中UDP数据包的计算由函数udp_send_skb完成。根据代码可见,存在4种不同的计算方式。对于IPv4协议来说,UDP的校验和是可选的,用户可通过setsockopt(SO_NO_CHECK)系统调用关闭校验和计算。 if (is_udplite) /* UDP-Lite */ csum = udpl...
2018-10-09 11:32:20 7635
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人