간단한 스위치의 패킷 버퍼 내부에서 무슨 일이 일어나는지 시뮬레이션하는 방법은 무엇입니까?

간단한 스위치의 패킷 버퍼 내부에서 무슨 일이 일어나는지 시뮬레이션하는 방법은 무엇입니까?

저는 저장 및 전달 기가비트 스위치에서 손실된 UDP 패킷 사례를 디버깅하고 있으며 문제의 요점을 더 잘 이해하기 위해 스위치 내부에서 발생하는 상황을 시각화하고 싶었습니다.

시나리오는 간단합니다. 두 개의 버스트 데이터 스트림이 스위치 내부의 2개 포트를 통해 들어오고 둘 다 세 번째 포트(둘 다 공통)를 통해 나가기를 원합니다. 따라서 스위치는 잠시 동안 패킷 버퍼에 일부 데이터를 보관해야 합니다.

문제는 내 간단한 계산에 따르면 버퍼가 내가 조사 중인 사례를 처리할 수 있을 만큼 충분히 커야 한다는 것입니다. 하나의 데이터 스트림은 1.56ms마다 25kB(1514B 패킷으로 나누어짐)의 버스트를 전송하고, 다른 하나는 1ms마다 60kB의 버스트를 전송합니다. 이제 Netgear GS105E와 같은 소호 스위치도 128kB 크기의 버퍼를 갖습니다. 따라서 간단한 수학(25+60 < 128)은 스트림이 동시에 수신되더라도(다른 실질적인 트래픽이 없는 경우) 작동해야 함을 나타냅니다.

실제 테스트에서는 두 스트림의 많은 패킷이 일부 스위치에서 손실되는 것으로 나타났습니다(버퍼 크기에만 국한된 것이 아니라 버퍼 크기에 바인딩된 것으로 보입니다). 내 시뮬레이션에서는 128kB로 설정하면 버퍼가 오버필되지 않습니다.

오버필이 있는 24kB 크기의 버퍼에 대해 이 애니메이션을 녹화했습니다. 그러나 버퍼를 몇 바이트만 늘리면 문제가 해결되고 모든 패킷이 통과한다는 것을 쉽게 알 수 있습니다.

이 시뮬레이션에서는 몇 가지 단순화를 수행했습니다. 모든 패킷은 동일한 QoS를 갖습니다(실제 경우에도 마찬가지입니다). 그래서 시뮬레이션에서 QoS 대기열을 제외하고 모든 트래픽을 똑같이 중요하게 취급했습니다. 다음으로 버퍼의 메모리 관리를 생략했습니다. 이것이 문제의 중요한 부분이라고 상상할 수 있지만, 완벽한 할당을 통한 단순화가 실제 사례와 10% 이상 틀린다면 놀랄 것입니다. 또한 스위치가 첫 번째 바이트를 수신할 때 프레임 길이를 알고 있어 처음에 필요한 모든 메모리를 예약한다고 가정합니다. 포트의 수신/송신 대기열 크기에 대한 문서를 찾을 수 없었기 때문에 모든 포트가 공유 패킷 버퍼에 배치되어 있고 필요에 따라 버퍼의 큰 부분을 차지할 수 있다고 가정합니다. 여기 어딘가). 각 패킷의 처리 지연을 512ns(64B 패킷의 전파 지연)로 설정했습니다.

그것이 역할을 하는지는 확실하지 않지만 스트림은 조각화된 UDP 패킷으로 구성됩니다(즉, 25kB 버스트는 17개의 IP 조각으로 조각화된 단일 UDP 패킷입니다). 두 번째 스트림은 각각 14개의 IP 조각으로 조각화된 2개 또는 3개의 20kB UDP 패킷으로 버스트를 생성합니다.

실제 스트림과 유사한 스트림을 복제하는 Iperf 3.7 명령은 다음과 같습니다.

iperf3 -c sink -u -b 128M -t 600 -l 25256 --pacing-timer 1560
iperf3 -c sink -u -b 400M -t 600 -l 20k --pacing-timer 1000

시뮬레이션이 현실과 너무 동떨어지게 만들 수 있는 고려 사항을 잊어버렸던 또 다른 아이디어가 있습니까? 도와 줘서 고마워!

애니메이션의 소스 코드는 다음 위치에 있습니다.https://gist.github.com/peci1/a0346538acc6c289b2c6d596b184ad21.

스위치를 통한 데이터 흐름 시뮬레이션

실제 실험에서 얻은 결과표는 다음과 같습니다. 데이터 스트림 1은 고정되어 있습니다. 각 1.56ms의 25kB UDP 패킷에서 128Mbps입니다. 나는 첫 번째 스트림의 패킷이 스위치에 의해 손실되기 시작하는 한계를 찾으려고 두 번째 스트림의 매개변수를 변경하고 있었습니다. -lUDP 패킷의 크기를 지정하는 (길이) 매개변수와 -b이러한 패킷이 생성해야 하는 대역폭을 지정하는 (대역폭) 매개변수를 변경하고 있었습니다 . --pacing-timer두 번째 스트림의 경우 항상 1000으로 설정되었습니다. D-Link와 Netgear GS105는 60kB 버스트에 전혀 대처할 수 없다는 것을 알 수 있습니다. GS108은 GS105보다 성능이 훨씬 뛰어나지만 스위치 칩은 거의 동일합니다(동일한 "제품군", 포트 수가 다르고 버퍼가 약간 더 큼).

스위치 버퍼 크기 [kB] 최대 트래픽 1.5kB 버스트 최대 트래픽 20kB 버스트 최대 트래픽 60kB 버스트
기가블록스 러기드(VSC7512) 220 825Mbps 825Mbps 825Mbps
기가블록스(RTL8367N-VB-CG) 250 730Mbps 750Mbps 790Mbps
D-링크 DIS-100G-5W(QCA8337N-AL3C) 128 110Mbps 1Mbps 버스트할 때마다 패킷이 손실됩니다.
자이셀 XGS 1210-12(RTL9302B) 1500 800Mbps 830Mbps 830Mbps
넷기어 GS310-TP(RTL8380M) 520 830Mbps 830Mbps 835Mbps
넷기어 GS308T(RTL8380M) 520 830Mbps 835Mbps 835Mbps
넷기어 GS108 v3(BCM53118) 192 630Mbps 660Mbps 710Mbps
넷기어 GS105E (BCM53114) 128 120Mbps 1Mbps 버스트할 때마다 패킷이 손실됩니다.
렌크포스 RF-4270245 ? 740Mbps 760Mbps 800Mbps
미크로틱 RB260GS (AR8327) 128 835Mbps 835Mbps 835Mbps
주니퍼 EX2300 4GB? 800Mbps 830Mbps 830Mbps

(이 질문은 다음에서 마이그레이션되었습니다.https://networkengineering.stackexchange.com/questions/78529/how-to-simulate-what-happens-inside-the-packet-buffer-of-a-simple-switch주제에서 벗어난 것으로 표시됨).

관련 정보