آشنائی با پروتكل FTP ( بخش اول )
برای بسياری از كاربران اينترنت همه چيز محدود به وب و پروتكل مرتبط با آن يعنی HTTP است ، در صورتی كه در اين عرصه از پروتكل های متعدد ديگری نيز استفاده می گردد. FTP نمونه ای در اين زمينه است .
پروتكل FTP چيست ؟
فرض كنيد كه سرويس وب را از اينترنت حذف نمائيم . برای بسياری از ما اين سوال مطرح خواهد شد كه چه نوع استفاده ای را می توانيم از اينترنت داشته باشيم ؟ در صورت تحقق چنين شرايطی ، يكی از عملياتی كه كاربران قادر به انجام آن خواهند بود ، دريافت داده ، فايل های صوتی ، تصويری و ساير نمونه فايل های ديگر با استفاده از پروتكل FTP (برگرفته از File Transfer Protocol ) است.
ويژگی های پروتكل FTP
• پروتكل 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 | فايل مشخص شده در دستور تايپ شده نامعتبر است . |