理解linux虚拟网络设备tun

本文由资深码农刘海峰撰写,介绍Linux的tun虚拟网络设备。tun设备连接内核协议栈和用户程序,使得数据能在两者间传输。通过示例展示了创建tun设备、配置IP地址以及如何通过ping测试数据传输的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:刘海峰,IT行业资深码农,从事.net/java/go语言开发十余年,长期关注springcloud/k8s/linux网络相关的技术,现为滴普科技容器产品首席架构师。


前言

tun是linux的另一种虚拟网络设备,与前面讲过的veth类似,只是另一端连的不一样,veth设备是一端连着内核协议栈,另一端连着另一个netns的协议栈;而tun设备是一端连着内核协议栈,另一端连接着一个用户程序,任何时候从协议栈发到tun网卡的数据都能从用户程序中读到,而从用户程序写到/dev/net/tun的数据都会被内核协议栈收到。

当我们通过程序打开/dev/net/tun文件时,就会发现我们的主机上多了一张网卡,打开多次会新增多张网卡,命名依次为tun0/tun1/tun2…,我们读写tun网卡的方式与正常读写一个文件一样,下面通过示例来了解一下。

tun设备

首先编写一个c程序,文件名为tun.c,代码如下:

#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <linux/if_tun.h>
#include<stdlib.h>
#include<stdio.h>
int main()
{
   
   
    int tun_fd, nre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值