Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

شبکه در حرکت و پروتکل‌های تبادل

(Networking in Motion)

مشخصات فصل

مرجع اصلی: کتاب Developing High-Frequency Trading Systems (انتشارات Packt) نویسندگان: سباستین دونادیو، سوراو گوش، جان ریزو، رومن روسیه محدوده صفحات در کتاب: صفحات ۹۳ تا ۱۲۶


مقدمه

در فصل چهارم با زیرساخت‌های پردازنده، حافظه‌های NUMA، سطوح کش و سیستم‌عامل آشنا شدیم. اما در معاملات فرکانس بالا (HFT)، داده‌ها در خلاء پردازش نمی‌شوند؛ آن‌ها با سرعت نور در طول فیبرهای نوری و امواج مایکروویو میان صرافی‌ها و سیستم‌های معاملاتی در حال حرکت هستند.

این فصل به کالبدشکافی کامل زیرساخت شبکه، سوئیچ‌ها، پروتکل‌های انتقال مالی و چرخه حیات بسته‌های داده می‌پردازد. مباحث این فصل عبارتند از:

  • مدل‌های مفهومی شبکه (OSI و TCP/IP)
  • سازوکار درونی سوئیچ‌ها، صف‌بندی و حالت‌های سوئیچینگ (Cut-Through در برابر Store-and-Forward)
  • پروتکل‌های انتقال: مقایسه TCP با UDP و Multicast
  • طراحی پروتکل‌های مالی: بررسی عمیق FIX، نسخه فشرده FAST و پروتکل‌های باینری ITCH/OUCH و SBE
  • چرخه عمر بسته داده (Packet Life Cycle) از سیم فیزیکی تا کارت شبکه و پشته کرنل
  • مانیتورینگ سخت‌افزاری شبکه با Network TAP
  • همگام‌سازی زمان فوق دقیق با پروتکل‌های NTP و PTP (در مقیاس نانوثانیه)

۱. مدل‌های مفهومی شبکه (Network Conceptual Models)

برای درک رفتار شبکه، از مدل مرجع هفت لایه‌ای OSI و مدل ساده‌شده چهار لایه‌ای استفاده می‌شود:

لایه‌های حیاتی در HFT:

  1. لایه ۱ (فیزیکی - Physical): کابل‌های مسی، فیبر نوری، فرستنده‌ها و گیرنده‌های فوتونیکی، امواج مایکروویو.
  2. لایه ۲ (پیوند داده - Data Link): فریم‌های اترنت (Ethernet Frames)، مک‌آدرس‌ها (MAC Addresses) و سوئیچ‌ها.
  3. لایه ۳ (شبکه - Network): پروتکل اینترنت (IP) و مسیریابی بسته‌ها.
  4. لایه ۴ (انتقال - Transport): پروتکل‌های TCP (برقراری اتصال پایدار) و UDP (ارسال فوق‌سریع دیتاگرام).
  5. لایه کاربرد (Application): پروتکل‌های پیام‌رسانی مالی مانند FIX، ITCH، OUCH و SBE.

۲. ارتباطات شبکه‌ای و عملکرد سوئیچ‌ها در HFT

ارتباط میان سرور معاملاتی و صرافی از طریق زنجیره‌ای از گره‌ها و سوئیچ‌ها صورت می‌گیرد:

نحوه کارکرد درونی سوئیچ (Switch Architecture):

یک سوئیچ بسته را از پورت ورودی (Ingress) دریافت کرده، با جستجوی آدرس مقصد، آن را به صف پورت خروجی متناظر (Egress) هدایت می‌کند.

رابطه اندازه بسته با نرخ تبادل (Throughput vs Packet Rate):

هرچه اندازه بسته‌ها کوچک‌تر باشد، تعداد بسته‌های پردازش‌شده در هر ثانیه افزایش می‌یابد که پردازنده‌ها و سوئیچ‌ها را به شدت تحت فشار محاسباتی قرار می‌دهد.


صف‌بندی در سوئیچ و پدیده خطرناک HOL Blocking

