امروزه از پروتكل های متعددی در شبكه های كامپیوتری استفاده می گردد كه صرفا" تعداد اندكی از آنان به منظور انتقال داده طراحی و پیاده سازی شده اند . اینترنت نیز به عنوان یك شبكه گسترده از این قاعده مستثنی نبوده و در این رابطه از پروتكل های متعددی استفاده می شود.
برای بسیاری از كاربران اینترنت همه چیز محدود به وب و پروتكل مرتبط با آن یعنی HTTP است ، در صورتی كه در این عرصه از پروتكل های متعدد دیگری نیز استفاده می گردد. FTP نمونه ای در این زمینه است .

پروتكل FTP چیست ؟
تصویر اولیه اینترنت در ذهن بسیاری از كاربران، استفاده از منابع اطلاعاتی و حركت از سایتی به سایت دیگر است و شاید به همین دلیل باشد كه اینترنت در طی سالیان اخیر به سرعت رشد و متداول شده است . بسیاری از كارشناسان این عرصه اعتقاد دارند كه اینترنت گسترش و عمومیت خود را مدیون سرویس وب می باشد .
فرض كنید كه سرویس وب را از اینترنت حذف نماییم . برای بسیاری از ما این سوال مطرح خواهد شد كه چه نوع استفاده ای را می توانیم از اینترنت داشته باشیم ؟ در صورت تحقق چنین شرایطی ، یكی از عملیاتی كه كاربران قادر به انجام آن خواهند بود ، دریافت داده ، فایل های صوتی ، تصویری و سایر نمونه فایل های دیگر با استفاده از پروتكل FTP (برگرفته از File Transfer Protocol ) است.

ویژگی های پروتكل FTP

پروتكل FTP ، اولین تلاش انجام شده برای‌ ایجاد یك استاندارد به منظور مبادله فایل بر روی شبكه های مبتنی بر پروتكل TCP/IP است كه از اوایل سال ۱۹۷۰ مطرح و مشخصات استاندارد آن طی RFC ۹۵۹ در اكتبر سال ۱۹۸۵ ارایه گردید .

پروتكل 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 و یك شماره پورت استفاده می نماید . برقراری ارتباط بین یك سرویس گیرنده و یك سرویس دهنده منوط به وجود چهار عنصر اطلاعاتی است : آدرس سرویس دهنده ،‌پورت سرویس دهنده ، آدرس سرویس گیرنده و پورت سرویس گیرنده . در زمان برقراری یك ارتباط ، سرویس گیرنده از یك شماره پورت استفاده می نماید . این شماره پورت می تواند متناسب با نوع عملكرد برنامه سرویس گیرنده به صورت اختیاری و یا اجباری باشد . مثلا" برخی برنامه های سرویس گیرنده به منظور ارتباط با سرویس دهنده ، نیازمند استفاده از یك شماره پورت خاص می باشند ( نظیر برنامه های سرویس گیرنده وب و یا مرورگرهای وب كه از پورت شماره ۸۰ به منظور ارتباط با سرویس دهنده وب استفاده می نماید) . در مواردی كه الزامی در خصوص شماره پورت وجود ندارد از یك شماره پورت موقتی و یا ephemeral استفاده می گردد . این نوع پورت ها موقتی بوده و توسط IP stack ماشین مربوطه به متقاضیان نسبت داده شده و پس از خاتمه ارتباط ، پورت آزاد می گردد . با توجه به این كه اكثر IP Stacks بلافاصله از پورت موقت آزاد شده استفاده نخواهند كرد ( تا زمانی كه تمام pool تكمیل نشده باشد ) ،‌در صورتی كه سرویس گیرنده مجددا" درخواست برقراری یك ارتباط را نماید ، یك شماره پورت موقتی دیگر به وی تخصیص داده می شود .

