high-performance browser networking chapter 2, part 1

Introduction

مقدمة الفصل بتتكلم عن two protocols بتقوم عليهم شبكة الإنترنت، الإنترنت هو الشبكة اللي مجازًا بنعتبرها هي ال Interconnection الوحيد في العالم، وبمعنى أدق شبكة الإنترنت هي network of networks:

- أولاً، ال ip protocol - البروتوكول المسؤول عن ال host-to-host routing and addressing
- ثانيًا، ال tcp - transmission control protocol وده البروتوكول المسؤول عن ضمان دقة عملية الإرسال

فلو كان ال ip protocol مش reliable channel فال

TCP provides the abstraction of a reliable network running over unreliable channel

دي أهم نقطة ممكن تفتكرها عن ال tcp protocol وباقي الفصل بيتكلم عن الخصائص اللي بيوفرها ال tcp عشان يضمن ال reliability دي، وبشكل إجمالي مش تفصيلي، من الخصائص دي الآتي:

- عملية ال retransmission لل lost data؛ لو حصل وفيه داتا وقعت في الطريق ال tcp مسؤول إنه يعيد إرسالها تاني.
- عملية ال in order delivery؛ تخيل ان ال request اللي هتبعته هيتقسم لأكتر من packets فكرة إن ال packets توصل بنفس الترتيب اللي اتبعتت بيه مش مضمونة! كل packet ممكن تاخد طريق مختلف عن أختها على حسب ظروف وعوامل متغيرة، وده بدوره هيسبب إن فيه اختلاف في timing الوصول. ال tcp protocol الناحية التانية هيجمعهم ويرتبهم ليك قبل ما يديهم لل application layer.
- .. من النقطتين دول أعتقد ممكن تكون كوّنت intuition معين عن ال tcp .. التفاصيل في تكملة الفصل

جملة أخيرة مهمة عن ال tcp protocol وتأثيره من منظور ال web performance هي وبشكل غير مفاجئ بالمرة:

Tcp is optimised for accurate delivery rather than a timely one

تخيله صنايعي شاطر جدا ودقيق جدا وده بالضرورة مخليه بطيء في شغله شوية وبالتالي ده هيأثر معاك في الوقت اللي هيسلمك فيه الشغل.

جزء كبير من تحسين ال performance يتمحور حوالين الفهم الجيد لخصائص ال tcp protocol وإزاي نستفيد منها عشان نضمن أفضل أداء.

3-Way Handshake

عشان ن establish connection بين ال sender وال receiver لازم يسلموا على بعض ٣ مرات قبل ما ال application data تبدأ تتبعت.

نظرياً، أهم حاجة بتتبعت هنا هي ال sequence numbers ودي أرقام عشوائية زي ما هنشوف.

بالإضافة لل sequence numbers فيه flags تانية بتتبعت هنعرفها مع الوقت (ال rwnd وال scaling window option كأمثلة)

sender or client: ازيك، اتفضل X ده رقم عشوائي انا اختارته وانا جايلك (SYN)

receiver or server: أهلا، ده X+1 وده Y انا كمان اختارت رقم عشوائي وانا جايلك (SYN-ACK) هو خد ال X زوّد عليها +1 واختار هو كمان رقم عشوائي

sender or client: عُلِم، انا كمان هزود +1 على كل من ال X وال Y. ودي خطوة ال (ACK) وعلطول هتبدأ عملية نقل ال application data بمجرد ما السيرفر يستلم من ال الكلاينت ال ack

دي عملية ال tcp startup اللي بتحصل مع كل connection جديد وبالتالي هي مساحة تطوير وعامل مؤثر في ال performance ؛ لأن بشكل بديهي انت مع كل connection هتعمل full roundtrip من الكلاينت للسيرفر وترجع تاني، وده وقت محسوب مهما كان قليل! ورقم هنعتبره من ضمن أرقام حسبة ال latency وبالتالي بيظهر أهمية ال connection reuse