بروتوكول التَّحكُّم بالنقل (TCP) هو بروتوكول هامٌّ من بروتوكولات الشبكة، ويستخدم في إرسال البيانات عبر الشبكات. والبروتوكول في عالم الشبكات هو مجموعة من القواعد والإجراءات التي تتحكَّم في كيفية تنفيذ نقل البيانات، حيث يقوم أي شخص حول العالم بالشيء نفسه، بغض النظر عن الموقع أو البرامج أو الأجهزة المستخدمة.
ما هو بروتوكول التحكم بالنقل
يسمى بروتوكول التحكم بالنقل أو بروتوكول التحكم بالإرسال وهي ترجمة الجملة الإنجليزية (Transmission Control Protocol) أو اختصاراً يسمّى “TCP“، وهو البروتوكول المستخدم لإدارة الاتصالات، ونقل و تدفق البيانات بشكل فعَّال، ويعتبر بروتوكول “TCP” بروتوكول معتمد به من قبل “Internet Society”، وهي الهيئة المسؤولة عن تحديد أسس الاتصال عبر الإنترنت.
بروتوكول TCP هو بروتوكول يدعم عمليات الاتصال التي ينبغي أن يتم تحديد (تأسيس) المسار فيها بين المصدر (source) والوجهة (Destination)، قبل البدء في إرسال البيانات، وهو ما يجعلها تتميَّز بالموثوقية فيما يتعلَّق بالاتصال من طرف إلى آخر.
طبقا لـ وثيقة RFC-793 فإن بروتوكول TCP يعمل ما بين طبقات المستوى العلوي وطبقة بروتوكول الإنترنت، طبقا لـ نموذج OSI المعياري، وتحديداً في طبقة النقل – Transportation Layer (الطبقة الرابعة).
كيف يتعامل بروتوكول (TCP) مع البيانات؟
عندما يقوم الجهاز المصدر بتحديد البيانات المراد إرسالها إلى الجهاز المُستقبل، يقوم بروتوكول TCP بتجزئة هذه البيانات إلى عدة أجزاء (أو مقاطع)، كل مقطع من هذه المقاطع يتكوَّن من متسلسلة (مجموعة – Sequence) من الوحدات الأصغر حجما، ومقدار كل وحدة منها واحد بايت.
وكما تعلمنا في تمثيل البيانات باستخدام النظام الثنائي، فإن كل بايت (Byte) مكوَّن من 8 بت، والـ بت (Bit) هي الوحدة الأصغر، والتي تحتوي على 0 أو 1.
وطبقا لـ نموذج الاتصال المعياري OSI، فإنَّ كل طبقة أو مستوى من المستويات السبعة تقوم بإضافة مجموعة من البيانات تسمى بـ مقدمة أو ترويسة Header إلى كل مقطع من البيانات Header التي يتمّ التعامل معها، فإنَّ بروتوكول TCP يقوم أيضا بإضافة مجموعة من البيانات، لكلِّ مقطع أو بايت يريد إرساله.
التنسيق الخاص بـ مقدمة مقطع بيانات “TCP”:
كما ذكرنا أن بروتوكول “TCP” يتعامل مع طبقة بروتوكول الإنترنت – IP في الجهاز المستقبل، لذلك يقوم المصدر بإرسال مقاطع “TCP” بمثابة وحدات بيانات ذات تنسيق IP، حتى يتمكن المستقبل من التعامل مع هذه البيانات، بالإضافة إلى مقدمة مقطع “TCP” والتي تسمى بـ (Header)، مقدمة مقطع بيانات “TCP” تتكون من التالي:
الجدول السابق يتكوَّن من مجموعة من الصفوف (Rows) بحيث يتكوَّن كل صف من 32 بت، وكل صف ينقسم إلى أربعة أقسام، كل قسم مكوّن من 8 بت أو بايت Byte، وتبدأ كل بايت من اليسار بترتيب البت المكونة لها من 7 إلى صفر، وهو ما يعرف بـ ليتل إنديان، وهو خارج نطاق هذا المقال، وتفصيل البيانات كالتالي:
حقل “Source port”
وهو عبارة عن حقل مكون من 16-Bit بصيغة Unsigned Binary Number ممَّا يعني أن الرقم الموجود بداخله يمكن أن يكون بين 0, 216-1
، أي أنَّه يتكون من رقم من صفر إلى 65,535، وهو يمثل الرقم الخاص بمُنفذ اتصال المصدر، أو باختصار هو رقم الـ Port الخاص بالجهاز مرسل البيانات.
حقل “Destination port”:
هو أيضا عبارة عن حقل مكوَّن من 16 بت، ويمثل الرقم الخاص بمنفذ اتصال الوجهة (الجهاز مستقبل البيانات).
حقل “Flags”:
بالنظر إلى الجدول السابق سوف تجد ستة حقول ملونة باللون الأخضر، كل حقل منهم يحتوي على 1 بت، بحيث تكون قيمته إما 0 أو 1، وكل حقل منهم له اسم مكتوب بداخله، وله دلالة إذا كانت قيمته تساوي واحد، وسوف نتناولهم بالتفصيل ولكن إذا ما قمت بالإشارة لـ Flag XXX أو بت التحكم XXX، فإنه يعني قيمة البت الموجودة في الحقل XXX.
حقل “Sequence Number”
وهو عبارة عن حقل مكون من 32 بت، وتعتمد القيمة بداخله على قيمة الـ Flag (SYN):ِ
- إذا كانت قيمة الـ Flag (SYN) تساوي 1: فإن قيمة الحقل هي الرقم المتسلسل الأبتدائي للمقطع الذي يتم إرساله ويسمّى بـ initial sequence number (ISN)، وفي هذه الحالة الرقم المتسلسل لأول بايت سوف يصبح ISN+1.
- أما إذا كانت قيمة الـ Flag (SYN) تساوي 0: فيعني ذلك أن قيمة الحقل هي الرقم المتسلسل للبايت الذي يتم إرساله.
حقل “Acknowledgment Number”:
هو عبارة عن حقل مكون من 32 بت، وقيمته تعتمد على الـ Flag (ACK)، فإذا كانت قيمة بت التحكم ACK تساوي 1، فذلك يعني أن قيمة هذا الحقل تحتوي على الرقم المسلسل التالي المتوقع استقباله، ودائما ما يتم إعداد بت التحكم بعد إنشاء الإتصال.
حقل “Data Offset
وهو حقل مكون من 4 بت، أي أن قيمته يمكن أن تكون من 0 إلى 15، ولكنَّه له حد أدنى وحد أقصى من 5 إلى 15، أي أن أقل قيمة يمكن أن يحتويها هذا الحقل هي 0101
وهي قيمة الرقم 5 بالنظام الثنائي، وهذا الحقل يعبر عن عدد الكلمات (Words) في مقدمة مقطع الـ TCP.
والمقصود بالكلمة هنا أن كل 32 بت تسمى كلمة، أو بطريقة مبسطة إذا نظرت إلى الجدول السابق سوف تجد أنه يحتوي على خمسة صفوف، قبل الصف الأخير، وبعد نهاية الجدول يتم دمج البيانات التي نريد إرسالها، وسوف تلاحظ أن الصف الأخير في الجدول والمُسمى بـ Options، ليس له قيمة محدَّدة كباقي الصفوف، فقد يحتوي على أي عدد من الـ بت، وبالتالي يتم تحديد عدد الصفوف حتى يتمكَّن الجهاز المستقبل من تحديد البيانات وفصلها عن المقدمة الخاصة بـ بروتوكول الـ TCP.
حقل “Reserved”:
هو حقل مكون من 6 بت، دائما قيمتهم تساوي الصفر، إلَّا أنَّ في بعض التحديثات لمعيار الـ TCP تم إضافة بعض بتات التحكُّم (Flags)، ولكنَّها إلى الآن قيد التجريب، لذلك لم أقم بإضافتهم على هذا النموذج.
حقل “Flags / Control Bits”:
وهو حقل مكون من 6 بت، في الجدول تم تمثيلهم باللون الأخضر، وكل بت منهم يعبر عن حالة خاصة في مقدمة مقطع البيانات، وتفصيلهم كالتالي
- Urgent – URG يتم استخدامه لقراءة بيانات الحقل Urgent Pointer.
- Acknowledgment – ACK كما تعرفنا على استخدامه مع الحقل Acknowledgment.
- Push – PSH يستخدم لتنفيذ الأمر PUSH.
- Reset – RST يستخدم لإعادة ضبط الاتصال عن طريق الأمر RESET.
- Synchronize – SYN يستخدم لمعرفة قيمة الحقل Sequence Number، كما تعرفنا عليه مسبقا.
- FINISHED – FIN ويعني أنه لا يوجد المزيد من البيانات الصادرة من المرسل، وبالتالي يتم إنهاء الاتصال.
حقل “Window Size”:
وهو حقل مكون من 16 وحدة بت، بحيث تحتوي قيمته على عدد البايت (Bytes) في المقطع (Sequence) الذي يتم إرساله حاليا.
حقل “Checksum”:
وهو حقل مكون من 16 بت، ويستخدم بهدف كشف الأخطاء من عدمها أثناء نقل البيانات، حيث يستخدم بعض العمليات الحسابية باستخدام “Source Address” و “Destination Address” بالإضافة إلى طول مقدمة بروتوكول الـ TCP من أجل الكشف عن الأخطاء التي قد تحدث أثناء عملية نقل البيانات.
حقل “Urgent Pointer”:
هو حقل مكون من 16 بت، وتحتوي قيمته على عنوان وحدة البايت العاجلة في التسلسل (المقطع من البيانات)، ولا يتم النظر إلى محتوى هذا الحقل إلا إذا كانت قيمة الـ Flag (URG) تساوي 1، بصورة مختصرة، أحيانا يتم تحديد جزء من البيانات التي يتم إرسالها على أنها بيانات عاجلة، أي يجب أن يتم إرسالها قبل أي بيانات أخرى، وفي هذه الحالة يتم استخدام بت التحكم “URG”، مع “Urgent Pointer” ليتم تحديد البيانات العاجلة.
حقل “Options”
هذا الحقل قد يحتوي على بيانات ما بين 0 و 320 بت، أي رقم يقبل القسمة على 32، فكما أشرنا إليه في الحقل Data Offset، فهو يعتبر الحقل الأخير الذي يتم إضافته من قبل بروتوكول الـ TCP، وهو حقل اختياري، أي أنه يمكن عدم تحديد أي بيانات إضافية، ويُكتفي بوضع بايت واحد مكوَّن من أصفار ليكون فاصل بين البيانات التي يتم إرسالها والمقدمة (Header) الذي تناولناه حتى الآن.
كيفية عمل بروتوكول التحكم بالنقل؟
يتعامل بروتوكول TCP على الجانب الأول (المصدر) مع العمليات الخاصة بالمستخدمين أو طبقة التطبيقات، وعلى الجانب الآخر (الوجهة) يتعامل مع بروتوكول من المستوى السفلي مثل بروتوكول الإنترنت (IP).
ويمكن تقسيم خطوات عمل بروتوكول التحكُّم بالنقل إلى ثلاثة مراحل أساسية تبدأ بأن يقوم الجهاز المصدر بإرسال رسالة إلى الجهاز الوجهة مفادها أنه يريد أن يرسل له بعض البيانات، ثم ينتظر المصدر حتى يتم الرد عليه بالموافقة من الوجهة.
ولا يتم البدء في إرسال البيانات حتى يتم الرد بالموافقة، وهنا تبدأ عملية إرسال البيانات، وتعدُّ هذه هي المرحلة الثانية، وبانتهاء إرسال كافة البيانات تبدأ المرحلة الثالثة والتي تهتم بانهاء الاتصال، والتَّخلّي عن الموارد التي سبق حجزها لإتمام عملية نقل البيانات.