通常的socket编程,面对的都是物理网卡,Linux下其实很容易创建虚拟网卡;本文简单介绍一下Linux虚拟网卡的概念,并以tun设备为例在客户端和服务器端分别建立一个实际的虚拟网卡,最终实现一个从客户端到服务器的简单的IP隧道,希望本文能对理解虚拟网卡和IP隧道有所帮助,本文将提供完整的源程序;阅读本文需要具备在Linux下使用C语言进行IPv4下socket编程的基本能力,本文对网络编程的初学者难度较大。
1. Linux下的虚拟网卡TUN/TAP
- TUN和TAP是Linuxn内核的虚拟网络设备,不同于普通靠硬件网络适配器实现的设备,这些虚拟的网络设备全部用软件实现,并可以向运行于Linux上的应用软件提供与硬件的网络设备完全相同的功能;
- TAP等同于一个以太网设备,它操作OSI模型的第二层(数据链路层)数据包,通常我们所使用的网络就是以太网数据帧,所以要使用TAP设备,就需要自己构建以太网报头、IP报头、TCP/UDP报头;
- TUN模拟了网络层设备,操作第三层(网络层)数据包,通常我们使用的TCP/UDP报文在网络层使用的IP协议,所以使用TUN设备,需要自己构建IP报头和TCP/UDP报头,比TAP设备少构建一个以太网报头;