هنگامی که حجم ترافیک ارسالی به یک پورت خروجی از پهنای باند فیزیکی آن فراتر رود، بسته‌ها در صف سوئیچ انباشته می‌شوند:

پدیده انسداد ابتدای خط (Head-of-Line / HOL Blocking)

اگر یک بسته در ابتدای صف پورت معطل بماند، مانع عبور تمام بسته‌های پشت سر خود می‌شود؛ حتی بسته‌هایی که مقصد دیگری دارند! این امر باعث تاخیرهای متغیر (Jitter)، جابه‌جا شدن ترتیب بسته‌ها و در بدترین حالت، افت پکت (Packet Drop) می‌شود. اگر بسته‌های داده‌های بازار بیفتند، بازسازی دفترچه سفارشات ناممکن شده و الگوریتم کور می‌شود.


حالت‌های سوئیچینگ: Cut-Through در برابر Store-and-Forward

سوئیچ‌ها برای ارسال یک فریم اترنت، بر اساس میزان بایتی که ابتدا باید بخوانند به سه دسته تقسیم می‌شوند:

  1. حالت Store-and-Forward:
    • سوئیچ ابتدا تمام فریم را به طور کامل دریافت می‌کند (بین ۶۴ تا ۱۵۱۸ بایت)، سپس کد کنترل خطای FCS (CRC) را محاسبه کرده و در صورت سلامت فریم، آن را فوروارد می‌کند.
    • بالاترین امنیت اما بیشترین تاخیر زمانی (نامناسب برای HFT).
  2. حالت Cut-Through Fast-Forward (استاندارد مطلق HFT):
    • سوئیچ به محض خواندن تنها ۶ بایت اول فریم (که حاوی مک‌آدرس مقصد است)، بلافاصله شروع به ارسال بایت‌ها به پورت خروجی می‌کند؛ حتی قبل از اینکه انتهای بسته به پورت ورودی رسیده باشد!
    • تاخیر در حد ده‌ها نانوثانیه؛ هیچ بررسی خطایی انجام نمی‌شود.
  3. حالت Fragment-Free:
    • سوئیچ ۶۴ بایت اول فریم را می‌خواند تا مطمئن شود بسته حاصل از تصادم الکتریکی (Collision Fragment) نیست، سپس ارسال می‌کند.

انواع سوئیچ‌ها: لایه ۱، لایه ۲ و لایه ۳

  • سوئیچ لایه ۱ (Layer 1 Switch): به عنوان یک پچ‌پنل الکترونیکی قابل برنامه‌ریزی عمل می‌کند. این دستگاه بدون خواندن هیچ هدر یا بسته‌ای، بیت‌های الکتریکی یا نوری را مستقیماً از یک پورت به پورت دیگر وصل می‌کند. تاخیر آن نزدیک به صفر (زیر ۵ نانوثانیه) است (نظیر سوئیچ‌های سری Arista 7130).
  • سوئیچ لایه ۲: بر اساس مک‌آدرس در جدول MAC کار می‌کند و خطاها را در لایه دیتا لینک فیلتر می‌کند.
  • سوئیچ لایه ۳ و NAT: سوئیچ‌هایی که کار مسیریابی IP را انجام می‌دهند. عمل ترجمه آدرس شبکه (NAT) به دلیل دستکاری هدر IP پردازنده را به شدت درگیر می‌کند و برای HFT باید حتماً در سخت‌افزار اختصاصی (ASIC) اجرا شود.

۳. مفاهیم پروتکل‌ها و لایه‌های انتقال

زیرساخت شبکه صرافی‌ها و سرورهای HFT بر بستر اترنت استوار است:

روش‌های انتشار پیام در اترنت:

  • تک‌پخشی (Unicast): ارتباط نظیر‌به‌نظیر میان یک فرستنده و یک گیرنده (شکل ۵.۹).
  • همه‌پخشی (Broadcast): ارسال پیام به تمام میزبان‌های موجود در آن شبکه محلی (شکل ۵.۱۰).
  • چندپخشی (Multicast): ارسال یک جریان داده واحد به گروهی از مشترکین علاقه‌مند (شکل ۵.۱۱).

