پروتکل ARP و پیاده‌سازی آن با ENC28J60 در شبکه‌های اترنت | قسمت نهم آموزش Embedded ethernet

blog
27 بازدید
۱۴۰۴-۰۲-۲۱
16 دقیقه

مقدمه‌ای بر پروتکل‌های شبکه

پروتکل ARP (Address Resolution Protocol) با استفاده از آدرس IP مقصد یا گیرنده پیام؛ آدرس فیزیکی یا همون مک آدرس گيرنده رو به دست میاره تا بتونيم فریم‌های لایه 2 رو ارسال کنيم. فرض كنيد شماره‌تلفن شخصي رو نداريد؛ چطور ميتونيد بهش تلفن كنيد؟ ما ممكنه از سرویس‌هایی مثل 118 یا کتابچه‌های تلفن استفاده كنيم؛ اما در مبحث شبكه؛ سعي ميشه با استفاده از قابلیت‌های خود شبكه، مشكلات حل بشه.

در تعريف پروتکل‌های شبكه سعي شده اونها رو به‌گونه‌ای تعريف كنند كه احتمالاً در آينده و با تغيير ساختار شبكه؛ همچنان كارايي داشته باشند. به همين دليل اونها تنها برای استفاده در يك شبكه خاص تعریف‌نکردن و تاحدامکان، عمومی تعریف شده‌اند.

معرفی RARP – پروتکلی برای ترجمه برعکس آدرس‌ها

  • یه نکته کوچولو هم فقط جهت اطلاع بگیم، یه پروتکل دیگه ای در لایه سوم داریم که کارش عکس کار ARP هست، یعنی با آدرس فیزیکی، آدرس منطقی رو به دست میاره. بهش میگن RARP یا همون Reverse ARP و در حال حاضر استفاده‌ای برای ما نداره.

پروتکل ARP و نقش آن در شبکه

کار پروتکل ARP چیه؟ هر وقت نیاز میشه یه بسته با استفاده از پروتکل IP رو بفرستيم، قبلش چک می‌کنیم که آیا مک آدرس گیرنده رو داریم یا نه؟ اگر مك آدرس رو نداشته باشيم، اول بايد اون رو به دست بياريم؛ پس هر هاست، نیاز داره جدولی داشته باشه به اسم جدول ARP که توش مشخص شده هر آی‌پی متعلق به كدام مک آدرس است.

وظایف اصلی پروتکل ARP

این عملیات در داخل میکروکنترلر پیاده‌سازی (Implementation) میشه، از طرفی چون ممکنه هر قطعه‌ای از شبکه خارج بشه (خاموش بشه؛ کابلش جدا بشه یا حتی هنگ و ریست شده باشه) معمول اینه که جدول ARP به طور مرتب چک و بروز میشه، به همین دلیل اگر با نرم‌افزاری مثل wireshark  شبکه رو شنود کنید، می‌بینید که هرازگاهی بسته‌های ARP دوباره ارسال میشه.

جدول ARP و به‌روزرسانی‌های آن

  • بسته‌های ARP مسیریابی نمی‌شوند؛ یعنی بسته‌های پروتکل ARP فقط درون شبکه داخلی انتشار می‌یابند و روترها این بسته را اصطلاحاً روت نمی‌کنند.

چرا بسته‌های ARP مسیریابی نمی‌شوند؟

  • اگر این پرسش براتون به وجود اومده که اگر بخوایم با یک دستگاه در زیرشبکه دیگه ای ارتباط بگیریم؛ چطور مک آدرس اون رو به دست میاریم؛ جواب اینه که اصولاً هر هاست در یک زیرشبکه از طریق یک روتر به شبکه‌های دیگه متصل هست؛ در این وضعیت، برای آدرس‌دهی، اطلاعات لایه سوم یعنی آدرس IP استفاده میشه. روتر بعد از دریافت یک بسته برای ارسال به یک شبکه دیگه؛ اطلاعات لایه دوم رو تغییر میده. هرگاه نیاز هست پیامی به شبکه دیگه ای ارسال بشه؛ هاست مبدأ، این پیام رو به روتر میفرسته و در لایه دوم، مک آدرس روتر شبکه داخلی خودش یا همون gateway رو به‌عنوان مک آدرس مقصد اعلام میکنه. اما آدرس IP مقصد؛ آدرس هاست مورد نظر هست. 

