تولیدکننده ترافیک داخلی در روترهای سری Cisco 8000 (بخش دوم)
تولیدکننده ترافیک (Traffic Generator) داخلی در روترهای سری Cisco 8000
تولیدکننده ترافیک (Traffic Generator) داخلی چیست؟
روترهای سری Cisco 8000 که از سیستمعامل IOS XR استفاده میکنند، شامل یکتولیدکننده بسته (Packet Generator) داخلی هستندکه به اپراتورها اجازه میدهد ترافیک را مستقیماً از خود روتر تولید کنند؛ بدون اینکه نیازی به سختافزار یا نرمافزار تولیدکننده ترافیک خارجی باشد.
این ابزار عیبیابی (Diagnostic tool) به شما امکان میدهد تا:
- تزریق بستههای دستساز (Crafted Packets) به صفحه داده (Data Plane) روتر جهت عیبیابی و تشخیص شبکه.
- ایجاد بستهها تا اندازه4 کیلوبایت(سیستمهای مبتنی بر NPUهای A100/K100)
- اجرایچندین نشست (Session) تولید ترافیک به صورت همزمانکه هر کدام با یک نام نشست منحصربهفرد شناسایی میشوند.
- تعداد نشستهای همزمان و حداکثر توان عملیاتی (Throughput) در هر نشست به اندازه بسته، نرخ بسته در ثانیه (pps) و سرعت رابط (Interface Speed) بستگی دارد.
- تزریق بستهها در جهتورودی (Ingress), خروجی (Egress)یاهر دو جهتبه صورت همزمان.
- تعریف محتوای بسته به صورتدرونخطی (Inline) در خط فرمان or از طریق یک فایل pcap.
تعاریف بستهها (Packet definitions) از سینتکسی مشابه Scapy استفاده میکنند که به شما کنترل کامل بر هدرهای لایه ۳/۴ شامل آدرسهای IPv4/IPv6، مقدار TTL، فیلدهای DSCP/TOS و محموله (Payload) میدهد.
زمان استفاده از مولد ترافیک (Traffic Generator) داخلی
تولیدکننده ترافیک داخلی (Built-in traffic generator) برای سناریوهایی که نیاز دارید بدون تکیه بر تجهیزات تست خارجی، رفتار شبکه را به سرعت اعتبارسنجی یا عیبیابی (Troubleshoot) کنید، ایدهآل است.
| سناریو | تولیدکننده ترافیک (Traffic Generator) چگونه کمک میکند |
|---|---|
| اعتبارسنجی لینک یا اینترفیس (Interface) | تأیید اینکه یک لینک تازه راهاندازی شده، ترافیک را به درستی از مبدأ تا مقصد منتقل میکند. |
| تأیید مسیریابی (Routing) | تأیید اینکه بستههایی که برای یک پیشوند (Prefix) خاص ارسال میشوند، مسیر مورد انتظار را طی میکنند. |
| تست QoS و DSCP | تزریق بستهها با مقادیر خاص DSCP/TOS برای اعتبارسنجی سیاستهای طبقهبندی، صفبندی و زمانبندی. |
| عیبیابی افت بستهها (Packet Drops) | ایجاد یک جریان ترافیک کنترلشده و مشاهده شمارندهها (Counters) برای شناسایی محل دقیق افت بستهها. |
| محیطهای آزمایشگاهی و استیجینگ (Staging) | شبیهسازی ترافیک در حین تستهای پیش از استقرار (Pre-deployment) یک سرویس بدون نیاز به تولیدکنندههای ترافیک اختصاصی. |
چه زمانی از مولد ترافیک (Traffic Generator) داخلی استفاده نکنیم
اگرچه مولد بسته (Packet Generator) داخلی ابزاری ارزشمند برای عیبیابی (Debugging) و رفع اشکال است، اما داشتن انتظارات واقعبینانه از آن اهمیت دارد.این ابزار جایگزینی برای مولدهای ترافیک شخص ثالث (Third-party) نیست.محدودیتهای زیر را در نظر داشته باشید:
- مناسب برای تست استرس یا بنچمارک نیست— مولد داخلی (Built-in generator) از منابع ASIC مشترک با عملیات ارسال ترافیک تولیدی استفاده میکند. این ابزار نباید برای تست استرس یک سرویس، کارت شبکه (Line card) یا کل سیستم استفاده شود. نتایج حاصل از بارگذاری داخلی مصنوعی، بازتابدهنده ظرفیت واقعی ارسال ترافیک نیست.
- ابزاری برای اعتبارسنجی توان عملیاتی (Throughput) نیست— تستهای اعتبارسنجی سرویس مبتنی بر استاندارد مانند ITU-T Y.1564 (فعالسازی سرویس اترنت) نیازمند جریانهای ترافیکی دقیق، کالیبرهشده و دوطرفه با اندازهگیری دقیق توان عملیاتی، تأخیر (Latency)، جیتر (Jitter) و نرخ از دست رفتن فریم (Frame loss) هستند. مولد داخلی این الزامات را برآورده نمیکند و هرگز نباید جایگزین یک ابزار تست گواهیشده شود.مناسب برای شبیهسازی ترافیک تولیدی نیست— این مولد، جریانهای بستهای ساده و یکنواخت تولید میکند. این ابزار نمیتواند ترکیبات ترافیکی واقعگرایانه (شامل اندازههای مختلف بسته، پروتکلهای کاربردی و الگوهای انفجاری) که توسط یک مولد ترافیک اختصاصی یا شبیهساز شبکه تولید میشود را بازسازی کند.
- مناسب برای تستهای بارگذاری طولانیمدت نیست— اجرای جلسات مولد با نرخ بالا برای دورههای طولانی، منابع ارسال ترافیک را مصرف کرده و ممکن است بر ترافیک تولیدی در همان خط لوله ASIC تأثیر بگذارد. از آن فقط برای جلسات عیبیابی کوتاه و هدفمند استفاده کنید.
- مناسب برای تستهای بارگذاری طولانیمدت نیست— اجرای نشستهای تولیدکننده با نرخ بالا برای دورههای طولانی، منابع فورواردینگ (Forwarding) را مصرف کرده و ممکن است بر ترافیک عملیاتی در همان خط لوله ASIC تأثیر بگذارد. از آن فقط برای نشستهای تشخیصی کوتاه و هدفمند استفاده کنید.
نکته کلیدی:از مولد ترافیک داخلی برای عیبیابی (Troubleshooting) و تشخیص وضعیت دستگاه استفاده کنید. برای هر موردی که نیازمند اندازهگیری دقیق عملکرد (Performance)، انطباق با سطح سرویس (Service-level compliance) یا بارگذاری پایدار است، از یک مولد ترافیک خارجی مناسب استفاده نمایید.
نحوه عملکرد
تولیدکننده ترافیک داخلی در داخل بلوک NPU Host (NPUH) از تراشه Silicon One ASIC پیادهسازی شده است.NPU Host (NPUH)این قابلیت از NPUH برای تزریق بستههای تعریفشده توسط کاربر مستقیماً به خط لوله ارسال (Forwarding Pipeline) — چه در ورودی (Ingress) و چه در خروجی (Egress) — بدون نیاز به هیچ دستگاه خارجی استفاده میکند.
از آنجایی که بلوک NPUH با سایر کاربردهای ASIC (مانند BFD، PFC، CFM و غیره) به صورت اشتراکی استفاده میشود و مولد ترافیک (Traffic Generator) باید منابع داخلی مانند حافظه داده بسته (Packet Data Memory) را به اشتراک بگذارد، هر نشست مولد ترافیک، حافظه را در قطعات ثابت تخصیص میدهدقطعات 16 بایتیو بلوکهای داده بسته نمیتوانند به صورت جزئی تخصیص یابند. این بدان معناست که میزان مصرف واقعی منابع در هر نشست به اندازه بسته (Packet Size)، نرخ جریان (Stream Rate) پیکربندیشده و تعداد نشستهای همزمان بستگی دارد.
در نتیجه، حداکثر تعداد جریانها (Flows) و پهنای باند (Bandwidth) قابل دستیابی، توسط تعامل میان اندازه بسته (Packet size)، نرخ هر جریان (Per-stream rate)، سرعت پورت (Port speed) و منابع داخلی موجود برای مولد (Generator) در هر لحظه تعیین میشود. نرخهای بالاتر جریان، منابع بیشتری مصرف کرده و فضای کمتری برای جریانهای همزمان باقی میگذارند. این مولد از حداکثر پهنای باند (Bandwidth) تا 50 Gbps و حداکثر اندازه بسته (Packet size) 4 کیلوبایت پشتیبانی میکند. برای حداکثر تعداد جریانها، ما از 256 جریان در مدل 8712 (K100) و 160 جریان در مدل 8011 (A100) (در نرخ PPS پایین برای هر جریان) پشتیبانی میکنیم.
نحوه استفاده از تولیدکننده ترافیک (Traffic Generator) داخلی
گردش کار شامل چهار مرحله است:ایجاد (Create)یک نشست (Session)،شروع (Start)آن،تأیید (Verify)وضعیت، وتوقف/حذف (Stop/Delete)پس از اتمام.
گام ۱: ایجاد یک نشست (Session) تولیدکننده ترافیک
از دستورdiagnostic packet-generator createبرای تعریف یک نشست (Session) استفاده کنید. شما موارد زیر را مشخص میکنید:
- Session name — a unique identifier (e.g.,
t6) - Rate — packets per second
- Duration —
infiniteor a fixed duration - Packet definition — Using scapy library for packet construction
- Direction —
ingressoregress - Interface — the interface where packets are injected
- Location — the RP/LC node
مثال پایه IPv4:
diagnostic packet-generator create t6 rate 10000 duration infinite packet IP(src="20.4.1.10",dst="20.5.1.10",ttl=64)/UDP()/Raw(load="a"*100) ingress interface TwentyFiveGigE0/0/0/4 location 0/RP0/CPU0
این کار یک نشست (Session) با نام ایجاد میکندt6که 10,000 بسته IPv4/UDP در ثانیه با محموله (Payload) 100 بایتی را از طریقTwentyFiveGigE0/0/0/4در جهت ورودی (Ingress) ارسال میکند.
گام ۲: شروع نشست (Session)
diagnostic packet-generator start t6 location all
گام ۳: تأیید نشست (Session)
show diagnostic packet-generator status t6 location 0/RP0/CPU0
هنگامی که نشست (Session) در وضعیت سالم قرار دارد، به دنبال این نشانگرها باشید:
| فیلد (Field) | مقدار مورد انتظار (Expected Value) |
|---|---|
Run_State |
running |
Applied rate |
Matches/Close to your configured rate |
Duration |
infinite (or configured value) |
| Packets / Bytes counters | Incrementing over time |
برای بررسیتمامنشستهای فعال به صورت یکجا:
show diagnostic packet-generator status all location 0/RP0/CPU0
در صورت تزریق ورودی (Ingress injection) و حذف بسته (Packet) به دلیل عدم تطابق در ارسال (Forwarding mismatch) یا نبود مسیر (No route) و موارد مشابه، شمارندههای بسته (Packet) و بایت (Byte) افزایش نخواهند یافت.
گام ۴: توقف و پاکسازی (Clean Up)
! Stop a running session
diagnostic packet-generator stop t6 location all
! Delete the session entirely
diagnostic packet-generator delete t6 location all
آدرسهای MAC پیشفرض و الزامات ارسال (Forwarding)
آدرسهای MAC مبدأ و مقصد پیشفرض (Default Source and Destination MAC Addresses)
تولیدکننده ترافیک داخلی به صورت خودکار آدرسهای MAC پیشفرض را بر اساس جهت تزریق (Injection) به بستههای تزریقشده اختصاص میدهد:
| جهت (Direction) | آدرس مک مبدأ (Source MAC) | آدرس مک مقصد (Destination MAC) |
|---|---|---|
| ورودی (Ingress) | 00:00:00:00:00:01(آدرس مک میزبان عمومی) |
آدرس مک رابط پورت ورودی |
| خروجی (Egress) | باید تعریف شود | باید تعریف شود |
براینشستهای تزریقشده ورودی (ingress-injected)، بسته به گونهای ساخته میشود که گویی از یک میزبان خارجی رسیده است — آدرس MAC مقصد روی آدرس MAC رابط خودِ روتر تنظیم میشود تا بسته پذیرفته شده و از طریق خط لوله (pipeline) عادی هدایت شود.در نشستها (sessions)، بسته (packet) بهگونهای ساخته میشود که گویی از یک میزبان خارجی ارسال شده است؛ بدین ترتیب که آدرس MAC مقصد بر روی آدرس MAC رابط خودِ روتر تنظیم میشود تا بسته پذیرفته شده و از طریق خط لوله (pipeline) عادی هدایت شود.
برای نشستهای (Sessions) تزریقشده در خروجی (Egress-injected)، بسته مستقیماً در مسیر خروجی قرار میگیرد و برای عملکرد صحیح ترافیک تولیدشده، هدر اترنت (Ether header) باید تعریف شود.تزریقشده در خروجی (egress-injected)در نشستها (sessions)، بسته مستقیماً در مسیر خروجی قرار میگیرد و برای عملکرد صحیح ترافیک تولید شده، هدر اترنت (Ether header) باید تعریف شود.
توجه:اگر سناریوی تست شما به آدرسهای MAC خاصی نیاز دارد (مثلاً برای مطابقت با یک ACL یا خطمشی)، میتوانید با گنجاندن یک هدر Ether در تعریف بسته (Packet)، مقادیر پیشفرض را بازنویسی کنید:
packet Ether(src="aa:bb:cc:dd:ee:01",dst="aa:bb:cc:dd:ee:02")/IP(...)/UDP()/Raw(...)
برچسبگذاری خودکار VLAN برای زیر-رابطها (Sub-interfaces)
هنگامی که ترافیک به یکزیر-رابط لایه ۳ (L3 sub-interface) به عنوان رابط ورودی تزریق میشود،تولیدکننده بسته (packet generator) به طور خودکارهدر VLAN(تگ 802.1Q) را بر اساس پیکربندی VLAN زیر-رابط به بسته اضافه میکند. نیازی نیست که به صورت دستی یک لایه Dot1Q در تعریف بسته بگنجانید؛ چرا که تولیدکننده این کار را برای شما انجام میدهد.
توجه:استفاده از زیر-رابط (Sub-interface) به عنوان رابط خروجی (Egress interface) پشتیبانی نمیشود، زیرا ترافیک تزریقشده خروجی همیشه مستقیماً روی بستر انتقال قرار میگیرد. برای مطابقت با چنین سناریویی، همیشه از هدر اترنت (Ethernet Header) تعریفشده به همراه تگ VLAN استفاده کنید.
الزام جدول مسیریابی (Forwarding Table)
تزریق ترافیک ورودی (Ingress) روی اینترفیس لایه ۳:برای اینکه ترافیک تولید شده به درستی هدایت (Forward) شود، جدول مسیریابی (FIB) روترباید دارای یک ورودی معتبربرای آدرس مقصد در بسته (Packet) باشد. اگر مسیر منطبقی برای IP مقصد بسته وجود نداشته باشد، بسته حذف (Drop) خواهد شد.
قبل از شروع نشست تولیدکننده ترافیک (Traffic Generator Session)، اطمینان حاصل کنید که پیشوند مقصد (Destination Prefix) در دسترس است:
show route <destination-ip> show cef <destination-ip>
این موضوع هم برای بستههای IPv4 و هم برای IPv6 صدق میکند. بدون وجود یک ورودی متناظر در جدول FIB، ممکن است بستههای تولید شده طبق انتظار خارج (Egress) یا هدایت (Forward) نشوند؛ صرفنظر از نرخ (Rate) پیکربندی شده یا وضعیت نشست (Session state).
تزریق ترافیک ورودی (Ingress) در رابط لایه ۲:برای ترافیک ورودی (Ingress) تولیدکننده ترافیک (TGEN) در یک پیکربندی لایه ۲، قابلیت تکمیل خودکار هدر اترنت پشتیبانی نمیشود و این ویژگی تنها مختص لایه ۳ است. کاربر باید هدر اترنت و هدرهای VLAN مرتبط را برای تزریق ترافیک به سمت یک رابط لایه ۲ مشخص نماید.
مثال
Ether(src="1:2:3:1:2:3",dst="1:2:3:a:b:c")/Dot1Q(vlan=2)/IP(src="10.1.1.1",dst="20.1.1.1",ttl=64,tos=184)/UDP()
سناریوهای نمونه
مثال ۱: ترافیک پایه IPv4 بین دو روتر (Router)
توپولوژی (Topology)
ایجاد و شروع یک جریان بسته (Packet stream) از R2 برای شبیهسازی ترافیک از R1 به سمت R3:
! Create the session
diagnostic packet-generator create t6 duration 600 rate 1000 packet IP(src="20.4.1.10",dst="20.5.1.10",ttl=64)/UDP()/Raw(load="a"*200) ingress interface TwentyFiveGigE0/0/0/4 location 0/RP0/CPU0
! Start the session
diagnostic packet-generator start t6 location all
! Verify packets are flowing
show diagnostic packet-generator status t6 location 0/RP0/CPU0
تأیید کنید کهRun_Stateنمایش داده میشوددر حال اجرا (running)و شمارندههای بسته/بایت (packet/byte counters) همانطور که در زیر نشان داده شده است، در حال افزایش هستند:
RP/0/RP0/CPU0:N1#show diagnostic packet-generator status t6 location 0/RP0/CPU0
Thu May 14 13:35:40.463 IST
0/RP0/CPU0:
Name Run_State Type Capture Set_Rate(pps) Applied_Rate(pps) Duration(sec) TC Phy_Interface NPU Slice IFG Packets Bytes
================================================================================================================================================================
T6 Running Ingress False 1000 998 600 0 TF0/0/0/4 0 0 0 12562 3529922
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Packet Details:
###[ Ethernet]###
dst = f4:33:92:91:57:15
src = 00:00:00:00:00:01
type = IPv4
###[ IP]###
version = 4
ihl = 5
tos = 0x0
len = 228
id = 1
flags =
frag = 0
ttl = 64
proto = udp
chksum = 0x4fec
src = 20.4.1.10
dst = 20.5.1.10
\options \
!! Output truncated for brevity
مثال ۲: بسته IPv4 با نشانگذاری DSCP
برای تست سیاستهای کیفیت خدمات (QoS)، بستهها را با یک مقدار خاصDSCPتزریق کنید. مقدار DSCP در فیلدtosاز هدر IP کدگذاری میشود. برای مثال، مقدار DSCPEF (46)به مقدار TOS نگاشت میشود184 (46 << 2 = 184).
diagnostic packet-generator create t8 duration 600 rate 1000 packet IP(src="20.4.1.10",dst="20.5.1.10",tos=184,ttl=64)/UDP()/Raw(load="a"*200) ingress interface TwentyFiveGigE0/0/0/4 location 0/RP0/CPU0
مثال ۳: بسته IPv6 با کلاس ترافیک (DSCP)
برای IPv6، مقدار DSCP در فیلدTraffic Class (tc) حمل میشود. همان DSCP با مقدار EF (46) بهtc=184.
diagnostic packet-generator create t1 rate 10000 duration infinte packet IPv6(src="2001:db8:1::2",dst="2001:db8:2::2",tc=184,hlim=16)/UDP()/Raw(load="f"*900) ingress interface TwentyFiveGigE0/0/0/4 location 0/RP0/CPU0
مثال ۴: اجرای همزمان چندین نشست (Session)
شما میتوانید چندین نشست (Session) را بهطور همزمان اجرا کنید که هرکدام دارای پارامترهای متفاوتی هستند. در این مثال، دو جریان (Stream) پروتکل IPv4 با مقادیر IP Precedence متفاوت (4 و 5) ایجاد شده است:
! Session 1: IPv4 with Precedence 4 (TOS=128) for 10 minutes
diagnostic packet-generator create t1 rate 10000 duration 600 packet IP(src="20.4.1.10",dst="20.5.1.10",tos=128,ttl=64)/UDP()/Raw(load="f"*900) ingress interface TwentyFiveGigE0/0/0/4 location 0/RP0/CPU0
! Session 2: IPv4 with Precedence 5 (TOS=160) for 15 minutes
diagnostic packet-generator create t2 rate 10000 duration 900 packet IP(src="20.4.1.10",dst="20.5.1.10",tos=160,ttl=64)/UDP()/Raw(load="f"*900) ingress interface TwentyFiveGigE0/0/0/4 location 0/RP0/CPU0
! Start both
diagnostic packet-generator start t1 location all
diagnostic packet-generator start t2 location all
! you can Also use
diagnostic packet-generator start all location all
! Verify all sessions
show diagnostic packet-generator status all location 0/RP0/CPU0
RP/0/RP0/CPU0:N1#show diagnostic packet-generator status all location all
Thu May 14 13:57:29.497 IST
0/RP0/CPU0:
Name Run_State Type Capture Set_Rate(pps) Applied_Rate(pps) Duration(sec) TC Phy_Interface NPU Slice IFG Packets Bytes
================================================================================================================================================================
T1 Running Ingress False 10000 10000 600 0 TF0/0/0/4 0 0 0 352815 346111515
T2 Running Ingress False 10000 10000 900 0 TF0/0/0/4 0 0 0 352804 346100724
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Total packet generators: 2
مرجع سریع: دستورات مدیریت نشست (Session Management Commands)
| Action | Command |
|---|---|
| ایجادیک نشست (Session) | diagnostic packet-generator create <name> rate <pps> duration <seconds|infinite> packet <definition> ingress|egress interface <intf> location <node> |
| شروعیک نشست (Session) | diagnostic packet-generator start <name> location all |
| تأییدیک نشست (Session) | show diagnostic packet-generator status <name|all> location <node> |
| توقفیک نشست (Session) | diagnostic packet-generator stop <name> location <node>|all |
| حذفیک نشست (Session) | diagnostic packet-generator delete <name> location <node>|all |
محدودیتها و الزامات کلیدی
- حداکثر نرخ:بسته به سرعت پورت متغیر است، اما جریانهای با نرخ پایین توصیه میشوند. تعداد pps بیشتر، منابع حافظه بیشتری اشغال میکند.
- حداکثر پهنای باند (Bandwidth):بسته به سرعت پورت، نرخ جریان و منابع حافظه داخلی متغیر است. حداکثر پهنای باند تست شده 50G با 8 نشست (Session) همزمان است.
- حداکثر اندازه بسته (Packet size):4 کیلوبایت
- حداکثر تعداد جریانها (Flows):بسته به pps، اندازه بسته و منابع حافظه داخلی متغیر است. در مدل 8712 با pps پایین و اندازه بسته ثابت، تا 256 جریان تست شده است. در مدل 8011، تا 160 جریان تست شده است.
- سینتکس بسته (Packet syntax):به سبک Scapy —
IP(),IPv6(),UDP(),TCP(),Raw() - No کپچر (Capture)پشتیبانی از قابلیت
Below table captures some scale we characterized in our lab with packet headers including auto generated headers not exceeding 62 bytes and payload filled with the same byte:
| PID | NPU | Packet Size | Interface Speed | Max Flows | PPS/Flow |
|---|---|---|---|---|---|
| 8712-MOD | K100 | 64, 1K,2K,4K | 1G | 256 | 100 |
| 8712-MOD | K100 | 64, 1K,2K,4K | 10G | 256 | 1000 |
| 8712-MOD | K100 | 64, 1K,2K,4K | 100G | 256 | 1000 |
| 8011-4G24Y4H | A100 | 64, 1K,2K,4K | 1G | 256 | 100 |
| 8011-4G24Y4H | A100 | 64, 1K,2K,4K | 10G | 160 | 1000 |
| 8011-4G24Y4H | A100 | 64, 1K,2K,4K | 100G | 160 | 1000 |
Additional Resources
- Cisco 8000 Traffic Generator Command Reference — official IOS XR command reference for
diagnostic packet-generator.