مدیریت مالتی‌کست با IGMP Snooping

در صرافی‌ها، فید زنده داده‌های بازار از طریق Multicast پخش می‌شود. سوئیچ‌های هوشمند با استفاده از IGMP Snooping بسته‌ها را تنها به پورت‌هایی می‌فرستند که سرورهای متصل به آن‌ها رسماً عضو گروه مالتی‌کست شده باشند؛ در غیر این صورت ترافیک به اشتباه مانند Broadcast به کل شبکه سرازیر می‌شود.


مقایسه پروتکل‌های لایه انتقال: TCP در برابر UDP

شاخصپروتکل TCPپروتکل UDP
نوع اتصالاتصال‌گرا (Connection-Oriented با Handshake سه‌مرحله‌ای)بدون نیاز به اتصال اولیه (Connectionless)
تضمین تحویل۱۰۰٪ تضمین‌شده با تاییدیه (ACK) و ارسال مجدد بسته گمشدههیچ تضمینی برای تحویل یا ترتیب بسته‌ها وجود ندارد
سرعت و تاخیرکندتر با سربار هدر ۲۰ بایتی و کنترل ازدحامفوق‌العاده سریع با هدر سبک ۸ بایتی
پشتیبانی از مالتی‌کستغیرممکن (فقط Unicast)کاملاً هماهنگ با Multicast
کاربرد در تریدینگارسال سفارشات حساس (Order Entry)دریافت زنده مظنه‌ها و تیک‌ها (Market Data)
  • ترند نوین UFO (UDP for Orders): امروزه برخی صرافی‌های پیشرو برای تسریع در شلیک سفارش‌ها، از UDP برای ارسال سفارش استفاده کرده و مدیریت شماره سریال‌ها و کشف بسته‌های گم‌شده را به لایه اپلیکیشن می‌سپارند.

۴. پروتکل‌های مالی: از استانداردهای متنی تا باینری

مراحل استاندارد ارتباط مالی:

  1. ورود و احراز هویت (Logon)
  2. اشتراک در نمادها و فیدهای قیمت (Subscription)
  3. دریافت مظنه‌ها و ارسال سفارش‌ها
  4. ارسال ضربان قلب حیات اتصال (Heartbeat)
  5. خروج و پایان ارتباط (Logout)

پروتکل FIX (Financial Information eXchange)

پروتکل FIX در سال ۱۹۹۲ برای مبادلات سهام بین Fidelity و Salomon Brothers متولد شد. این یک پروتکل مبتنی بر متن (String-based) و انسان‌خوان است.

فرمت پیام FIX:

پیام‌ها به صورت جفت‌های «تگ=مقدار» هستند که با کاراکتر نامرئی SOH (ASCII 1 یا |) از هم جدا می‌شوند:

  • تمام پیام‌ها با تگ نسخه آغاز می‌شوند: 8=FIX.4.4|
  • تگ ۹: طول بدنه پیام (BodyLength)
  • تگ ۳۵: نوع پیام (MsgType)
  • تگ ۴۹: شناسه فرستنده (SenderCompID)
  • تگ ۵۶: شناسه گیرنده (TargetCompID)
  • تگ ۳۸: حجم سفارش (OrderQty)
  • تگ ۴۴: قیمت پیشنهادی (Price)
  • تگ ۱۰: کد اعتبارسنجی جمع خطای باینری (CheckSum)
نمونه یک پیام ورود (Logon):
8=FIX.4.4|9=76|35=A|34=1|49=TRADER1|52=20220117-12:11:44.224|56=VENUE1|98=0|108=30|141=Y|10=134|

جریان پیام‌های FIX در چرخه معاملات:


معایب FIX و پیدایش پروتکل‌های فوق سریع باینری

