بروتوكول التحكم بالنقل - TCP

بروتوكول التحكم بالنقل - TCP

ما هو تعريف بروتوكول التحكم بالنقل - Transmission Control Protocol - TCP، كيف يتعامل بروتوكول التحكم بالنقل TCP مع البيانات، ما هو تنسيق حقول مقدمة (ترويسة) مقطع بيانات TCP، كيف يعمل بروتوكول التحكم بالنقل

تعريف بروتوكول التحكم بالنقل

يسمى بروتوكول التحكم بالنقل أو بروتوكول التحكم بالإرسال وهي ترجمة الجملة الإنجليزية Transmission Control Protocol أو إختصارا يسمى TCP، وهو البروتوكول المستخدم لإدارة الإتصالات ونقل و تدفق البيانات بشكل فعال، ويعتبر بروتوكول TCP معيارا معترف به من قبل Internet Society وهي الهيئة المسئولة عن تحديد أسس الإتصال عبر الإنترنت.

بروتوكول TCP هو بروتوكول يدعم عمليات الإتصال التي ينبغي أن يتم تحديد (تأسيس) المسار فيها بين المصدر والوجهة قبل البدء في إرسال البيانات، وهو ما يجعلها تتسم بـ الموثوقية فيما يتعلق بالإتصال من طرف إلى آخر.

طبقا لـ وثيقة RFC-793 فإن بروتوكول TCP يعمل ما بين طبقات المستوى العلوي وطبقة بروتوكول الإنترنت، طبقا لـ نموذج OSI المعياري، وتحديدا في طبقة النقل - Transportation Layer (الطبقة الرابعة).

بروتوكول TCP هو المسئول عن تدفق البيانات بين جهازين، فدائما يوجد الجهاز الذي يقوم بإرسال البيانات ويسمى بـ المصدر أو المرسل، والجهاز الآخر الذي يستقبل البيانات ويسمى بـ الوجهة أو المستقبل، وقد يستخدم بروتوكول TCP لنقل بيانات بين برنامجين على جهاز واحد، ولكن للتبسيط سوف نفترض نقل البيانات بين جهازين متصلين بشبكة واحدة.

كيف يتعامل بروتوكول TCP مع البيانات؟

عندما يقوم الجهاز المصدر بتحديد البيانات المراد إرسالها إلى الجهاز المستقبل، يقوم بروتوكول TCP بتجزيء هذه البيانات إلى عدة أجزاء (أو مقاطع)، كل مقطع من هذه المقاطع يتكون من متسلسلة (مجموعة - Sequence) من الوحدات الأصغر حجما، ومقدار كل وحدة منها واحد بايت.

وكما تعلمنا في تمثيل البيانات بإستخدام النظام الثنائي، فإن كل بايت (Byte) مكون من 8 بت، والـ بت (Bit) هي الوحدة الأصغر، والتي تحتوي على 0 أو 1.

وطبقا لـ نموذج الإتصال المعياري OSI، فإن كل طبقة أو مستوى من المستويات السبعة تقوم بإضافة مجموعة من البيانات تسمى بـ مقدمة أو ترويسة Header إلى كل مقطع من البيانات Packet التي يتم التعامل معها، فإن بروتوكول TCP يقوم أيضا بإضافة مجموعة من البيانات، لكل مقطع أو بايت يريد إرساله.

التنسيق الخاص بـ مقدمة مقطع بيانات TCP

كما ذكرنا أن بروتوكول TCP يتعامل مع طبقة بروتوكول الإنترنت - IP في الجهاز المستقبل، لذلك يقوم المصدر بإرسال مقاطع TCP بمثابة وحدات بيانات ذات تنسيق IP، حتى يتمكن المستقبل من التعامل مع هذه البيانات، بالإضافة إلى مقدمة مقطع TCP والتي تسمى بـ Header، وتتكون مقدمة مقطع بيانات TCP من التالي:

 
TCP Header
 
Offsets
Bit
0123
76543210765432107654321076543210
0Source portDestination port
32Sequence number
64Acknowledgment number
96Data offsetReserved
0 0 0 0 0 0
U R GA C KP S HR S TS Y NF I NWindow Size
128ChecksumUrgent pointer
160
...
Options

الجدول السابق يتكون من مجموعة من الصفوف (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).

ويمكن تقسيم خطوات عمل بروتوكول التحكم بالنقل إلى ثلاثة مراحل أساسية تبدأ بأن يقوم الجهاز المصدر بإرسال رسالة إلى الجهاز الوجهة مفادها أنه يريد أن يرسل له بعض البيانات، ثم ينتظر المصدر حتى يتم الرد عليه بالموافقة من الوجهة، ولا يتم البدء في إرسال البيانات حتى يتم الرد بالموافقة، وهنا تبدأ عملية إرسال البيانات، وتعد هذه هي المرحلة الثانية، وبإنتهاء إرسال كافة البيانات، تبدأ المرحلة الثالثة والتي تهتم بإنهاء الإتصال، والتخلي عن الموارد التي سبق حجزها لإتمام عملية نقل البيانات.

وعادة ما يتم إدارة بروتوكول التحكم بالنقل من قبل نظام التشغيل، حيث يوفر كل نظام تشغيل واجهة للتعامل مع هذا البروتوكول، وعادة ما تسمى هذه الواجهة بـ Internet Socket API والتي تتيح للمبرمجين إنشاء برامج تتعامل مع بروتوكول التحكم بالنقل TCP.

فضلا لا أمرا: لكل زوارنا الكرام، بقليل من الجهد، الرجاء ترك تعليق لتقييم مدى رضائكم عن المقال، و مشاركة الموضوع لتعم الفائدة، ولكم جزيل الشكر على ذلك.


479

Comments (0)

Add new comment
  • 2000  Character remaining.
  • Please enter Characters.Change Captcha Image