TCP/IP هي حزمة بروتوكولات تشكل أساس الإنترنت ومعظم شبكات الكمبيوتر. تجمع بين بروتوكول TCP المسؤول عن تسليم البيانات الموثوق، و IP الذي يضمن توجيه الحزم بين العقد. وفقًا لـ IETF RFC 1180 (2024)، تعالج حزمة TCP/IP أكثر من 80% من حركة مرور الشبكة العالمية، بما في ذلك تطبيقات الهاتف المحمول والويب. حزمة البروتوكولات تحدد كيفية تعبئة البيانات وعنونتها ونقلها بين الأجهزة في الشبكة.
النقاط الرئيسية
TCP/IP (Transmission Control Protocol / Internet Protocol) هي حزمة بروتوكولات تم تطويرها في السبعينيات لشبكة ARPANET وأصبحت المعيار الفعلي للإنترنت العالمي. تحدد كيفية تقسيم البيانات إلى حزم وعنونتها ونقلها وإعادة تجميعها في جانب المستقبل.
تم تصميم بنية TCP/IP على مبدأ متعدد الطبقات، حيث تقوم كل طبقة بتجريد وظائف محددة. تعمل طبقة التطبيق مع بيانات التطبيق، وتضمن طبقة النقل الموثوقية، وتتعامل طبقة الشبكة مع التوجيه، وتدير طبقة الوصلة النقل المادي. النمطية تسمح باستبدال البروتوكولات داخل الطبقة دون التأثير على الطبقات المجاورة.
في تطوير التطبيقات المحمولة، يتم استخدام TCP/IP من قبل كل تطبيق يقوم بطلبات شبكة. المكتبات مثل URLSession و OkHttp و AFNetworking و Alamofire تعمل فوق هذه الحزمة، مخفية عن المطور تفاصيل تغليف الحزم وتوجيهها. ومع ذلك، فإن فهم TCP/IP ضروري لتحسين الأداء: تكوين معلمات TCP عبر URLSessionConfiguration يسمح بإدارة مهلات الاتصال والحفاظ على اتصالات HTTP المستمرة وإعداد البروكسي للبيئات المؤسسية.
فهم TCP/IP ضروري لتشخيص مشاكل الشبكة: إذا لم يتمكن التطبيق من الاتصال بالخادم، فقد تكون المشكلة في أي طبقة من الحزمة — من القناة المادية إلى بروتوكول التطبيق. أدوات مثل tcpdump و Wireshark و Charles Proxy تسمح بتحليل حركة المرور في كل طبقة والعثور على الاختناقات. لمطوري التطبيقات المحمولة، يوفر Xcode لوحة تحكم تصحيح أخطاء الشبكة (Network Debug Dashboard)، ويقدم Android Studio مفتش الشبكة (Network Inspector) لتحليل اتصالات TCP في الوقت الفعلي.
يتضمن نموذج TCP/IP أربع طبقات، كل منها تؤدي وظائف محددة بدقة أثناء نقل البيانات. فهم هذا التسلسل الهرمي ضروري لتشخيص مشاكل الشبكة وتحسين التطبيقات.
في طبقة التطبيق تعمل البروتوكولات التي تتفاعل معها التطبيقات مباشرة: HTTP، HTTPS، FTP، SMTP، DNS، WebSocket. تقوم هذه الطبقة بتنسيق البيانات بطريقة تفهمها التطبيق وتمررها إلى طبقة النقل. يعمل مطورو التطبيقات المحمولة على هذه الطبقة من خلال مكتبات الشبكات.
تضمن طبقة النقل نقل البيانات بين التطبيقات على أجهزة مختلفة. البروتوكولات الرئيسية هي TCP (نقل موثوق مع تأكيد) و UDP (نقل سريع بدون ضمانات). TCP يضيف منافذ المرسل والمستلم إلى البيانات، ويدير ترتيب الحزم، ويتحكم في ازدحام الشبكة.
يتم تنفيذ طبقة الشبكة بواسطة بروتوكول IP، الذي يحدد العنونة (IPv4، IPv6) وتوجيه الحزم. تحتوي كل حزمة على عناوين IP للمرسل والمستلم، وتتخذ أجهزة التوجيه على طول المسار قرارات حول العقدة التالية بناءً على جداول التوجيه. يستخدم IPv4 عناوين 32 بت (حوالي 4.3 مليار)، بينما يستخدم IPv6 عناوين 128 بت، مما يحل مشكلة استنفاد العناوين.
تعمل طبقة الوصلة مع وسيط النقل المادي: Ethernet، Wi-Fi، Bluetooth. تقوم هذه الطبقة بتحويل الحزم إلى إشارات والعكس، وتدير الوصول إلى وسيط النقل عبر عناوين MAC، وتكتشف أخطاء الطبقة المادية باستخدام تسلسلات التحقق من الإطار (FCS).
في طبقة الوصلة تعمل بروتوكولات مثل ARP (بروتوكول تحليل العناوين)، الذي يحول عناوين IP إلى عناوين MAC للأجهزة في الشبكة المحلية، و PPP (بروتوكول نقطة إلى نقطة)، المستخدم في اتصالات VPN وشبكات البيانات المحمولة.
| الطبقة | البروتوكولات | الوظيفة |
|---|---|---|
| التطبيق | HTTP, HTTPS, DNS, FTP, WebSocket | تنسيق بيانات التطبيق |
| النقل | TCP, UDP | النقل بين التطبيقات، التحكم في الأخطاء |
| الشبكة | IP, ICMP, ARP | توجيه الحزم وعنونتها |
| الوصلة | Ethernet, Wi-Fi, PPP | النقل عبر الوسيط المادي |
TCP (Transmission Control Protocol) هو أحد البروتوكولات الرئيسية لطبقة النقل. يضمن تسليمًا موثوقًا ومرتبًا وخاليًا من الأخطاء لدفق البايت بين التطبيقات. قبل نقل البيانات، يقوم TCP بإنشاء اتصال من خلال المصافحة الثلاثية.
تبدأ المصافحة الثلاثية (three-way handshake) بإرسال العميل حزمة SYN. يستجيب الخادم بحزمة SYN-ACK، مؤكدًا الاستلام. يكمل العميل المصافحة بحزمة ACK، وبعد ذلك يبدأ نقل البيانات. تضمن هذه العملية أن كلا الطرفين جاهز للتبادل ومتزامن على أرقام التسلسل.
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('example.com', 80))
sock.send(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n')
response = sock.recv(4096)
print(response.decode())
sock.close()
في المثال، يتم إنشاء مقبس TCP بنوع SOCK_STREAM، الذي يقوم تلقائيًا بالمصافحة الثلاثية عند استدعاء connect. ترسل طريقة send طلب HTTP، وتستقبل recv الرد. بعد الانتهاء، يرسل close حزمة FIN لإغلاق الاتصال بشكل صحيح.
لنلق نظرة على مثال لخادم TCP بلغة Python يقبل عدة عملاء عبر الخيوط. تتم معالجة كل اتصال في خيط منفصل، مما يسمح بخدمة عملاء متعددين في وقت واحد دون حظر الحلقة الرئيسية.
import socket
import threading
def handle_client(conn, addr):
print(f'تم توصيل العميل: {addr}')
with conn:
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data.upper())
print(f'العميل {addr} غير متصل')
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 9090))
server.listen(5)
print('تم تشغيل خادم TCP على المنفذ 9090')
while True:
conn, addr = server.accept()
thread = threading.Thread(target=handle_client, args=(conn, addr))
thread.start()
يعالج خادم TCP كل اتصال في خيط منفصل، باستدعاء accept في حلقة لا نهائية. تستقبل الدالة handle_client البيانات، وتحولها إلى أحرف كبيرة، وترسلها مرة أخرى عبر sendall. عند انتهاء حلقة recv (عندما يغلق العميل الاتصال)، ينتهي الخيط ويغلق المقبس تلقائيًا. في تطبيقات الهاتف المحمول، لا يُستخدم هذا العمل منخفض المستوى مع المقابس مباشرة — تدير مكتبات HTTP المحمولة الاتصالات عبر مجموعات خيوط وتعيد استخدام اتصالات TCP تلقائيًا.
الاختيار بين TCP و UDP هو أحد القرارات الرئيسية عند تصميم الاتصال الشبكي. TCP يضمن التسليم والترتيب وسلامة البيانات على حساب زمن استجابة إضافي. UDP يضحي بالموثوقية من أجل أقل زمن استجابة وحمل أقل على القناة.
| الخاصية | TCP | UDP |
|---|---|---|
| الاتصال | ينشئ (مصافحة) | لا ينشئ |
| الموثوقية | يضمن التسليم | لا يضمن |
| ترتيب الحزم | يرتب | لا يرتب |
| السرعة | أقل | أعلى |
| الاستخدام | ويب، بريد، ملفات | بث، ألعاب، DNS |
لتطبيقات الهاتف المحمول، يعتمد اختيار البروتوكول على السيناريو: واجهات REST API وتحميل البيانات تتطلب TCP، بينما تستفيد مكالمات الفيديو والألعاب عبر الإنترنت من سرعة UDP. بعض التطبيقات تجمع بين كلا البروتوكولين — TCP للتحكم و UDP لتدفق الوسائط. بروتوكول QUIC الحديث، الذي يعمل عبر UDP ويستخدم في HTTP/3، يجمع مزايا كلا النهجين وهو مدعوم بالفعل على iOS و Android عبر URLSession تلقائيًا.
لنلق نظرة على مثال لعميل TCP بلغة Python مع معالجة الأخطاء والمهلة. يُستخدم هذا النهج في تطبيقات الهاتف المحمول للاتصال الموثوق بالخادم.
import socket
import sys
def tcp_client(host, port):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect((host, port))
print(f'متصل بـ {host}:{port}')
return sock
except socket.error as err:
print(f'خطأ في الاتصال: {err}')
sys.exit(1)
sock = tcp_client('api.example.com', 443)
sock.close()
تستقبل الدالة tcp_client مضيفًا ومنفذًا، وتنشئ مقبسًا بمهلة 10 ثوانٍ وتحاول الاتصال. عند حدوث خطأ في الاتصال — على سبيل المثال، عدم توفر الخادم أو حظر جدار الحماية — يتم طرح استثناء مع وصف المشكلة. في تطبيقات الهاتف المحمول، مهلة الاتصال حرجة: قصيرة جدًا تؤدي إلى أخطاء خاطئة في الشبكات البطيئة، طويلة جدًا تؤدي إلى تجميد الواجهة. القيمة الموصى بها للشبكات المحمولة هي 10–15 ثانية لـ timeoutIntervalForRequest و 30–60 ثانية لـ timeoutIntervalForResource في تكوين URLSession.
الأسئلة الشائعة
IP مسؤول عن التوجيه — توصيل حزمة من المرسل إلى المستقبل عبر العقد الوسيطة. يضمن TCP تجميع البيانات الموثوق: يتحكم في الترتيب، ويتحقق من السلامة، ويطلب إعادة إرسال الحزم المفقودة. معًا يشكلان حزمة TCP/IP.
TCP/IP لا يستخدم منفذًا ثابتًا — يتم تعيين المنفذ بواسطة التطبيق. المنافذ القياسية: 80 (HTTP)، 443 (HTTPS)، 22 (SSH)، 25 (SMTP). المنفذ 443 هو المنفذ الرئيسي لحركة مرور الويب الآمنة في تطبيقات الهاتف المحمول.
اتصال TCP هو قناة منطقية بين تطبيقين، يتم إنشاؤها عبر المصافحة الثلاثية (SYN، SYN-ACK، ACK). يتم تحديد الاتصال بواسطة زوج (عنوان IP، منفذ) للمرسل والمستقبل. المصافحة تضمن أن كلا الطرفين جاهز لتبادل البيانات.
نعم، يعمل TCP/IP في الشبكات المحلية (LAN) بدون الوصول إلى الإنترنت. تتصل الأجهزة عبر Wi-Fi Direct أو Bluetooth PAN أو Ethernet وتتبادل البيانات باستخدام عناوين IP محلية. TCP/IP المحلي يُستخدم في أجهزة إنترنت الأشياء وتطبيقات الند للند.
TCP أبطأ بسبب آليات إضافية: مصافحة ثلاثية قبل النقل، تأكيد كل حزمة، إعادة إرسال المقاطع المفقودة، والتحكم في الازدحام. يرسل UDP الرزم بدون هذه الفحوصات، مما يقلل زمن الاستجابة على حساب فقدان محتمل.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.