پروتكل FTP منحصرا" از پروتكل TCP استفاده می نماید( هرگز از پروتكل UDP استفاده نمی شود) . معمولا" پروتكل های لایه Application ( با توجه به مدل مرجع OSI ) از یكی از پروتكل های TCP و یا UDP استفاده می نمایند ( به جزء پروتكل DNS ) . پروتكل FTP نیز از برخی جهات شرایط خاص خود را دارد و برای انجام وظایف محوله از دو پورت استفاده می نماید . این پروتكل معمولا" از پورت شماره ۲۰ برای ارسال داده و از پورت ۲۱ برای گوش دادن به فرامین استفاده می نماید . توجه داشته باشید كه برای ارسال داده همواره از پورت ۲۰ استفاده نمی گردد و ممكن است در برخی موارد از پورت های دیگر استفاده شود .

اكثر سرویس دهندگان FTP از روش خاصی برای رمزنگاری اطلاعات استفاده نمی نمایند و در زمان login سرویس گیرنده به سرویس دهنده ، اطلاعات مربوط به نام و رمز عبور كاربر به صورت متن معمولی در شبكه ارسال می گردد . افرادی كه دارای یك Packet sniffer بین سرویس گیرنده و سرویس دهنده می باشند ، می توانند به سادگی اقدام به سرقت نام و رمز عبور نمایند . علاوه بر سرقت رمزهای عبور ، مهاجمان می توانند تمامی مكالمات بر روی اتصالات FTP را شنود و محتویات داده های ارسالی را مشاهده نمایند . پیشنهادات متعددی به منظور ایمن سازی سرویس دهنده FTP مطرح می گردد ولی تا زمانی كه رمزنگاری و امكانات حفاظتی در سطح لایه پروتكل IP اعمال نگردد ( مثلا" رمزنگاری توسط IPsecs ) ،‌ نمی بایست از FTP استفاده گردد خصوصا" اگر بر روی شبكه اطلاعات مهم و حیاتی ارسال و یا دریافت می گردد .

همانند بسیاری از پروتكل های لایه Application ، پروتكل FTP دارای كدهای وضعیت خطاء مختص به خود می باشد ( همانند HTTP ) كه اطلاعات لازم در خصوص وضعیت ارتباط ایجاد شده و یا درخواستی را ارایه می نماید . زمانی كه یك درخواست ( GET , PUT ) برای یك سرویس دهنده FTP ارسال می گردد ، سرویس دهنده پاسخ خود را به صورت یك رشته اعلام می نماید . اولین خط این رشته معمولا" شامل نام سرویس دهنده و نسخه نرم افزار FTP است .در ادامه می توان دستورات GET و یا PUT را برای سرویس دهنده ارسال نمود . سرویس دهنده با ارایه یك پیام وضعیت به درخواست سرویس گیرندگان پاسخ می دهد . كدهای وضعیت برگردانده شده را می توان در پنج گروه متفاوت تقسیم نمود :
كدهای ۱xx : پاسخ اولیه
كدهای ۲xx : درخواست بدون خطاء‌ اجراء گردید .
كدهای ۳xx : به اطلاعات بشتری نیاز است .
كدهای ۴xx : یك خطاء موقت ایجاد شده است .
كدهای ۵xx : یك خطاء دایمی ایجاد شده است .
متداولترین كدهای وضعیت FTP به همراه مفهوم هریك در جدول زیر نشان داده شده است :


كدهای وضعیت سری ۱۰۰

۱۱۰ Restart reply
۱۲۰ Service ready in x minutes
۱۲۵ Connection currently open, transfer starting
۱۵۰ File status okay, about to open data
كدهای وضعیت سری ۲۰۰

۲۰۰ Command okay
۲۰۲ Command not implemented, superfluous at this site
۲۱۱ System status/help reply
۲۱۲ Directory status
۲۱۳ File status
۲۱۴ System Help message
۲۱۵ NAME system type
۲۲۰ Service ready for next user.
۲۲۱ Service closing control connection. Logged off where appropriate
۲۲۵ Data connection open; no transfer in progress.
۲۲۶ Closing data connection. Requested action successful
۲۲۷ Entering Passive Mode
۲۳۰ User logged in, continue
۲۵۰ Requested file action okay, completed
۲۵۷ "PATHNAME" created.
كدهای وضعیت سری ۳۰۰

۳۳۱ User name okay, need password.
۳۳۲ Need account for login
۳۵۰ Requested file action pending further information.
كدهای وضعیت سری ۴۰۰

۴۲۱ Service not available, closing control connection.
۴۲۵ Can’t open data connection
۴۲۶ Connection closed; transfer aborted.
۴۵۰ Requested file action not taken. File not available - busy etc..
۴۵۱ Request aborted: error on server in processing.
۴۵۲ Requested action not taken. Insufficient resources on system
كدهای وضعیت سری ۵۰۰

۵۰۰ Syntax error, command unrecognized
۵۰۱ Syntax error in parameters or arguments.
۵۰۲ Command not implemented.
۵۰۳ Bad sequence of commands
۵۰۴ Command not implemented for that parameter.
۵۳۰ Not logged in.
۵۳۲ Need account for storing files
۵۵۰ Requested action not taken. File unavailable
۵۵۲ Requested file action aborted. Exceeded storage allocation
۵۵۳ Requested action not taken. File name not allowed
مفهوم برخی از كدهای متداول
۲۲۶ دستور بدون هیچگونه خطایی اجراء گردید .

۲۳۰ زمانی این كد نمایش داده می شود كه یك سرویس گیرنده رمز عبور خود را به درستی درج و عملیات login با موفقیت انجام شده باشد .

۲۳۱ كد فوق نشاندهنده دریافت username ارسالی سرویس گیرنده توسط سرویس دهنده می باشد و تاییدی است بر اعلام وصول Username ( نه صحت آن ) .

۵۰۱ دستور تایپ شده دارای خطاء گرامری است و می بایست مجددا" دستور تایپ گردد .

۵۳۰ عملیات login با موفقیت انجام نشده است . ممكن است Username و یا رمز عبور اشتباه باشد .

۵۵۰ فایل مشخص شده در دستور تایپ شده نامعتبر است .


FTP ،‌ یك پروتكل ارسال فایل است كه با استفاده از آن سرویس گیرندگان می توانند به سرویس دهندگان متصل و صرفنظر از نوع سرویس دهنده اقدام به دریافت و یا ارسال فایل نمایند . پروتكل FTP به منظور ارایه خدمات خود از دو حالت متفاوت استفاده می نماید : Active Mode و Passive Mode . مهمترین تفاوت بین روش های فوق جایگاه سرویس دهنده و یا سرویس گیرنده در ایجاد و خاتمه یك ارتباط است .
همانگونه كه در بخش اول اشاره گردید ، یك اتصال پروتكل TCP/IP ( نسخه شماره چهار) شامل دو نقطه مجزا می باشد كه هر نقطه از یك آدرس IP و یك شماره پورت استفاده می نماید . برقراری ارتباط بین یك سرویس گیرنده و یك سرویس دهنده منوط به وجود چهار عنصر اطلاعاتی است : آدرس سرویس دهنده ،‌پورت سرویس دهنده ، آدرس سرویس گیرنده و پورت سرویس گیرنده . در زمان برقراری یك ارتباط ، سرویس گیرنده از یك شماره پورت استفاده می نماید . این شماره پورت می تواند متناسب با نوع عملكرد برنامه سرویس گیرنده به صورت اختیاری و یا اجباری باشد . مثلا" برخی برنامه های سرویس گیرنده به منظور ارتباط با سرویس دهنده ، نیازمند استفاده از یك شماره پورت خاص می باشند ( نظیر برنامه های سرویس گیرنده وب و یا مرورگرهای وب كه از پورت شماره ۸۰ به منظور ارتباط با سرویس دهنده وب استفاده می نماید) . در مواردی كه الزامی در خصوص شماره پورت وجود ندارد از یك شماره پورت موقتی و یا ephemeral استفاده می گردد . این نوع پورت ها موقتی بوده و توسط IP stack ماشین مربوطه به متقاضیان نسبت داده شده و پس از خاتمه ارتباط ، پورت آزاد می گردد . با توجه به این كه اكثر IP Stacks بلافاصله از پورت موقت آزاد شده استفاده نخواهند كرد ( تا زمانی كه تمام pool تكمیل نشده باشد ) ،‌در صورتی كه سرویس گیرنده مجددا" درخواست برقراری یك ارتباط را نماید ، یك شماره پورت موقتی دیگر به وی تخصیص داده می شود .
پس از این مقدمه ،‌ در ادامه به بررسی هر یك از روش های Active و Passive در پروتكل FTP خواهیم پرداخت .

Active Mode
Active Mode ، روش سنتی ارتباط بین یك سرویس گیرنده FTP و یك سرویس دهنده می باشد كه عملكرد آن بر اساس فرآیند زیر است :

سرویس گیرنده یك ارتباط با پورت ۲۱ سرویس دهنده FTP برقرار می نماید . پورت ۲۱ ، پورتی است كه سرویس دهنده به آن گوش فرا می دهد تا از صدور فرامین آگاه و آنان را به ترتیب پاسخ دهد . سرویس گیرنده برای برقراری ارتباط با سرویس دهنده از یك پورت تصادفی و موقتی ( بزرگتر از ۱۰۲۴ ) استفاده می نماید( پورت x ).

سرویس گیرنده شماره پورت لازم برای ارتباط سرویس دهنده با خود را از طریق صدور دستور PORT N+۱ به وی اطلاع می دهد ( پورت x+۱ )

سرویس دهنده یك ارتباط را از طریق پورت ۲۰ خود با پورت مشخص شده سرویس گیرنده ( پورت x+۱ ) برقرار می نماید .


لطفا" به من از طریق پورت ۱۹۳۱ بر روی آدرس
IP: ۱۹۲.۱۶۸.۱.۲ متصل و سپس داده را ارسال نمایید .
سرویس گیرنده
تایید دستور سرویس دهنده


در فرآیند فوق ، ارتباط توسط سرویس گیرنده آغاز و پاسخ به آن توسط سرویس دهنده و از طریق پورت x+۱ كه توسط سرویس گیرنده مشخص شده است ، انجام می شود . در صورتی كه سرویس گیرنده از سیستم ها و دستگاه های امنیتی خاصی نظیر فایروال استفاده كرده باشد ، می بایست تهمیدات لازم به منظور ارتباط كامپیوترهای میزبان راه دور به سرویس گیرنده پیش بینی تا آنان بتوانند به هر پورت بالاتر از ۱۰۲۴ سرویس گیرنده دستیابی داشته باشند . بدین منظور لازم است كه پورت های اشاره شده بر روی ماشین سرویس گیرنده open باشند . این موضوع می‌ تواند تهدیدات و چالش های امنیتی متعددی را برای سرویس گیرندگان به دنبال داشته باشد .

Passive Mode
در Passive Mode ، كه به آن " مدیریت و یا اداره سرویس گیرندگان FTP" نیز گفته می شود از فرآیند زیر استفاده می گردد :

سرویس گیرنده دو پورت را فعال می نماید ( پورت x و x+۱ )

ارتباط اولیه از طریق پورت x سرویس گیرنده با پورت ۲۱ سرویس دهنده آغاز می گردد .

سرویس دهنده یك پورت را فعال ( Y ) و به سرویس گیرنده شماره پورت را اعلام می نماید .

در ادامه سرویس گیرنده یك اتصال از طریق پورت x+۱ با پورت y سرویس دهنده برقرار می نماید .


لطفا" به من بگویید كه از كجا می توانم داده را دریافت نمایم
سرویس گیرنده
با من از طریق پورت ۴۰۲۳ بر روی آدرس
IP: ۱۹۲.۱۶۸.۱.۲۵ ارتباط برقرار نمایید . سرویس دهنده


در فرآیند فوق ، سرویس گیرنده دارای نقش محوری است و فایروال موجود بر روی سرویس گیرنده می تواند درخواست های دریافتی غیرمجاز به پورت های بالاتر از ۱۰۲۴ را به منظور افزایش امنیت بلاك نمایند . در صورتی كه بر روی كامپیوترهای سرویس دهنده نیز فایروال نصب شده باشد ، می بایست پیكربندی لازم به منظور استفاده از پورت های بالاتر از ۱۰۲۴ بر روی آن آنجام و آنان open گردند . باز نمودن پورت های فوق بر روی سرویس دهنده می تواند چالش های امنیتی خاصی را برای سرویس دهنده به دنبال داشته باشد .
متاسفانه تمامی سرویس گیرندگان FTP از Passive Mode حمایت نمی نمایند . اگر یك سرویس گیرنده بتواند به یك سرویس دهنده login نماید ولی قادر به ارسال داده بر روی آن نباشد ، نشاندهنده این موضوع است كه فایروال و یا Gateway برای استفاده از Passive Mode به درستی پیكربندی نشده است .

ملاحضات امنیتی
در صورتی كه فایروال های موجود بر روی كامپیوترهای سرویس گیرنده به درستی پیكربندی نگردند ، آنان نمی توانند از Active Mode استفاده نمایند . در Passive Mode استحكام سیستم امنیتی در سمت سرویس دهنده و توسط فایروال مربوطه انجام خواهد شد . بنابراین لازم است به سرویس دهنده اجازه داده شود كه به اتصالات هر پورت بالاتر از ۱۰۲۴ پاسخ دهد . ترافیك فوق ، معمولا" توسط فایروال سرویس دهنده بلاك می گردد . در چنین شرایطی امكان استفاده از Passive Mode وجود نخواهد داشت .

Passive Mode و یا Active Mode ؟
با توجه به مستندات درج شده در RFC ۱۵۷۹ ، استفاده از Passive Mode به دلایل متعددی به Active Mode ترجیح داده می شود :

تعداد سرویس دهندگان موجود بر روی اینترنت به مراتب كمتر از سرویس گیرندگان می باشد .

با استفاده از امكانات موجود می توان سرویس دهندگان را پیكربندی تا بتوانند از مجموعه پورت های محدود و تعریف شده ای با در نظر گرفتن مسایل امنیتی ، استفاده نمایند.

پیكربندی فایروال
جدول زیر پیكربندی فایروال در Active Mode و Passive Mode را نشان می دهد .


Active Mode
Server Inbound from any client port >۱۰۲۴ to port ۲۱ on the server

Server Outbound from port ۲۰ on the client on any port > ۱۰۲۴

Client Inbound ports ۲۰ from the server to any port >۱۰۲۴ on client
Client Outbound from any port >۱۰۲۴ to port ۲۱ on the server

Passive Mode
Server Inbound port ۲۱ and any port >۱۰۲۴ from client/anywhere, from any port >۱۰۲۴
Server Outbound port ۲۱ and any port >۱۰۲۴ to client/anywhere, to any port >۱۰۲۴
Client Inbound Return traffic, any port > ۱۰۲۴ from server using any port >۱۰۲۴


و اما یك نكته دیگر در رابطه با پروتكل FTP !
در صورتی كه در زمان دریافت یك فایل با استفاده از پروتكل FTP مشكلات خاصی ایجاد كه منجر به قطع ارتباط با سرویس دهنده FTP گردد ،‌ سرویس گیرنده می تواند با مشخص كردن یك offset از فایل دریافتی به سرویس دهنده اعلام نماید كه عملیات ارسال را از جایی كه ارتباط قطع شده است ، ادامه دهد ( سرویس گیرنده از محلی شروع به دریافت فایل می نماید كه ارتباط غیرفعال شده بود ) . استفاده از ویژگی فوق به امكانات سرویس دهنده FTP بستگی دارد .