تحلیل بسته‌های ARP در شبکه

  • تعداد زیادی نرم‌افزار که اصطلاحاً به اونها sniffer میگن؛ برای شنود و بررسی داده‌های داخل شبکه وجود دارند که معروف‌ترین اونها wireshark هست. 

پیاده‌سازی ARP با ENC28J60

تا اینجا تراشه ENC28J60 رو راه انداختیم و دو تابع نوشتیم که توسط اونها، فریم‌های رسیده از شبکه رو دریافت و پردازش می‌کنیم یا فریم‌هایی رو روی شبکه ارسال می‌کنیم. شاکله برنامه رو هم گفتیم كه میخوایم این‌طور پیاده‌سازی کنیم که یه پکت رو می‌گیریم، پردازش می‌کنیم و اگه نیاز بود جوابش رو همونجا بوجود میاریم (داخل همون حافظه‌ای که داخل میکروکنترلر برای دریافت فریم‌ها در نظر گرفتیم).

دریافت و ارسال فریم‌های شبکه با ENC28J60

وقتي یه فریم رو میگیریم، مک آدرس ها بالطبع سرجاشون هستند (در 12 بایت ابتدایی فریم) دو بایت بعدی در فریم بنام Ether type رو برمیداریم، در حالتی که این فریم متعلق به پروتکل ARP باشه، عدد داخل این دو بایت 0x0806 هست. پس بایت های داده ی داخل فریم متعلق به این پروتکل هستند. گفتیم هر پروتکلی، هدر مخصوص به خودش رو در ابتدای داده ها اضافه میکنه؛ پس در ابتدای بخش داده ها در یک فریم، باید بخش هدر مربوط به ARP رو تفکیک و بررسی کنیم. اگر بخواهیم ترکیب بایت های درون فریم در لایه دوم رو به صورت شکل نشون بدیم، یه همچین چیزی هست (از چپ به راست) :

 

6 octet

Destination MAC Address

6 octet

Source MAC Address

2 octet

Ether Type

0x0806

Payload in frame

4 octet

CRC

28 octet

ARP

Header

18 octet

Padding

0x00

ساختار فریم ARP در لایه دوم

12 بایت ابتدایی مک آدرس ها هستند. 2 بایت با مقدار 0x0806 نوع پروتکل لایه سوم رو مشخص میکنه که در این حالت، ARP هست. در بخش داده های فریم (payload)؛ فقط بخش هدر در پروتکل ARP وجود داره که تعداد 28 بایت، فضا اشغال میکنه. داده ی دیگری توسط این پروتکل ارسال نمی شود و از آنجاییکه اندازه کل فریم 46 بایت (کمتر از 64 بایت برای حداقل طول فریم) است لذا در ادامه فریم؛ بسته به پیاده سازی لایه دوم؛ ممکن است شما 18 بایت با مقدار 0x00 برای padding داشته باشید. در انتهای فریم هم طبق معمول CRC خواهیم داشت. فرمت هدر، در پروتکل ARP در جدول زیر نشان داده شده است:

Octet

Offset

0

1

0

HType (Hardware Type)

2

PType (Protocol Type)

4

HLen (Hardware Address Length)

PLen (Protocol Address Length)

6

OPER (Operation)

8

SHA (Sender Hardware Address) first 2 Bytes

10

SHA next 2 Bytes

12

SHA Last 2 Bytes

14

SPA (Sender Protocol Address) first 2 Bytes

16

SPA last 2 Bytes

18

THA (Target Hardware Address) first 2 Bytes

20

THA next 2 Bytes

22

THA Last 2 Bytes

24

TPA (Target Protocol Address) first 2 Bytes

26

TPA last 2 Bytes

بررسی فیلدهای مختلف در هدر ARP

