Вставлю и свои 5 копеек.
После появления информации о том, что в 3200 остались особенности 3028 мне дали задание провести исследования, по результатом которых выдать определенные ответы. Вопрос стоял очень остро - вплоть до полного отказа от сотрудничества.
Первое - тест топик-стартера меня не устроил своей синтетичностью. Провел свой тест: я выдергивал из внутренней базы маки, которые светились в нашей сети, + ко всему я вытаскивал маки свитчей. Два этих списка маков хранились отдельно, т.к. маки абонентов можно считать случайными, а маки свитчей - длинной цепочкой (у нас крайне большой процент свитчей - длинк). Тестировал модель 3200 (с 3028 и так понятно, что все грустно). Абонентские маки загоняются в кучку вланов, менеджмент-маки - в один влан.
Код для генератора пакета scapy:
Код:
global vlans
vlans = [200, 295, 501, 571, 652, 728, 1432, 1578, 1746, 1852]
def ShootMac(m, v, n):
srcMAC = m[:-1].upper()
dstMAC = "00:55:AE:AE:14:11"
pkt = Ether(src=srcMAC, dst=dstMAC)/Dot1Q(vlan=v)/IP(src="10.90.90.89",dst="10.90.90.90")/Padding(load="X"*18)
print srcMAC + " " + str(n)
sendp(pkt, iface="eth6", verbose=0)
def ShuffleMac():
global usermacs
global managmacs
global vlans
random.shuffle(usermacs)
random.shuffle(managmacs)
def LoadMac():
f = open('/home/madgnu/usermacsclean.txt', 'r')
g = open('/home/madgnu/managmacsclean.txt', 'r')
global usermacs
global managmacs
usermacs = [line for line in f]
managmacs = [line for line in g]
print "Loaded " + str(len(managmacs)) + " ManagMacs"
print "Loaded " + str(len(usermacs)) + " UserMacs"
def Go50():
global usermacs
global managmacs
global vlans
ShuffleMac()
for i in xrange(20):
maci = managmacs[i]
ShootMac(maci, 930, i)
for j in xrange(1):
vlan = random.randint(0, 9);
ShuffleMac()
for i in xrange(50):
maci = usermacs[i]
ShootMac(maci, vlans[vlan], i)
def Go100():
global usermacs
global managmacs
global vlans
ShuffleMac()
vlan = random.randint(0, 9);
for i in xrange(40):
maci = managmacs[i]
ShootMac(maci, 930, i)
for j in xrange(1):
vlan = random.randint(0, 9);
ShuffleMac()
for i in xrange(100):
maci = usermacs[i]
ShootMac(maci, vlans[vlan], i)
def Go250():
global usermacs
global managmacs
global vlans
ShuffleMac()
vlan = random.randint(0, 9);
for i in xrange(70):
maci = managmacs[i]
ShootMac(maci, 930, i)
for j in xrange(2):
vlan = random.randint(0, 9);
ShuffleMac()
for i in xrange(125):
maci = usermacs[i]
ShootMac(maci, vlans[vlan], i)
def Go500():
global usermacs
global managmacs
global vlans
ShuffleMac()
vlan = random.randint(0, 9);
for i in xrange(100):
maci = managmacs[i]
ShootMac(maci, 930, i)
for j in xrange(5):
vlan = random.randint(0, 9);
ShuffleMac()
for i in xrange(100):
maci = usermacs[i]
ShootMac(maci, vlans[vlan], i)
def Go1000():
global usermacs
global managmacs
global vlans
ShuffleMac()
vlan = random.randint(0, 9);
for i in xrange(125):
maci = managmacs[i]
ShootMac(maci, 930, i)
for j in xrange(10):
vlan = random.randint(0, 9);
ShuffleMac()
for i in xrange(100):
maci = usermacs[i]
ShootMac(maci, vlans[vlan], i)
def Go5000():
global usermacs
global managmacs
global vlans
ShuffleMac()
vlan = random.randint(0, 9);
for i in xrange(125):
maci = managmacs[i]
ShootMac(maci, 930, i)
vlan = random.randint(0, 9);
ShuffleMac()
for i in xrange(2000):
maci = usermacs[i]
ShootMac(maci, vlans[vlan], i)
for j in xrange(10):
vlan = random.randint(0, 9);
ShuffleMac()
for i in xrange(300):
maci = usermacs[i]
ShootMac(maci, vlans[vlan], i)
def Go5000a():
global usermacs
global managmacs
global vlans
ShuffleMac()
vlan = random.randint(0, 9);
for i in xrange(5125):
maci = usermacs[i]
ShootMac(maci, vlans[vlan], i)
LoadMac()
Да, в теории скрипт может отправить один и тот же мак в один и тот же влан и считать, что он отправил разные маки. Но с теми объемами списков маков, что у меня были я считаю эту вероятность исчезающе малой и находящейся в пределах статистической погрешности. Всего список уникальных абонентских маков составил 413363. Список менеджмент маков составил 126 маков. Эти маки были получены при помощи псевдослучайной выборки, и в целом, они могут не удовлетворять условиям нормального распределения. Собственно на это и был расчет - максимально приблизить к реальности, в которой маки не являются чисто случайными, но и не являются чисто последовательностью. Соответственно категории тестов были следующие: (указано кол-во абонентских маков, соответственно общее кол-во маков загонялось большее)
Цитата:
Для случая с 50 и 100 маками - менеджмент влан и 1 абонентский влан
Для случая с 250 маками - менеджмент и 2 абонентских влана
Для случая с 500 маками - менеджмент и 5 абонентских вланов
Для случая с 1000 маками - менеджмент и 10 абонентских вланов
5000 маков, 10 абоненстких вланов, менеджмент влан. 1 абонентский влан по 2000 маков, остальные - по 300.
Так же сделал тест - загнал 5126 маков в один влан.
Результаты (копировал из таблицы, так что за форматирование - сорри):
Код:
Число маков (абонентских) 50 100 250 500 1000 5000
Итерация 1 71 141 321 598 1114 4399
Итерация 2 71 141 320 601 1113 4378
Итерация 3 71 141 321 601 1117 4356
Итерация 4 71 141 319 600 1118 4395
Итерация 5 71 141 321 598 1109 4371
Всего “вдули” (всего маков загоняли в свитч) 71 141 321 601 1126 5126
Потеряно максимум 0 0 2 3 17 770
В процентах 0.00% 0.00% 0.62% 0.50% 1.51% 15.02%
Как видим - результаты не такие уж плохие, и не 50% как у топик-стартера. Как известно - 3200 это свитч уровня доступа. Пардон, но если у вас на доступе 8к маков - то это диагноз. У нас в среднем на доступе 200-250 маков, т.е. будет выпадать менее 1 мака на сотню. А с этим уже можно жить. По поводу того, что 3200 ставится на агрегацию - это отдельный разговор, и он упирается скорее в упорстве админов в доказывании того, на чем экономить не стоит. У нас в среднем на агрегацию приходится около 700-1300 маков, и вероятность в 1,5% конечно уже хуже, но в принципе тоже жить можно. Work-around в проблемах с мультикастом тоже существуют. Поэтому мое резюме было - "казнить нельзя, помиловать".
Так же сделал тест - загнал 5126 маков в один влан. Ситуация с точностью до погрешности повторяет ситуацию с 5126 маками, но в 10 вланах. Соответственно если в 3028 хэш высчитывается примерно как f1(vlan)+f2(mac), то в 3200 хэш высчитывается примерно как f(mac+vlan).
Единственный сильный минус у д-линка - ограниченный доступ к информации: особенности работы той или иной функции порой чуть ли не клищами приходится вытягивать из сотрудников при личном разговоре. Но в оправдание - с документацией проблемы в it в общем-то весьма распространены. Вот в общем-то и все 5 копеек.