Это будет, наверное, заключительная статья из серии, посвященной архитектуре Hyper-V. На одном форуме мне посоветовали написать продолжение – «Hyper-V и невидимая виртуалка», «Hyper-V и Орден Линукса», я обязательно об этом подумаю, и возможно даже – напишу.
Итак, в этой статье речь пойдет о том, как виртуальные машины в среде Hyper-V работают с сетевыми интерфейсами. Как я уже говорил в предыдущих статьях – сетевые интерфейсы – это единственный способ взаимодействия виртуальных машин как между собой, так и со «внешним миром». Поэтому понимать особенности сетевого взаимодействия в среде Hyper-V необходимо.
Как можно увидеть в Hyper-V Manager, есть два типа виртуальных сетевых адаптеров: Network Adapter и Legacy Network Adapter. Отличаются между собой они тем, что первый из них является синтетическим устройством, а второй – эмулируемым. Чем отличаются синтетические устройства от эмулируемых – можно почитать в первой статье, «Архитектура Hyper-V». Если кому-то это будет интересно – Legacy Network Adapter эмулирует многопортовую сетевую карту DEC 21140 10/100TX 100 MB (и поэтому поддерживает только 10/100Мбит/с) и не поддерживается ОС Windows XP и Windows Server 2003 в 64-битной версии.
Думается, не стоит объяснять, что использование синтетических устройств всегда предпочтительнее, и именно поэтому при создании новой виртуальной машины по умолчанию добавляется именно Network Adapter. Использовать Legacy Network Adapter рекомендуется только в двух случаях:
Для этого при создании виртуальной машины необходимо убрать галочку «Start virtual machine automatically», а затем, зайдя в конфигурацию виртуальной машины, вручную удалить Network Adapter и добавить Legacy Network Adapter.
Стоит еще упомянуть о назначении MAC-адресов виртуальным адаптерам. Он может назначаться как автоматически при создании виртуальной машины (причем диапазон выдачи MAC-адресов можно изменять в настройках сервера Hyper-V), либо же вручную через конфигурацию виртуальной машины.
Разумеется, если есть сетевые адаптеры – они должны куда-то подключаться. И для этого в Hyper-V существуют виртуальные сети (Virtual Networks), которые по сути представляют собой самые обычные виртуальные коммутаторы. К каждому виртуальному коммутатору могут присоединяться как сетевые интерфейсы виртуальных машин, так и физические сетевые интерфейсы сервера. Виртуальные сети бывают трех типов, и чтобы проще было их понять – взглянем на схему.
![](https://habrastorage.org/r/w1560/storage/habraeffect/b6/7b/b67b72c05a16c0d49a307f682ffaaa56.png)
У нашего сервера имеется два сетевых интерфейса. Когда хостовая ОС только что была установлена, и интерфейсы сконфигурированы – к каждому из них привзяывается протокол TCP/IP, некоторые другие протоколы и соответственно – назначаются сетевые настройки (IP-адрес, маска подсети, адреса шлюзов и DNS) – статически или динамически, в данном случае – не суть важно.
Виртуальные сети (то есть виртуальные коммутаторы) бывают трех типов: External, Internal и Private. External – виртуальная сеть, имеющая выход «во внешний мир». При создании сети типа External необходимо указать сетевой интерфейс, через который будет осуществляться выход наружу (Физический адаптер 2). При этом физический интерфейс теряет все сетевые настройки, и создается виртуальный адаптер в хостовой ОС (Виртуальный адаптер 1), к которому привязываются все необходимые протоколы и настройки. Физический же интерфейс остается всего с одним протоколом: Virtual Network Switching Protocol. Кроме этого, в Windows Server 2008 R2 появилась возможность создавать сети типа External, но при этом все равно изолировать их от хостовой ОС. Делается это снятием галочки «Allow management operating system to share this network adapter»:
ATTENTION: При создании виртуальной сети типа External происходит кратковременный разрыв сетевого соединения, и все настройки переносятся на новый, виртуальный адаптер. Об этом необходимо помнить во-первых, если настройка осуществляется удаленно – соединение может прерваться, и во-вторых – возможно придется заново настраивать Windows Firewall, чтобы привязать правила к новому виртуальному интерфейсу.
Internal – внутренняя виртуальная сеть, к которой могут подключаться только виртуальные интерфейсы – виртуальных машин и хостовой ОС. К физическому интерфейсу сеть типа Internal не привязывается, и, соответственно, выхода «вовне» не имеет.
Private – то же самое, что и Internal, за исключением того, что к такой сети могут подключаться только виртуальные машины. Сеть типа Private не имеет доступа ни ко «внешнему миру», ни к хостовой ОС.
Для лучшего понимания – нарисую таблицу, в которой будет указано, какие интерфейсы будут подключены к виртуальному коммутатору, а какие – нет при разных настройках:
![](https://habrastorage.org/r/w1560/storage/habraeffect/0b/e8/0be8dafbc160924c358b7f66fa44ec0a.png)
Hyper-V поддерживает работу с VLAN (IEEE 802.1Q). Для этого в свойствах виртуальных сетевых интерфейсов имеется галочка «Enable VLAN Identification», после активации которой можно ввести VLAN ID. Предварительно, разумеется, необходимо настроить коммутаторы, чтобы трафик тегировался соответствующими ID, и, разумеется, установить в хостовой ОС драйверы сетевого адаптера с поддержкой необходимых функций.
![](https://habrastorage.org/r/w1560/storage/habraeffect/6b/85/6b85b70abcb4c47aad4b3399cbab1c8c.png)
Более подробно о настройке виртуальных машин для работы с VLAN можно почитать в статье Дмитрия Макарова.
Не могу закончить статью, не упомянув о новой фиче, появившейся в Windows Server 2008 R2 – поддержке виртуальных очередей, VMQ.
Поддержка VMQ позволяет перенести большую часть затрат на обработку сетевых пакетов, адресованных виртуальным машинам с хостовой ОС на плечи процессора сетевого адаптера. Разумеется, при условии, что сетевой адаптер это поддерживает, и в гостевых ОС установлены компоненты интеграции.
Если не используется VMQ, то обработка сетевых пакетов происходит следующим образом:
![](https://habrastorage.org/r/w1560/storage/habraeffect/1e/c8/1ec883ef9cb378bd4f7b59e699ee2e20.png)
Распределением трафика по виртуальным машинам и фильтрацией по тегам VLAN при этом занимается виртуальный коммутатор, действующий в пространстве родительской ОС. При большом количестве виртуальных машин и при больших объемах трафика это может привести к некоторому снижению производительности, так как у процессора сервера есть и другие задачи, помимо обработки сетевых пакетов. Использование VMQ позволяет переложить обработку пакетов на плечи процессора сетевого адаптера:
![](https://habrastorage.org/r/w1560/storage/habraeffect/25/d5/25d5bb8960ac2865ec7ab64587d93447.png)
Сетевой адаптер, поддерживающий VMQ, способен самостоятельно осуществлять необходимую обработку сетевых пакетов, а затем записать данные непосредственно в область памяти соответствующей виртуальной машины.
Передача же данных, что с VMQ, что без оной – идет как и обычно: Виртуальный сетевой адаптер – VMBus – Виртуальный коммутатор – Физический сетевой адаптер.
На этом хотелось бы закончить статью, и заодно – рассказ об архитектуре Hyper-V. В заключение – хотелось бы спросить: у меня есть желание написать статью о Live Migration. Будет ли это интересно аудитории, или же все об этом слышали и все об этом знают?
![](https://habrastorage.org/storage/habraeffect/44/82/44828a3211ad5958f81e9610f3520af1.jpg)
Итак, в этой статье речь пойдет о том, как виртуальные машины в среде Hyper-V работают с сетевыми интерфейсами. Как я уже говорил в предыдущих статьях – сетевые интерфейсы – это единственный способ взаимодействия виртуальных машин как между собой, так и со «внешним миром». Поэтому понимать особенности сетевого взаимодействия в среде Hyper-V необходимо.
Сетевые адаптеры
Как можно увидеть в Hyper-V Manager, есть два типа виртуальных сетевых адаптеров: Network Adapter и Legacy Network Adapter. Отличаются между собой они тем, что первый из них является синтетическим устройством, а второй – эмулируемым. Чем отличаются синтетические устройства от эмулируемых – можно почитать в первой статье, «Архитектура Hyper-V». Если кому-то это будет интересно – Legacy Network Adapter эмулирует многопортовую сетевую карту DEC 21140 10/100TX 100 MB (и поэтому поддерживает только 10/100Мбит/с) и не поддерживается ОС Windows XP и Windows Server 2003 в 64-битной версии.
Думается, не стоит объяснять, что использование синтетических устройств всегда предпочтительнее, и именно поэтому при создании новой виртуальной машины по умолчанию добавляется именно Network Adapter. Использовать Legacy Network Adapter рекомендуется только в двух случаях:
- Когда гостевая ОС не поддерживает установку компонент интеграции;
- Когда необходим доступ к сети до загрузки ОС, к примеру – загрузка по PXE для установки ОС с сервера WDS.
Для этого при создании виртуальной машины необходимо убрать галочку «Start virtual machine automatically», а затем, зайдя в конфигурацию виртуальной машины, вручную удалить Network Adapter и добавить Legacy Network Adapter.
Стоит еще упомянуть о назначении MAC-адресов виртуальным адаптерам. Он может назначаться как автоматически при создании виртуальной машины (причем диапазон выдачи MAC-адресов можно изменять в настройках сервера Hyper-V), либо же вручную через конфигурацию виртуальной машины.
Виртуальные сети
Разумеется, если есть сетевые адаптеры – они должны куда-то подключаться. И для этого в Hyper-V существуют виртуальные сети (Virtual Networks), которые по сути представляют собой самые обычные виртуальные коммутаторы. К каждому виртуальному коммутатору могут присоединяться как сетевые интерфейсы виртуальных машин, так и физические сетевые интерфейсы сервера. Виртуальные сети бывают трех типов, и чтобы проще было их понять – взглянем на схему.
![](https://habrastorage.org/storage/habraeffect/b6/7b/b67b72c05a16c0d49a307f682ffaaa56.png)
У нашего сервера имеется два сетевых интерфейса. Когда хостовая ОС только что была установлена, и интерфейсы сконфигурированы – к каждому из них привзяывается протокол TCP/IP, некоторые другие протоколы и соответственно – назначаются сетевые настройки (IP-адрес, маска подсети, адреса шлюзов и DNS) – статически или динамически, в данном случае – не суть важно.
Виртуальные сети (то есть виртуальные коммутаторы) бывают трех типов: External, Internal и Private. External – виртуальная сеть, имеющая выход «во внешний мир». При создании сети типа External необходимо указать сетевой интерфейс, через который будет осуществляться выход наружу (Физический адаптер 2). При этом физический интерфейс теряет все сетевые настройки, и создается виртуальный адаптер в хостовой ОС (Виртуальный адаптер 1), к которому привязываются все необходимые протоколы и настройки. Физический же интерфейс остается всего с одним протоколом: Virtual Network Switching Protocol. Кроме этого, в Windows Server 2008 R2 появилась возможность создавать сети типа External, но при этом все равно изолировать их от хостовой ОС. Делается это снятием галочки «Allow management operating system to share this network adapter»:
![](https://habrastorage.org/storage/habraeffect/6f/6f/6f6ffa8bcd8d411af143faa55177d6a8.png)
ATTENTION: При создании виртуальной сети типа External происходит кратковременный разрыв сетевого соединения, и все настройки переносятся на новый, виртуальный адаптер. Об этом необходимо помнить во-первых, если настройка осуществляется удаленно – соединение может прерваться, и во-вторых – возможно придется заново настраивать Windows Firewall, чтобы привязать правила к новому виртуальному интерфейсу.
Internal – внутренняя виртуальная сеть, к которой могут подключаться только виртуальные интерфейсы – виртуальных машин и хостовой ОС. К физическому интерфейсу сеть типа Internal не привязывается, и, соответственно, выхода «вовне» не имеет.
Private – то же самое, что и Internal, за исключением того, что к такой сети могут подключаться только виртуальные машины. Сеть типа Private не имеет доступа ни ко «внешнему миру», ни к хостовой ОС.
Для лучшего понимания – нарисую таблицу, в которой будет указано, какие интерфейсы будут подключены к виртуальному коммутатору, а какие – нет при разных настройках:
![](https://habrastorage.org/storage/habraeffect/0b/e8/0be8dafbc160924c358b7f66fa44ec0a.png)
Работа с VLAN
Hyper-V поддерживает работу с VLAN (IEEE 802.1Q). Для этого в свойствах виртуальных сетевых интерфейсов имеется галочка «Enable VLAN Identification», после активации которой можно ввести VLAN ID. Предварительно, разумеется, необходимо настроить коммутаторы, чтобы трафик тегировался соответствующими ID, и, разумеется, установить в хостовой ОС драйверы сетевого адаптера с поддержкой необходимых функций.
![](https://habrastorage.org/storage/habraeffect/6b/85/6b85b70abcb4c47aad4b3399cbab1c8c.png)
Более подробно о настройке виртуальных машин для работы с VLAN можно почитать в статье Дмитрия Макарова.
VMQ
Не могу закончить статью, не упомянув о новой фиче, появившейся в Windows Server 2008 R2 – поддержке виртуальных очередей, VMQ.
Поддержка VMQ позволяет перенести большую часть затрат на обработку сетевых пакетов, адресованных виртуальным машинам с хостовой ОС на плечи процессора сетевого адаптера. Разумеется, при условии, что сетевой адаптер это поддерживает, и в гостевых ОС установлены компоненты интеграции.
Если не используется VMQ, то обработка сетевых пакетов происходит следующим образом:
![](https://habrastorage.org/storage/habraeffect/1e/c8/1ec883ef9cb378bd4f7b59e699ee2e20.png)
Распределением трафика по виртуальным машинам и фильтрацией по тегам VLAN при этом занимается виртуальный коммутатор, действующий в пространстве родительской ОС. При большом количестве виртуальных машин и при больших объемах трафика это может привести к некоторому снижению производительности, так как у процессора сервера есть и другие задачи, помимо обработки сетевых пакетов. Использование VMQ позволяет переложить обработку пакетов на плечи процессора сетевого адаптера:
![](https://habrastorage.org/storage/habraeffect/25/d5/25d5bb8960ac2865ec7ab64587d93447.png)
Сетевой адаптер, поддерживающий VMQ, способен самостоятельно осуществлять необходимую обработку сетевых пакетов, а затем записать данные непосредственно в область памяти соответствующей виртуальной машины.
Передача же данных, что с VMQ, что без оной – идет как и обычно: Виртуальный сетевой адаптер – VMBus – Виртуальный коммутатор – Физический сетевой адаптер.
Вместо заключения
На этом хотелось бы закончить статью, и заодно – рассказ об архитектуре Hyper-V. В заключение – хотелось бы спросить: у меня есть желание написать статью о Live Migration. Будет ли это интересно аудитории, или же все об этом слышали и все об этом знают?