امروزه از پروتكل هاي متعددي در شبكه هاي كامپيوتري استفاده مي گردد كه صرفا" تعداد اندكي از آنان به منظور انتقال داده طراحي و پياده سازي شده اند . اينترنت نيز به عنوان يك شبكه گسترده از اين قاعده مستثني نبوده و در اين رابطه از پروتكل هاي متعددي استفاده مي شود.
براي بسياري از كاربران اينترنت همه چيز محدود به وب و پروتكل مرتبط با آن يعني HTTP است ، در صورتي كه در اين عرصه از پروتكل هاي متعدد ديگري نيز استفاده مي گردد. FTP نمونه اي در اين زمينه است .
پروتكل FTP چيست ؟
تصوير اوليه اينترنت در ذهن بسياري از كاربران، استفاده از منابع اطلاعاتي و حركت از سايتي به سايت ديگر است و شايد به همين دليل باشد كه اينترنت در طي ساليان اخير به سرعت رشد و متداول شده است . بسياري از كارشناسان اين عرصه اعتقاد دارند كه اينترنت گسترش و عموميت خود را مديون سرويس وب مي باشد .
فرض كنيد كه سرويس وب را از اينترنت حذف نمائيم . براي بسياري از ما اين سوال مطرح خواهد شد كه چه نوع استفاده اي را مي توانيم از اينترنت داشته باشيم ؟ در صورت تحقق چنين شرايطي ، يكي از عملياتي كه كاربران قادر به انجام آن خواهند بود ، دريافت داده ، فايل هاي صوتي ، تصويري و ساير نمونه فايل هاي ديگر با استفاده از پروتكل FTP (برگرفته از File Transfer Protocol ) است.
ويژگي هاي پروتكل FTP
• پروتكل FTP ، اولين تلاش انجام شده براي ايجاد يك استاندارد به منظور مبادله فايل بر روي شبكه هاي مبتني بر پروتكل TCP/IP است كه از اوايل سال 1970 مطرح و مشخصات استاندارد آن طي RFC 959 در اكتبر سال 1985 ارائه گرديد .
• پروتكل FTP داراي حداكثر انعطاف لازم و در عين حال امكان پذير به منظور استفاده در شبكه هاي مختلف با توجه به نوع پروتكل شبكه است .
• پروتكل FTP از مدل سرويس گيرنده - سرويس دهنده تبعيت مي نمايد . برخلاف HTTP كه يك حاكم مطلق در عرصه مرورگرهاي وب و سرويس دهندگان وب است ، نمي توان ادعاي مشابهي را در رابطه با پروتكل FTP داشت و هم اينك مجموعه اي گسترده از سرويس گيرندگان و سرويس دهندگان FTP وجود دارد .
• براي ارسال فايل با استفاده از پروتكل FTP به يك سرويس گيرنده FTP نياز مي باشد . ويندوز داراي يك برنامه سرويس گيرنده FTP از قبل تعبيه شده مي باشد ولي داراي محدوديت هاي مختص به خود مي باشد . در اين رابطه نرم افزارهاي متعددي تاكنون طراحي و پياده سازي شده است:
ulletProof FTP ، WS FTP Professional، FTP Explorer و Smart FTP نمونه هائي در اين زمينه مي باشند .
• پروتكل FTP را مي توان به عنوان يك سيستم پرس وجو نيز تلقي نمود چراكه سرويس گيرندگان و سرويس دهندگان گفتگوي لازم به منظور تائيد يكديگر و ارسال فايل را انجام مي دهند. علاوه بر اين، پروتكل فوق مشخص مي نمايد كه سرويس گيرنده و سرويس دهنده، داده را بر روي كانال گفتگو ارسال نمي نمايند . در مقابل ، سرويس گيرنده و سرويس دهنده در خصوص نحوه ارسال فايل ها بر روي اتصالات مجزا و جداگانه ( يك اتصال براي هر ارسال داده ) با يكديگر گفتگو خواهند كرد ( نمايش ليست فايل هاي موجود در يك دايركتوري نيز به عنوان يك ارسال فايل تلقي مي گردد ) .
• پروتكل FTP امكان استفاده از سيستم فايل را مشابه پوسته يونيكس و يا خط دستور ويندوز در اختيار كاربران قرار مي دهد .
• سرويس گيرنده در ابتدا يك پيام را براي سرويس دهنده ارسال و سرويس دهنده نيز به آن پاسخ خواهد داد و در ادامه ارتباط غيرفعال مي گردد . وضعيت فوق با ساير پروتكل هائي كه به صورت تراكنشي كار مي كنند ، متفاوت مي باشد ( نظير پروتكل HTTP ) . برنامه هاي سرويس گيرنده زماني قادر به شبيه سازي يك محيط تراكنشي مي باشند كه از مسائلي كه قرار است در آينده محقق شوند ، آگاهي داشته باشند . در واقع ، پروتكل FTP يك دنباله stateful از يك و يا چندين تراكنش است.
• سرويس گيرندگان ، مسئوليت ايجاد و مقداردهي اوليه درخواست ها را برعهده دارند كه با استفاده از دستورات اوليه FTP انجام مي گردد. دستورات فوق ، عموما" سه و يا چهار حرفي مي باشند (مثلا" براي تغيير دايركتوري از دستور CWD استفاده مي شود ). سرويس دهنده نيز بر اساس يك فرمت استاندارد به سرويس گيرندگان پاسخ خواهد داد ( سه رقم كه به دنبال آن از space استفاده شده است به همراه يك متن تشريحي ) . سرويس گيرندگان مي بايست صرفا" به كد عددي نتيجه استناد نمايند چراكه متن تشريحي تغيير پذير بوده و در عمل براي اشكال زدائي مفيد است ( براي كاربران حرفه اي ) .
• پروتكل FTP داراي امكانات حمايتي لازم براي ارسال داده با نوع هاي مختلف مي باشد . دو فرمت متداول، اسكي براي متن ( سرويس گيرنده با ارسال دستور TYPE A ،موضوع را به اطلاع سرويس دهنده مي رساند ) و image براي داده هاي باينري است ( توسط TYPE I مشخص مي گردد) . ارسال داده با فرمت اسكي در مواردي كه ماشين سرويس دهنده و ماشين سرويس گيرنده از استانداردهاي متفاوتي براي متن استفاده مي نمايند ، مفيد بوده و يك سرويس گيرنده مي تواند پس از دريافت داده آن را به فرمت مورد نظر خود ترجمه و استفاده نمايد . مثلا" در نسخه هاي ويندوز از يك دنباله carriage return و linefeed براي نشان دادن انتهاي خط استفاده مي گردد در صورتي كه در سيستم هاي مبتني بر يونيكس صرفا" از يك linefeed استفاده مي شود . براي ارسال هرنوع داده كه به ترجمه نياز نداشته باشد،مي توان از ارسال باينري استفاده نمود.
• اتخاذ تصميم در رابطه با نوع ارسال فايل ها در اختيار سرويس گيرنده است ( برخلاف HTTP كه مي تواند به سرويس گيرنده نوع داده ارسالي را اطلاع دهد ) . معمولا" سرويس گيرندگان ارسال باينري را انتخاب مي نمايند و پس از دريافت فايل ، ترجمه لازم را انجام خواهند داد . ارسال باينري ذاتا" داراي كارآئي بيشتري است چراكه سرويس دهنده و سرويس گيرنده نيازي به انجام تراكنش هاي on the fly نخواهند داشت . ارسال اسكي گزينه پيش فرض انتخابي توسط پروتكل FTP است و در صورت نياز به ارسال باينري ، سرويس گيرنده مي بايست اين موضوع را از سرويس دهنده درخواست نمايد .
• يك اتصال پروتكل TCP/IP ( نسخه شماره چهار) شامل دو نقطه مجزا مي باشد كه هر نقطه از يك آدرس IP و يك شماره پورت استفاده مي نمايد . برقراري ارتباط بين يك سرويس گيرنده و يك سرويس دهنده منوط به وجود چهار عنصر اطلاعاتي است : آدرس سرويس دهنده ،پورت سرويس دهنده ، آدرس سرويس گيرنده و پورت سرويس گيرنده . در زمان برقراري يك ارتباط ، سرويس گيرنده از يك شماره پورت استفاده مي نمايد . اين شماره پورت مي تواند متناسب با نوع عملكرد برنامه سرويس گيرنده به صورت اختياري و يا اجباري باشد . مثلا" برخي برنامه هاي سرويس گيرنده به منظور ارتباط با سرويس دهنده ، نيازمند استفاده از يك شماره پورت خاص مي باشند ( نظير برنامه هاي سرويس گيرنده وب و يا مرورگرهاي وب كه از پورت شماره 80 به منظور ارتباط با سرويس دهنده وب استفاده مي نمايد) . در مواردي كه الزامي در خصوص شماره پورت وجود ندارد از يك شماره پورت موقتي و يا ephemeral استفاده مي گردد . اين نوع پورت ها موقتي بوده و توسط IP stack ماشين مربوطه به متقاضيان نسبت داده شده و پس از خاتمه ارتباط ، پورت آزاد مي گردد . با توجه به اين كه اكثر IP Stacks بلافاصله از پورت موقت آزاد شده استفاده نخواهند كرد ( تا زماني كه تمام pool تكميل نشده باشد ) ،در صورتي كه سرويس گيرنده مجددا" درخواست برقراري يك ارتباط را نمايد ، يك شماره پورت موقتي ديگر به وي تخصيص داده مي شود .
• پروتكل FTP منحصرا" از پروتكل TCP استفاده مي نمايد( هرگز از پروتكل UDP استفاده نمي شود) . معمولا" پروتكل هاي لايه Application ( با توجه به مدل مرجع OSI ) از يكي از پروتكل هاي TCP و يا UDP استفاده مي نمايند ( به جزء پروتكل DNS ) . پروتكل FTP نيز از برخي جهات شرايط خاص خود را دارد و براي انجام وظايف محوله از دو پورت استفاده مي نمايد . اين پروتكل معمولا" از پورت شماره 20 براي ارسال داده و از پورت 21 براي گوش دادن به فرامين استفاده مي نمايد . توجه داشته باشيد كه براي ارسال داده همواره از پورت 20 استفاده نمي گردد و ممكن است در برخي موارد از پورت هاي ديگر استفاده شود .
• اكثر سرويس دهندگان FTP از روش خاصي براي رمزنگاري اطلاعات استفاده نمي نمايند و در زمان login سرويس گيرنده به سرويس دهنده ، اطلاعات مربوط به نام و رمز عبور كاربر به صورت متن معمولي در شبكه ارسال مي گردد . افرادي كه داراي يك Packet sniffer بين سرويس گيرنده و سرويس دهنده مي باشند ، مي توانند به سادگي اقدام به سرقت نام و رمز عبور نمايند . علاوه بر سرقت رمزهاي عبور ، مهاجمان مي توانند تمامي مكالمات بر روي اتصالات FTP را شنود و محتويات داده هاي ارسالي را مشاهده نمايند . پيشنهادات متعددي به منظور ايمن سازي سرويس دهنده FTP مطرح مي گردد ولي تا زماني كه رمزنگاري و امكانات حفاظتي در سطح لايه پروتكل IP اعمال نگردد ( مثلا" رمزنگاري توسط IPsecs ) ، نمي بايست از FTP استفاده گردد خصوصا" اگر بر روي شبكه اطلاعات مهم و حياتي ارسال و يا دريافت مي گردد .
• همانند بسياري از پروتكل هاي لايه Application ، پروتكل FTP داراي كدهاي وضعيت خطاء مختص به خود مي باشد ( همانند HTTP ) كه اطلاعات لازم در خصوص وضعيت ارتباط ايجاد شده و يا درخواستي را ارائه مي نمايد . زماني كه يك درخواست ( GET , PUT ) براي يك سرويس دهنده FTP ارسال مي گردد ، سرويس دهنده پاسخ خود را به صورت يك رشته اعلام مي نمايد . اولين خط اين رشته معمولا" شامل نام سرويس دهنده و نسخه نرم افزار FTP است .در ادامه مي توان دستورات GET و يا PUT را براي سرويس دهنده ارسال نمود . سرويس دهنده با ارائه يك پيام وضعيت به درخواست سرويس گيرندگان پاسخ مي دهد . كدهاي وضعيت برگردانده شده را مي توان در پنج گروه متفاوت تقسيم نمود :
كدهاي 1xx : پاسخ اوليه
كدهاي 2xx : درخواست بدون خطاء اجراء گرديد .
كدهاي 3xx : به اطلاعات بشتري نياز است .
كدهاي 4xx : يك خطاء موقت ايجاد شده است .
كدهاي 5xx : يك خطاء دائمي ايجاد شده است .
متداولترين كدهاي وضعيت FTP به همراه مفهوم هريك در جدول زير نشان داده شده است :
كدهاي وضعيت سري 100 |
110 | Restart reply |
120 | Service ready in x minutes |
125 | Connection currently open, transfer starting |
150 | File status okay, about to open data |
كدهاي وضعيت سري200 |
200 | Command okay |
202 | Command not implemented, superfluous at this site |
211 | System status/help reply |
212 | Directory status |
213 | File status |
214 | System Help message |
215 | NAME system type |
220 | Service ready for next user. |
221 | Service closing control connection. Logged off where appropriate |
225 | Data connection open; no transfer in progress. |
226 | Closing data connection. Requested action successful |
227 | Entering Passive Mode |
230 | User logged in, continue |
250 | Requested file action okay, completed |
257 | "PATHNAME" created. |
كدهاي وضعيت سري300 |
331 | User name okay, need password. |
332 | Need account for login |
350 | Requested file action pending further information. |
كدهاي وضعيت سري400 |
421 | Service not available, closing control connection. |
425 | Can't open data connection |
426 | Connection closed; transfer aborted. |
450 | Requested file action not taken. File not available - busy etc.. |
451 | Request aborted: error on server in processing. |
452 | Requested action not taken. Insufficient resources on system |
كدهاي وضعيت سري500 |
500 | Syntax error, command unrecognized |
501 | Syntax error in parameters or arguments. |
502 | Command not implemented. |
503 | Bad sequence of commands |
504 | Command not implemented for that parameter. |
530 | Not logged in. |
532 | Need account for storing files |
550 | Requested action not taken. File unavailable |
552 | Requested file action aborted. Exceeded storage allocation |
553 | Requested action not taken. File name not allowed |
مفهوم برخي از كدهاي متداول |
226 | دستور بدون هيچگونه خطائي اجراء گرديد . |
230 | زماني اين كد نمايش داده مي شود كه يك سرويس گيرنده رمز عبور خود را به درستي درج و عمليات loginبا موفقيت انجام شده باشد . |
231 | كد فوق نشاندهنده دريافت username ارسالي سرويس گيرنده توسط سرويس دهنده مي باشد و تائيدي است بر اعلام وصول Username( نه صحت آن ) . |
501 | دستور تايپ شده داراي خطاء گرامري است و مي بايست مجددا" دستور تايپ گردد . |
530 | عمليات loginبا موفقيت انجام نشده است . ممكن است Usernameو يا رمز عبور اشتباه باشد . |
550 | فايل مشخص شده در دستور تايپ شده نامعتبر است . |
در بخش دوم به بررسي نحوه عملكرد پروتكل FTP خواهيم پرداخت .