Quelqu'un peut-il expliquer en détail quelles sont les différences entre les paires veth et les interfaces tap et comment ces appareils se connectent au pont Linux ou à openvswitch?.
J'ai trouvé ceci: "Veth est un périphérique net spécial qui a été créé par paire, je le considère comme une méthode pour changer la direction du trafic, c'est-à-dire que lorsque le trafic sortant est envoyé au périphérique veth à partir de la pile de protocole Linux, il a été envoyé à un autre son périphérique miroir veth, donc le miroir le traite comme un trafic directionnel et le remet dans la pile de protocoles Linux pour une utilisation ultérieure.
Le périphérique Tap est un périphérique net logique, mais il est différent des autres: il permet au programme de l'espace utilisateur d'injecter directement du trafic dans la pile de protocoles Linux, ainsi que de récupérer le trafic de la pile. Il ouvre un tunnel vers la pile de protocole Linux au niveau 2 (ou tun périphérique au niveau 3) dans l'espace utilisateur, la pile considérera les données de l'espace utilisateur comme dans le sens du trafic "
mais cela ne m'a pas donné l'image complète.
merci d'avance!
Les interfaces de tap Linux créées avec ip tuntap ne peuvent pas être tilisées pour attacher des espaces de noms résea aux linuxbridges ou à l'openvswitch, nous devons donc dépendre de la paire veth.
Les interfaces Ethernet virtuelles viennent par paires, et elles sont connectées comme un tube - tout ce qui vient dans une interface veth sortira de l'autre interface veth homologue. Par conséquent, vous pouvez utiliser les interfaces veth pour connecter un espace de noms résea au monde extérieur via l'espace de noms "par défaut" ou "global" où les interfaces physiques existent.
Un périphérique TAP, tel que vnet0, est la façon dont des hyperviseurs tels que KVM et Xen implémentent une carte d'interface réseau virtuelle (généralement appelé VIF ou vNIC). Une trame Ethernet envoyée à un périphérique TAP est reçu par le système d'exploitation invité.
Le but de ces artefacts de réseau virtuel est similaire. Mais il y a des différences subtiles et donc elles sont utilisées dans différentes circonstances:
TAP : L'application/VM de l'espace utilisateur peut lire ou écrire une trame Ethernet sur l'interface tap et elle atteindrait le noyau hôte, où elle serait gérée comme toute autre trame Ethernet qui a atteint le noyau via des ports physiques (par exemple eth0). Vous pouvez potentiellement l'ajouter à un pont logiciel (par exemple pont Linux)
VETH : généralement utilisé lorsque vous essayez de connecter deux entités qui voudraient "mettre la main sur" (faute de meilleure expression) une interface pour transmettre/recevoir des trames. Ces entités peuvent être des conteneurs/ponts/ovs-switch, etc. Supposons que vous souhaitiez connecter un conteneur docker/lxc à OVS. Vous pouvez créer une paire veth et pousser la première interface vers le docker/lxc (disons, comme une interface physique) et pousser l'autre interface vers OVS. Vous ne pouvez pas le faire avec TAP.
Veuillez noter que nous ne devons pas interpréter à tort que nous devons utiliser VETH et ne pas taper lors de l'utilisation de l'OVS. Nous pouvons toujours créer les ports internes dans OVS qui se comportent exactement comme l'interface tap. Mais ce n'est pas toujours possible, par exemple lorsque vous souhaitez vous connecter à une entité qui ne peut pas synthétiser une interface de type tap. C'est à dire.:
$ ovs-vsctl add-port ovs-switch-name tap0
Vous pouvez maintenant utiliser tap0
comme nous utilisons les interfaces tap.