声明

《中华人民共和国计算机信息网络国际联网管理暂行规定》第六条

计算机信息网络直接进行国际联网,必须使用邮电部国家公用电信网提供的国际出入口信道。

任何单位和个人不得自行建立或者使用其他信道进行国际联网。

物理网卡和虚拟网卡区别

物理网卡是一个物理硬件设备,硬件设备存活在七层模型中最底层负责真实的数据传输。硬件设备需要拥有对应驱动提供注册和接口到操作系统内核

虚拟网卡是在Linux 2.4.x内核之后实现的虚拟网络设备,对真实硬件设备驱动接口抽象网络接口。tap/tun虚拟网卡均有软件实现接管,扩展出接口与原有真实硬件设备功能一致。tap/tun接口在七层模型中,tap位于第二层(数据链路层 Data Link Layer)、tun则在第三层(网络层 Network Layer)

真实与虚拟两者工作方式

物理网卡

虚拟网卡

两者在I/O操作中进行的操作区别

真实网卡

  • 用户 Read / Write
  • 操作系统内核 Read / Write

虚拟网卡

  • 用户 Read / Write
  • 操作系统内核 Read / Write
  • App Read / Write
  • 操作系统内核 Read / Write

真实网卡比虚拟网卡少单项(Read)三次IO操作,虚拟网卡需要四次IO操作才能把一个数据发往到真实网络。如果调用操作系统内核作为更近接触,更加减少一次IO操作提升性能。

使用虚拟网卡和真实网卡的头部区别


虚拟局域网想通信到额外一张虚拟网时,依靠 通信协议 通过软件发往就会产生二次封装。第一层IP报文属于通信协议目的地,下层第二层IP报文就是虚拟网卡到来一张虚拟局域网的封装。

DMA机制

直接内存访问(DMA,Direct Memory Access)是一些计算机总线架构提供的功能,它能使数据从附加设备(如磁盘驱动器)直接发送到计算机主板的内存上。

DMA解释:不经过CPU,通过I/O设备直接访问存储器,从而减少CPU资源浪费。


这里可以了解一下,实际上开发不会关心。

包离开网卡速度

网卡在一秒内处理60个包,那么为 60pkt/s,单位pkt/s。pkt/s是传输速率又是每秒的数据包个数。

每个包又要受到队列影响,导致每个包时延快慢。特别是讲包放到网络中可能会受到QOS限制、网络堵塞丢包(被队列丢弃包)

DPU 数据处理器

DPU(数据处理器)是面向以数据为中心的计算的新一代处理器,集完整的数据中心功能于单芯片,和CPU及GPU一起构成新型计算的三大支柱。

对包处理没什么概念,在大数据中DPU可以处理100Gb/s级别数据。

(数据来自 NVIDIA BLUEFIELD-2 DPU 英伟达)

普通人用不到DPU,仅作扩展。

虚拟局域网和SD-WAN技术

SD-WAN,全名是Software-Defined WAN,软件定义广域网

虚拟局域网可以形成SD-WAN技术,通过相关虚拟局域网关联而成,俗称“组网”。

虚拟SD-WAN技术解决公网IPv4匮乏,大量家庭设备通过一个虚拟局域网形成组网,可以相互传输通信。

家庭设备一条公网或者NAT网络,依赖虚拟局域网对IP报文转发形成虚拟局域网,解决公网浪费问题。

(相关 N2N、Tailscale、ZeroTierWireguard

虚拟网卡虚拟局域网通信

Windows和Linux 虚拟网卡

  • Windows
  • 非常讽刺的说,在Windows上直接创建虚拟网卡似乎没什么办法。
  • 通过安装OpenVPN TUN驱动、Wireguard开发的WinTUN达到虚拟网卡创建
  • 处理虚拟网卡非常的LOW

Linux

  • 内核自带虚拟网卡管理

虚拟局域网通信两种

  • 协议栈 lwip
    • 实现一个协议栈,工程量大
  • 对IP包头修改
    • 实现简单

本章是对IP包头修改,实现lwip协议栈工程量过大,没能力。

IP报文段处理

捕获虚拟网卡的IP报文对源IP地址、目的IP地址进行修改通过TCP/UDP建立起点对点进行通信,将TUN数据发送到对方虚拟网卡中,俗称“代理”。

Linux 虚拟网卡一些相关命令

创建、删除虚拟网卡 TAP

创建TAP

1
ip tuntap add dev tap0 mod tap

删除TAP

1
ip tuntap del dev tap0 mod tap

创建、删除虚拟网卡TUN

创建TUN

1
ip tuntap add dev tun0 mode tun

删除TUN

1
ip tuntap del dev tun0 mod tun 

启用TUN

1
ip link set dev tun0 up

关闭TUN

1
ip link set dev tun0 down

路由表修改操作

添加路由

1
ip route add Routes via NextRoute dev tun0

添加路由列举:添加tun0的路由192.168.2.0/24路由跳到192.168.1.1

1
ip route add 192.168.2.0/24 via 192.168.1.1 dev tun0

设置TUN的网关和优先级:顺序越小,优先级越高

1
ip route add default via 10.1.0.1 dev tun0 metric 1

Windows 虚拟网卡一些相关命令

Windows开发虚拟网卡,有一些难度。

设置虚拟网卡优先级

1
netsh interface ip set interface UULD metric=1

添加路由

1
2
netsh interface ipv4 add route 1.1.1.1/32 "devtun" NextRoute
列如:netsh interface ipv4 add route 10.2.0.0/16 "Internet" 10.0.0.1

设置掩码和网关:所有流量都到网关上,本质上win网卡不需要设置这些的

1
route add 0.0.0.0 mask 0.0.0.0 192.168.1.1

虚拟网卡中的程序可以在其他局域网发现

wintun开发中,可以发现协议中使用了多播地址239.255.255.250

多播地址使用后,SSDP协议会发现这个服务从而可以发现内部网络情况。

End………………….