پردازش پیام‌های متنی FIX در CPU مستلزم پارس کردن کاراکتر به کاراکتر رشته‌ها و تبدیل متن به اعداد اعشاری است که ده‌ها میکروثانیه زمان تلف می‌کند. برای حل این مشکل دو نوآوری پدید آمد:

  1. پروتکل FAST (FIX Adapted for Streaming): نسخه فشرده‌شده FIX که ساختار داده را از قبل در قالب‌های از پیش تعریف‌شده (Templates) ثبت می‌کند تا فیلدهای تکراری حذف شوند.
  2. پروتکل‌های باینری SBE (Simple Binary Encoding):
    • پروتکل‌های ITCH و OUCH (نزدک و CBOE):
      • ITCH: پروتکل باینری فوق‌سریع برای دریافت داده‌های بازار و دفترچه سفارشات با فرمت بایت‌های مستقیم بدون نیاز به پارس متنی.
      • OUCH: پروتکل باینری اختصاصی برای ثبت، لغو و اصلاح سفارشات با حداقل تاخیر روی TCP.
    • پروتکل باینری بورس شیکاگو (CME SBE): فریم‌های استاندارد باینری برای معاملات قراردادهای آتی کم‌تاخیر.

۵. شبکه‌های داخلی در برابر شبکه‌های خارجی

  • شبکه خارجی (Exterior Network): پورت‌ها و خطوط اختصاصی ارتباط مستقیم با صرافی‌ها با استفاده از پروتکل‌های بورس.
  • شبکه داخلی (Interior Network): بستر ارتباط سرور معاملاتی با سرورهای پایش ریسک، سرور ثبت موقعیت و لاگینگ. برای حداقل تاخیر در شبکه داخلی، ارتباطات سرورها به صورت مستقیم یا بر روی تراشه‌های FPGA درون کارت شبکه پیاده‌سازی می‌شوند.

۶. کالبدشکافی چرخه عمر بسته داده (Packet Life Cycle)

هنگامی که یک پیام مالی از صرافی مخابره می‌شود، به صورت بسته‌ای با ساختار زیر درون شبکه حرکت می‌کند:


مراحل حرکت بسته از سیم تا برنامه معاملاتی در لینوکس

تصویر زیر مسیر پرپیچ‌وخم یک بسته داده بازار را از درون سخت‌افزار تا لایه‌های کرنل لینوکس نشان می‌دهد:

گام‌های اجرایی استاندارد سیستم‌عامل:

  1. دریافت در فیزیک کارت شبکه (NIC): کارت شبکه بسته را دریافت کرده و مک‌آدرس مقصد را تطبیق می‌دهد.
  2. بررسی کد سلامت (FCS Checksum): اعتبارسنجی تمامیت بسته در سخت‌افزار کارت شبکه.
  3. انتقال با DMA: کارت شبکه با استفاده از دسترسی مستقیم به حافظه (DMA)، بسته را بدون دخالت پردازنده به درون بافر حلقوی دریافتی (RX Ring Buffer) در رم کپی می‌کند.
  4. صدور وقفه سخت‌افزاری (Top-Half Interrupt): پردازنده کار فعلی را متوقف کرده، جدول توصیف‌گر وقفه (IDT) را می‌خواند و روتین وقفه درایور کارت شبکه را اجرا می‌کند.
  5. پردازش وقفه نرم‌افزاری (Soft-IRQ / Bottom-Half): پردازنده برای هر بسته یک ساختار داده سوکت به نام sk_buff (SKB) در رم تخصیص می‌دهد، هدرها را جدا می‌کند و بسته را وارد پشته استاندارد شبکه لینوکس (Linux Network Stack) می‌کند.
  6. کپی به فضای کاربر: برنامه ما با فراخوانی تابع سیستمی recv() بسته را از فضای کرنل به فضای کاربر کپی می‌کند.
پیش‌زمینه تکنولوژی Kernel Bypass

این فرآیند طولانی کرنل، صدها کپی حافظه و چندین کانتکست‌سوئیچ تحمیل می‌کند. در فصل‌های ۶ و ۷ خواهیم دید که چگونه غول‌های HFT با تکنیک Kernel Bypass (مثل Solarflare OpenOnload یا DPDK) این پشته لینوکس را دور می‌زنند و بسته را مستقیماً از کارت شبکه به برنامه تحویل می‌دهند!


۷. مانیتورینگ سخت‌افزاری شبکه با Network TAP

