اطلاعیه

Collapse
No announcement yet.

برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

    شما مقادیر موجود در فیلد data پکت tcp را باید بخونی و پردازش کنی .

    دوساعت تایپ کردم ، حواسم نبود کابل شبکه را برای این تست زدم به بوردم ، ارسال کردم ، این ادیتور eca هم که ماشالا بک میکنی صفحه را میزنه خالی میکنه

    دوتا راه داری
    اول استفاده از کتابخونه هاو توابع آماده که احتمالا کنار این easyweb باید باشه ( من ندارمش نمیدونم چطوری کار میکنه )
    راه دوم خوندن و آنالیز فیلد data هست با یک اسنیفر
    من یک نمونه را از یک مثال ساده خودم اسنیف کردم برات ضمیمه کردم طرز کارشو میبینی.
    فایل های پیوست شده
    آن دم که مرا می زده بر خاک سپارید زیر کفنم خمره ای از باده گذارید
    تا در سفر دوزخ از این باده بنوشم
    آنلحظه که با دوزخیان کنم ملاقات یک خمره شراب ارغوان برم به سوغات
    هرقدر که در خاک ننوشیدم از این باده صافی ، بنشینم و با دوزخیان کنم تلافی

    دیدگاه


      #17
      پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

      ولله من خودم web کار نکردم ولی یکی دوتا حدس میزنم که تا بحال شواهدی دال بر ردش پیدا نکردم. انشالله که درسته. اولا اینکه شما برای ارتباط با یک WebServer از سرویس tcp به صورت پیش فرض پورت 80 استفاده میکنین. در حین اتصال به سرور ... سیستم سرور یک پیج اولیه براتون ارسال میکنه که ممکنه شامل عکس و کد جاوا هم باشه. اما راحتترین کار برای ارسال یک درخواست به سرور شاید ارسال اطلاعات بصورت یک خط فرمان برای سرور باشه. مثلا آدرس یک صفحع در سایت تابناک:
      http://tabnak.ir/fa/pages/?cid=117742
      که شامل آدرس سرور "http://tabnak.ir" و آدرس صفحه مربوطه (من اینجا فرض میکنم تابع مربوطه) "fa/pages/" و آرگومان تابع مربوطه هست: "cid=117742" بنا براین ارسال درخواست به سرور چیز سختی نیست به JVM هم احتیاجی نداریم. صفحه html رو هم میشه هم داخلی ساخت یا مثلا روی یک mmc ذخیره کرد و پس از تغییر دادن به درخواست کننده ارسال کرد.

      برای تست هاتون هم میتونین یک برنامه proxy نمونه روی pc بنویسین و اطلاعات ارسالی و دریافتی رو چاپ کنین.

      -----

      راجع به طول و یادداشت جوکر عزیز بایستی عرض کنم که برای دریافت اطلاعات در lpc2378 (که من یه جورایی بهش ور رفتم) بایستی حافظه قسمت MAC جوری init بشه که لیستی از فریم های قابل دریافت در اون مشخص بشه. این فریم ها منطقا میتونن با سایزی کوچکتر از 1536 بایت هم باشن ولی بر اساس اطلاعات موجود در یک سری از lpc ها باگی وجود داره که این مسئله باعث میشه lpc نتونه کلا اطلاعاتی دریافت کنه.

      ------
      راجع به ProcessEthIAFrame هم بایستی عرض کنم که در این تابع کار مهمی انجام نمیشه فقط چک میشه اگه درخواست ARP آمده بهش جواب داده بشه و در غیر اینصورت اگر پروتکل IP بوده باشه در فاز بعدی پروتکل ICMP و TCP پردازش بشه. از این مرحله به بعد هم اگه پا به پای آقای محمد خانی جلو برین کل پروتکل رو متوجه میشین.

      فقط یک نکته مهم!
      چون این سیستم یک سیستم شدیدا محدود هست بر خلاف داخل pc که حافظه بالایی وجود داره و ضمنا سیستم چند برنامه گی هم وجود داره روتین ها رو جوری نوشته که قسمت مدیریت اطلاعات در پروتکل tcp/ip از برنامه اصلی جدا نیست و این یک مقدار گیج کننده هست. در صورتیکه اگه قرار بود شما از RTX استفاده کنین این کد ها در حد سه چهار تابع عمومی send و receive یا read و write کافی بود.


      دیدگاه


        #18
        پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

        جواب تمام سوالام اینجاست اگر کسی هم سوالی مشابه سوال من داشت
        این نرم افزار رو دانلود کنه و تمام نقل و نتقالات شبک رو دنبال کنه
        می تونه هر پکت رو ببینی که از کدوم پروتکل داره استفاده می کنه مبدا و مقصدش کجاست محتواش چیه
        تا بیت های فلگ های کنترل tcp رو می تونی چک کنی :nice:
        http://www.wireshark.org/download.html
        یه نکته بگم ==> اگر به وایرلس وصل شید چون تمام پکت ها رو میبینی خیلی فوضولی ها میشه باهاش کردم (یه وقت فکر نکنید من ...)

        از این بحث انحرافی میاییم بیرون
        فردا استک های اترنت رو بررسی میکنیم
        www.tehranelec.com

        دیدگاه


          #19
          پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

          سورس برنامه wireshark موجود نیست ولی شما میتونی از نسخه قدیمی این نرم افزار یعنی ethereal هم استفاده کنی. این یکی یه کمی کنده ولی سورسش هم هست. ضمنا اگر خواستی از حد لایه های پایینی اترنت تحت windows با میکروات کار کنی (مثلا تست یک ماجول tcpip که خودت نوشتی) از WinPCAP که در هر دو نرم افزار استفاده شده میشه استفاده کرد. من با این WinPCAP روتین ها مو روی pc سیموله میکنم و پس از عیب یابی روی ARM اجرا میکنم. فقط روتین ارسال و دریافتش روی لایه اترنت متفاوت میشه.

          دیدگاه


            #20
            پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

            نوشته اصلی توسط reza_agha
            سورس برنامه wireshark موجود نیست ولی شما میتونی از نسخه قدیمی این نرم افزار یعنی ethereal هم استفاده کنی. این یکی یه کمی کنده ولی سورسش هم هست. ضمنا اگر خواستی از حد لایه های پایینی اترنت تحت windows با میکروات کار کنی (مثلا تست یک ماجول tcpip که خودت نوشتی) از WinPCAP که در هر دو نرم افزار استفاده شده میشه استفاده کرد. من با این WinPCAP روتین ها مو روی pc سیموله میکنم و پس از عیب یابی روی ARM اجرا میکنم. فقط روتین ارسال و دریافتش روی لایه اترنت متفاوت میشه.
            اقا رضا چطور میتونم با استفاده از winPCAP روتین هامو روی pc سیموله کنم - اگر یک راهنمایی کوچک هم باشه میتونه مفید باشه ممنون
            اما در ادامه کارمون قرار شد امروز استک کلی رو مورد بررسی قرار بدهیم
            ببینید لایه ها این طوری هستند


            در پایین ترین لایه سخت افزار اترنت بعد درایور و ... تا به لایه tcp می رسه بعد هم که دیگه application ما قرار داره یعنی بالاترین سطح
            ببینید یه دیتا رو اترنت میاد و به مقصدی که باید بره می ره (چجوری می گم)

            اینو ببینید

            ------------------------------------
            |IP address Ethernet address |
            ------------------------------------
            |223.1.2.1 08-00-39-00-2F-C3|
            |223.1.2.3 08-00-5A-21-A7-22|
            |223.1.2.4 08-00-10-99-AC-54|
            ------------------------------------
            هر دستگاه به خاطر networkmanager و محل اتصالش به شبکه یک ip میگیرد و بر اساس نوع سخت افزار کارت شبکه یک ادرس اترنت میگیرد این دو فیلد هیچ ربطی به هم ندارند ولی در عین حال با هم یک ادرس رو درست میکنند

            یعنی اگر شما ip یک محلی رو بدانید و بخواهید با هاش تبادل اطلاعات کنید دو راه برای بدست اوردن ادرس اترنت وجود دارد
            1-استفاده از ARP_Table که همون حالت استاتیک هست
            2-فرستادن یک پیام به صورت برادکستینگ که همه بشنوند و دستگاه مورد نظر ادرس خودش را به ما بدهد که این نوع حالت دینامیک می باشد

            به دلایلی از حالت دوم استفاده میکنیم
            یعنی یک پیام که به ان ARP پکت میگویند را ارسال می کنیم

            ---------------------------------------
            |Sender IP Address 223.1.2.1 |
            |Sender Enet Address 08-00-39-00-2F-C3|
            ---------------------------------------
            |Target IP Address 223.1.2.2 |
            |Target Enet Address ff-ff-ff-ff-ff-ff |
            ---------------------------------------
            Example ARP Request
            همانطور که مشخص است در هنگام فرستادن درخواست ادرس اترنت را نداریم البته پس از ادرس برادکستینگ استفاده می کنیم
            همه این پیام را گرفته و هر کدام که ip مربوط به خودش باشد پاسخ می دهد
            پاسخ این گونه می باشد

            ---------------------------------------
            |Sender IP Address 223.1.2.2 |
            |Sender Enet Address 08-00-28-00-38-A9|
            ---------------------------------------
            |Target IP Address 223.1.2.1 |
            |Target Enet Address 08-00-39-00-2F-C3|
            ---------------------------------------
            Example ARP Response
            تا بعد....
            www.tehranelec.com

            دیدگاه


              #21
              پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

              من کل سورسهامو به C مینویسم و از کامپایلر Visual Studio 2008 استفاده میکنم. از یک سری هدر فایل هم که برای مطابقت کد های بین کیل و VS نوشته شده استفاده میکنم. روتینهای دسترسی به سخت افزار در دو نسخه نوشته میشه یکی برای کیل و سخت افزار اصلی و دیگری برای windows. یک تسک تعریف میکنم که بجای روتین وقفه دریافت اطلاعات شبکه کار کنه و از طریق WinPCAP روی شبکه local خودم پاکت هارو بخونه. ارسال پاکت ها رو هم از طریق WinPCAP انجام میدم. اما در روتین های شبیه سازی سیستم های جنبی بقیه روتین های رو با #C و C مینویسم. بقیه اش هم که کد های مشترک و بقولی device independent هست.

              برای استفاده از winpcap هم سورس روی اینترنت هست و ضمنا جزء پک winpcap هست.

              دیدگاه


                #22
                پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

                دیدیم وقتی دستگاهی ip دستگاه دیگری رو داره چجوری ادرس اتنتشو پیدا میکنه خوب حال ادرس رو پیدا کردیم==>
                کمی در استک بالاتر (در اصل به لایه بالاتر و لی عمق استک دارد زیاد می شود)میایم تا اینجا هدر اولیه رو که 14 بایت بود معرفی کردیم
                امروز هدر ARP وهدر IP رو معرفی می کنیم
                به عکس زیر نگاه کنید


                در در لایه اول 14 بایت هدر را میبیند وبقیه دیتا می باشد پس هدر توسط دستگاه مربوطه برداشته می شود و دیتا را به لایه ip میدهد اینجا دوباره دیتای قبلی شامل یک هدر و بقیه باز دیتا برای این لایه => هدر مربوطه برداشته و تفسیر می شود و دیتا به لایه بعدی که توسط هدر معلوم می شود فستاده می شود=> فرض هدر گفته دیتا باید به tcp برود پس دیتا به tcp میرود و انجا دوباره دیتا شامل هدر و دیتای لایه tcp است هدر تفسیر و دیتا به ....
                دقت کنید دیتای اول هر چه به سطح بالا تر میرود (در عمق استک دارد فرو می رود) هر بخش هدر خود را برداشته و ان را به دیگری میدهد
                و همینطور وقتی که دیتا دارد پایی ن میاید هر بخش هدر خود را روی ان اضافه میکند!!
                ---------------------------- ----------------------------
                | network applications |
                | |
                |... \ | / .. \ | / ...|
                | ----- ----- |
                | |TCP| |UDP| |
                | ----- ----- |
                | \ / |
                | -------- |
                | | IP | |
                | ----- -*------ |
                | |ARP| | |
                | ----- | |
                | \ | |
                | ------ |
                | |ENET| |
                | ---@-- |
                ----------|-----------------
                |
                ----------------------o---------
                Ethernet Cable


                ببینید در 14 بایت اولیه مشخص می شود که دیتا برای بخش ip است یا اینکه ادرس دهی برادکستینگ بوده و دیتا باید به بخش arp برود و سپس با ادرس صحیح دوباره بر گردد و یا ip می باشد و باید به انجا فرستاده شود و بعد از تفسیر هدر به tcp یا udpیا.. برود

                حال فرض که به arp مربوط بوده است یعنی داشته می پرسیده که این ip ادرس مال کیه؟
                یا هدر tcp بوده و دیگه باید تفسیر شه تا بره بالا و ببینیم که مال کدوم app هست
                هدر arp

                هدر ip

                توضیح این هدر وهدر tcp دفعه بعد
                www.tehranelec.com

                دیدگاه


                  #23
                  پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

                  خوب در فریم اترنت 14 بایت هدر رو برداشتیم و فهمیدیم که دیتا باید به arp یا ip برود
                  و بعد هدر ها را هم مشاهده کردیم
                  حالا هر دو هدر را با هم مرور می کنیم
                  راستش شاید الان یه ذره براتون گنگ باشه و لی قول می دم که به محض تمام شدن این مباحث ضروری که باید بدونید دید بهتری نسبت به شبکه پیدا می کنید و اماده می شید تا بریم تو دل مثال keil و به راحتی اونو تحلیل می کنیم و بعدشم کلی کارای جالب هست که من دارم الان انجام می دم و تا اون موقع تموم شده وبه شما هم می گم

                  در ادامه هدر ARP
                  2 بایت اول نشان دهنده این است که مثلا ما با 10Mbps داریم کار میکنیم
                  2 بایت بعدی FRAM_IP است(بعدا می فهمیم چیه)
                  2 بایت ===== به 6 بایت بودن ادرس و 4 بایت بودن ip اشاره داره و این فرمت رو مشخص می کنه
                  2 بایت===== مشخص می کنه که الان این arp-request است یا arp-answer(یادتون هست یکی یک ادرس دهی برادکستینگ می کرد یعنی arp_request بعدی اون یکی ادرسشو براش می فرستاد arp-answer)
                  6 بایت========ادرس اترنت فرستنده
                  4بایت========== ip فرستنده
                  6 بایت ======== ادرس اترنت مقصد
                  4 بایت=========ip مقصد
                  مجموع 28 بایت که یک فریم arp را می سازند و ما با گرفتم این فریم کاملا می فهمیم که چه کار باید بکنیم


                  در ادامه هدر IP
                  2 بایت اول نشان دهنده ورژن و این حرفاست(مهم نیست)
                  2 بایت بعدی طول فریم
                  2 بایت ===== idetification
                  2 بایت===== (مهم نیست)
                  2 بایت========مشخص کننده پروتکل بعدی برای اینکه دیتا بعد از اینجا کجا برود مقاصد احتمالی==(TCP-ICMP-UDP)
                  2بایت========== checksum هست که با روش خاصی محاسبه می شود(می بینیم عجله نکنید)
                  4 بایت ======== ادرس ip مبدا
                  4بایت=========iادرس ip مقصد
                  مجموع 20 بایت که یک فریم IP را می سازند و ما با گرفتم این فریم کاملا می فهمیم که چه کار باید بکنیم و مقصد بعدی کجاست
                  که در مثال ما مقصد بعدی مطمئنا لایه TCP می باشد بعدی از این هدر
                  هدر TCP باقی می می ماند و یه کوچولو هدر ICMP رو می گم
                  و بعدش دیگه می ریم سراغ برنامه نویسیش که اونجا هم می خوام با جزییات کار کنم ولی اگه نظر سنجی چیز دیگری بخواد که هیچ!!

                  وبعدش من یه مشکلی دارم ایا کسی علاقه داره این بحث ادامه پیدا کنه خواهش می کنم تو پست هاتون بگید چون واقعا اینجا خیلی ساکته
                  اگه بتونم یه نظر خواهی راه می اندازم
                  www.tehranelec.com

                  دیدگاه


                    #24
                    پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

                    ولله راسیتش این بحث نیست. بیشتر به درس دادن شبیهه. اما چه میشه کرد؟ برای شروع به کار باید یک سری چیز ها رو دونست. اما فکر کنم اگر کم کم جلو برین و مشکلات روبروی خودمون رو تحلیل کنیم و پروتکل مربوطه رو توضیح بدین شاید بهتر باشه. اینجوری بیشتر به روخونی دایره المعارف شبیه شده.

                    دیدگاه


                      #25
                      پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

                      نوشته اصلی توسط reza_agha
                      ولله راسیتش این بحث نیست. بیشتر به درس دادن شبیهه. اما چه میشه کرد؟ برای شروع به کار باید یک سری چیز ها رو دونست. اما فکر کنم اگر کم کم جلو برین و مشکلات روبروی خودمون رو تحلیل کنیم و پروتکل مربوطه رو توضیح بدین شاید بهتر باشه. اینجوری بیشتر به روخونی دایره المعارف شبیه شده.
                      واقعا انتقاد به جا و درستی هست منم این رو احساس کردم که بحث نیست!!
                      ولی دیگه تموم شد امروز tcp رو میگم و این دایر ه المعارف رو میندم و از دفه بعد میریم سراغ keil و مثال easyweb
                      خوب در ادامه هدر ها از 14 بایت هدر اصلی فریم به 20 یت هدر ip رفتیم و حالا و انجا تصمیم گرفته شد که دیتای باقی میانده متعلق به tcp می باشد

                      هد tcp


                      با مفهوم پورت اشنا می شویم یعنی علاوه بر ادرس اترنت - ip حالا چیزی به نام ادرس پورت داریم
                      که یک عدد است اینجا با پورت 80 کار داریم(مر بوط به www)

                      2 بایت ===> پورت مبدا
                      2 بایت ===> پورت مقصد
                      4 بایت ===>segment seq number
                      4 بایت====>segment ack number
                      2 بایت=====> دیتای کنترلی(یادتون هست در استیت ماشین ack fin syn داشتیم همه در این قسمت هستند و بیتهای این پکت کنترلی هستند)
                      2 بایت ====> سایز پکت ارسالی
                      2 بایت=====> chechsum
                      2 بایت=====> (مهم نیست)

                      20 بایت طول هدر tcp شد و فیلد seq num seg ack در استیت ها مختلف معانی مختلفی دارند
                      ببینید در tcp دیتا به چندین قسمت تبدیل می شود و به صورت بخش بخش ارسال میشود
                      یادتان هست گفتیم tcp مثل یک پنجره لغزان می ماند یعنی هر با طول پنجره بعدی تنظیم می شود و دیتای بعدی با ان طول می اید
                      در کل seq num شماره ان بخش از دیتا است که الان امده و ack num شماره بخشی است که طرف مقابل انتظار دارد برایش بفرستیم

                      خوب برای این که جلو افتاده باشیم از همین امروز شروع میکنیم
                      خوب وسایل لازم فایل های زیر می باشد
                      tcp.h===> فایل حاوی تعریف ثابت ها و متغییر ها
                      tcp.c====> فایل حاوی توابع لازم (که ما می خواهیم خود این توابع را هم بررسی کنیم)
                      mac.h=====> فایل حاوی توابع در لایه مک(ما با mac.c نداریم چون این توابع برای سخت افزار خاصی است و زیادی سطح پایی است(زبان ماشین))
                      easyweb.c و easyweb.h فایل هایی که در واقع فایل اصلی ما هستند

                      همه در اینجا
                      http://www.4shared.com/file/_w2PiHHm/eth.html

                      خوب من هر بار قسمت از کد رو توضیح می دم بعد در موردش سوال و جواب میشه بعد پارت بعدی از انجایی که کد ها پیوسته هستند شاید مجبور شیم یه مقدار از قبل و بعد هم بگیم

                      خوب اولا مثال easyweb اخرش خروجیش چیه
                      ببینید در این مثال یک صفحه html درون می کرو بار گذاری میشه
                      و میکرو مثل یک سرور عمل می کنه و وقتی شما ادرس ip اونو میزنید مثل اینکه می خواهید به سایت eca وارد شید میکرو اطلاعات پیج رو برای مرور گر شما می فرستد مثل همین جا که ادرس eca.ir میزنید سرور اطلاعات پیج اول را برای شما می فرستد
                      شما تحت پروتکل http درخواست یک پیج را برای میکرو می فرستید و میکرو هم پیج اول رو برایتان لود میکند و دو متغییر از adc رو خوانده و مقادیرسان را در رفرش های 5 ثانیه ای نمایش می دهد
                      پیج
                      html
                      http://www.4shared.com/document/gQfCXe-g/webpage.html

                      to be continued..


                      www.tehranelec.com

                      دیدگاه


                        #26
                        پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

                        سلام
                        من دیدم که فایل هایی رو که قرار دادم فقط یک نفر دانلود کرده !!

                        خوب کل کار ما این است که بفهمیم easyweb.c چی کار میکنه
                        از اینجا به بعد تمام اون چیز هایی که گفتم استفاده میشه

                        خوب اگر easyweb.c را ببینید اولین تابعی که اجرا شده tcplowlevelinite می باشد
                        در داخل این تابع adc تنظیم می شود که با ان زیاد کاری نداریم
                        تابع init_mac اجرا شده که از توابع mac می باشد و فقط صرفا در همین حد از ان استفاده می کنیم
                        متغیر transmitcontrol برابر صفر می شود
                        این متغیر مقادیر زیر را دارد و برای مشخص کردن وضعیت ارسال دو فریم موجود را در خود نگه می دارد
                        صفر=====>داده ای برای ارسال نیست
                        1 ========> فرمان برای ارسال فریم 1
                        2======> فرمان برای ارسال فریم 2

                        سپس متغییر tcpflag برابر صفر می شود
                        این متغییر وضعیت درخواست های مختلف در لایه tcp را بررسی میکند که فعلا هیچ درخواستی موجود نیست
                        مثلا یکی از مقادیری که می گیرد TCP_ACTIVE_OPEN میباشد(به tcp.h مراجعه کنید) که نشان می دهد الان در استیت ها tcp ما ارتباط فعال را داریم
                        IP_ADDR_RESOLVED مشخص می کند که فراخوانی برادکستینگ شده و ادرس برگشته و ادرس طرف ارتباطی را داریم
                        TCP_TIMER_RUnning نشان می دهد که تایمر در حال شمارش است(می دانید که tcp زمان بندی شده است رجوع به اموزش های قبلی)
                        TIMER_TYPE_RETRY یعنی با تایم اوت شدن اجازه انجام مجدد اخرین کار زمان بندی شده را دارد
                        TCP_CLOSE_REQUESTED در خواست اتمام ارتباط شده است
                        سپس متغییر TCP_statemachine برابر closed می شود
                        که این متغییر استیتی را که در ان قرار داریم نشان میدهد

                        و در اخر متغییر socketstatus برابر صفر می شود(سوکت چیست؟ قبلا توضیح داده شده)
                        این متغییر وضعیت سوکت را مشخص میکند که مثلا فعال است
                        یا دیتا رو سوکت موجود است یا انواع خطاهایی که ممکن است به خاطر تایم اوت شدن یا ... پیش بیاید در این متغییر جمع می شوند و وضعیت بیت ها ان خیلی مهم است
                        تا اینجا تنها یکه تابع tcplowlevelinite را بررسی کردیم دستگاه روشن شده و در استیت closed هستیم وضیت سوکت چیز خاصی نیست
                        چیزی برای ارسال در فریم ها لود نشده و نه در استیت فعال هستیم نه تایمری در کار است و tcpflag هم حاووی اطلاعاتی نباید باشد



                        to be continued..
                        www.tehranelec.com

                        دیدگاه


                          #27
                          پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

                          تا اینجا تنها یکه تابع tcplowlevelinite را بررسی کردیم دستگاه روشن شده و در استیت closed هستیم وضیت سوکت چیز خاصی نیست
                          چیزی برای ارسال در فریم ها لود نشده و نه در استیت فعال هستیم نه تایمری در کار است و tcpflag هم حاووی اطلاعاتی نباید باشد

                          خوب قبلش یه اتفاق دیگه در tcplowlevelinite می افتاد که یادم رفت بگم اونم اینه که وقفه تایمر صفر رو فعال تا هر 262ms یک بار روتین وقفه اجرا بشه
                          در روتین وقفه دو مقدار زیاد می شوند
                          یکی ISNGenHigh و دیگری TCPTimer می باشد
                          TCPTimer که برای بحث زمان بندی tcp لازم میشود
                          اما ISNGenHigh که معنیش initial sequ number generator.. می باشد ==> اگر موقعی که می خواستیم ارتباط فعال داشته باشیم یادتون باشه
                          نیاز به یک عدد رندم داشتیم از این مقدار استفاده می کنیم تا عدد رندم را تولید کنیم
                          دقت کنید اگر این مقدار رندم نباشد و کسی بتواند ان را حدس بزند دزدین پکت های شما کاری راحت می باشد!!!


                          در ادامه متغییر HTTPstatus صفر میشود
                          این فلگ مشخص می کند که ایا پیج (html موجود در حافظه میکرو) فرستاده شده است یا خیر
                          و تنها مقادیر صفر===> چیزی فرستاده نشده
                          و مقدار HTTP_send_page (به easyweb.h مراجعه شود) ===> یعنی پیج فرستاده شده است

                          سپس پورت 80 را به عنوان پورت خودمان انتخاب می کنیم
                          tcplocalport=tcp-port-http
                          تمام مقدار دهی های اولیه تمام شد همه چیز اماده شروع کار می باشد
                          از اینجا به بعد تمامی دستورات در حلقه بی نهایت انجام میشود

                          اول سوکت چک می شود که اکتیو است یا خیر اگر نبود ==> برای passive_open می رویم تا از ان طریق به کانکشن فعال برسیم و ارسال و دریافت دیتا را شروع کنیم
                          برای ارتیاط پسیو کافی است استیت خود را از closed به listening ببیرم(رجوع شود به استیت دیاگرام)
                          سپس فلگ tcpflag را برای علامت گذاری اینکه در حالت پسیو هستیم علامت می گذاریم
                          و سوکت را هم فعال علامت گذاری می کنیم

                          سوکت فعال است در استیت listening هستیم
                          حالا باید منتظر شویم کسی به ما وصل شود(نا سلامتی سروریم)
                          ارتباطی می اید از 14 بایت اول باید (check_frame_rec) می فهمیم که ایا ادرسش براد کستینگ است یا خیر
                          اگر ادرس برادکستینگ بود که می رود به تابع process_eth_broadcast تا قضیه ادرس حل شود و ادامه کار ...
                          اگر نه قضیه ادرس حل بود و فریم دیتا بود به تابع process_eth_ia_frame فرستاده می شود تا هدر بعدی و بعدی تفسیر شوند تا به لایه بالاتر رود
                          و بعد از اجرای هر کدام از توابه تابع end_read_fram اجرا میشود از توبع mac می باشد وفقط تا همین جا باهاش کار داریم

                          خوب فرض قضیه ادرس حل نبود و تابع process_eth_broadcast اجرا شد ببینیم این تابع چطور عمل می کند

                          تنها کاری که میکند این است که ip مقصد را که فریم اورده بر می دارد و با ip خودش مقایسه می کند اگر یکسان بود
                          پس طرف ادرس اترنت ما را می خواسنه(خوب مهمون حبیب خداست بهش می دیم)
                          تابع prepare-arp-ans را اجرا می کنیم
                          حالا باید بدونیم فرمت استک arp چگونه است
                          شروع می کنید فریم را مطابق استک (قبلا توضیح داده شده) پر کردن===>14 بایت هدر اصلی +28 بایت هدر arp پر می شود و در txframe2size نگهداری می وشد
                          سپس transmitcontrol را برای ارسال فریم دوم مقدار می دهد تا در اولین فرصت ارسال شود
                          بسته ارسال شده و طرف ارتباط ادرس ما را می یابد
                          دفعه بعد اگر پکتی بیاید مطمئنا دیگر براد کستینگ نیست و حتما تابع process_eth_ia_frame اجرا می شود

                          to be continued..
                          www.tehranelec.com

                          دیدگاه


                            #28
                            پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

                            حجی باور کن منم که شبکه را بلدم ، اینا را اینطوری میخونم قاطی میکنم
                            آن دم که مرا می زده بر خاک سپارید زیر کفنم خمره ای از باده گذارید
                            تا در سفر دوزخ از این باده بنوشم
                            آنلحظه که با دوزخیان کنم ملاقات یک خمره شراب ارغوان برم به سوغات
                            هرقدر که در خاک ننوشیدم از این باده صافی ، بنشینم و با دوزخیان کنم تلافی

                            دیدگاه


                              #29
                              پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

                              جناب جوکر عزیز. این برنامه و هر برنامه دیگه ای یک منطق کلی داره و یک جزئی. این چیزی که آقای محمد خانی قید میکنن مربوط به جزئیات هست. نه ایده کلی. جسارتا از همین حالا یاد بگیرین که بتونین (با عرض معذرت از آقای محمد خانی) از میون آشغالا اون چیزی رو که بدرد میخوره جدا کنین. هر کاری جزئیاتش ممکنه خسته کننده و حجیم باشه. وگرنه نوشتن کد معادل این مثال در #C ممکنه کمتر از 20 خط باشه.
                              اینم یک مثاله. من برای اولین بار همین مثال رو با یک مصیبتی تغییر دادم ولی کد فعلی من برای یک پروژه روی LPC2378 خیلی با این کد ها فرق میکنه. و کوچکتر و راحتتر شده.

                              میدونین....
                              یکی از دلایلی که من همیشه راغبم به این فروم سر بزنم اینه که هر کسی در هر کاری "دید" خودش رو داره و در پس هر "دید"ی "منطق"ی هست. شما هم کم کم بایستی عادت کنین این "منطق" هارو بهتر و سریعتر درک کنین.

                              دیدگاه


                                #30
                                پاسخ : برد مبدل اترنت کامل شد -بررسی مثال EasyWEB در کیل

                                منظورم چیز بد نبود :biggrin:
                                منظورم روش نوشتار بود ، این روش اینجا ، والا بلا من قاطی میکنم
                                بزار توضیحمو یه جور دیگه بدم ،به نظر من اول تکه سورس را کامل بنویسیم ، خطوط را شماره گذاری کنیم و بعد آموزش را یه کم تغییرش بدیم ، بیایم سورسهای را اینجوری شکاف بدیم و شروع کنیم به توضیح. حالا یه خط مثلا توش نوشته شده xyz بیاین علت وجود x و مشتقاتش را به صورت درختی توضیح بدیم ( همه اینا که گفتم آخرش همین مطالب اق محسنه ولی درکش توی ذهن برای خواننده منظورمه )
                                البته در این کنار برای آموزش سریعتر و بصری تر پروتکل شبکه من خوندن فایل زیر را توصیه میکنم:
                                شبکه اترنت صنعتی نوشته محمدرضا ماهر - شرکت صابکو
                                http://www.alt.ir/other/ethernet.zip

                                معرفی شده در لینک " http://www.eca.ir/forum2/index.php?topic=23228.0
                                منتها از اونجا تا اومدم دانلود کنم پوستم کنده شد ، اینجا مستقیم پلودش کردم.

                                آن دم که مرا می زده بر خاک سپارید زیر کفنم خمره ای از باده گذارید
                                تا در سفر دوزخ از این باده بنوشم
                                آنلحظه که با دوزخیان کنم ملاقات یک خمره شراب ارغوان برم به سوغات
                                هرقدر که در خاک ننوشیدم از این باده صافی ، بنشینم و با دوزخیان کنم تلافی

                                دیدگاه

                                لطفا صبر کنید...
                                X