-->
U3F1ZWV6ZTQ1NjcwMTEwMTlfQWN0aXZhdGlvbjUxNzM3OTM3MTMw
recent
أخبار ساخنة

شرح IP address calculation بطريقة عربية مبسطة (Cisco CCNA)

مقدمة 


موضوع IP address calculation هوا موضوع مهم بالنسبة إلى جميع الطلاب المقبلين على دراسة الشبكات وهوا الدرس الأول قبل بداية تعلم الشبكات سواء بشكل أكاديمي أو التعليم الذاتي في هذا المقال سوف نقوم بشرح IP address calculation بشكل مفصل مع تطبيقات مبرمجة بلغة البايتون من أجل ترسيخ الفهم وتسهيل حساب .

مفاهيم أساسية يجب عليك معرفتها

هذا الدرس يفترض أنك تعرف المفاهيم الأولية متل :

  1. عنوان الأيبي (IP address)
  2. جدول التوجيه (routing table)
  3. المضيف المحلي (Localhost)
  4. بروتوكول إيجاد العناوين (arp protocol)

تحويل IP إلى Binary

طريقة حساب الأيبيهات بالنسبة إلى جهاز الحاسوب ,في البداية مايجب معرفته هوا أن IPv4 يتكون من 4 octets وفي كل 1 octet توجد 8 خانات يعني طوله يساوي 8*4 32 byte . بنسة لكل جهاز هوا يبدو على هدا الشكل

10101010.10101010.01010101.01010101

كما نعرف في جميع لغات البرمجة الأرقام 0و1 هي boolean تعطي قيمة صحيح أو خطأ السؤل الأن : كيف يقوم الجهاز بتحويل هاته الأيبيهات من IP إلى Binary والعكس ؟ جواب : الأمر بسيط وغير معقد وهناك عدة طرق لاكن نحن سوف نتطرق إلى أبسط طريقة نحتاج في البدية إلى إنشاء جدول على هذا الشكل بصفين و 8 أعمدة يمثل كل عمود في الجدول octet واحد نظع في السطر الأول 2 تم نرفع القوة من 0 إلى رقم 7 والمجموع 8 الأن جهاز الحاسوب يبدء العد من رقم صفر , تم نقوم بحساب القيم وكتابتها في السطر التاني كما هوا موضح في الجدول

جدول قيم octet أو Byte


من خلال هذا الجدول يمكن تحويل أي رقم IP إلى Binary وذالك عن طريق إضافة 6 أسطر إلى جدول octet كما هوا موضح في الجدول أدناه .

جدول التحويل من IP إلى Binary




تحتوي الأسطر 4 الأولى على أرقام IP كما هوا موضح في الجدول بالأخظر , أخدنا على سبيل المثال عنوان 192.168.1.1 وهوا في الغالب عنوان الراوتر الإفتراضي , في الأعلى وضعنا جدول octet .
نبدء الحساب بوضع بقيمة 1 في الخانات التي مجموعها يساوي 192 والباقي نقوم بملئه بقيمة 0 ونبدء من اليسار إلى اليمن كما هوا موضح في الصورة التالية


في حالتنا هاته مجموع 128+64 = 192 نبملئ اقي الخانات بقيمة 0
في نهاية نقم بجمعهاته القيم التي تساوي عنوان IP بالباينري في حالتنا هي كتالي

تحويل Binary إلى IP

نقوم كتابة قيم octet أو Byte على هدا الشكل


بعدها نقوم بوضع قيمة كل octet فوق الخانة التي تقابله كتالي :

في حالتنا قيمة Binary هي 11000000 نضعها فوق قيمة octet تم نقوم بعملية الظرب والناتج سوف يكون عنوان الأيبي هكدا مع بقية octets حتى نقوم بحساب العنوان بالكامل

حساب Netmask

Netmask هوا الحد الأقصى من عناوين IP التي يمكن للشبكة تحملها , بمعنى أن أي عنوان فوق Netmask سوف يأدي إلى سقوط الشبكة بالكامل .
من أجل حساب Netmask سواء في الجانب في الجانب التطبيقي أو في الإختبرات الدراسية نحتاج إلى المجال الدي تغطيه الشبكة بمعنى نحتالج إلى عنوان IP على هذا الشكل 192.168.1.1/24 . 24 هنا تعني عدد العناوين التي يمكن لاته الشبكة تغطيتها
من أجل حساب Netmask نحتاج إلى رسم جدول التالي :

جدول حساب Netmask