برای تحلیل تاخیر بدون افت کارایی سرورها، از سخت‌افزارهای پایشگر Network TAP استفاده می‌شود:

  • تپ‌های غیرفعال (Passive TAP): در فیبرهای نوری، پرتو نور ورودی توسط یک منشور نوری شکافته می‌شود (مثلاً ۷۰٪ به سرور معاملاتی و ۳۰٪ به سرور مانیتورینگ لاگ). این دستگاه نیاز به برق ندارد و حتی در صورت قطع برق، جریان ترید صدمه‌ای نمی‌بیند و هیچ تاخیری ایجاد نمی‌شود.
  • تپ‌های فعال (Active TAP): در شبکه‌های الکتریکی مسی که دارای مدارهای رله خودکار برای زمان قطعی برق هستند.

⏱ ۸. توزیع و همگام‌سازی زمان فوق دقیق در HFT

در HFT زمان با ارزش‌ترین منبع است. برای بازسازی دقیق رویدادهای بازار و رعایت قوانین انطباق مالی، ساعت تمام سرورها باید بر اساس زمان هماهنگ جهانی (UTC) همگام باشند.

سطوح پروتکل NTP در برابر PTP:

  1. پروتکل NTP (Network Time Protocol):
    • همگام‌سازی نرم‌افزاری با لایه‌های سلسله‌مراتبی (Stratum 0 متصل به ماهواره‌های اتمی GPS/GNSS، لایه Stratum 1 سرورهای متصل مستقیم).
    • دستیابی به دقت در مقیاس میلی‌ثانیه یا میکروثانیه.
  2. پروتکل فوق دقیق PTP (Precision Time Protocol - استاندارد IEEE 1588):
    • برچسب‌گذاری سخت‌افزاری زمان (Hardware Timestamping): زمان دقیق ورود و خروج بسته توسط خود تراشه کارت شبکه با سیگنال‌های پالس در ثانیه (PPS) با دقت نانوثانیه و پیکوثانیه ثبت می‌شود!
    • سوئیچ‌های سازگار با PTP مدت زمان ماندگاری بسته درون سوئیچ را اندازه‌گیری و کالیبره می‌کنند.
    • در هر دیتاسنتر یک ساعت مادر فوق دقیق به نام PTP Grandmaster Clock قرار داده می‌شود تا تمام کلاسترهای سرور معاملاتی همزمان شوند.

چرا همگام‌سازی تا این حد حیاتی است؟

برای تریدرهای مستقر در هم‌مکانی (Colocation)، زمان رسیدن بسته کمتر از ۵ میکروثانیه است؛ بنابراین اگر ساعت سیستم‌ها حتی چند میکروثانیه عدم انطباق داشته باشد، اندازه‌گیری متریک‌های سرعت، کشف صف‌ها و ثبت قانونی لاگ‌ها با خطا مواجه خواهد شد.


خلاصه و جمع‌بندی فصل پنجم (Summary)

در این فصل، زیرساخت ارتباطی شبکه‌های معاملات فرکانس بالا بررسی شد:

  1. استفاده از سوئیچینگ فوق‌سریع Cut-Through برای حذف تاخیر پردازش فریم‌ها.
  2. برتری UDP Multicast برای انتشار دیتای بازار و لزوم پروتکل‌های باینری نظیر ITCH/OUCH و SBE در برابر پروتکل متنی FIX.
  3. شناخت مراحل گذر بسته از کابل تا بافر حلقوی DMA و پشته کرنل لینوکس.
  4. مانیتورینگ بدون تاخیر با استفاده از Passive Optical TAP.
  5. همگام‌سازی ساعت‌ها با دقت نانوثانیه‌ای پروتکل PTP IEEE 1588.

در فصل بعدی (06 - بهینه‌سازی OS و ساختارهای داده Lock-Free)، وارد مباحث پیشرفته بهینه‌سازی معماری سیستم‌عامل، حذف Context Switch، ساختارهای داده بدون قفل (Lock-Free) و تکنیک‌های پیش‌واکشی حافظه (Pre-fetching) خواهیم شد!