TUN/TAP

In computer networking, TUN and TAP are kernel virtual network devices. Being network devices supported entirely in software, they differ from ordinary network devices which are backed by physical network adapters.

The Universal TUN/TAP Driver originated in 2000 as a merger of the corresponding drivers in Solaris, Linux and BSD.[1] The driver continues to be maintained as part of the Linux[2] and FreeBSD[3][4] kernels.

Design

TUN and TAP in the network stack

Though both for tunneling purposes, TUN and TAP can't be used together because they transmit and receive packets at different layers of the network stack. TUN, namely network TUNnel, simulates a network layer device and operates in layer 3 carrying IP packets. TAP, namely network TAP, simulates a link layer device and operates in layer 2 carrying Ethernet frames. TUN is used with routing. TAP can be used to create a user space network bridge.[2]

Packets sent by an operating system via a TUN/TAP device are delivered to a user space program which attaches itself to the device. A user space program may also pass packets into a TUN/TAP device. In this case the TUN/TAP device delivers (or "injects") these packets to the operating-system network stack thus emulating their reception from an external source.[2]

Applications

Virtual private networks
Virtual-machine networking
Connecting real machines with network simulation
NAT

Platforms

Platforms with TUN/TAP drivers include:

gollark: At least it doesn't use proof of stake or something!
gollark: You can trade for krist, but not well.
gollark: The protocol is fairly simple: open websocket to `wss://osmarks.tk/skynet/connect/[channel name]` and send/receive JSON.
gollark: It can connect to out of Minecraft stuff, yes.
gollark: https://pastebin.com/G2PMCNhFSkynet: simple websocket-based data transfer (ask if you want the server code).Use with `local skynet = require "skynet"````skynet.receive(channel) - receive a message on the given channelskynet.send(channel, data) - send a message (can be any JSON-serializable type) on the given channelskynet.listen() - convert "websocket_message"s to "skynet_message"sskynet.open(channel) - kind of internal, open "channel" - returns a raw websocket, which you must not use or the world shall burn in nuclear fire.```

See also

References

  1. "Universal TUN/TAP driver". VTun project on SourceForge. Retrieved 2019-07-12.
  2. "Universal TUN/TAP device driver". Linux kernel. Retrieved 2020-08-17.
  3. "TUN(4) manual page". FreeBSD. Retrieved 2019-07-12.
  4. "TAP(4) manual page". FreeBSD. Retrieved 2019-07-12.
  5. "ns3::TapBridge Class Reference". nsnam.org. Retrieved 2019-03-28.
  6. Back to My Mac uses an IPv6 tunnel on device utun0.
  7. "de.schaeuffelhut.android.openvpn". F-Droid. 2013-01-10. Retrieved 2019-03-28.


This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.