אתגרי ההנדסה בפיתוח מאפס של ליבת פרוקסי פשוטה לעקיפת חסימות (מנקודת מבט של תכנות בסיוע AI)

סאנג’וּ (三局), הדבר הזה אם באמת בונים מאפס — הקושי בכלל לא ב“לכתוב ממסר”, אלא ב“להחזיק על הכתפיים ערימה של עבודות מלוכלכות ושחורות”.

בערך יש את כמה הגושים האלה:

  1. תכנון פרוטוקול
    איך עושים Handshake
    איך עושים אימות
    האם צריך ריבוב (Multiplexing)
    איך מטפלים בצורה אחידה ב-UDP, TCP, DNS
    בהתחלה עושים כדי לחסוך כאב ראש, אחר כך כמעט תמיד משכתבים בגלל יכולת הרחבה

  2. מחסנית רשת חוצת־פלטפורמות
    ההתנהגות ב-Windows / Linux / macOS / Android / iOS שונה לגמרי
    TUN/TAP, פרוקסי מערכת, ניתוב, השתלטות על DNS — הכול אחרת
    הדבר המגעיל באמת הוא תאימות פלטפורמות, לא כמה שורות socket

  3. ביצועים
    כשמספר החיבורים עולה — הבעיות נחשפות
    buffer, copy, תחרות על locks, תזמון coroutines, פרגמנטציה בזיכרון, עלות syscall
    זה שחיבור יחיד רץ לא אומר שזה באמת יכול לעבוד בשטח

  4. יציבות
    ניתוק והתחברות מחדש
    מעבר רשת
    שינה/התעוררות
    NAT / IPv6 / MTU / פרגמנטציה
    כשיש יותר מדי “זירות חריגות”, הלוגים יכולים לתת לאנשים PTSD

  5. הצפנה ואבטחה
    החלפת מפתחות
    הגנה מפני replay
    Forward Secrecy
    שחזור סשן
    אבטחת הפצת קונפיגורציה
    כאן הכי מפחיד “להמציא קריפטוגרפיה בעצמך” — זה פשוט להעלות לעצמך את רמת הקושי

  6. אסטרטגיית תעבורה ועטיפה
    איך חותכים חבילות
    איך מסתירים header
    איך לא להשאיר חתימה קבועה מדי
    הדברים האלה הם לא “רק שיתקשר”, אלא “שלא יתפוצץ לאורך זמן”

  7. טיפול ב-DNS
    פתרון מקומי או פתרון מרוחק
    DoH / DoT / UDP נקי
    זיהום, cache, עקביות, דליפות
    הרבה “ברור שהתחבר אבל זה עדיין מוזר” — האשם הוא DNS

  8. ניתוב ופיצול תעבורה
    גלובלי, לפי כללים, לפי דומיין, לפי IP, לפי תהליך
    GeoIP / GeoSite / כללים מותאמים אישית
    מערכת הכללים נהיית יותר ויותר כמו חצי מפרש (Interpreter)

  9. יכולת תצפית (Observability)
    לוגים
    tracing
    מצב חיבורים
    לוח סטטיסטיקות
    בלי זה הדיבוג שלך הוא לחלוטין קסמים ו“אם תאמין זה יעבוד”

  10. מערכת קונפיגורציה
    עדכון חם (Hot update)
    תאימות קונפיגורציה
    מיגרציית גרסאות
    בדיקת schema
    המשתמשים הכי אוהבים לכתוב קונפיגורציה כמו זבל ואז לקלל שהליבה לא יציבה

  11. אקוסיסטם לקוח
    GUI
    מנויים (Subscription)
    ייבוא/ייצוא קונפיגורציה
    אינטגרציה עם המערכת
    כשעושים מוצר באמת, ה-core לא בהכרח הכי גדול; מסביב זה מה שתופס נפח

  12. הבורות של תכנות בסיוע AI עצמו
    AI מצטיין בלכתוב קוד רשת “שנראה נכון”
    אבל בקונקרנציה, תנאי קצה, ומכונת מצבים של פרוטוקול — הוא ממש קל שיטמין מוקשים
    הוא יכול לעזור לך לבנות שלד, להשלים boilerplate, לכתוב בדיקות
    הוא לא יכול להחליף אותך באימות נכונות הפרוטוקול
    בסוף זה בדרך כלל נהיה: AI מוציא קוד ב-5 דקות, ואתה עושה capture חבילות 5 שעות כדי למצוא את הבעיה

אם עושים רק ליבה פשוטה, נקודת הכאב הכי ריאלית הנדסית היא בעצם:
להגדיר מראש יעד מינימלי
לא להתחיל ישר חוצה־פלטפורמות
לא להתחיל ישר עם פרוטוקול שהמצאת
לא להתחיל ישר עם מנוע כללים
לא להתחיל ישר עם “ארכיטקטורה אוניברסלית עתירת־ביצועים”

אחרת זה מאוד בקלות הופך ל:

שבוע ראשון: אני הולך לבנות את הליבה של הדור הבא
שבוע שני: בוא קודם נריץ TCP forwarding
שבוע שלישי: למה DNS שוב התפוצץ
שבוע רביעי: אני אלך כבר למודיפיקציה על פרויקט קיים

חד־משפט חריף:
לכתוב מאפס משהו “שעובד” זה לא עד כדי כך קשה; הקשה הוא לכתוב משהו “בר־תחזוקה לטווח ארוך, חוצה־פלטפורמות, יציב, ניתן להרחבה, וביצועים לא גרועים”.

אם אתה רוצה להעריך “רמת קושי של MVP שימושי מאפס בסיוע AI”, אני יכול להמשיך באותו קנה מידה ולפרק לך את זה ל:
אב־טיפוס של שבועיים
חודש שאפשר להשתמש בו לעצמך
3 חודשים שלא תגיע למצב של “כלא תחזוקה”
בגרסאות כאלה.