linux虚拟网络设备之,Linux虚拟网络设备

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

tap/tun常用于隧道通讯,通过一个字符设备来实现用户态和内核态的通讯,字符设备一端连接着用户空间,一端连接着内核空间。

对应的字符设备文件位置:tap: /dev/tap0

tun: /dev/net/tun

当应用程序打开字符设备文件时,驱动程序会创建并注册相应的虚拟设备接口,以tunX或tapX命名。应用程序关闭设备文件时,驱动程序会删除tunX和tapX网络虚拟设备,并删除建立起来的路由信息。

两个设备的不同点:tap是一个二层网络设备,只能处理二层的以太网帧

tun是一个点对点的三层网络设备,只能处理处理三层的IP数据包1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26┌──────────────┐

│ │

│ APP │

│ │

└───────┬──────┘

┌────────────▼──────────┐

│ │

─ ─ ─ ─ ─ ─│ /dev/net/tun ├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

│ │

└────────────┬──────────┘

┌───────▼──────┐ ┌──────────────┐

│ │ │ │

│ tunX ├────────────────▶│Network Stack │

│ │ │ │

└──────────────┘ └──────────────┘

tun设备应用举例1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33┌──────────────┐ ┌──────────────┐

│ │ │ │

│ APP A │ │ APP B │◀┐

│ │ │ │ │

└───────┬──────┘ └───────┬──────┘ │

│ │ │

│ │ │

1│ │ │

│ 5│ │

│ │ │

─ ─ ─ ─ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│─ ─ ─ ─ ┼ ─ ─ ─ ─ ─

│ │ │

│ │ 4│

│ │ │

┌────────────▼────────────────────────▼─────┐ │

│ │ │

│ Network Stack │ │

│ │ │

└────────────┬───────────────────────┬──────┘ │

│ │ │

6│ 3│ │

│ │ │

┌───────▼──────┐ ┌─▼─────────┴──┐

│ │ │ │

10.1.1.11 │ eth0 │ │ tun0 │ 192.168.1.11

│ │ │ │

└───────┬──────┘ └──────────────┘

7│

10.1.1.100 / 192.168.1.100

应用程序A要发送数据到其他物理机192.168.1.100,由于物理网络环境下只有10.1.1.11和10.1.1.100是相互连通的,192.168.1.11和192.168.1.100是不通的,为了192.168.1.11和192.168.1.100能够进行通讯,需要将数据包进行一次封装。

应用程序B是通过打开字符设备文件/dev/net/tun0的方式来打开网络设备

流程如下:A构造数据包,目的ip为192.168.1.100,并发送给协议栈

协议栈根据数据包中的ip地址,匹配路由规则,要从tun0出去

内核协议栈将数据包发送给tun0网络设备

tun0发送应用程序B打开,于是将数据发送给应用程序B

B收到数据包后,在用户态构造一个新的数据包,源IP为eth0的IP 10.1.1.11,目的IP为配置的对端10.1.1.100,并封装原来的数据包

协议栈根据当前数据包的IP地址选择路由,将数据包发送给eth0

reference

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值