HTYPE : دو بایت با نام Htype، نوع سخت‌افزار رو مشخص میکنه. برای برد ما که از اترنت 10Mb استفاده میکنه؛ داخل این دو بایت عدد 0x0001 بايد باشه.

  • برای اینکه بدونید چه اعدادی در اینجا میتونن قرار بگیرن، سند RFC 1700 و ارجاعات اون رو ببینید. این RFC شامل اعداد رزرو شده در پروتکل‌های مختلف؛ برای قرارگیری در محل‌های مختلف رو ثبت کرده. این کار توسط سازمانی بنام IANA انجام میشه.
  • به‌طورکلی در مورد شبکه اینترنت و استانداردهای اون، چند سازمان یا انجمن در اجرای کار دخیل هستند که ممکنه در طول این نوشتار بهشون برخورد کنیم، مثل:
  • IANA:  Internet Assigned Numbers Authority
  • IETF: Internet Engineering Task Force
  • IEEE: Institute of Electrical and Electronics Engineers
  • DARPA:  Defence Advanced Research Projects Agency

PTYPE : یا Protocol Type؛ شامل دو بایت که اگه یادتون باشه برای پروتکل IP عدد 0x0800 بود. در واقع در این بخش نشون میدیم آدرس منطقی ما، آدرس مورد استفاده در پروتکل IP خواهد بود.

HLEN : در این قسمت که یک بایتی هست، تعداد بایت‌های آدرس فیزیکی یا سخت‌افزاری ما مشخص میشه و از اونجایی که مک آدرس‌ها، 6 بايتی هستند؛ در این جا عدد 0x06 نوشته میشه.

PLEN : در این بخش كه يك بايت رو اشغال كرده؛ تعداد بایت‌های آدرس منطقی نوشته میشه، آدرس منطقی ما از نوع IP Address هست؛ پس در اینجا عدد 0x04 نوشته میشه.

OPER : نوع عملیات رو مشخص میکنه. کلاً دو نوع پیام روی ARP مورد استفاده ما هست، درخواست (Request) و پاسخ (Reply) که جهت درخواست عدد 0x01 و برای پاسخ عدد 0x02 استفاده میشه. سمتی که نیاز داره IP یه دستگاه دیگه رو پیدا کنه، درخواست (0x01) میفرسته و سمت مقابل پاسخ (0x02) میده.

SHA : یا آدرس سخت‌افزاری فرستنده. در این 6 بایت، مک آدرس فرستنده این پکت قرار میگیره.

SPA : در اینجا 4 بایت آدرس IP فرستنده نوشته میشه.

در ادامه و در بخش‌های THA و TPA هم مک آدرس و IP آدرس طرف مقابل نوشته میشه.

نحوه عملکرد پیام‌های ARP (درخواست و پاسخ)

در ابتدا درخواستی از طرف درخواست‌کننده ارسال میشه. از اونجاییکه در این مرحله، هنوز مک آدرس طرف مقابل رو نمیدونه، پس به جای مک آدرس عدد FF:FF:FF:FF:FF:FF ارسال میشه. اگه یادتون باشه این آدرس رو بهش می‌گفتیم Broadcast Address در نتیجه تمامی دستگاه‌های متصل به شبکه داخلی، این پیام رو دریافت می‌کنند. در جواب این پیام (درخواست)؛ دستگاهی که IP آدرسش در پیام قبلی اومده؛ پیامی ارسال میکنه اما دیگه اینجا هم مک آدرس و هم IP آدرس طرف مقابل رو میدونه. مک آدرس خودش رو هم اضافه میکنه و نوع پیام رو در قسمت OPER عدد 0x02 میذاره و ارسال میکنه. در نتيجه این پیام دیگه broadcast نیست. به این فرایند اصطلاحاً Who has? میگن، درخواست‌کننده پیامش رو اینجور میفرسته:

Who has IP=aa-aa-aa-aa ? tell me   IP=yy-yy-yy-yy   at   mac=zz:zz:zz:zz:zz:zz

در جواب هم سمت مقابل میگه

I am at   IP=xx-xx-xx-xx    ,mac=bb:bb:bb:bb:bb:bb

 

نمونه‌های واقعی از درخواست و پاسخ ARP در Wireshark

در شکل‌های زیر درخواست و پاسخ ARP ثبت شده توسط نرم‌افزار wireshark رو می‌بینیم:

درخواست ARP

درخواست ARP

پاسخ ARP

پاسخ ARP

