使用tun虚拟网络接口建立IP隧道的实例.docxVIP

使用tun虚拟网络接口建立IP隧道的实例.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

0018-

0018-使?tun虚拟?络接?建?IP隧道的实例-Writtenbywhowin

PAGE

PAGE10/NUMPAGES11

使?tun虚拟?络接?建?IP隧道的实例

Writtenbywhowin

通常的socket编程,?对的都是物理?卡,Linux下其实很容易创建虚拟?卡;本?简单介绍?下Linux虚拟

?卡的概念,并以tun设备为例在客?端和服务器端分别建??个实际的虚拟?卡,最终实现?个从客?端到服务器的简单的IP隧道,希望本?能对理解虚拟?卡和IP隧道有所帮助,本?将提供完整的源程序;阅读本

?需要具备在Linux下使?C语?进?IPv4下socket编程的基本能?,本?对?络编程的初学者难度较?。

Linux下的虚拟?卡TUN/TAP

TUN和TAP是Linuxn内核的虚拟?络设备,不同于普通靠硬件?络适配器实现的设备,这些虚拟的?络设备全部?软件实现,并可以向运?于Linux上的应?软件提供与硬件的?络设备完全相同的功能;

TAP等同于?个以太?设备,它操作OSI模型的第?层(数据链路层)数据包,通常我们所使?的?络就是以太

?数据帧,所以要使?TAP设备,就需要??构建以太?报头、IP报头、TCP/UDP报头;

TUN模拟了?络层设备,操作第三层(?络层)数据包,通常我们使?的TCP/UDP报?在?络层使?的IP协议,所以使?TUN设备,需要??构建IP报头和TCP/UDP报头,?TAP设备少构建?个以太?报头;

Linux通过TUN/TAP设备向绑定该设备的??空间的应?程序发送数据;同样,??空间的应?程序也可以像操作硬件?络设备那样,通过TUN/TAP设备发送数据;在后?这种情况下,TUN/TAP设备向Linux的?络协议栈提交数据包,从?模拟从外部接收数据的过程;

构建?个TUN设备

上?节的描述显然过于枯燥,可能会对初次接触虚拟?卡的读者感到困惑,不知所云,本节将实际建??个

tun设备,帮助你?出困惑;

构建?个基本的tun设备,只需要两个步骤

编写?个程序,?少完成三个任务以可读写模式打开设备?件

向Linux内核注册?个tun设备名称,本例中为tun0

\h(structifreq)定义在头?件linux/if.h中,在我的很多?章中都有介绍,?如?章《如何使

\h?rawsocket发送UDP报?》,如果需要,可以参考;

编写处理tun0接收/发送数据的程序

为设备分配IP地址(本例中为tun0分配的IP为)

把上?的代码?段组合在?起,就可以完成?个tun设备的建?,?件名:\htun_01.c(点击?件名下载源?件)这段程序在进?循环前增加了system(ifconfigtun0/24up),为tun0分配了IP地址,所以运?完后就不需要再为这个设备分配IP了;

编译:gcc-Walltun-01.c-otun-01

该程序需要root权限运?,主要是因为其中使?了ioctl,运?:sudo./tun-01

运?该程序,会构建?个tun设备,打开?个新的终端,使?

将可以看到系统中多了?个虚拟?

络接?tun0,使? 查看路由也会看到增加了?条关于tun0设备的路由

图1:构建?个tun设备后

尽管建?起了虚拟?卡tun0,但因为程序过于简单,所以这样建?的设备什么事情都做不了,必须完善程序,才能让这个设备真正地发挥作?;

tun设备是?个第三层(?络层)的设备,在这个设备上只能收到IP报头,收不到以太?报头,所以Linux索性没有为tun设备分配MAC地址;

后?将以本节的程序为基础,不断改进,最终写出?个简单的IP隧道的程序。

使?tun设备的基本数据流向

设备建?起来以后,程序员关?的是我们如何从这个设备上收发报?,如何处理这些报?;

对于?个物理?络接???,接??端连接着?络协议栈,另?端连接着物理?络;?对于?个虚拟?络接

???,接?的?端仍然连接着?络协议栈,但是另?端连接着?个应?程序,也就是我们前?下载的那个程序(\htun-01.c),我们把这个程序称为application-tun;

可以和?个物理?络接??较来说明虚拟?络接?的数据流向,在物理接?上要发送到物理?络上去的报

?,相对于虚拟接?将被发送到应?程序application-tun上;

当我们使?socket发送报?时,报?被提交给Linux的?络协议栈,协议栈为报?封装各个协议层的报头,并根据路由表将报?交给相应设备的驱动程序,?如enp0s3的驱动程序,然后由驱动程序将报?发送到物理?络上(物理设备),或者发送给应?程序application-tun(虚拟设备);

在上?节中,我们使?

文档评论(0)

暗伤 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档