احترف برمجة الشبكات وبروتوكول — TCP/IP
With Microsoft Visual #cالسي شارب#
Chapter 1 TCP/IP Layers & Message
Encapsulation Overview & Introduction to
Network Programming
With Microsoft Visual #cالسي شارب#
Chapter 1 TCP/IP Layers & Message
Encapsulation Overview & Introduction to
Network Programming
الدرس الاول TCP/IP Layers Encapsulation Overview : 1.1
من المعروف أن الشبكة هي مجموعة من الأجهزة متصلة مع بعضها عبر وسيلة اتصال معينة
ومن هنا سيندرج لدينا التقسيم المعروف لمنظمة OSIلعملية الاتصال والتي تمر بسبعة
طبقات لكل طبقة منها وظيفة معينة يتم إضافتها آـ Headersعلى البيانات المرسلة.وتم
اختصارها إلى خمسة طبقات في برتوآول TCP/IPوتبين الصورة المرفقة هذه الطبقات:
تبدأ عملية توليف الرسالة المرسلة في الـ Application Layerووظيفتها هنا التعامل مع
الرسالة نفسها وتحويلها من صيغة نصية إلى Dataيمكن إرسالها عبر الشبكة ، ففي
برمجيات الدردشة Chatيتم تحويل النص المكتوب إلى ASCII Codeثم إلى مجموعة من
Binary Codeأو الـ Bitsتوضع في مصفوفة لتجهيزها وإرسالها عبر Socketوالذي يربط طبقة
و يوضح الشكل التاليInternet Layer أو الـNetwork Layer مع الـTransport Layer الـ
طبيعة عمل الـ: Socke:
Network فيDestination IP معTransport Layer المحدد فيPortحيث يربط رقم الـ
Layerويقوم الـ Serverبالطرف المقابل بالموافقة على طلب الـ Clientوتقتصر وظيفة
الـ Socketفي الـ Serverعلى ربط رقم الـ Portمع الـ Socket Optionالتي يتم تحديدها ثمالبدء بعملية التصنت على الـ Portالذي تم تحديده ، ويمكن في هذه المرحلة وضع شروط
معينة لقبول الجلسة مثل عمليات التحقق الـ Authenticationأو ما شابه أو الموافقة بشكل
مباشر:
في نموذج OSIتم تقسيم الـ upper Layersإلى ثلاثة طبقات:
Application :لتعامل مع البرنامج نفسه أو ما يسمى User Interface
Presentationتمثيل البيانات المرسلة وهي آما ظهرت سابقا بتحويل البيانات إلى
الـ ASCIIأو استخدام أساليب لضغط البيانات أو تشفيرها ، في الدوت نيت تتم عملية تمثيل
الرسالة بالـ Binaryباستخدام الــ ASCIIEncoding Classآما يلي:
C#:
String str=Console.ReadLine();
ASCIIEncoding asen= new ASCIIEncoding();
byte[] ba=asen.GetBytes(str);
Session :وفيها البدء بعملية التخاطب بين الجهازين و التعريف ببعضهم البعض) فتحالجلسة( …
أما في بروتوآول الـ TCP/IPفكتفا بوجود طبقة Application Layerوالتي تقوم بعمل
الطبقات الثلاث الأولى في ، OSIفي Session Layerيتم التعرف وفتح الجلسة بعدة خطوات
وهي آما يلي :
-1إجراء الاتصال المبدئي بالـ Serverعبر الـ IPو الـ Portالمحدد وذلك بعد تحديد عملية
الاتصال سواء عبر UDPأو عبر .TCP
-2التعريف بنفسه وعمل الـ Authenticationإذا تطلب الـ Serverذلك
-3قبول أو رفض الجلسة ويتم ذلك بإرسال الموافقة على فتح الجلسة أو رفضها
-4بدأ الجلسة وقيام الـ Serverبعمل Listeningعلى الـ Portالخاص بالبرنامج
وهنا مثال يوضح عمل هذه الطبقة باستخدام ال : TCP Protocol
C#:
TcpClient tcpclnt = new TcpClient("192.168.0.2",8001);
عندما يتم الموافقة على فتح الجلسة والبدء بعملية التخاطب يقوم جهاز المرسل Client
بتحميل الرسالة إلى الطبقة الأخرى وهي هنا طبقة Transportوفي هذه الطبقة يتم تحديد
UDP - Connectionless أو عبر الـTCP - Connection Protocol طبيعة الاتصال سواء عبر
Protocolففي البروتوآول الأول يتم تحديد طرفين وهما المرسل والمستقبل و Portالاتصال
أما الـ UDPفيمكن أن يكون الطرف المستقبل آل الأجهزة Broadcastوهذا يعني أن أي
شخص يقوم بتصنت عبر هذا الـ Portيستطيع استقبال الرسالة ، آما يمكن من عمل
فيPort مع رقم الـMulticast IP أو الـBroadcast IP ، ويتم ذلك بوضع الـMulticastingالـ
... Socketالـ
ولإرسال الرسالة عبر الشبكة عبر الـ TCPنستخدم في الدوت نت Classجاهز يقوم بهذه
العملية ويسمى NetworkStreamوهو المسئول عن التعامل مع وسيلة الاتصال وإرسال
الرسالة إلى الطرف المعني بشكل ، Stream Dataأو باستخدام ال Socketنفسه وآمثال
على ذلك:
C#:
NetworkStream mynetsream = tcpclnt.GetStream ();
StreamWriter myswrite = new StreamWriter (mynetsream);
myswrite.WriteLine("Your Message");
myswrite.Close ();
mynetsream.Close ();
tcpclnt.Close ();
وبعد ذلك تسلم إلى Network Layerإذ تتم عنونة الرسالة ووضع عنوان المرسل
والمستقبل عليها وتسلم إلى الطبقة الأدنى ليتم إرسالها عبر ال Physical Tunnelومن
... IP,IPv6,ARB-Address Resolution Protocol الأمثلة عليها
أما بنسبة للجهاز المستقبل ال Serverفيقوم بالمرور على نفس الطبقات ولكن بالعكس
حيث يستلم آرت الشبكة ال Bitsلتحول إلى Data linkثم Networkثم Transportثم
Applicationومنها تحول من Binaryإلى ASCIIومن ASCIIإلى .. Textوهذا الكود يوضح
مبدأ عمل ال : Server
C#:
TcpListener myList=new TcpListener(5020);
myList.Start();
Socket s=myList.AcceptSocket();
NetworkStream myns = new NetworkStream (mysocket);
StreamReader mysr = new StreamReader (myns);
Console.Write (mysr.ReadLine());
s.Close();
بعد إجراء عملية العنونة يقوم المرسل بسؤال عن عنوان الـ MAC Addressالخاص بالـServerوتتم هذه العملية عبر بروتوآول الـ ARP-Address Resolution Protocolويقوم هذا البروتوآول
بالتحقق من وجود الـ MAC Addressفي الـ MAC Tableوفي حالة عدم وجوده يقومبإرسال ARB Broadcast Message Requestإلى آل الشبكة يسأل فيها عن صاحب الـ IP
Addressالمراد الإرسال له فإذا وجده يرسل الجهاز المعني ICMP Messageيخبره فيها
بعنوان الـ MAC Addressالخاص به وبعد استلام الرسالة يقوم بتخزين العنوان المعني في
MAC Tableالخاصة به ولكي يتم استخدامه في المرات اللاحقة ، لاحظ الشكل التالي:
وبعد هذه المرحلة يتم تحديد نوع الـ Encapsulationهل سيكون آـInternet Encapsulation
والشكل التالي يوضح آلData Link Layer ويتم ذلك في الـEthernet Encapsulation أو
هذه العمليات:
وفي النهاية يكون الشكل العام للـ Packetآما يلي:
ويجب التفريق بين عملية الإرسال باستخدام الـ Ethernetوعملية الإرسال باستخدام
الـ Internetأو الـ Serial Connectionإذ أنه في الـ Ethernetتتم عملية الإرسال بعد معرفة
الـ MAC Addressلطرف الأخر باستخدام الـ ARPأما في الـ Internetفيتم الوصول وفق مبدأ
: لاحظ الشكل التاليPPP – Point to Point Protocolا
في آل طبقة يتم إضافة Headerعلى الـ Dataويتراوح حجم الـ Headerمن 20إلى 60بايت
حسب الـ Optionsالتي يتم إضافتها إلى الـ .Header
في المثال التالي سنقوم باستخدام برنامج الـ Etherealوهو برنامج يقوم بعملية الـ Packet
Sniffer
مثال على استخدام الـ ARBوالـ DNSوالـ: HTTP
لاحظ الشكل التالي في برنامج الـ Etherealوالذي يقوم بتصنت على الـInterface Card
حيث قمنا بطلب الدخول على موقع الـ Googleباستخدام الـ: Internet Explore
لاحظ أن أول عملية آانت السؤال عن الـ MAC Addressالخاص بالـ Gatewayوهو هنا
10.0.0.138حيث أرسلت هذه الرسالة آـ Broadcast Messageوفي العملية الثانية قام
الـ Routerبالرد على الـ ARP Requestوأرسل عنوان الـ MAC Addressالخاص به بعد هذه
العملية سيقوم الـ Clientبلإستفسار عن عنوان الـ Googleبإرسال DNS Request Query
لاحظ أنه في المثال قد وجد الـ IP Addressالخاص بالـ Googleفي الـ DNS Tableوالموجودة
ضمن نظام التشغيل وهذا يعني انه تم الدخول على الـ Googleمن قبل والدليل على ذلك
أن الـ IP Addressالخاص بالـ Googleموجود في الـ DNS Tableوبعد هذه العملية قام موقع
الـ Googleبالرد على الطلب يخبره بوجوده وضمن العنوان المحدد لاحظ أن العمليات من 8
إلى 20هي عمليات طلب و إرسال لمحتويات الصفحة الخاصة بموقع الـ Googleوتتم
.HTTP Protocol باستخدمHTTP Protocol