پروتکل YModem یک پروتکل انتقال فایل است که برای انتقال اطلاعات بین دو دستگاه از طریق اتصال سریال (Serial Connection) استفاده میشود. این پروتکل در سه حالت یا مود اصلی عمل میکند:
YModem: در حالت عادی YModem، انتقال اطلاعات به صورت بلوکهای 128 بایتی انجام میشود. هر بلوک شامل 128 بایت اطلاعات و 4 بایت برای کنترل (Cyclic Redundancy Check) CRC است. CRC برای اطمینان از صحت انتقال اطلاعات استفاده میشود.
YModem-1K: در حالت YModem-1K، بهجای انتقال بلوکهای 128 بایتی، از بلوکهای 1024 بایتی استفاده میشود. هر بلوک در این حالت 1020 بایت اطلاعات و 4 بایت CRC دارد. این تغییر بهمنظور افزایش سرعت انتقال اطلاعات انجام شده است.
YModem-g: در حالت YModem-g، کد CRC که برای اطمینان از صحت انتقال اطلاعات است، حذف میشود. بعد از ارسال هر بلوک اطلاعات، فرستنده منتظر کد (Acknowledgment) ACK که برای تأیید دریافت اطلاعات است نمیماند و بلافاصله بلوک اطلاعات بعدی را ارسال میکند.
بهطورکلی، انتخاب از بین پروتکلهای YModem ،YModem-1K و YModem-g به میزان سرعت و دقت موردنیاز برنامه یا سیستم مقصد بستگی دارد.
در پروتکل YModem ،Start Frame Format یا قالب شروع (Start Frame) شامل اطلاعات مربوط به شروع یک جلسه ارتباطی برای انتقال فایل است. این اطلاعات در یک یا چند بایت ابتدای هر قالب اطلاعات قرار دارند و بهعنوان پیشوند (Header) شناخته میشوند.
فرمت شروع (Start Frame Format) در پروتکل YModem عمدتاً شامل اطلاعاتی از جمله نام فایل، اندازه فایل، ویژگیهای فایل و غیره است. این اطلاعات برای آغاز انتقال فایل و هماهنگی بین دو طرف (فرستنده و گیرنده) استفاده میشود.
یک مثال از فرمت شروع در پروتکل YModem ممکن است درک مطلب را سادهتر کند:
1 | SOH 00 FF filename[] filesize[] NULL[] CRCH CRCL |
SOH 00 FF: هدر فریم (Frame Header) که مشخصات اصلی فریم اطلاعات را تعیین میکند.
SOH: یک بایت که نشاندهنده شروع یک فریم جدید است.
مقدار 0x01 در اینجا نشاندهنده این است که انتظار میرود فریم داده حاوی 128 بایت اطلاعات باشد.
00: یک بایت که شماره سریال فریم داده را نشان میدهد.
در این مورد، برای شروع، این شماره همواره صفر است (در اولین بلوک اطلاعات 01 است).
FF: یک بایت که شماره فریم را معکوس میکند.
Filename: نام فایل که با 00 پایان مییابد.
برای مثال، اگر نام فایل “foo.c” باشد، میتواند بهصورت 66 6F 6F 2E 63 00 باشد.
File size: اندازه فایل که با 00 به پایان میرسد.
برای مثال، اگر اندازه فایل 1024 بایت باشد، میتواند به صورت 34 30 30 00 یا 0x400 باشد.
NULL: 128 بایت داده، بهاستثنای نام فایل و اندازه فایل، بقیه بایتها با 00 پر میشوند.
CRC: 16 بیت CRC برای اعتبارسنجی بخش دادهها.
این مقادیر CRC بر اساس محتوای بخش دادهها محاسبه میشوند.
این قالب برای شروع یک جلسه ارتباطی استفاده میشود و اطلاعات مربوط به نام فایل، اندازه فایل و CRC جهت اطمینان از صحت اطلاعات را در اختیار گیرنده قرار میدهد. این اطلاعات اولین بسته ارسالی است که توسط فرستنده به گیرنده ارسال میشود تا اطلاعات موردنیاز برای ادامه ارتباط بهدرستی تعیین شود.
بعد از ارسال قالب شروع حال نوبت به ارسال داده میرسد. داده در تعداد زیادی بلوکهای اطلاعاتی تقسیمبندی شده است تا ارسال اطلاعات سریعتر و مطمئنتر انجام شود. هر بلوک اطلاعات در پروتکل ymodem که شامل فریم داده است فرمت بخصوصی دارد.
1 | STX 01 FE data[1024] CRCH CRCL |
STX (Start of Text): این مقدار با 0x02 نشاندهنده شروع یک دادهایم است که در ادامه 1024 بایت داده را شامل میشود.
01: نمایانگر اولین فریم داده است.
FE بهصورت معکوس (Reversed): این مقدار یک بازنمایی معکوس از 0xFE است که برای تشخیص دقیقتر دادهها استفاده میشود.
Data[1024]: یعنی 1024بایت داده که اطلاعات اصلی را در خود جایدادهاند.
CRCH و CRCL (Cyclic Redundancy Check High and Low): این کدها برای اطمینان از درستی ارسال داده در دادهفریم استفاده میشوند.
استفاده از STX درصورتیکه حجم آخرین دادهفایل بین 128 و 1024 بایت باشد: اگر حجم آخرین داده فایل در بازه 128 تا 1024 بایت باشد، 1024 بایت از STX برای انتقال استفاده میشود. فضای باقیمانده پس از دادهها با 0x1A پر خواهد شد:
1 | STX num -num data[] 1A...1A CRCH CRCL |
1A…1A: فضای باقیمانده که با 0x1A پر شدهاند.
استفاده از SOH درصورتیکه حجم فایل کمتر از 128 بایت باشد: اگر حجم کل فایل کمتر از 128 بایت باشد، از فریم داده SOH برای انتقال استفاده خواهد شد. در این حالت، بقیه فضا با 0x1A پر خواهد شد:
1 | SOH 01 FE data[] 1A...1A CRCH CRCL |
1 | SOH num ~num data[] 1A...1A CRCH CRCL |
ساختار فریم داده پایانی با 128 بایت داده:
همچنین، فریم داده پایانی با ساختار 128 بایتی SOH ارسال میشود. ساختار این فریم داده به شرح زیر است:
1 2 3 4 5 | Top of Form Bottom of Form SOH 00 ff NUM[128] CRCH CRCL |
SOH (Start of Header): نمایانگر شروع یک دادهفریم است.
00: مقدار ثابتی است که در اینجا نشاندهنده نوع فریم داده پایانی است.
Ff: یک مقدار ثابت دیگر که نمایانگر نوع خاصی از پایان دادههاست.
NUM[128]: 128 بایت اطلاعات فریم پایانی. در اینجا، دادههای پایانی با مقدارهای متناسب با نیاز برنامه پر شدهاند.
CRCH CRCH CRCH و CRCL (Cyclic Redundancy Check High and Low): این کدها برای اطمینان از درستی ارسال داده در دادهفریم استفاده میشوند.
فرض کنید یک فایل به نام “foo.c” با اندازه 4196 بایت و 0x1064 بایت وجود دارد. فرآیند انتقال به شکل زیر است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Sender receiving end <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C //Receiver sends uppercase lettersCStart transfer SOH 00 FF "foo.c" 1064 NUL[118] CRCH CRCL>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C //Received0After frame data, feedbackACK as well asCStart first frame transmission STX 01 FE data[1024] CRCH CRCL>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK STX 02 FD data[1024] CRCH CRCL>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK STX 03 FC data[1024] CRCH CRCL>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK STX 04 FB data[1024] CRCH CRCL>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK SOH 05 FA data[100] 1A[28] CRCH CRCL>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK EOT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< NAK EOT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C SOH 00 FF NUL[128] CRCH CRCL>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK |
این فرایند نشاندهنده مراحل انتقال فایل است که توسط فرستنده به دریافتکننده ارسال میشود. در هر مرحله، دستگاه دریافتکننده با ACK یا NAK به فرستنده پاسخ میدهد تا انتقال دادهها بهدرستی انجام شود.
سیگنال داده و معانی آنها به شرح زیر است:
نماد | مقدار عددی | معنی |
---|---|---|
SOH | 0x01 | 128 بایت داده |
STX | 0x02 | 1024 بایت داده |
EOT | 0x04 | پایان انتقال |
ACK | 0x06 | پاسخ مثبت |
NAK | 0x15 | بدون پاسخ |
CA | 0x18 | انتقال متوقف شده |
C | 0x43 | درخواست پکت |
CA (ارسال توسط فرستنده برای متوقف کردن انتقال) | 0x18 | انتقال متوقف شد |
این سیگنالها نمایانگر انواع مختلف اطلاعات و وضعیتها در فرایند انتقال داده از فرستنده به دریافتکننده هستند.
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.