نضع في الجدول عنوان الأيبي مع المجال الدي تغطيه الشبكة , مع صفين من أجل الحساب كما هوا في الجدول أعلاه .

تم نقوم بملئ كل octet بقيم 1 حتى نصل إلى 24 تم نضع الباقي بقيمة 0 كما هوا موضح في الجدول

متال حساب Netmask


تم نستخدم نفس الطريقة من أجل تحويل Binary إلى Decimal , والناتج في حالتنا هاته هوا 255.255.255.0 وهدا هوا المجال الذي تغطيه الشبكة


ملاحظة : في عناوين ip يوجد تقسيمين محدد لكل octet متال 192.186.3.63 192.168.3 هدا المجال يسمى مجال الشبكة أو network , .63 هدا المجال يسمى host بمعنى إذا كنت تريد عمل فحص للشبكة من أجل البحث عن جهاز معين فسوف يكون عنوان هذا الجهاز هوا أخر octet وسوف يكون ظمن مجال من 2 الى 255

حساب Subnet

تجزئة الشبكة أو تجزئة فضاء العناوين هي عملية رياضية تُقسّم فضاء عناوين خاص ببروتوكول تشبيك إلى فضاءَي عناوين أو أكثر، متساوية الحجم وأصغر من فضاء العناوين الأصلي وقابلة للتمايز رياضياً. يكون لكل فضاء عناوين جزئي ناتج عنوان مميز وقناع شبكة يمثلان كامل الفضاء الجزئي. وتستخدم العناوين المأخوذة من الأفضية الجزئية لعنونة شبكات مختلفة.
يحتاج مصممو الشبكات إلى تجزئة شبكاتهم، إما بهدف الوصول إلى عدد محدد من الشبكات الجزئية أو الشُبيكات، أو بهدف تحديد عدد العناوين (حجم فضاء العنونة) الذي سيتاح للإستخدام ضمن أي من الشبكات الجزئية، أو كلا الهدفين معاً. يمكن تجزئة فضاءات العنونة التي تستخدم عناوين الإصدار الرابع من بروتوكول الإنترنت بشكلين، أحدهما محكوم بالصنف القياسي للشبكة، وهو جزء من معياري من الإصدار الرابع من بروتوكول الإنترنت والثاني مبني على العنونة غير القياسية والتي ابتُدعت عام 1993م لتخفيف هدر العناوين في أصناف العنونة القياسية، أمّا الإصدار السادس من بروتوكول الإنترنت فيدعم التجزئة المبنيّة على العنونة غير القياسية فقط .

تشكل عملية التجزئة آلية رئيسية يعتمد عليها التوجيه غير القياسي بين النطاقات (CIDR)، واستخدام الأقنعة مختلفة الطول (VLSM)، ويؤدي تجزئة فضاء العناوين بشكل غير صحيح أو استخدام الأفضية الجزئية بشكل غير مناسب إلى ظهور مشاكل في الشبكة ترتبط بالعنونة وبالتوجيه.                                                                                    المصدر: ويكيبيديا العربية


من أجل حساب Subnet نحتاج إلى معطيات التالية

  1. Binary address
  2. Binary Netmask
تم نرسم الجدول التالي :

جدول حساب Subnet


تم نستخدم And من الأعلى إلى الأسفل أو العكس 1 و 1 = 1 أو 0 و1 =0 قطعا في حالتنا هاته Subnet = 192.168.1.0

حساب Broadcast

في حساب Broadcast القاعدة بسيطة فقط قم بحساب عدد الخانات Netmask في مثالنا هي 24 تم ضع في الباقي قيمة 1 كما في الجدول التالي

في متالنا هذا عنوان Broadcast هوا 192.168.1.255 وهدا أخر عنوان ممكن أن تصل له الشبكة


جدول حساب Boadcast



حساب First and last Host

من أجل حساب First Host نأخد عنوان Subnet تم نظيف إليه واحد من octet الخاص ب Host

(192.168.1.1)Subnet (192.168.1.0) + 1 = First Host


last Host نأخد عنوان Broadcast تم نقوم بطرح واحد من octet الخاص ب Host

(192.168.1.254)Broadcast (192.168.1.255) - 1 = Last Host

ملاحظة : من المهم أن تبدء الشبكة من العنوان 2 والتنتهي في العنوان ما قبل الأخير , من أجل الحفاض عليها من الإنهيار


إضغط التالي من أجل مشاهدة سكربت الحساب الألي


<><>

سكربتات من أجل ترسيخ الفهم وتسهيل الحساب

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





#! /usr/bin/python3
from prettytable import PrettyTable
from Function import subnet
from Function import netmask
from ipaddress import *
class operation():
    """docstring for ClassName"""
    def __init__(self):
        usrip=input("Enter IPv4: ")
        text_input= usrip.split("/")
        byte=text_input[1]
        ip=text_input[0]
        if byte <= "32":
            binaryIP = ('.'.join([bin(int(x)+256)[3:] for x in ip.split('.')]))
            self.binaryIP = binaryIP
            self.ipadd = ip[0]
            self.byte = int(byte)
 
        else:
            print("Your netmask is not defined :/")
 
    def netmask(self):
        nmsk1=("1"*self.byte)
        nmsk2=("0"*(32-self.byte))
        x=nmsk1+nmsk2
        nmsk_bin=("{}.{}.{}.{}".format(x[0:8],x[8:16],x[16:24],x[24:32]))
        nmsk=netmask.convertbin(nmsk_bin)
        return(nmsk)
 
    def subnet(self):
        sbnt1=self.binaryIP.split(".")
        sub_binary=("{}.{}.{}.{}".format((sbnt1[0]),(sbnt1[1]),(sbnt1[2]),subnet.calc_subnet(sbnt1[3])))
        sub_ip=netmask.convertbin(sub_binary)
        return(sub_ip)
 
    def broadcast(self):
        sbnt1=self.binaryIP.split(".")
        sub_binary=("{}.{}.{}.{}".format((sbnt1[0]),(sbnt1[1]),(sbnt1[2]),subnet.calc_subnet(sbnt1[3])))
        brd_bin=sub_binary.split(".")
        brdbin2=("{}.{}.{}.{}").format(brd_bin[0],brd_bin[1],brd_bin[2],brd_bin[3].replace("0","1"))
        brdcst_ip=netmask.convertbin(brdbin2)
        return(brdcst_ip)
 
def main():
    print("""
===========================
|     IPv4 Calculation    |
|--> WWW.GEEK4INFCOM  <-- -="" 1="" __name__="=" address="" again...="" ast="" broadcastip="" enter="" etmask="" except="" first_host="" host="" if="" input="" ipv4="" irst="" last_host="" main="" main__="" netmaskip="" no="" number.="" ops="" pre="" press="" print="" protocole="" roadcast="" setup="operation()" subnetip="" table.add_row="" table.field_names="[" table="" that="" try:="" try="" ubnet="" valid="" valueerror:="" was="">
























هاته الملفات توظع في مجلد Function

ملف netmask


""" file converts binary to iPv4 """
"""binary  interpretation from byte table """
def calc(binSP):#binSP binary variables
    convert=list(binSP)
    if convert[0] == "1":
        var1 = 128
    else:
        var1 = 0 
    if convert[1] == "1":
        var2 = 64 
    else:
        var2 = 0 
    if convert[2] == "1":
        var3 = 32 
    else:
        var3 = 0 
    if convert[3] == "1":
        var4 = 16 
    else:
        var4 = 0 
    if convert[4] == "1":
        var5 = 8 
    else:
        var5 = 0 
    if convert[5] == "1":
        var6 = 4 
    else:
        var6 = 0 
    if convert[6] == "1":
        var7 =2 
    else:
        var7 = 0 
    if convert[7] == "1":
        var8 = 1
    else:
        var8 = 0 
    variables=(var1+var2+var3+var4+var5+var6+var7+var8)
    return(variables)
 
def convertbin(argbin):
 
    binIP=argbin.split(".")
    val=("{}.{}.{}.{}".format(calc(binIP[0]),calc(binIP[1]),calc(binIP[2]),calc(binIP[3])))
    return(val)
#s=input("binary ip : ")
 
#convertbin(s)


ملف subnet



"""Apply "AND" principle in order to extract subnet """
def calc(number):
    if number == "1":
        return("0")
    if number == "0":
        return("1")
def calc_subnet(argv):
    subval=("{}{}{}{}{}{}{}{}".format(calc(argv[0]),calc(argv[1]),calc(argv[2]),calc(argv[3]),calc(argv[4]),calc(argv[5]),calc(argv[6]),calc(argv[7])))
    #print(subval)
    return(subval)
 
#calc_subnet("10000001")



تحميل ملفات السكربت جاهزة





تعديل المشاركة
author-img

Abderrahim

Comments
    No comments
    Post a Comment
      NameEmailMessage