0018-使⽤tun虚拟⽹络接⼝建⽴IP隧道的实例-Writtenby1//dev/net/tunintfd;fd=open("/dev/net/tun",O_RDWR));structifreqifr;memset(&ifr,0,sizeof(ifr));ifr
ifr_flags=IFF_TUN|IFF_NO_PI;strcpy(ifr
ifr_name,"tun0");ioctl(fd,TUNSETIFF,(void*)&ifr);使⽤tun虚拟⽹络接⼝建⽴IP隧道的实例----Writtenbywhowin通常的socket编程,⾯对的都是物理⽹卡,Linux下其实很容易创建虚拟⽹卡;本⽂简单介绍下⼀Linux虚拟⽹卡的概念,并以tun设备为例在客端⼾和服务器端分别建个⽴⼀实际的虚拟⽹卡,最终实现个⼀从客端⼾到服务器的简单的IP隧道,希望本⽂能对理解虚拟⽹卡和IP隧道有所帮助,本⽂将提供完整的源程序;阅读本⽂需要具备在Linux下使⽤C语⾔进⾏IPv4下socket编程的基本能⼒,本⽂对⽹络编程的初学者难度较⼤
Linux下的虚拟⽹卡TUN/TAPTUN和TAP是Linuxn内核的虚拟⽹络设备,不同于普通靠硬件⽹络适配器实现的设备,这些虚拟的⽹络设备全部⽤软件实现,并可以向运于⾏Linux上的应⽤软件提供与硬件的⽹络设备完全相同的功能;TAP等同于个⼀以太⽹设备,它操作OSI模型的第⼆层(数据链路层)数据包,通常我们所使⽤的⽹络就是以太数⽹据帧,所以要使⽤TAP设备,就需要⾃⼰构建以太⽹报头、IP报头、TCP/UDP报头;TUN模拟了⽹络层设备,操作第三层(⽹络层)数据包,通常我们使⽤的TCP/UDP报⽂在⽹络层使⽤的IP协议,所以使⽤TUN设备,需要⾃⼰构建IP报头和TCP/UDP报头,⽐TAP设备少构建个⼀以太⽹报头;Linux通过TUN/TAP设备向绑定该