نمایش نتایج: از شماره 1 تا 4 از مجموع 4

موضوع: نوشتن پروتکل انتقال فایل با استفاده از UDP

  
  1. #1
    نام حقيقي: respina n

    عضو غیر فعال
    تاریخ عضویت
    Jan 2010
    محل سکونت
    tehran
    نوشته
    2
    سپاسگزاری شده
    0
    سپاسگزاری کرده
    0

    نوشتن پروتکل انتقال فایل با استفاده از UDP

    با استفاده از پروتکل UDP بستری قابل اطمینان برای انتقال فایل ایجاد کنید.
    یک پروتکل انتقال فایل طراحی کنید. در این پروتکل باید نیازهای زیر مورد توجه قرار گیرند:
    • ارسال درست و کامل فایل از فرستنده به گیرنده
    • استفاده ی مناسب و بهینه از خط ارتباطی بین فرستنده و گیرنده
    • ارسال فایل در حداقل زمان ممکن
    ممکن است بسته ای در خط ارتباطی فرستنده و گیرنده گم شود، خراب شود و یا دیر برسد. این خطاها نباید در ارسال فایل خللی ایجاد کنند. آزمون درستی برنامه نیز به کمک انتقال یک فایل خواهد بود.

    در فاز 1 باید مشخص کنید:
    • سرآیند پروتکل شما از چه قسمت هایی تشکیل شده است.
    • هریک از این قسمت ها چه وظیفه ای دارند .
    • نحوه ی عمل کرد فرستنده و گیرنده در این پروتکل چگونه است.
    • خطاهای به وجود آمده در لیه های پایین تر چگونه مدیریت می شوند.
    • نیازهای سه گانه ی انتقال فایل چگونه برطرف می شوند.
    • پروتکل شما باید از ارسال بی مورد بسته ها پرهیز کند. مثلً پروتکلی که هر بسته را دو بار بفرستد تا حداقل یکی از
    آن ها برسد قابل قبول نیست.
    • پروتکل باید سعی کند در صورت ظرفیت داشتن مسیر ارتباطی، حداکثر استفاده را از آن بکند.
    • با افزایش ظرفیت خط، کاهش احتمال خطا یا افزایش سرعت خط، باید زمان ارسال فایل و تعداد ارسال های مجدد
    کاهش یابند و در کل پروتکل بهتر عمل کند.
    • ممکن است تمام فایل در ابتدا آماده نباشد. حالتی را در نظر بگیرید که یک برنامه ی کاربردی بخواهد از برنامه ی
    شما به عنوان زیرساخت استفاده کند و در حال تولید یک فایل باشد و همزمان بخواهد آن را ارسال کند. پروتکل
    شما باید تا حد امکان بسته ها را به ترتیب برساند تا در طرف دیگر امکان بازیابی قسمت های ابتدایی فایل قبل از
    اتمام ارسال ممکن باشد.

    در فاز دوم باید پروتکلی که در فاز قبل طراحی کردید را پیاده سازی نمایید.



    موضوعات مشابه:

  2. #2
    نام حقيقي: 1234

    مدیر بازنشسته
    تاریخ عضویت
    Jul 2009
    محل سکونت
    5678
    نوشته
    5,634
    سپاسگزاری شده
    2513
    سپاسگزاری کرده
    272
    ببخشید، آیا اینجا TestKing است؟
    خدا را شکر روز به روز امثال اینگونه پستها زیاد میشود!!!!
    خوب نمره این سوال را کی قرار است بگیرد؟
    شما!!!!!
    من نمیفهمم اگر علاقه به این کار نداریم و حوصله نداریم به دنبال یادگیری این رشته ، چرا وقتمان را بیخود در این کار تلف میکنیم؟؟




  3. #3
    نام حقيقي: respina n

    عضو غیر فعال
    تاریخ عضویت
    Jan 2010
    محل سکونت
    tehran
    نوشته
    2
    سپاسگزاری شده
    0
    سپاسگزاری کرده
    0
    ببخشید اول این که من این تمرین رو نوشتم و تقریبا تمام نمره اش را هم گرفتم!
    فقط بعضی قسمت های پروپوزالم رو بلد نیستم بهینه پیاده سازی کنم. علاقه مند بودم که راه حل بهینه اش رو یاد بگیرم.
    یکی از دوستان این سایت رو معرفی کرد!
    پروپوزالم رو هم می ذارم که اگه شما غیر بهینه اش رو هم بلد نیستین یاد بگیرین!

    بستری قابل اطمینان برای انتقال فایل ایجاد و یک UDPدراین تمرین باید با استفاده از پروتکل
    پروتکل انتقال فایل طراحی کنیم.
    در این پروتکل باید نیازهای زیر مورد توجه قرار گیرند:
    ● ارسال درست و کامل فایل از فرستنده به گیرنده
    ● استفاده مناسب و بهینه از خط ارتباطی بین فرستنده و گیرنده
    ● ارسال فایل در حداقل زمان ممکن
    در این فاز باید موارد زیر مشخص شود:
    ● سرآیند پروتکل طراحی شده و وظیفه هر یک از قسمت های آن
    ● نحوه عملکرد فرستنده و گیرنده در این پروتکل
    ● چگونگی مدیریت خطاهای به وجود آمده در لایه های پایین تر.
    ●چگونگی برطرف کردن نیازهای سه گانه انتقال فایل
    نکات زیر نیز در طراحی پروتکل باید مورد توجه قرار گیرد:
    ● خطا های ناشی از گم شدن، خراب شدن یا دیر رسیدن بسته در خط ارتباطی نباید در ارسال فایل خللی وارد کند.
    ● پروتکل باید کمینه باشد و همه جوانب مطرح شده را در نظر بگیرد.
    ● پروتکل باید از ارسال بی مورد بسته ها پرهیز کند.
    ● پروتکل باید از ظرفیت خط حد اکثر استفاده را بکند.
    ● پروتکل باید تا حد امکان بسته ها را به ترتیب به گیرنده برساند.
    MYFTPطرح پروتکل
    دارد و در واقعTCP استفاده می کند و مشترکات زیادی با پروتکل UDPاین پروتکل از پروتکل
    است.TCPصورت بسیار ساده ای از پروتکل
    به شکل زیر است: UDPمی دانیم سرآیند
    32 Bits
    Source port
    Destination port
    UDP length
    UDP checksum

    پورت های فرستنده و گیرنده را مشخص می کنند. بنابراین Destination port و Source portکه
    UDP checksum نیازی به داشتن این دو فـیلد نیست. هم چنـین فـیلد MYFTPدر سرآینـد پروتکل
    موجود است، درسرآیند پروتکل پیشنهادی در نظر گرفته نمی شود.UDPکه در سرآیند پروتکل
    به شکل زیر می باشد:MYFTPدرنتیجه سرآیند 12 بیتی پروتکل
    32 Bits
    Sequence number
    Acknowledgement number
    MYFTP header length
    ACK
    SYN
    FIN
    RST
    Window size
    COR

    که وظیفه هر فیلد در ادامه تشریح خواهد شد.
    در کل شکل بسته به صورت زیر خواهد بود:
    Ethernet header
    IP header
    UDP header
    MYFTP header
    payload

    توضیح فیلدهای سرآیند
    نشان دهنده شماره ترتیب قطعه داده می باشد و مقدار اولیه آن درSequence numberفیلد
    طول زمان متغیر است.با قرار دادن شماره ترتیب برای داده ها می توان تضمین کرد که جریان داده ها به ترتیب می رسند وبه هر دلیلی اگربسته ای دو بار دریافت شود، با مقایسه شماره ترتیب ها یکی از آنها دور انداخته می شود.
    بـرای اعـلام وصول داده هـاسـت و شـماره بایـتی را مشـخص Acknowledgement numberفـیلد
    که گیرنده از آن بایت به بعد منتظر دریافت داده هاست. می کند
    نقطه شروع داده ها در هر قطعه را مشخص می کند.MYFTP header lengthفیلد
    برای برقراری و قطع ارتباط به کار می روند و در بخش های بعد توضیح داده خواهند Flagچهار بیت
    شد.
    مشخص می کند که بافر گیرنده چند بایت دیگر ظرفیت خالی دارد، یعنی به طرفWindow sizeفیلد
    Acknowledgement # مـقابل اعلام می کـند که مجـاز است از بایت با شـماره ترتـیبی کـه در فیلـد
    مشخص شده اسـت، حداکثر به اندازه مقداری که در این فـیلد درج شده ارسال داشته باشد. این فـیلد برای کنترل جریان به کار می رود.
    است اگر مقدار 1 داشته باشد به این معنی اسـت که بسته ای که شمارهFlag که یک بیت CORفـیلـد
    ایـن Acknowledgement number آن برابر مقـداری است که در فـیلد Sequence number
    بسته است، خراب شده و فرستنده باید دوباره آن را ارسال کند. در بخش های بعدی کاربرد این فیلد بیشتر توضیح داده می شود.


    برقراری ارتباط
    وLISTENبرای آن که اتصالی ایجاد شود باید یکی از طرفین از طریق اجرای توابع اولیه
    با مشخصات MYFTP یک بسته CONNECT منتظر بماند سمت مقابل با تابع اولیه ACCEPT
    و پورت طرف مقابل و طول حداکثر موردIP برای طرف مقابل بفرستد و آدرس ACK=0 وSYN=1
    پذیرش برای بسته را مشخص کند و منتظر برگشت پاسخ باقی بماند.
    در LISTENوقتی چنین بسته ای به گیرنده می رسد، ابتدا بررسی می کند که آیا پروسه ای توسط تابع
    MYFTPحال گوش دادن به شماره پورت دریافت شده هست یا خیر؟ اگر چنین نبود با ارسال یک بسته
    ، تـــقاضای برقراری اتصال را رد می کند. اگر چنین بود و پروسه مربوطه نیز آن RST=1حاوی بیت
    اتصال را بپذیرد، یک قطعه تصدیق برگردانده خواهد شد.
    شکل زیرمراحل ایجاد یک اتصال را نشان می دهد:
    گیرنده فرستنده





    راAcknowledgement number و Sequence number مقادیر فیلدهای ACK و SEQ که
    نشان می دهند.

    ارسال فایل
    پس از برقراری ارتباط، برای ارسال فایل، فرستنده داده ها را بر اساس طول حداکثر مورد پذیرش
    قطعه بندی می کند و داده ها را در قالب یک سری قطعه ارسال می کند. طول مورد پذیرش به اندازه ای است که طول کل بسته اترنت از 1500 بایت بیشتر نشود.
    فرستنده برای این که از ظرفیت خط حـداکثـر استفاده را بکند و در کوتاه ترین زمان فایل را ارسال کـند، یک قـطعه با طـول حداکثر توافـق شده ارسال می کند. اگر اعلام وصول این قـطعه به موقع رسید، حجـم ارسال را تا رسیدن به مقدار آستانه دو برابر می کند، البته تا هنگامی که این حجم از مقدارموجود در فیلد کمتر باشد. مقدار اولـیه آستانه برابر 64 کیلوبایت است اما در دفعات بعد مقدار آسـتانهWindow size
    برابر نصف حجم ارسالی قبلی می باشد.
    وقتی بسته ای ارسال می شـود یک تایمر ارسال مجدد شروع به کار می کند. اگر قبل از آن که مهلت این تایمر منقضی گردد، قطعه ارسالی اعـلام وصول شـود، تایمر متوقـف می شود، در غـیر این صورت این قطعه از نو ارسال و تایمر مجدداً راه اندازی می شود. مقدار تایمر با روابط ریاضی قابل محاسبه است و هم چنین می توان آن را تخمین زد:
    RTTnew=RTTold+4*Dnew
    Dnew=α.Dold+(1-α).(RTTold-M)
    زمان رفت یک بسته و برگشت تصدیق آن:RTT , Dold=0 , α=7/8

    ) دریافت نشود، یعنی آن بسـته و تمام Time outاگر اعلام وصول بـسته ای پیش از پایان زمان تایمر(
    می شود و Resetبسته های ارسالی بعد از آن گم شده اند. در این موارد حجم ارسالی به مقدار اولیه آن طبق همان الگوریتم پیش می رود.
    گم شده اما n سه بار اعـلام وصول دریافـت شود، به این معنی است که بسته nاگر برای بسـته مفروض
    رسیده اند. در این موارد حجم ارسالی به اندازه مقدار آستانه کاهش می یابدn+1, n+2, n+3بسته های و طبق همان الگوریتم از قسمت مقدار آستانه به بعد پیش می رود.
    خلاصه مطالب ذکر شده در بالا، در شکل زیر نمایش داده شده است:


    در مورد بسـته هایی که در خط ارتباطی خراب می شـوند، پروتکل از فـیلد
    استفاده می کند. به این صورت که اگر مقدار محاسبه شده برایUDP موجود در سرآیند Checksum
    برابر بود، خـطاییUDP در سرآیند Checksum در گیرنده با مقـدار موجود در فـیلد Checksum
    CORرخ نداده، در غیر این صورت خطا رخ داده و گـیرنده باید با ارسال بسته ای که مقدار بیت پرچم
    Sequence number آن برابر مقـدار فـیلـد Acknowledgement numberآن 1 و مقـدار فـیلـد
    بسته خراب شده است، از فرستنده بخواهد این بسته را مجدداً بفرستد.

    قطع ارتباط
    FIN=1 که در آن فیلد MYFTPبرای قطع یک اتصال، هر یک از طرفین می توانند یک بسته
    است، ارسال نمایند. این بسته به این معناست که داده دیگری جهت ارسال وجود ندارد. وقتی دریافت این بسته توسط طرف مقابل تصدیق شد، فرسـتنده اتصال خود را خاتمه می دهد اما داده ها از طرف گـیرنده می تواند به طورنامحدود ارسال شوند.
    خاتمه می یابد.MYFTPوقتی ارتباط در دو طرف قطع شد اتصال



  4. #4
    نام حقيقي: 1234

    مدیر بازنشسته
    تاریخ عضویت
    Jul 2009
    محل سکونت
    5678
    نوشته
    5,634
    سپاسگزاری شده
    2513
    سپاسگزاری کرده
    272
    بد نیست آدم بعضی از سایت ها را هم که از آنها استفاده میکند معرفی کند(البته خدای نکرده منظورم شما نیستید) ، البته به زبان شیرین فارسی . به طور مثال :

    کد:
    http://engineers.blogsky.com/print/post-31/
    مقایسه TCP و UDP _قسمت اول


    TCP
    و UDP دو پروتکل معمول لایه انتقال یا همون Transport Layer در مدل TCP/IP است. که الان می خواهیم تفاوت این دو تا رو یادبگیریم.
    TCP
    TCP از حروف اول کلمات Transmission Control Protocol گرفته شده و یکی از پروتکلهای اصلی در شبکه های مبتنی بر TCP/IP است.
    TCP برقرارای ارتباط بین دو هاست و انتقال داده بین اون ها رو برقرار و صحت انجام این کار رو ضمانت می کنه .
    TCP در RFC 793به طور کامل تشریح شده. و سه ویژگی رو برای اون ذکر کرده :
    Connection Oriented
    Reliable
    Stream Oriented
    یک پروتکل اتصال گرا (Connection Oriented) یعنی قبل از اتقال واقعی داده بین دو هاست باید ارتباط بین آن ها برقرار یا اصطلاحا باز شود. ارتباط به صورت full duplex است یعنی ارسال و دریافت داده ها بر روی یک خط ارتباطی میسر است. همچنین پس از انتقال داده باید این اتصال رو بست تا منابع سیستم آزاد بشه. هر دو هاستی که در دو سمت این اتصال قرار دارند از باز بودن و شروع اتصال و همچنین از پایان آن اطلاع دارند. و انتقال داده ها بدون توافق طرفین اتصال بر برقراری اتصال امکان پذیر نیست.
    Reliable یعنی قابل اعتماد. به این مفهوم که صحت ارسال و دیافت داده ها رو تضمین می کنه.
    Stream Oriented یعنی داده ها به صورت رشته ای از بایت ها انتقال می یابند و هیچ چیز قابل مشهود برای مشخص کردن حدود داده وجود ندارد. گیرنده هیچ اطلاعی از چگونگی داده های اولیه که ارسال شده ندارد .ممکن است فرستنده داده را در قالب چندین قطعه کوچک بفرستد و گیرنده تنها یک رشته بزرگ از داده ها را دریافت کند و یا برعکس. فرستنده یک رشته طولانی از داده ها را ارسال کند ولی در آن سمت گیرنده چند قطعه کوچک از داده ها را دریافت کند.تنها چیزی که در این میان اهمیت داره و گارانتی میشه ارسال و دریافت داده ها بدون هیچ خطائی است .که اگر هم خطائی رخ دهد با تقاضای ارسال مجدد داده ها در واقع خطا برطرف می شود.
    ایزوله کردن این سرویس ها در سطح یک لایه، به برنامه های کاربردی ما این امکان رو میده که بدون نیاز به کنترل خطا ها و در نظر گرفتن اونها طراحی و پیاده سازی بشه.
    برقراری ارتباط و ارسال داده
    پیام از یک application در لایه بالایی که همون application layer سرچشمه میگیره و در قالب Stream یعنی جریانی از کاراکتر ها به صورت آسنکرون به لایه transport فرستاده میشه.
    این مساله در مقابل بسیاری از پروتکل های دیگه که داده ها در قالب بلاک هایی با اندازه ثابت دریافت می کنند قرار گرفته.
    لایه انتقال داده ها رو میگیره و در قالب سگمنت هایTCP (یا UDP )باز سازی کرده و اطلاعات اضافی مربوطه را در قالب Header های سگمنت ابتدای داده اضافه میکنه.اگر ارتباط دو طرفه ای مثلTELNET یا FTP مورد نیاز باشه. یک ارتباط (virtual circuit) بین ماشین فرستنده و گیرنده برقرار میشه.
    پروسه با تقاضای یک ارتباط TCP از طرف ماشین فرستنده به ماشین گیرنده شروع میشه. در این پیام یک عدد یکتا به نام socket number ، ارتباط ماشین فرستنده را مشخص میکنه. ماشین گیرنده هم شماره سوکت خودش رو به ماشین فرستنده ارسال میکنه. این دو شماره سوکت ارتباط بین دو ماشین رو تا زمان اتمام کار تعیین میکنه.
    بعد از اینکه این ارتباط بین بین ماشینهای گیرنده و فرستنده برقرار شد، پیام به لایه IP که که داده ها را در قالب دیتاگرام بر روی شبکه منتشر می کند، انتقال داده می شود.
    لایه IP میتونه هر عملیاتی از قبیل قطعه قطعه سازی و یا جمع کردن قطعه ها و تبدیل آن به پیام اولیه در سمت ماشین گیرنده را انجام بده.که چگونگی این عمایات برای لایه انتقال قابل درکه.
    بعد از اینکه بسته TCP مسیر طولانی و پر پیچ و خم!! خودش رو در شبکه طی کرد و به ماشین گیرنده رسید به لایه TCP تحویل داده میشه و این لایه هم به لایه بالایی خودش که برنامه کاربردی قرار گرفته تحویل میده.
    اگر بسته TCP از چند سگمنت تشکیل شده باشه، نرم افزار لایه TCP در ماشین گیرنده سگمنت ها رو جمع آوری کرده و با توجه به فیلد sequence number که در header سگمنت ها قرار داده شده، به ترتیب پشت سر هم قرار میده .
    در صورتی که اطلاعات بدون خطا در ماشین گیرنده دریافت بشه، ماشین گیرنده پاسخی مبنی بر دریافت داده ها به ماشین فرستنده (ACK) ارسال میکنه.
    ولی اگر بسته به صورت صحیح دریافت نشه چی !!
    هیچی !در این حالی ماشین گیرنده هیچ پاسخی برای فرستنده نمی فرستد.اصطلاحا پاسخ (NAK) نمیده. کاملا مودبانه ، هیچ سرو صدایی راه نمیندازه که آقا جون این بسته نرسیده!!! از اون طرف ماشین فرستنده یک تایمر داره که اگر زمان معمول در نظر گرفته شده برای برای دریافت پاسخ (ACK)سپری شد ولی پاسخ نیامد، متوجه میشه که بسته نرسیده یا خراب شده و بسته را دوباره ارسال می کنه.
    قالب این بسته TCP چه جوریه؟؟
    شکل زیر ساختار header یک بسته TCP رو نشون میده.



    ·
    Port : یک فیلد 16 بیتی که شماه پورت و در واقع برنامه کاربردی در ماشین فرستنده را مشخص میکنه.
    ·Destination port : فیلد مشابه ، اما آدرس پورت ماشین گیرنده.
    ·Sequence Number : شماره ا که موقعیت بلاک جاری در کل پیام رو مشخص میکنه.که ماشین گیرنده برای رسیدن به پیام ارسال شده و سر هم گذاشتن قطعه های دریافت شده از این فیلد استفاده میکنه.
    ·Acknowledgement Number : شماره ای که seq no. بعدی مورد انتظارش رو مشخص میکنه. و این نشون میده که بسته با seq no. قبلی دریافت شده. در واقع نشاندهنده آخرین seq no. دریافت شده است +1
    ·Data offset : این فیلد برای تعیین شروع فیلد data که داده اصلی ارسالی است، استفاده میشه. عددی که در این فیلد قرار می گیره، طول سرآیند بسته TCP را بر اساس کلمات 32 بیتی تعیین میکنه. مثلا اگر در این فیلد عدد 7 قرار داده بشه( 224 = 32 * 7 )224 بیت یا در واقع 28 بایت برای header و بقی داده است.(توجه کنید که طول header ثابت نیست.)
    ·Reserved : 6 بیت رزرو شده برای روز مبادا!! شاید در آینده مورد استفاده قرار بگیره.
    6 بیت بعدی نقش چند پرچم را بازی می کنند.
    ·URG :اگر 1 باشه یعنی مقداری که در فیلد Urgent Pointer (در ادامه...) قرار گرفته مقدار معتبری است.
    ·ACK : اگر 1 باشه نشاندهنده اعتبار فیلد Acknowledgement Number است.
    ·PSH : اگر 1 باشه، تعیین میکنه که تابع Push باید اجرا بشه. در واقع با این فیلد فرستنده از گیرنده تقاضا میکنه که که داده های این سگمنت رو بافر نکنه و سریع برای پردازش های بعدی تحویل برنامه بده.
    ·RST : اگر 1 باشه یعنی اشکالی ( سخت افزاری یا نرم افزاری) به وجود آمده و ارتباط باید reset بشه.
    ·SYN : در هنگام برقراری ارتباط از مقدار 1 در این فیلد استفاده میشه.
    ·FIN : خاتمه ارسال
    ·Window : تعداد بلاک های دیگری که که ماشین گیرنده می تونه بپذیره، با مقداردهی در این فیلد مشخص میشه.اگر صفر باشه یعنی بافر گیرنده پر شده و اگر دوباره داده ای ارسال بشه!! دور ریخته میشه.!
    ·Checksum : کد کشف خطا
    ·Urgent Pointer : قبلا گفتیم که اگر بیت URG 1 باشه یعنی مقداری که در فیلد Urgent Pointer قرار گرفته معتبره. حالا ببینیم تو این فیلد چی باید قرار بگیره؟؟؟ اشاره گری در این فیلد قرار می گیره که موقعیت داده های اضطراری رو در بسته TCP مشخص میکنه. لایه TCP هیچ پردازشی روی این داده ها انجام نمیده و لایه بالاتر که برنامه کاربردی قرار داره، پردازش لازم روی داده ها انجام میده.
    ·Options : فعلا فقط 3 تا option تعریف شده:
    0 ، انتهای لیست Option ها
    1 ، هیچی!!!
    2 ، ماکزیمم اندازه سگمنت
    Padding: برای اینکه طول header به صورت ضریبی از 32 بیت حفظ بشه از این بیت ها با مقادیر الکی!! استفاده میشه.


    کد:
    http://engineers.blogsky.com/print/post-32
    مقایسه TCP و UDP _قسمت دوم
    UDP
    UDP از حروف اول کلمات User Datagram Protocol گرفته شده و یک پروتکل غیر اتصال گرا (Connectionless) است که مثل TCP در بالاترین لایه اجرا می شود. برخلاف TCP در پروتکل UDP امکان بروز خطا وجود دارد.
    تشریح کامل آن در RFC 768 آمده. یک ارتباط غیراتصال گرا بین دو هاست برقرار می کنه و هر بسته از داده کاربر و کمترین میزان سرایند تشکیل شده که به آن UDP دیتاگرام گفته می شود.
    UDP غیراتصال گرا است .یعنی یک دیتاگرام در هر لحظه ای میتونه ارسال بشه ، بدون نیاز به هر گونه اعلام قبلی، مذاکره و یا هیچ آماده سازی از قبل.فقط داده رو ارسال می کنه و امیدواره که گیرنده داده ها رو دریافت کنه.
    یک ارتباط غیرقابل اعتماد ایجاد می کنه . یعنی هیچ تضمینی برای اطمینان از تحویل داده ها در مقصد وجود ندارد. نه تنها هیچ اطمینانی از رسیدن داده ها به مقصد وجود نداره بلکه حتی به صحت و درستی داده هائی که به مقصد رسیده هم نمیشه اطمینان داشت. ممکنه بسته ای رو دو بار دریافت کنیم!! برنامه ما که بر اساس این پروتکل کار میکنه باید آمادگی مواجه شدن با تمام این موقعیت ها رو داشته باشه: از دست دادن دیتاگرام ، دیتاگرام تکراری و یا دریافت دیتاگرام با ترتیب غلط.
    مهمترین محاسن UDP اینه که محدوده داده ها در ائن مشخص شده ، در ارسال های broadcast میشه از این پروتکل استفاده کرد و همچنین سریعه.
    و مهمترین معایب غیرقابل اعتماد بودن آن و در نتیجه پیچیده بودن برنامه نویسی در سطح لایه application است.
    و اما قالب بسته UDP :
    همین طور که در شکل می بینید :
    ·Source Port : یک فیلد اختیاری برای شماره پورت فرستنده. اگر شماره پورت مشخص نشه در این فیلد 0 قرار میگیره.
    ·Destination Port : شماره پورت مقصد
    ·Length : طول دیتاگرام، شامل Header و داده اصلی
    ·Checksum: کد کشف خطا. این فیلد در Header بسته UDP اختیاریست.
    آدرس دهی
    TCP و UDP از یک مدل آدرس دهی استفاده می کنند : یک آدرس IP و شماره پورت مورد نظر.
    آدرس IP برای هدایت بسته به هاست منظور در شبکه ی مشخص شده و شماره پورت برای هدایت به پروسه منتظر. معمولا یک پورت برای یک برنامه اختصاص داره.
    محاسن TCP

    • سیستم عامل همه کار رو برای شماانجام میده. دیگه باگهای ابتدائی که هر کس در اولین کارش با اون ها روبرو میشه رو مرتکب نمیشید. برای اینکه تمام این ها برای ما توسط سیستم عامل انجام و رفع شده.
    • کارهائی که سیستم عامل برای دریافت و ارسال بسته های TCP انجام میده نیازی به سوئیچ لز مود کرنل به مود کاربر نداره. چون اغلب کارها مثل اسمبل کردن مجدد بسته های رسیده، پاسخ مبنی بر دریافت بسته ها (ACK) ، گزارش خطاها،و... توسط کرنل انجام می شود.
    • TCP سه چیز رو برای شما گارانتی میکنه : داده های ما به مقصدبرسه ، داده ها با ترتیب صحیحی برسه ، داده ها بدون تکرار در مقصد دریافت شود.
    • مسیریاب ها در مواجهه با بسته هایTCP رفتارهای خاص متناسبب رو انجام میدن . مثلا در صورت لزوم می تونند تقاضای ارسال مجدد بسته کنند.

    محاسن UDP

    • محدود و ملزم به رعایت از مدل ارتباطی connection oriented نیستیم.
    • کنترل خطاها، پاسخ به فرستنده (ACK) و... به برنامه بستگی داره و ما به عنوان برنامه نویس ویژگیهائی را که نیاز داریم پیاده سازی و استفاده می کنیم.
    • انتقال های broadcast و multicast در UDP امکان پذیره.

    معایبTCP

    • اگر سیستم عامل باگ داشته باشه، ما نمیتونیم از دست این باگ راحت بشیم.ممکنه برای چیزی که ما می خواهیم موثر نباشه و کارا نباشه ولی ما مجبوریم که از همون استفاده کنیم.
    • TCP ویژگیهای فوق العاده ای رو برای شما فراهم می کنه که شاید خیلی از اونها رو نیاز نداشته باشید. در نتیجه برای کار شما، پهنای باند و یا زمان رو هدر میده و بیخود صرف می کنه.
    • در TCP داده ها هیچ محدوده ای مشخص نشده و ما باید خودمان محدوده داده را مشخص کنیم.
    • TCP برای انتقال های broadcast و یا multicast نمیتونه مورد استفاده قرار بگیره.

    معایب UDP

    • با وجود UDP هیچ گارانتی وجود نداره. ممکنه بسته ای تحویل مقصد داده شه ، یا دو بار داده بشه و یا اینکه به ترتیب تحویل داده نشه. و با بروز هریک از این خطاها ما متوجه نمیشویم، مگر اینکه برنامه ای که به داده ها گوش می دهد، در صورت بروز هر یک از خطا ها بخواهد کاری انجام دهد.
    • UDP برای خطاهای احتمالی هیچ گونه مکانیزمی ندارد و پیاده سازی کشف و رفع خطاها به عهده برنامه نویس است.


    ----------------------------------------------------------------------------------------------------------
    جزوه ای به صورت Power Point از آقای کریم زادگان، اگر اسم ایشان را اشتباه نکرده باشم
    کد:
    http://mathcomputer.persiangig.com/Internet(Karim%20Zadegan).ppt
    ----------------------------------------------------------------------------------------------------------
    اصول مهندسي اينترنت
    گردآوري و تاليف : مهندس احسان ملکيان
    کد:
    http://209.85.129.132/search?q=cache:CrnH-03ucscJ:mathcomputer.persiangig.com/Internet%28Karim%2520Zadegan%29.ppt+RTT+new%3DRTTold%2B4*Dnew&cd=1&hl=de&ct=clnk&gl=de&lr=lang_fa


    البته میتوان از UFTP هم استفاده کرد

    کد:
    http://www.tcnj.edu/~bush/uftp.html
    UFTP - UDP based FTP with multicast

    UFTP is a multicast file transfer program, utilizing a protocol based on Starburst MFTP. It is designed to reliably and efficiently transfer files to multiple receivers simultaneously, where either the intended receivers can be specified beforehand, or receivers can join the transfer when it is initiated. This is useful for distributing large files to a large number of receivers, and is especially useful for data distribution over a satellite link (with two way communication), where the inherent delay makes any TCP based communication terribly inefficient. UFTP has been used in the production process of The Wall Street Journal to send WSJ pages over satellite to their remote printing plants, and other users have used it to send to over 1000 receivers.
    UFTP runs on both UNIX/Linux and Windows. There are links at the bottom of this page for the source code in both .zip and .tar format, however the actual code is the same for both. In the interest of keeping a common code base, a side effect is that the Windows version of the receiver will leave a Command Prompt open. This can be worked around by using hidedos, a free utility created by LANDesk for this purpose. This is included in the distribution, as well as instsrv and srvany (from the Windows Resource Kit) which can be used to run the client as a Windows service. See the enclosed readme file for details on using these utilities.
    Upgrade Notes: As of version 2.8, the uftp server is not backward compatible. When upgrading to verison 2.8 or later, all clients should be upgraded before servers.
    Protocol description

    The data transfer consists of 3 main phases: The Announce/Register phase, the Transfer/NAK phase, and the Completion/Confirmation phase.
    The Announce/Register phase begins by the server sending an Announcement over a public multicast address, which the clients are expected to be listening on. The server can either specify the hosts that are permitted to participate in the transfer (closed group membership), or it can allow any host that receives the announcement to participate (open group membership). The Announcement also contains information pertaining to the file to be received, such as the file name, file size, the total number of data blocks (blocks), and the number of data transfer sections (sections), which will be described in more detail later. Also in the Announcement is the private multicast address which the actual data is sent over. After the announcement, all subsequent communication from the server will be over the private address. Upon receiving the Announcement, the client sends a Registration back to the server informing it that it is ready to participate in the transfer. The server then sends a Confirmation to the client, acknowledging the registration. If the server specifies open group membership, it will wait for a period of time (based on network latency) to receive registrations from clients. For closed group membership, the server will wait a maximum period of time (again, based on network latency) for all specified clients to register. Any specified clients that do not register within that time frame will be flagged as "mute".
    Once the Announce/Register phase is completed, the Transfer/NAK phase begins by starting the first pass of the data transfer. Data packets are sent continuously by the server at a rate specified by the user. Because UDP does not guarantee that packets will arrive in order, each data packet is numbered so the client can properly reassemble the file. After each data transfer section is complete, the server will then send a Done message, after which it will expect a Status message from each registered client. Since each client knows the total number blocks and sections as well as which packets were received, the client sends back the list of NAKs (negative acknowledgements) for each packet that was not received in that particular section. Once all sections have been sent, if the server has received a non zero number of NAKs from any client, the server will begin a second pass of the data, this time only sending the packets that were NAKed. The server will continue with subsequent passes of the data until all clients have either received the file or have timed out while the server was waited for a Status message.
    When a client finishing receiving the entire file, it will send a special flag in the Status message for the last section alerting the server that that client has finished, thus starting the Completion/Confirmation phase. When the server receives this message from a client, it will then send a Confirmation to the client. Upon receiving the Confirmation, the client marks the file as complete and stops listening on the private multicast address for that file. This phase does not happen at the same time for all clients, but for each one as the clients receive the entire file. For example, if one client receives the whole file on the first pass of the data but another client sends back NAKs on the first pass, then the server will send a Confirmation to the first client but will then start a second pass of the data for the second client.
    Usage

    The syntax for the server is as follows:

    uftp [ -U ] [ -R txrate ] [ -W txweight ] [ -m min_time ]
    [ -n ] [ -z ] [ -l latency_level ] [ -c client_wait ]
    [ -L logfile ] [ -t ttl ] [ -I interface ] [ -p port ]
    [ -H host[,host...] ] [ -B buf_size ]
    [ -M pub_multicast_addr ] [ -P priv_multicast_addr ] file
    -USend file unicast to a single host. This requires the -H option with a single host specified. The -t, -M, and -P options are ignored as they are all related to multicast. -R txrateThe transmission speed in Kbps. Specifying -1 for this value results in data being sent as fast as the network interface will allow. Using a value of -1 is recommended only if the network path between the server and all clients encounters is as fast as the server's local interface, and works best in a gigabit environment. Default is 1000 Kbps. -W txweightSets the maximum file transfer time, expressed as a percentage of the optimal time. If a value of -1 is given for the -R option, a speed of 100Mpbs is used for the purpose of calculating the max time. Valid values are 110%-10000%. Default value is 300%. -m min_timeSpecifies the minimum file transfer time. This value takes precedence over the maximum time, if it is greater. Valid values are 0-3600 seconds. Default value is 10 seconds. -t ttlSpecifies the time-to-live for multicast packets. Default is 1. -nPrevents name lookups of the receivers. Useful if name resolution takes a long time and delays receiving of the registration messages. If used with open group membership, names of receivers are not looked up when discovered. If used with closed group membership, does not look up names specfied with -H (only IP addresses will be accepted). In the later case, -n MUST appear before -H for this to take effect. -zTells clients to make responses small as possible. Useful for when you have a large number of clients and want to minimize the backtraffic. Clients at version 2.9.2 and earlier ignore this flag. -l latency_levelSpecifies one of several predefined network latency levels. Valid values are 1, 2, 3, and 4. Use 1 for low latency networks, such as a local LAN, and use 4 for high latency networks, such as satellite or global WAN. Default is 3. The default should be used if communicating with an older version of the client for backward compatibility. -c client_waitSpecifies the time in milliseconds that clients will wait for server responses to registrations and completions. Useful in situations where the server expects to have a large nuber of clients (>100) over a low speed link, resulting in the server taking several seconds to process and respond to them all. -I interfaceThe interface to send the data from. Can be specified either by interface name, by hostname, or by IP. If not specified, the default system interface is used. -p portThe UDP port number to send from. Default is 1044. -L logfileSpecifies the log file. Default is to write to stderr. -H host[,host...]The list of receivers for closed group membership. If not specified, then open group membership is used. -B buf_sizeThe size in bytes of the UDP receive buffer to use. Valid values are 65536-1048576100 (64KB-100MB). Defaults to 262144. -M pub_multicast_addrThe public multicast address to announce on. Default is 230.4.4.1. -P priv_multicast_addrThe private multicast address that the data is transferred to. Any combination of the second, third, and fourth octets may be replaced with the letter 'x', resulting in a random number being chosen for that octet. Default value is 230.5.5.x fileThe file to send. This field is required.
    The syntax for the client is as follows:

    uftpd [ -d ] [ -n ] [ -L logfile ] [ -T temp_dir ]
    [ -D dest_dir ] [ -t timeout ] [ -p port ] [ -P pidfile ]
    [ -B buf_size ] [ -M pub_mcast_addr[,pub_mcast_addr...] ]
    [ -I interface[,interface...] ]
    -dEnable debug mode. The process will run in the foreground and all output will go to stderr. If specified, the -L option is ignored. -nPrevents name lookups of the transmitter. Useful if name resolution takes a long time and delays sending of the registration message. -L logfileSpecifies the log file. Defualt is /tmp/uftpd.log for UNIX systems, C:\uftpd_log.txt for Windows. -T temp_dirTemp directory in which files are received, then moved to dest_dir when complete. If omitted, files are received directly into dest_dir. -D dest_dirDestination directory for all received files. Default is /tmp for UNIX, C:\temp for Windows. -p portThe UDP port number to listen on. Default is 1044. -P pidfileThe pidfile to write the daemon's pid to on startup. Default is no pidfile. -B buf_sizeThe size in bytes of the UDP receive buffer to use. Valid values are 65536-1048576100 (64KB-100MB). Defaults to 262144. -t timeoutSpecifies the maximum inactivity time in seconds before aborting the transfer. Valid values are 1-3600 seconds. Default value is 60 seconds. -M pub_multicast_addr[,pub_multicast_addr...]The list of public multicast addresses to listen on. Default is 230.4.4.1 -I interface[,interface...]Lists one or more interfaces to listen to multicast traffic on. Interfaces can be specified either by interface name, by hostname, or by IP. When receiving a closed group membership request, the client will participate if any of these interfaces matches an IP in the announcement. The default is to listen on all active non-loopback interfaces. NOTE: Since Windows doesn't have named interfaces (not in the sense that UNIX-like systems do), only hostnames or IP addresses are accepted on Windows. ------------------------------------------------------------------------------------------------------------------------------------------------------
    و نتیجهUFTP برای WiFI
    کد:
    http://www.aes.id.au/?page_id=12
    I’ve worked with 802.11b (Wi-Fi) for a number of years, and I found myself wondering if there was a better way to transfer files between computers at home than FTP. FTP uses the TCP protocol, which does not always perform ideally when both ends of the transfer are on the same Wi-Fi network. This page lists the results of some tests I did, and my conclusion was that, yes, you can do better than FTP but there are no widely available, consumer-grade tools that you could use.
    Experimental Set-up

    There are three network nodes in this scenario: the access point providing the Wi-Fi coverage (call it AP), a Wi-Fi enabled source (call it node A), and a Wi-Fi enabled destination (call it node B).
    Access Point (AP): My access point is a BT Voyager 2000, sourced in the U.K. It provides 802.11b (not 802.11g) signal, and I’ve had little trouble with it.
    Node A: Files were transfered from a Linux laptop. It’s a Toshiba Portege 3840CT with 192MB of RAM, running Linux 2.4.25 and a Debian Sarge distribution.
    Node B: Files were received by a Windows laptop. It’s a Toshiba TECRA A3 with 512MB of RAM, running Windows XP Pro SP2. Both nodes A and B were within 3m of the AP and were separated by 2m from each other.
    File: The same file was sent in each test, and was a compressed Zip file of length 11,844,459 bytes (11.3 MB). It was big enough, with sufficiently random contents, to enable any network artifacts to show themselves. I guess I should’ve sent the same file multiple times to check my measurements, but when I did there weren’t any changes, so all measurements were the results of a single test.
    Tests and Results

    To give you an idea of the speed of my network, a simple ping test from A to B showed a consistent RTT of 3.6ms. All nodes were transmitting at the nominal maximum 802.11b rate of 11Mbps (effective speeds were lower than this of course).
    FTP: The first test was to see how long it took FTP to transfer the file between A and B. B was running FileZilla Server 0.9.10beta. The Linux command line FTP tool on A reported that the transfer took 38.8s
    FSP: I was pretty convinced that I wouldn’t better that time using an TCP based approach, so I next used a UDP based tool. FSP is reasonably popular, albeit mostly within the less reputable parts of the Internet, but was designed as a way to set up file servers that could service large numbers of downloads without overwhelming a link. As a consequence, it has speed-limiting aspects which would have impacted the results. B was running FSP server 2.8.1b24 under Cygwin (no special tweaking). The “date” tool was used on Linux to measure the transfer time, which was 75s
    netcat: To remove any speed-limiting, I tried the swiss-army network tool netcat. It has a UDP mode, and allows pure transfers without any pesky additional overheads. I used netcat v1.10 but unfortunately the transfer failed to work. The network dropped most of the packets, and the received file was woefully incomplete. This disqualifies it, of course. For interest’s sake, the sending took 18s
    TFTP: Another UDP-based transfer approach that’s pretty mainstream is TFTP. It’s used for low-level file transfers within networks, rather than across the Internet, and is designed for simplicity rather than speed, security or flexibility. I put the SolarWinds TFTP Server v8.27 on B, and the command line TFTP tool on A reported that the transfer took 135.5s
    UFTP: Now I was beginning to doubt that I could better FTP, but then I came across UFTP. This obscure UDP-based tool is apparently used by the Wall Street Journal and is designed for transfers over wireless networks (primarily satellite) with long latencies. As it’s public domain, I modified the source to (barely) compile under gcc and got it running under Windows/Cygwin and Linux. Using the “-R 3000″ option to force a 375kB/s transfer speed, it reported a successful transfer in only 31.6s
    Conclusions

    Well, UFTP is the winner, being 18% faster than FTP on a 802.11b network. I don’t doubt that a UDP-based tool specifically tailored to Wi-Fi file transfers wouldn’t be slightly faster still. However, UFTP isn’t for everyone, and I couldn’t find a simple consumer-grade tool that was faster than FTP.
    Admittedly, I didn’t spend much time trying to tweak TFTP or FSP. It could’ve been that there were settings that would allow them to approach UFTP’s performance. Personally, I suspect not though.
    TCP isn’t totally defeated though. There are many TCP options which would support better transfer speeds under Wi-Fi, but this would require widespread operating system support. In my scenario both Linux and Windows would have needed to support the same such options, which is unlikely. But, maybe one day…
    Finally, if the transfer is to/from a wired node and a wireless node, then TCP performance is likely to be close to UDP. These results are dependent on the set-up being transfer between A and B, i.e. two wireless nodes on the same Wi-Fi network.

    ------------------------------------------------------------------------------------------------------------------------------------------------------

    البته به بزرگی خودتان این حقیر را ببخشید که وقت ندارم باقی سایت ها را معرفی کنم.
    با تشکر و سپاس



    ویرایش توسط patris1 : 2010-01-04 در ساعت 02:37 AM

کلمات کلیدی در جستجوها:

پروتکل انتقال فایل

بسته udp

ساختار بسته udp

ساختار یک قاب اترنت

معایب udp

ساختار بسته در پروتکل udp

طریقه نوشتن پروتکل

مقایسه پروتکل tcp udp

تشریح پروتکل udp

نوشتن پروتکل

پروتکل udp

sara neyestani

پروتكل udp

1

استفاده از udp

قالب بسته UDP

انتقال فایل با پروتکل udp

چگونه از پروتکل udp استفاده کنیمطرز نوشتن پروتکل پروتكل UDP را توضيح دهيدپروتکل انتقال فایل امنپروتکل انتقال فایل در مخابراتقالب بسته های udpسرآیندهای پروتکل tcpپروتکلهای انتقال فایل

برچسب برای این موضوع

مجوز های ارسال و ویرایش

  • شما نمی توانید موضوع جدید ارسال کنید
  • شما نمی توانید به پست ها پاسخ دهید
  • شما نمی توانید فایل پیوست ضمیمه کنید
  • شما نمی توانید پست های خود را ویرایش کنید
  •