Những phương pháp này đang làm những điều cơ bản khác nhau. Để hiểu lý do tại sao, bạn cần hiểu mô hình lớp của mạng. Đối với mục đích của chúng tôi ở đây, các lớp 1, 2 và 3 rất quan trọng:
- Lớp 1 là lớp vật lý - lớp này chỉ định những thứ như bạn có thể sử dụng loại cáp nào, mẫu điện áp / dòng điện nào đại diện cho 1 và 0 trên cáp đó, cách các thiết bị ở mỗi đầu cáp thỏa thuận tốc độ bit mà chúng hoạt động.
- Lớp 2 là lớp liên kết - lớp này xác định những thứ ngôn ngữ ở mỗi đầu của cáp nói chuyện với nhau. Các thiết bị Ethernet ở lớp này có những thứ như khung và địa chỉ MAC.
- Lớp 3 là lớp mạng - lớp này chỉ định cách các thiết bị sử dụng liên kết lớp 2 trực tiếp đến thiết bị khác để tiếp cận thiết bị thứ ba mà chúng không thể tiếp cận trực tiếp ở lớp 2. Các thiết bị ở lớp này có địa chỉ IP và bảng định tuyến.
MACVLAN / MACVTAP
MACVlan tạo một thiết bị lớp 2 hoặc lớp liên kết ảo, với địa chỉ MAC riêng, chia sẻ lớp 1 hoặc lớp vật lý với một thiết bị hiện có. Trường hợp dễ hiểu nhất là nơi bạn có một thiết bị Ethernet được cắm vào mạng và bạn tạo một thiết bị MACVlan dựa trên thiết bị Ethernet đó; bây giờ bạn có hai "thiết bị" Ethernet với các địa chỉ MAC khác nhau nhưng cả hai đều truyền các khung của chúng trên cùng một cáp. Tôi sẽ nói về MACVTAP một chút nữa.
Các giao diện MACVlan có thể tương tác theo nhiều cách khác nhau với giao diện Ethernet hiện có, đặc biệt khi một khung xuất hiện trên một trong các giao diện có địa chỉ cho một giao diện khác:
- Trong chế độ riêng tư , khung hình bị ném đi; Hai giao diện không thể giao tiếp với nhau, chỉ với các thiết bị bên ngoài.
- Trong chế độ vepa , khung được gửi qua lớp vật lý như bất kỳ khung nào khác. Nếu bạn đã cắm thiết bị vào một công tắc đủ thông minh để phát hiện ra rằng khung cần phải được gửi trở lại cùng một cổng mà nó đã đến, thì nó sẽ được nhận bởi cùng một lớp vật lý đã gửi nó và sau đó lớp 2 sẽ sử dụng MAC để gửi nó đến giao diện mạng dự định.
- Trong chế độ cầu , khi một khung xuất hiện trên một thiết bị, nó sẽ được kiểm tra xem liệu nó có dành cho thiết bị kia hay không và nếu có, nó sẽ được gửi đến đó mà không đi qua lớp 1.
- Ngoài ra còn có một vài chế độ tối nghĩa hơn.
Lưu ý rằng giao diện MACVlan có một hạn chế quan trọng: Chúng không có khả năng giải quyết việc học. Vì vậy, bạn không thể kết nối giao diện MACVlan với thiết bị vật lý thứ hai và mong muốn có thể tiếp cận thiết bị vật lý thứ hai đó qua thiết bị thứ nhất. Điều này hoạt động với giao diện Ethernet gốc nhưng không có giao diện MACVlan được đính kèm.
TUN / TAP
Giao diện TAP cũng là một thiết bị lớp 2 ảo mới nhưng không có lớp 1 nào được đính kèm. Thay vào đó, một chương trình có thể nhận được một mô tả tập tin đại diện cho lớp vật lý. Sau đó, nó có thể ghi dữ liệu khung Ethernet thô vào bộ mô tả tệp đó và hạt nhân sẽ coi nó giống như bất kỳ gói Ethernet nào khác mà nó nhận được trên giao diện vật lý thực.
Điều quan trọng về giao diện TAP là lớp vật lý ở chế độ người dùng; bất kỳ bit phần mềm nào có quyền thích hợp đều có thể tạo khung Ethernet theo bất kỳ cách nào nó thích và chuyển chúng vào thứ gì đó mà kernel xử lý giống như giao diện vật lý thực. Điều này làm cho chúng rất hữu ích cho những thứ như VPN và đường hầm; bạn có thể viết bất kỳ loại phần mềm đường hầm nào bạn thích trong không gian người dùng và không cần phải can thiệp vào không gian kernel để đưa các khung vào ngăn xếp mạng, bạn chỉ cần tạo một thiết bị TAP và ghi các khung vào bộ mô tả tệp của nó.
Các thiết bị TUN giống như các thiết bị TAP ngoại trừ chúng hoạt động ở lớp 3 thay vì lớp 2 và phần mềm chế độ người dùng phải ghi các gói IP thô vào bộ mô tả tệp thay vì các khung Ethernet thô.
Quay trở lại các thiết bị MACVTAP , đây là các loại kết hợp giữa giao diện MACVlan và TAP. Giống như giao diện TAP, một chương trình ở chế độ người dùng có thể lấy một bộ mô tả tệp và ghi các khung Ethernet thô vào nó. Giống như giao diện MACVlan, các khung đó sau đó được gửi qua lớp vật lý của thiết bị Ethernet thực. Điều này cho phép bạn dễ dàng điều chỉnh phần mềm được viết để sử dụng các thiết bị TAP để sử dụng thiết bị MACVlan.
VNet
Đây là khái niệm tương tự như mạng TUN / TAP nhưng có mặt phẳng điều khiển phát triển hơn (vì vậy phần mềm chế độ người dùng sử dụng nó có thể định cấu hình giao diện linh hoạt hơn) và mặt phẳng dữ liệu được tối ưu hóa hơn (để bạn có thể di chuyển dữ liệu qua thiết bị mạng ảo nhiều hơn hiệu quả).
Tất cả đều làm những điều tương tự nhưng có khả năng hơi khác nhau. Tất cả chúng có thể được sử dụng để kết nối VM với mạng Ethernet:
- Một sản phẩm ảo hóa có thể lấy các khung Ethernet từ khách và ghi chúng vào bộ mô tả tệp cho thiết bị TAP. Thiết bị TAP đó có thể được gán địa chỉ IP của chính nó bởi máy chủ hoặc thiết bị có thể trượt vào cầu cùng với giao diện Ethernet để chia sẻ địa chỉ IP của máy chủ hoặc iptables có thể được định cấu hình để chuyển tiếp lưu lượng truy cập trên nó bằng NAT.
- Một sản phẩm ảo hóa có thể tạo khung Ethernet từ khách và ghi chúng vào bộ mô tả tệp cho thiết bị MACVTAP; những thứ này sau đó được truyền trực tiếp trên lớp vật lý của thiết bị Ethernet, mang lại cho VM một thiết bị Ethernet "thực" (mặc dù lưu ý rằng có thể tạo các thiết bị MACVlan / MACVTAP cho các loại giao diện mạng khác như cầu nối).
- Một sản phẩm ảo hóa có thể kết nối một trình điều khiển virtio trong khách với trình điều khiển virtio trong máy chủ để kết nối mạng rất hiệu quả.