تصاویر مربوط به درخواست ARP از طرف کامپیوتر با سیستم‌عامل ویندوز و چیپ ASUS و پاسخ از طرف برد ما با تراشه ENC هست (بخش OUI مک آدرس رو مقدار 0x00,0x17,0x22 گذاشتيم؛ درنتيجه، در گزارش، wireshark سازنده چیپ رو شركت ديگه اي به جز ميكروچيپ تشخیص داده)؛

  • صفرهای موجود در انتهای پیام پاسخ، ناشی از عمل padding هست؛ ولی همونطور که در پیام درخواست می‌بینید، عمل padding از طرف ویندوز انجام نشده!
  • در تصویر تعداد بایت‌های واقع در فریم درخواست؛ عدد 42 نوشته شده. اختلاف 4 تایی با عدد 46 بخاطر محاسبه نشدن بخش CRC هست.
  • برای اطلاعات بیشتر در مورد پروتكل ARP میتونید به سند RFC 826 و به‌روزرسانی‌های اون مراجعه کنید.

بررسی تصویری بر جایگاه پروتکل‌ها در مدل شبکه

 اگه بخوایم نسبت این پروتکل و فریم Ethenet ii رو به‌صورت تصویری نشون بدیم؛ چیزی مثل جدول زیر میشه:

(Network Layer) لایه 3

IP (packet)

ARP (packet)

(Data Link Layer) لایه 2

Ethernet ii (frame)

(Physical Layer) لایه 1

‘0’ , ‘1’ (Stream)

آغاز پیاده‌سازی پاسخ به ARP در میکروکنترلر

بهتره بریم سر وقت نرم‌افزار میکروكنترلرمون تا کار رو ادامه بدیم و پاسخ به درخواست‌های ARP رو توش پیاده‌سازی کنیم. اگه یادتون باشه ما یه ساختار به اسم ENC28J60_Frame داشتیم و يك تابع که توسط اون فریم‌های Ethernet ii رو دریافت و در متغیری از این ساختار (struct) ذخیره می‌کردیم.

از اونجایی که کار ما با تراشه ENC تموم شده و جهت اینکه احتمالاً بعداً، به‌راحتی بتونیم از تراشه دیگه ای استفاده بکنیم؛ برای اضافه‌کردن مابقی کدها (که پردازش پروتکل‌ها رو انجام خواهند داد) یک زوج فایل جدید به‌صورت .c, .h به برنامه اضافه می‌کنیم و اسمشون رو Ethernet.c , Ethernet.h میذاریم.

تعریف متغیر عمومی برای فریم دریافتی

در فایل اصلی برنامه (main.c) و در تابع main؛ متغیری عمومی به‌صورت زیر تعریف میکنیم:

تعریف ساختار ENC28J60_Frame

برای اینکه مجبور نباشید برگردید عقب، مجددن اعلان ساختار ENC28J60_Frame رو اینجا براتون میذاریم

تعریف تابع ETH_Process برای پردازش فریم‌ها

در فایل جدید تابعی به فرمت

تعریف می‌کنیم، این تابع آدرس متغیری از نوع ساختار ENC28J60_Frame رو میگیره و داده‌های داخل اون رو پردازش میکنه. روال کار اینطوریه که در حلقه اصلی برنامه (while(1)) ما به طور متوالی این تابع رو فراخوانی میکنیم. این تابع با استفاده از تابعی که قبلاً تعریف کردیم (ENC28J60_ReceiveFrame) فریم های دریافت شده رو پردازش میکنه و در صورت لزوم پاسخ میده (با استفاده از تابع ENC28J60_TransmitFrame) 

پردازش فریم‌های Ethernet II

داخل تابع ETH_Process اولین کاری که باید انجام بدیم اینه که ببینیم فریم جدیدی داریم یا نه:

تبدیل داده دریافتی به ساختار ETH_Frame

اگر فریمی موجود باشه:                                                                           if (requestSize > 0)

بخش داده از فریم جدید رو جدا کرده و نوع اون رو هم به ساختار جدیدی بنام ETH_Frame اصطلاحاً typecast می‌کنیم:

معرفی ساختار ETH_Frame و نحوه استفاده از آن

همین‌جا اعلان ساختار ETH_Frame رو هم نشون بدیم:

همونطور که می‌بینید؛ این ساختار به فرمت یک فریم Ethernet ii هست؛ یعنی دو آرایه 6 بایتی برای مک آدرس‌ها، 2 بایت برای Ether Type و یک آرایه با اندازه نامشخص از داده‌های فریم براش در نظر گرفتیم.

استخراج نوع فریم و محاسبه طول داده‌ها

خب برگردیم سراغ کد قبلی، در خط اول قسمت encFrame->data رو اصطلاحا typecast کردیم و آدرس اون رو در اشاره‌گری بنام ethFrame ذخیره کردیم.

در خط بعدی نوع اترنت (etherType) رو هم از داخل ساختار کشیدیم بیرون و به‌صورت جداگانه در متغیری ذخیره کردیم. در خط سوم هم از اندازه تعداد بایت‌های فریم اصلی، اندازه ساختار ETH_Frame رو کم کردیم؛ به‌این‌ترتیب اندازه داده‌های درون فریم رو به دست آوردیم.

تفاوت Endianness و اهمیت آن در شبکه

اگه دقت کرده باشید؛ در خط دوم از چیزی به اسم ntohs استفاده شده که ظاهرش مثل توابع C هست؛ اما در واقع تنها یک define با آرگومان هست، قبل از پیاده‌سازی‌اش باید بگیم چی هست و چی کاری میکنه!

  • دو تفاوت بین روش ثبت و پردازش داده‌ها در شبکه و همچنین سیستم‌عامل ویندوز و بسیاری از کامپایلرهای میکروکنترلری هست که عدم توجه به اون ها؛ باعث باگ‌های نرم‌افزاری زیادی میشه. سعی کنید همیشه این دو تفاوت در ذهنتون باشه. اول اینکه در شبکه، اطلاعات به‌صورت Big Endian ردوبدل میشه؛ یعنی داده پرارزش ابتدا ارسال میشه ،ولی این اطلاعات به ترتیب ورود، در حافظه ذخیره میشن در نتیجه داده‌های پرارزش در آدرس‌های کمتر حافظه (داخل آرایه‌ها) قرار می‌گیرند. نکته بعدی هم اینکه؛ بسیاری از محاسبات در شبکه به فرم مکمل 1 (one’s complement) انجام میشه؛ درحالی‌که، در ویندوز و عموم میکروکنترلرها محاسبات به فرم مکمل 2 (two’s complement) انجام میشه. درباره مورد دوم به وقتش توضیح بیشتری میدیم.

تابع ntohs در واقع تفاوت اول رو حل‌وفصل میکنه. همونطور که گفتیم داده‌ها در شبکه به‌صورت Big Endian ارسال میشن، مثلاً در ارسال دو بایت Ether Type که در پروتکل ARP برابر با 0x0806 بود؛ ابتدا بایت 0x08 ارسال میشه و بعد 0x06، خب ما اینها رو داخل یک آرایه ریختیم؛ از اونجایی که این اطلاعات به ترتیب ورود، درون این آرایه ذخیره‌شدن؛ لذا اگه بخوایم اونها رو پردازش کنیم، چیزی که می‌بینیم (میکروکنترلر میبینه) در واقع عدد 0x0608 هست.

برای همین میایم و با استفاده از ntohs جای بایت‌ها رو هنگام انتقال به متغیر etherType عوض می‌کنیم.

همونطور که گفتیم به‌جای تعریف تابعی برای این کار؛ از defineهای آرگومان دار استفاده کردیم. یه نکته دیگه هم اینکه، دو تا define تعریف می‌کنیم؛ یکی برای داده‌های دو بایتی و ديگری براي چهار بایتی‌ها.

پس در ابتداي فايل Ethernet.c همچنین چیزی اضافه میشه:

h به‌جای host و n به‌جای network، s برای short و l برای long بکار رفته. همونطور که دیده میشه کار ntohs و htons همین‌طور کار ntohl و htonl یکسانه و فقط به جهت تشخيص جهت ارتباط چهار تا شده‌اند وگرنه همون دوتای اول کفایت می‌کرد. كار اين كد هم فقط جابه‌جاکردن (swap) بایت‌های داخل متغير هست.

پاسخ به درخواست‌های ARP

خب برگردیم به ادامه تفسير کد:

تشخیص نوع فریم و واکنش به ARP

نوع فریم رو چک می‌کنیم که اگر از نوع ARP باشه، جوابش رو تهیه کنیم. برای بار چندم یادآوری می‌کنیم که جواب‌ها در همون حافظه‌ای که برای اطلاعات دریافتی اختصاص دادیم، قرار می‌گیرند، لذا چنانچه نیاز به ارسال پاسخ باشه (مثل همین‌جا در ARP) کافیه جای مک آدرس‌ها رو داخل فریم اصلی عوض کنیم (در واقع جای فرستنده و گیرنده عوض میشه) و بقیه اطلاعات رو هم باتوجه‌به پروتکل دریافتی تنظیم کنیم؛ مثلاً اینجا باید در قسمت OPER عدد 0x02 رو بنویسیم.

  • یه نکته‌ای هم اینجا بد نیست دوباره تذکر بدیم که در قسمت فیلترهاي تراشه ENC ، حداقل باید دو قابلیت فعال شده باشه، دریافت پکت هایی که مک آدرس گیرنده ما توش هست بعلاوه پیام‌های broadcast شده با مک آدرس تمام 0xFF

پردازش فریم دریافتی در تابع ETH_Process

و در انتها هم چنانچه جواب لازم باشه اون رو ارسال می‌کنیم

ساختار نهایی تابع ETH_Process

در نهایت تابع ETH_Process همچین چیزی میشه:

پاسخ به فریم‌های دریافتی

در کد بالا دو تابع، هنوز برای ما ناشناخته است. تابع ETH_Response؛ تنها جای مک آدرس گیرنده و فرستنده رو تغییر میده و فریم رو ارسال میکنه:

عملکرد تابع memcpy

تابع memcpy از توابع داخلی KEIL و اصلی زبان C هست و محتویات یک قسمت از حافظه رو با اندازه معلوم به‌جای دیگه‌ای از حافظه کپی میکنه.

پردازش فریم‌های ARP در تابع ARP_Process

تابع ARP_Process هم در ادامه اومده و کار ساده‌ای داره. ابتدا بررسي ميكنه كه آدرس IP ما در بخش آدرس IP درخواست اومده باشه (يادمون هست كه اين پيام يك پيام عمومي هست و لذا تمام پیغام‌های ARP رو ميكروكنترلر ما دريافت و پردازش خواهد كرد؛ اما تنها به اون هايی بايد جواب بده كه مقصدشون ما هستيم) و بعد براي تنظيم پيام پاسخ؛ در قسمت OPER عدد 0x0002 رو مینویسه و مک آدرس و IP آدرس رو داخل هدر ARP تنظیم میکنه!

حلقه اصلی اجرای برنامه

حلقه اصلی برنامه داخل فایل main.c هم این شکلی میشه:

تعریف آدرس‌های MAC و IP برد

دو متغیر اصلی برنامه يعني مك آدرس و IP آدرس خودمون رو هم یادمون نره که در ابتداي فايل enc28j60.c تعریف کنیم:

تست عملی برنامه و تنظیمات شبکه

فرض می‌کنیم که کد بدون خطا، کامپایل و پروگرم شده؛ حالا چجوری میشه برنامه رو تست کنیم؟

اولین کار اینه که محدوده (range) آی‌پی کامپیوتر و بردمون رو یکی کنیم؛ به‌طوری‌که این دو در یک زیر شبکه قرار بگیرند، شما هر آی‌پی برای بردتون در نظر گرفتید، آی‌پی کامپیوتر رو هم در همون محدوده قرار بدید و فقط عدد اول (از سمت راست) رو تغییر بدید؛ مثلاً اگر آی‌پی دستگاه 192.168.0.22 هست، شما میتونید آی‌پی کامپیوترتون رو 192.168.0.1 بذارید یا هر آی‌پی دیگه ای به فرم بالا به‌جز اینکه عدد آخرش 22 یا صفر باشه.

نحوه تنظیم IP در ویندوز

  • جهت تغيير IP كامپيوتر هم وارد Control Panel\Network and Internet\Network and Sharing Center بشيد (يا روي آيكنش در تسك بار ويندوز كليك راست كنيد و بازش كنيد) و گزینه Change Adapter setting رو انتخاب كنيد؛ روي كارت شبكه كليك راست كنيد و گزينه Properties رو انتخاب كنيد، در پنجره باز شده، گزينه Ipv4 رو انتخاب كنيد و دكمه Properties رو بزنيد؛ در پنجره باز شده گزينه Use the following IP Address رو انتخاب كنيد و IP‌ خودتون رو وارد كنيد. بعد هم فقط يه كليك در قسمت subnet mask بكنيد و در نهايت كليد OK رو بزنيد و تمام.
نحوه تنظیم آدرس IP در ویندوز

نحوه تنظیم آدرس IP در ویندوز

نحوه تنظیم آدرس IP در ویندوز

تست ارتباط با دستور Ping

پنجره cmd.exe يا همون كامند پرامپت ويندوز رو باز کنید. برای این کار در قسمت استارت ویندوز، تایپ کنید cmd و داخل پنجره باز شده تایپ کنید:

Ping   192.168.0.22

و Enter رو بزنید. هم‌زمان می‌توانید با استفاده از قابلیت دیباگ میکروکنترلرتون (اگه داشته باشه) و یا نرم‌افزار wireshark پیام‌ها رو رصد کنید.

دلیل ارسال فریم ARP قبل از Ping

  • دستور یا عملیات ping رو به‌موقع توضیح میدیم. همین‌قدر بدونید که اگه کامپیوترتون مک آدرس برد شما رو نداشته باشه؛ قبل از عملیات ping؛ از پروتکل ARP استفاده میکنه تا مک آدرس ENC رو به دست بیاره. از اونجایی که هنوز پردازش دستور پینگ رو انجام نمیدیم؛ انجام این دستور با خطا مواجه میشه ولی ما فعلاً فقط نیاز به ارسال فریم ARP داریم تا بردمون رو تست کنیم که با این روش انجام دادیم.
  • بعد از ARP میریم سراغ IP ؛ بعدش میریم سمت ICMP و در اون نقطه از ping بیشتر صحبت خواهیم کرد.

ادامه مسیر توسعه پروتکل شبکه

قبل از اینکه بریم سر وقت پروتکل بعدی یعنی IP یا همون Internet Protocol با چنتا از قابلیت‌های تراشه ENC آشنا بشیم و همین‌طور چند اصطلاح جدید یاد بگیریم. اگه توجه کرده باشید روال کارمون تا اینجا این‌طور بود که مفاهیم رو کم‌کم ارائه میدیم تا خواننده خیلی آشفته نشه در مقابل حجم اطلاعات وارده!

آشنایی با قابلیت AutoPolarity در ENC28J60

در دیتاشیت تراشه ENC چند قابلیت نوشته شده که شاید نیاز به توضیح داشته باشند. اولین قابلیت، تشخیص خودکار قطبیت (AutoPolarity detection) هست. در یک ارتباط دیفرانسیلی، اگه جای پین‌های مثبت و منفی رو اشتباه متصل کنیم؛ طبیعیه که ارتباط برقرار نشه ولی AutoPolarioty این قابلیت رو داره که حتی در صورت اتصال اشتباه پین‌های مثبت و منفی TX+,TX- به گیرنده هم بیت‌ها رو درست بخونه. در ابتدای برقراری یک ارتباط؛ تراشه منتظر الگوی خاصی از بیت‌ها هست. چنانچه سطح بیت‌ها در این روال متقارن باشه؛ تراشه متوجه میشه که پین‌ها اشتباه متصل شده ن و در داخل تراشه، جای پین‌ها تعویض میشه.

قابلیت‌های کاربردی تراشه ENC28J60

دومین قابلیت Auto MDI-X هست. از اسم هم مشخصه که مربوط به بخش MDI هست، حالا چی هست؟ در یک ارتباط بایست بخش TX فرستنده به RX گیرنده متصل بشه. در تراشه‌های اولیه، هر دو دستگاه دارای بخش MDI بودند؛ لذا لازم بود که حتماً از کابل‌های معروف به کابل کراس (cross) یا متقاطع استفاده بشه که جای پین‌های TX و RX روی کابل تغییر می‌کرد. بعدها، تراشه‌هایی به وجود اومد که این تقاطع، داخل خود تراشه انجام می‌شد که بهش MDI-X میگفتن (اون X آخر، علامت تقاطع هست)  لذا نیاز نبود که از کابل کراس استفاده بشه و اتصالات روی کابل یک‌به‌یک بود، به این کابل‌ها، کابل مستقیم یا straghit میگفتن.

انواع کابل شبکه و حالت‌های اتصال MDI/MDI-X

پس برای اتصال قطعات قدیمی و جدید در شبکه؛ 4 حالت برای کابل داشتیم:

MDI-X

MDI

 

Straight

Cross

MDI

Cross

Straight

MDI-X

عملکرد Auto MDI-X در تراشه‌های مدرن

تراشه‌های با قابلیت Auto MDI-X با اجرای یک فرایند، متوجه میشن که آیا ارتباط TX به Rx درست هست یا نه! و اگر این ارتباط به دستی برقرار نشده باشه؛ درون تراشه، ارتباط رو به شکل درست برقرار میکنن. در نتیجه در این حالت، از هر دو نوع کابل میتونید استفاده کنید. پیشنهاد می‌کنم فرایند بررسی و تغییر اتصال در حالت Auto MDI-X رو در نت جستجو و مطالعه کنید، روش ساده اما جالبی برای انجام این کار داره!

 Auto Negotiation

یک اصطلاح و یک نکته دیگه هم Auto Negotiation یا مذاکره خودکار هست. هنگام روشن‌شدن یا هنگام اتصال کابل به سوکت؛ دو طرف کابل، برای بررسی قابلیت‌های همدیگه مثل سرعت، نوع ارتباط (نیم دوطرفه یا تمام دوطرفه) و… یک فرایندی رو طی می‌کنند تا حالت بهینه رو تنظیم کنند. به این فرایند مذاکره خودکار گفته می‌شود.

تنظیم دستی در مقابل مذاکره خودکار

این تنظیمات رو می‌توان به‌صورت دستی هم انجام داد؛ اما پیشنهاد نمی‌شود.

شناسایی شرایط غیرعادی در ارتباط (Jabber Detection)

از طرفی ممکنه با اصطلاحی به نام Jabber Condition یا Jabber detection هم برخورد کنید. اگر فریم دریافتی، داده‌ای بیش از مقدار تعریف شده (1500 در اترنت پایه؛ 1504در Tag frame یا 1982 در Envelope frame) داشته باشه؛ اصطلاحا شرایط Jabber اتفاق افتاده و بررسی اون جزو وظایف قسمت PHY هست. از اونجاییکه این وضعیت ممکنه در حالت هنگ فرستنده اتفاق افتاده باشه (لذا باعث سرریز حافظه دریافت بشه)؛ میشه تراشه PHY رو طوری تنظیم کنیم که این فریم ها رو دریافت نکنه.

بررسی وضعیت اتصال توسط پالس‌های هم‌زمانی

یک نکته کاربردی هم اینجا بگیم و بحث رو تموم کنیم. در حین ارتباط و به طور مرتب؛ برقراری ارتباط (متصل بودن کابل و روشن بودن سمت دیگر) با ارسال پالس‌های هم‌زمانی که به نام LTP(Link Test Pulse) یا NLP(Normal Link Pulse) شناخته می‌شوند؛ چک خواهد شد.

تفاوت بررسی در سرعت‌های 10Mb و 100Mb

در سرعت 10Mb این پالس‌ها در حالت توقف (Idle) و تقریباً در هر 16ms ارسال می‌شوند. در سرعت 100Mb نوع بررسی برقراری ارتباط؛ همچنین نوع کدینگ preamble و داده‌ها متفاوت هست. خوشبختانه این امور توسط سخت‌افزار PHY انجام و از طریق ثبات‌های وضعیت داخلی به اطلاع کاربر رسانده می‌شود. ما نیاز ضروری به دانستن آنها نداریم.

منابع بیشتر برای مطالعه عمیق‌تر

برای اطلاع بیشتر میتونید به سند کاربردی AN1120 از شرکت میکروچیپ یا اسناد شرکت‌های دیگه در این مورد مراجعه کنید.

اطلاعات
27
0
0
لینک و اشتراک
profile

مجتبی داشخانه

متخصص الکترونیک

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
family

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ
سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله