פרוטוקול HTTP

  • הוסף לסימניות
  • #1
שלום רב,

כתיבה ותחימה טובה.

לאחורנה אני מנסה להבין מבחינה ארכיטקטורה / רשתות שאלה שדרוש שנשאל אותה:
למה HTTP עובד על TCP ולא על UDP ?

מלבד משמעות היסטורית יש לזה עוד רובד ?
 
  • הוסף לסימניות
  • #2
כי אתה רוצה לדעת שכל החבילות הגיעו
לUDP אין לחיצת יד
 
  • הוסף לסימניות
  • #3
חשבתי על זה,

אך ה HAND SHAKE מתבצע כל פאקט. למה לא להגדיר את כמות הפאקטים ולבצע HANDSHAKE אחרי 5 מגה או בסוף החבילה.
כך כמות הסיגנאלים ב L1 היא תהיה נמוכה יותר.

ומה הנפקא מינה ? כלפי עולם ה BIG DATA. אם אני צריך להעתיק 1 PETA BYTE
אני יכול לחסוך חלק לא קטן מזמן ההעתקה.
 
  • הוסף לסימניות
  • #4
אדרבא TCP...
tcp-joke1-e1411470710569.png
 
  • הוסף לסימניות
  • #6
נכתב ע"י יהודהלה;1382944:
חשבתי על זה,

אך ה HAND SHAKE מתבצע כל פאקט. למה לא להגדיר את כמות הפאקטים ולבצע HANDSHAKE אחרי 5 מגה או בסוף החבילה.
כך כמות הסיגנאלים ב L1 היא תהיה נמוכה יותר.

ומה הנפקא מינה ? כלפי עולם ה BIG DATA. אם אני צריך להעתיק 1 PETA BYTE
אני יכול לחסוך חלק לא קטן מזמן ההעתקה.

זה לא כל פאקט. זה משתנה באותו זמן מ 1 והלאה עד שנהיה שגיאה ואז זה יורד בחזרה.
כאילו יש אלגוריתם כזה ב TCP שהוא בודק עד כמה אפשר לשלוח חבילות בלי אישור.

אתה יכול לראות ב wireshark שבהורדה יש בסביבות 3 חבילות לכל אישור. זה משתנה לפי ה latency והרוחב פס.

בתאכלס HTTP זה יכול לעבור רק דרך פרוטוקול שהוא stream ולא דרך UDP שהוא לא stream .

אם תרצה לממש הורדה של קובץ למשל ב udp תמצא את עצמך מממש את פרוטוקל tcp כי לא כל חבילה מגיעה לקצה השני.
 
  • הוסף לסימניות
  • #7
נכתב ע"י עשרים ושתים;1383057:
כלומר ביט אחד השתבש בדרך 5 מגה לפח...
כיום 5 מגה זה לא הרבה. אם ביט אחד לא עבר, יוריד מחדש את אותם ה 5 מגה.
 
  • הוסף לסימניות
  • #8
נכתב ע"י mat;1383075:
זה לא כל פאקט. זה משתנה באותו זמן מ 1 והלאה עד שנהיה שגיאה ואז זה יורד בחזרה.
כאילו יש אלגוריתם כזה ב TCP שהוא בודק עד כמה אפשר לשלוח חבילות בלי אישור.

אתה יכול לראות ב wireshark שבהורדה יש בסביבות 3 חבילות לכל אישור. זה משתנה לפי ה latency והרוחב פס.

בתאכלס HTTP זה יכול לעבור רק דרך פרוטוקול שהוא stream ולא דרך UDP שהוא לא stream .

אם תרצה לממש הורדה של קובץ למשל ב udp תמצא את עצמך מממש את פרוטוקל tcp כי לא כל חבילה מגיעה לקצה השני.

1. הרעיון הוא להגדיל את כמות החבילות כמו ב TCP - היינו ל 100 חבילות לערך עם בממוצע משקל חבילה כ 68K כך יוצא 6.8M לכל תהליך בדיקה.

2. לא הבנתי את מה שכתבת בנושא HTTP - מה שאני מנסה לבדוק האם HTTP מתאים ל STREAM - לרוב STREAMING עובר על פרוטוקול UDP.

3. בנושא של הורדה. בגדול אתה צודק אך כאן אני חוסך את כל הפאקטים של FIN, ACK
וכו' שהם די מיותרים לשם הורדה. בנושא של מכניזם כמו שכתבתי ב1. מגדיל ל 100 פאקטים פר פאקט בדיקה.
 
  • הוסף לסימניות
  • #9
1. קודם אין אף ספק אינטרנט שיכול להעביר יותר מ MTU של 1500 בתים בחבילה. ממילא כל חבילה זה מקסימום 1.5K כולל מידע. ואם יש בדרך pppoe או l2tp זה עלול להוריד את הגודל המקסימלי בעוד הרבה.

אפשר לראות את זה שמריצים פקודת ifconfig בלינוקס. אז כתוב MTU:1500.
וגם אתה יכול לראות שב lo זה MTU:65536. אבל זה רק פנימי וזה לא באינטרנט.

2. אם אתה שולח חבילות בUDP אין לך שום אינדקציה לזה שהם הגיעו. ואז אתה יכול לשלוח חבילה ולקבל תשובה ממערכת ההפעלה שזה נשלח. אוקי.
עכשיו אם יש לך 5 גיגה לשלוח מה תעשה. תשלח את הכל אחד אחרי השני בלי לבדוק אם זה הגיע.
אוקי מה יקרה שתשלח. ברגע שתעבור את הרוחב פס שיש לך אצל הספק או בתשתית הספק יזרוק את כל החבילות לפח. ולא תדע שהם הלכו לפח. לכן צריך להיות גם קצב שליחה. אי אפשר לשלוח בלי אבחנה.
ואת כל זה עושה ה TCP הוא לא יודע כמה הרוחב פס. והוא שולח בגלים עולה ויורד עד שהו מזהה את הרוחב פס.

זה גם נכון מתי שאתה מתחיל עוד הורדה של TCP על אותו רוחב פס. אז הוא גם כן מזהה לפי השגיאות שרוחב הפס ירד.

TCP זה דבר כל כך דינאמי ומתוחכם שאפשר לזהות באיזה מערכת הפעלה מדובר לפי הצורת התנהגות של מנגנון הTCP .

אם יש לך שיפורים אתה מוזמן לעיין פה.
https://github.com/torvalds/linux/blob/master/net/ipv4/tcp.c

אולי תוכל לעזור לפרוטוקול להיות יותר מהיר.

3. STREAMING שעובר על פרוטוקול UDP זה דברים שלא נורא אם פאקט אבד בדרך. כמו למשל דו שיח בין שני אנשים. הקצב של השליחה הוא לא נורא מהר וגם אם התפספס משהו זה בבחינת עבר זמנו בטל קורבנו.
 
  • הוסף לסימניות
  • #10
נכתב ע"י יהודהלה;1383136:
כיום 5 מגה זה לא הרבה. אם ביט אחד לא עבר, יוריד מחדש את אותם ה 5 מגה.
5 מגה זה לא הרבה אבל זה פי 40מליון!!! מביט אחד כלומר אם יש לך שיבוש של 1 ביט על כל 40 מליון ביט תקינים אין לך תקשורת בכלל.

חוץ מזה כשרת WEB אני לא צריך להתרגש מריבוי בקשות של הלקוח זה לא פוגע לי במהירות העלאה .

נתאר לעצמנו מצב שבו כל בקשה משרת WEB גורמת לו לשלוח 5 מגה
בקשה ששוקלת פחות מK1 יוצרת תגובה של יותר מפי 5000 בשרת. - הזדמות פז לDDOS
שרת עם מהירות העלאה של 100M יוכל לתת מענה ל20 לקוחות בו זמנית. והשאר שיחכו

אגב ישנו פרוייקט מעניין בנושא
https://github.com/InstantWebP2P/node-httpp
 
  • הוסף לסימניות
  • #11
mat, אני לא מתיימר לשפר את TCP.
השיפור שחשבתי הוא בא לפתור בעייה ספציפית בתוך רשת LAN מבוססת GbE שקצב שם כ 1Gbps
כמובן שעשיתי סוג-של אקסטראפולציה על עולם האינטרנט


לדוגמה: על כל צ'אנק של 5 מגה לשלוח פאקט שהגיעה ה5M (כדוגמת חתימה של MD5)
ואז אם החתימה לא נכונה אני מבקש להחליף את הצ'אנק ומנסה לשלוח עוד פעם את ה 5M.
(אם תרצה: ע"פ עקרונות UDP https://github.com/torvalds/linux/blob/master/net/ipv4/udp.c)

האם לסניפר שלי יהיה פחות פאקטים לא רלונטים ברשת ?
יש לי טענה בעולם הרשתות כזו: פחות פאקטים - יותר מהר / יותר מידע

עשרים ושתים,
ה DDOS לא כ"כ רלוונטי כאן כי זה עדיין מנוהל ע"פ החוקי MTU וה UDP, היינו הכמות פאקטים תהיה יותר גדולה של "נטו" מידע. ובמקום כמו TCP שיבצע פינג-פונג על כל פריים / פאקט. הצעאה שלי היתה להרחיב את מתי יבתצע ווידוא שהחומר אכן הגיע וכמובן מנגנון FALLBACK במידה והיגע חומר פגום.

ועוד משהו לכל קוראי היקרים,
גמר חתימה טובה !!! :)
https://github.com/torvalds/linux/blob/master/net/ipv4/udp.c
 

פרוגבוט

תוכן שיווקי
פרסומת

פוסטים חדשים שאולי לא קראת....

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה