امروزه از پروتکل های متعددی در شبکه های کامپیوتری استفاده می گردد که صرفا" تعداد اندکی از آنان به منظور انتقال داده طراحی و پیاده سازی شده اند . اینترنت نیز به عنوان یک شبکه گسترده از این قاعده مستثنی نبوده و در این رابطه از پروتکل های متعددی استفاده می شود.
برای بسیاری از کاربران اینترنت همه چیز محدود به وب و پروتکل مرتبط با آن یعنی 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 : یک خطاء دائمی ایجاد شده است .