20
C درTCP/IP سوکتهایسی برنامهنوی: دگانویسن نناهو ی.داِ مایکل ج.کالورت لِ ث اِ نِ کترجم: مزی تبریمرضا صابری غ

C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

C در TCP/IP برنامه نویسی سوکت های

نویسندگان : مایکل ِجی.داناهوکِنِث اِل.کالورت

مترجم: غالمرضا صابری تبریزی

Page 2: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

"

Eدر VER1KR هاينويسي سوكتبرنامه: نام كتاب

)كيان رايانه سبز(دانشگاهي كيان: ناشر .كالورت.كنث ال-داناهو.مايكل جي: انمؤلف

غالمرضا صابري تبريزي: مترجم 1391: ول چاپ ا جلد1000: تيراژ گنج شايگان: و صحافي چاپ )EFهمراه با(تومان9000: قيمت978-600-6021-91-1: شابكISBN :978-600-6021-91-1

Donahoo, Michael J.يداناهو مايكل ج: سرشناسه. كالورت.كنث ال،داناهو.نويسندگان مايكل جيCدرTCP/IPهاينويسي سوكتبرنامه: عنوان و نام پديدآور

.ابري تبريزيمترجم غالمرضا ص .1391)كيان رايانه سبز(دانشگاهي كيان انتشاراتتهران: مشخصات نشر

.مصور.:ص240: مشخصات ظاهري 978-600-6021-91-1: شابك

فيپا: نويسيوضعيت فهرست.TCP/IP sockets in C : practical guide for programmers:عنوان اصلي: يادداشت .235.ص:كتابنامه: يادداشت .سازي كاربريهاي برنامهرابط: موضوع )پروتكل شبكه كامپيوتري(پي.آي./پي.سي.تي: موضوع )زبان برنامه نويسي كامپيوتر(سي: موضوع

.Calvert, Kenneth L.كالورت، كنث ال: شناسه افزوده .ترجم، م-1367غالمرضا،صابري تبريزي،: شناسه افزوده

76/76QA/ر2د13912:بندي كنگره رده 713762/005:   بندي ديويي رده

2899332:  شماره كتابشناسي ملي

دانشگاهي كيانانتشارات

:مركز پخش طبقه اول - 27پالك -كوچه نوروز -فروردين 12خ -خ انقالب : دانشگاهي كيانانتشارات

66411715- 66406834-66416446: تلفن "yyy0mkcprwd0eqoاز طريق سايت Qpnkpgخريد

3000221441 : SMS

.محفوظ است ناشركليه حقوق براي تكثير تمامي يا قسمتي از اين اثر به

حروفچيني يا چاپ مجدد، چاپ صورت ست، فتوكپي و انواع ديگر چاپ ممنوع اف

.است و پيگرد قانوني دارد

Page 3: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

»سپس، به کاتبان و نویسندگانت بنگر و بهترین آن ها را بر کارهای خود بگمار...قدر خود شناخت به را بشناسند، چون کسی که قدر خود کاتبان و نویسندگانی برگزین که

»برگرفته از نامه ی 53 نهج البالغه به مالک اشتر«ندارد، دیگران را هم نمی شناسد.«

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

با صرف هزینه های نه چندان کم آن را تهیه می کند؛ به امید آن که چیزی از آن بیاموزد.باید پذیرفت که انگیزه ی نوشتن کم از محتوای نوشته نیست و بین این دو رابطه ای مستقیم انگیزه از نوشتن، تولید دانش باشد، بی شک نویسنده از قلم بی محتوا وکم عمق برقرار است. اگر عنوان به تنها ناشر باشد، میان در زخم خورده فرهنگ و دانش دغدغه ی اگر و می کند پرهیز

پرطمطراق بسنده نمی کند.و چقدر امروزه، فرهنگ و دانش این مرز بوم که گرفتار آفت بی انگیزگی و زخم هوس است، نیازمند ناشران و نویسندگانی است که نیت شان کمک به رشد دانش و ارتقای فرهنگ جامعه است و به راستی که التیامی بر این درد نیست مگر نویسندگانی که قدر خود و دیگران را می دانند و خوب می فهمند که کتاب، ابزار سودجویی های مغرضانه نیست و می کوشند تا خود را از هرگونه شهوت

نام و رسم و ثروت تهی کنند.

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

در سایه ی لطف و عنایت خود از آن چه به عهده ی ما نهاده شده، سربلند و پیروز برآییم.

انتشارات کیان رایانه ی سبز

سخنی با خوانندگان

Page 4: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی
Page 5: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

امروزه با گسترش هرچه بیشتر استفاده از اینترنت، به وجود برنامه هایی نیاز داریم که بتوانند با استفاده از شبکه با یکدیگر ارتباط برقرار کنند.

یادگیری به آن از استفاده با بتوانند عالقه مندان اینکه برای است مرجعی حاضر کتاب Beej's guide to« مقدمات برنامه نویسی سوکت بپردازند. به این منظور ابتدا در سال 1386 مقالهnetwork programming« را ترجمه کردیم و در اختیار مخاطبان قرار دادیم. این مقاله در این سال ها

با استقبال بسیاری روبه رو شد و ما را بر آن داشت تا مرجع جامع تری را در این زمینه در اختیار مخاطبان قرار دهیم. نتیجه این تالش کتاب حاضر است که در جهت فراهم آوردن مرجعی جامع تر TCP/IP Sockets in« دوم ویرایش ترجمه کتاب این است. شده تهیه مخاطبان برای به روزتر و C: Practical Guide for Programmers« است که انتشارات Morgan Kaufmann در سال 2009 به چاپ

رسانده است. در ترجمه کتاب سعی کرده ایم سودمند ترین مطالب را ارائه دهیم بنابراین از ترجمه می پردازد، C++ در برنامه نویسی سوکت برای کتابخانه ای خاص بررسی به که کتاب، 8 فصل

صرفنظر کردیم. مطالب این کتاب برای عالقه مندان به یادگیری چگونگی نوشتن برنامه های مبتنی بر سوکت واحدهای گذراندن حال در که دانشجویانی و C زبان از استفاده با لینوکس عامل سیستم در برنامه نویسی شبکه و برنامه نویسی سیستمی هستند بسیار سودمند خواهد بود. گفتنی است بیشتر مفاهیم موجود در این کتاب در سایر سیستم های عامل نیز صادق است و تفاوت ها بسیار اندک است. همچنین توضیحاتی را که مترجم الزم دیده است، در پاورقی ها با ذکر نشان -م. مشخص کرده است. لوح فشرده ای نیز همراه کتاب عرضه شده است که حاوی نسخه ی پی دی اِف کتاب و

کدهای مندرج در آن است. سپاسگزار خواهیم بود اگر نظرات و انتقادات خود را درباره این کتاب به آدرس پست الکترونیکی

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

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

غالمرضا صابری تبریزی[email protected] http://www.gstsoftware.blogfa.com

مقدمه مترجم

Page 6: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی
Page 7: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

مقدمه نویسندگان

مقدمه ویرایش دوموقتی ویرایش اول این کتاب به چاپ می رسید، برگزاری دوره های برنامه نویسی شبکه در دانشگاه ها رواج چندانی نداشت. حال باور رواج این چنینی این دوره ها و پذیرفته شدن فواید آموزشی آن، در اگرچه است. دشوار برایمان شده، پررنگ اینقدر روزمره مان زندگی در اینترنت نقش زمانی که اینترنت را به امکان دستیابی نیز وجود دارند که برنامه نویسی دیگری درحال حاضر زبان های C فراهم می آورند، هنوز هم عده کثیری به یادگیری چگونگی استفاده از سوکت های ِبرکلی1 در زبانعالقه دارند. API سوکت در دهه هشتاد و در دانشگاه بِرکلی برای برنامه نویسی شبکه در یونیکس BSD ابداع شد- یکی از اولین پروژه هایی که در حال حاضر به آن ها پروژه های اُپن سورس2 )متن

باز( می گویند.اینترنت و API سوکت در دنیایی رشد کردند که خانواده پروتکل های3 مختلفی در آن با هم و -TCP/IP و SNA ،OSI ،DECNet ،AppleTalk ،IPX نظیر پروتکل هایی می پرداختند- رقابت به نوشته کتاب این اول ویرایش وقتی بودند. ایجاد شده آن ها تمامی از پشتیبانی برای سوکت ها می شد پروتکل های کمتری به صورت گسترده مورد استفاده بودند و در حال حاضر این تعداد کمتر هم شده است. درهرحال همان طور که در ویرایش اول پیش بینی می کردیم، API سوکت برای TCP/( آن دسته از افرادی که به طراحی و ساخت برنامه های توزیع شده4 می پردازند که از اینترنت

IP( استفاده می کند هنوز هم حائز اهمیت است. در حال حاضر این API امکان برنامه نویسی برای نسخه جدید پروتکل IPv6( IP( را که تقریبا تمامی سکو5های رایج از آن پشتیبانی می کنند نیز فراهم

آورده است.

مخاطبانمخاطبان این کتاب به دو دسته کلي تقسیم مي شوند: دانشجویاني که در حال گذراندن واحدهاي مقدماتي شبکه هاي کامپیوتري6 به همراه اصول برنامه نویسي مربوط به آن هستند و پژوهشگراني

که به نوشتن برنامه هایي تمایل دارند که از طریق اینترنت ارتباط برقرار مي کنند.

1. Berkley Sockets2. Open Source3. Protocol Families4. Distributed5. Platform6.Computer Networks

Page 8: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

به یاد داشته باشید که مطالعه این کتاب به تنهایي شما را به یک برنامه نویس خبره در زمینه شبکه تبدیل نخواهد کرد. هدف این کتاب فراهم آوردن مقدمه اي است تا شما را قادر سازد در این

زمینه تجربه و دانش اولیه اي کسب کنید تا بدین سان بتوانید یادگیري خود را ادامه دهید.

پیش نیازهادر این کتاب فرض کرده ایم شما با اصول اولیه برنامه نویسي با استفاده از زبان C و سیستم هاي انواع تبدیل و اشاره گرها2 مفهوم که گذاشته ایم این بر را بنا دارید. آشنایي یونیکس1 بر مبتني داده اي3 را می شناسید و آشنایي مختصري با نمایش داده ها به صورت دودویي4 دارید. برخي از مثال ها باید در قالب فایل هایي به صورت جداگانه کامپایل شوند، فرض کرده ایم شما توانایي انجام

این را نیز دارید.به عالوه، باید با مفهوم فرآیند،5 فضاي آدرس،6 آرگومان هاي خط فرمان،7 مختوم کردن8 برنامه ها و ورودي/خروجي با استفاده از فایل در سیستم هاي مبتني بر یونیکس نیز آشنایي داشته

باشید.

سکوی مورد استفاده و قابلیت حمل9 کدهای مثالمثال های بررسی شده در این کتاب مبتنی بر یونیکس هستند. در زمان نوشتن کتاب چندین نفر از ما خواستند تا کدهای مبتنی بر ویندوز را نیز در کتاب درج کنیم. متاسفانه این امر به دالیلی نظیر

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

1.Unix2.Pointers3.Type Casting4. Binary5. Process6. Address Space7. Command-line argument8. Termination9. Portability

Page 9: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

http://www.mkp.com/socket دریافت کنید. توجه داشته را می توانید از وب سایت کتاب به آدرس باشید که تمامی مثال های موجود را می توانید با اندکی تغییرات با استفاده از کتابخانه Cygwin1 که

به صورت آنالین موجود است در ویندوز نیز اجرا کنید.اکثر به وسیله C زبان از نسخه این کرده ایم. استفاده C99 استاندارد از ویراست این در کامپایلرها پشتیبانی می شود و امکانات بسیاری را برای افزایش خوانایی کد فراهم آورده است- مانند: توضیحات تک خطی، انواع عددی صحیح با طول ثابت، امکان تعریف متغیرها در هر مکانی

از بالک و... .ما در کدهایمان از اضافات "Basic Socket Interface Extensions for IPv6" استفاده کرده ایم. رابط این به ما کدهای وابستگی دلیل به است. نام2 سیستم جدید رابط اضافات این از یکی

)getaddrinfo( ممکن است کدها یمان در برخی سکوهای قدیمی تر اجرا نشوند.تمامی کدهای موجود در سیستم های مبتنی بر یونیکس و مکینتاش3 تست شده اند )و باید بتوانید بدون هیچ گونه تغییری آنها را کامپایل و اجرا کنید(. با این حال متاسفانه مکان قرار گیری فایل های سرآیند )h.( و برخی کتابخانه ها در تمامی سیستم ها استاندارد نیست و ممکن است برای برخی عالوه به باشید. داشته نیاز تغییر اندکی به استفاده تان مورد سکوی در مثال ها اجرای بنابراین سعی کرده ایم از سکویی به سکوی دیگر متفاوت اند؛ نیز تنظیمات مربوط به سوکت از به تنظیمات مختص از اطالع برای دارند. تمامی سکوها وجود در که کنیم بررسی را تنظیماتی سکوی مورد استفاده تان می توانید به صفحات راهنمای آن سکو )منظور همان صفحات man است. برای اطالعات بیشتر درباره این صفحات می توانید از دستور man man استفاده کنید یا در اینترنت

جستجو نمایید( مراجعه کنید.در پایان باید یادآور شویم که کدهای موجود برای اهداف آموزشی نوشته شده اند و برای

حفظ ساد گی دارای کیفیت و پارامترهای کدهای تجاری نیستند.

مایکل ِجی.داناهوکِنِث اِل.کالورت

1. مجموع��ه ای از ابزاره��ای نرم افزاری آزاد اس��ت که به نس��خه های متفاوت از مایکروس��افت ویندوز این ام��کان را می دهد که مانند سیستم عامل یونیکس عمل نمایند-م.

2. Name System3. MAC OS

Page 10: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

فهرست مطالب

Page 11: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

فصل اول: سرآغاز16 ........................................................................................ 1-1 شبکه ها، بسته ها و پروتکل ها20 ........................................................................................................................... 1-2 آدرس ها20 .......................................................................................... IP 1-2-1 نوشتن آدرس هاي 21 ..................................................................................IP 1-2-2 استفاده از هر دو نسخه 1-2-3 شماره هاي درگاه.................................................................................................. 2223 .................................................................................................. 1-2-4 آدرس هاي خاص24 ................................................................................................................................. 1-3 نام ها25 ....................................................................................... 1-4 مشتري ها و سرویس دهنده ها26 ............................................................................................................... 1-5 سوکت چیست؟28 .................................................................................................................................... تمرین ها

TCP فصل دوم: مبانی سوکت های30 .......................................................................................TCP و IPv4 2-1 مشتري مبتني بر38 ........................................................................... IPv4 و TCP 2-2 سرویس دهنده مبتنی بر2-3 ایجاد و نابودکردن سوکت ها......................................................................................... 4546 ................................................................................................ 2-4 مشخص کردن آدرس ها47 ...................................................................................................... 2-4-1 آدرس هاي عام47 .................................................................................................... IPv4 2-4-2 آدرس هاي 48 .................................................................................................... IPv6 2-4-3 آدرس هاي 2-4-4 ذخیره سازي آدرس ها به صورت عام................................................................ 49 2-4-5 تبدیل آدرس ها به قالب های دودویي و رشته اي................................................ 50 2-4-6 به دست آوردن آدرس هاي مرتبط با یک سوکت.............................................. 512-5 متصل کردن سوکت....................................................................................................... 5252 ................................................................................................ 2-6 بایند شدن به یک آدرس54 ....................................................................................... 2-7 رسیدگي به ارتباطات ورودي56 ................................................................................................. 2-8 ارسال و دریافت داده ها

فهرست مطالب

Page 12: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

12

C در TCP/IP برنامه نویسی سوکت های

57 ...............................................................................................................IPv6 2-9 استفاده از60 .................................................................................................................................... تمرین ها

فصل سوم: نام ها و خانواده های آدرس3-1 نگاشت نام ها به اعداد..................................................................................................... 6465 .................................................................................... 3-1-1 دسترسي به سرویس نام 3-1-2 جزئیات................................................................................................................... 7173 ................................................................................................ 3-2 کدهاي مستقل از آدرس75 .................................................................................................. 3-2-1 مشتري TCP عام 3-2-2 سرویس دهنده TCP عام....................................................................................... 7882 ...................................................................................... IPv6 و IPv4 3-2-3 تعامل میان 83 ....................................................................................... 3-3 به دست آوردن نام ها از اعداد85 .................................................................................................................................... تمرین ها

UDP فصل چهارم: سوکت های88 .................................................................................................................... UDP 4-1مشتري93 ....................................................................................................... UDP 4-2 سرویس دهنده97 ............................................UDP 4-3 ارسال و دریافت داده ها با استفاده از سوکت هاي99 .................................................................................... UDP 4-4 متصل نمودن سوکت هاي100 .................................................................................................................................. تمرین ها

فصل پنجم: ارسال و دریافت داده ها102 ................................................................................................. 5-1 کدگذاري اعداد صحیح 5-1-1 طول اعداد صحیح............................................................................................... 103 5-1-2 چینش بایت.......................................................................................................... 106 5-1-3 اعداد عالمت دار و توسعه عالمت...................................................................... 107 5-1-4 کدگذاري اعداد صحیح........................................................................................ 109 5-1-5 استفاده از سوکت های TCP در قالب جریان های فایل.................................... 113

Page 13: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

13

116 ............................................................................................................. 5-1-6 ساختارها120 ................................................................................................. 5-1-7 رشته ها و متن ها123 ....................................................................................... 5-1-8 کدگذاري مقادیر بولین125 .............................................................................. 5-2 ساخت، فریم بندي و تجزیه پیام ها 5-2-1 فریم بندي.............................................................................................................. 134 5-2-2 کدگذاري مبتني بر متن....................................................................................... 142 5-2-3 کدگذاري دودویي پیام ها.................................................................................... 145148 ..................................................................................................... 5-2-4 کامپایل برنامه5-3 نتیجه گیري..................................................................................................................... 148148 .................................................................................................................................. تمرین ها

فصل ششم: مباحث پیشرفته6-1 تنظیمات سوکت............................................................................................................. 151155 ....................................................................................................................... 6-2 سیگنال ها6-3 ورودي و خروجي غیرقابل انسداد............................................................................. 160 6-3-1 سوکت هاي غیرقابل انسداد................................................................................ 161163 ................................................................................... 6-3-2 ورودي/خروجي ناهمگام168 ............................................................................................................ 6-3-3 تایم اوت ها6-4 چند وظیفگي................................................................................................................... 174 6-4-1 یک فرآیند به ازاي هر مشتري............................................................................ 174 6-4-2 یک نخ به ازاي هر مشتري................................................................................. 183 6-4-3 چندوظیفگي محدود............................................................................................. 1876-5 تسهیم............................................................................................................................. 189195 ................................................................................................................ 6-6 چندین گیرنده 6-6-1 پخش همگانی....................................................................................................... 197201 ............................................................................................................ 6-6-2 چندپخشی208 ................................................................... 6-6-3 پخش همگانی در مقابل چندپخشی209 .................................................................................................................................. تمرین ها

Page 14: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

14

C در TCP/IP برنامه نویسی سوکت های

فصل‌1

سرآغازفصل هفتم: سازوکار درونی

214 ............................................................................................. TCP 7-1 بافر کردن داده ها و218 ................................................................................................................. 7-2 خطر بن بست220 ............................................................................................................................ 7-3 کارایی221 ................................................................................... TCP 7-4 چرخه زندگی سوکت های 7-4-1 اتصال................................................................................................................... 221227 ........................................................................................... TCP 7-4-2 قطع یک ارتباط 232 ............................................................................................................................. 7-5 تفکیک234 .................................................................................................................................. تمرین هامنابع.................................................................................................................................................... 235

Page 15: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

امروزه مردم براي تماس هاي تلفني، تماشاي تلویزیون، چت،1 بازي با سایرین و خرید تقریبًا هر بر قابل دسترس موجود کامپیوترهاي تعداد تخمین استفاده مي کنند. کامپیوترها از کاالیی، نوع روي اینترنت مشکل است، اما مي توانیم به جرئت بگوییم این تعداد به سرعت در حال رشد است و در مدت اندکي به میلیون ها رایانه خواهد رسید. به عالوه همه روزه برنامه هاي جدیدي ایجاد مي شوند. با نیاز روزافزون به گسترش پهناي باند2 و دسترسي، اینترنت در آینده نزدیک توسعة

بیشتری خواهد یافت.کتاب این هدف مي کند؟ برقرار ارتباط شبکه در دیگر برنامه اي با برنامه یک چگونه اما قراردادن شما در مسیر یافتن پاسخ این سؤال با استفاده از زبان برنامه نویسي C است. براي مدت زماني طوالني، C زبان منتخب پیاده سازي نرم افزار هایی بوده است که با استفاده از شبکه با یکدیگر 3 که با نام سوکت4 شناخته مي شود در ابتدا با استفاده از زبان

API ارتباط برقرار می کردند. در واقعC پیاده سازي شده است.

پیش از پرداختن به جزئیات مربوط به سوکت ها و چگونگی برنامه نویسی با استفاده از آن ها، بررسي کلیات شبکه ها و پروتکل ها خالی از لطف نیست. در اینجا هدفمان آموزش چگونگي کارکرد

1. Instant Messaging2. Bandwidth3. Application Programming Interface4. Socket

فصل‌1

سرآغاز

Page 16: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

16

C در TCP/IP برنامه نویسی سوکت های

TCP/IP یا شبکه ها نیست )منابع بسیار خوبي در این زمینه وجود دارند ]1,3,10,15,17[(، بلکه هدف

اصلي مان، بررسي برخی از مفاهیم پایه اي و اصطالحات1 مرتبط است.

1-1 شبکه ها، بسته ها2 و پروتکل ها3هر شبکه کامپیوتري از تعدادي ماشین تشکیل شده است که به وسیله کانال هاي ارتباطي به یکدیگر میزبان ها می شوند. تقسیم مسیریاب ها5 و میزبان ها4 گروه دو به ماشین ها این شده اند. متصل کامپیوترهایي هستند که برنامه هاي کاربردي نظیر مرورگر وب6 یا برنامه های به اشتراک گذاري واقعي "کاربران" اجرا می شوند میزبان ها که روي کاربردي برنامه هاي مي کنند. اجرا را فایل ها شبکه هستند. مسیریاب ها )که به آن ها دروازه7 نیز مي گویند( ماشین هایي هستند که وظیفه ارسال است ممکن نیز مسیریاب ها دارند. عهده بر را دیگر کانالي به ارتباطي8 کانال یک از اطالعات امکان حمل ارتباطي از کانال این برنامه ها کاربردي نیستند. منظور اما برنامه هایي را اجرا کنند دنباله ای از بایت ها از ماشیني به ماشین دیگر است، بدین منظور می توان از تکنولوژی های مبتنی

بر سیم9 یا بي سیم10 استفاده کرد.تمامي به میزبان یک مستقیم اتصال که برخوردارند چرا به سزایي اهمیت از مسیریاب ها میزبان هاي دیگر ممکن نیست. در عوض تعدادي میزبان به یک مسیریاب متصل مي شوند که خود به مسیریاب هاي دیگر متصل است. این روند ادامه دارد و با استفاده از آن شبکه شکل مي گیرد. با استفاده از این روش هر ماشین می تواند با حداقل تعداد کانال هاي ارتباطی ممکن )عمومًا یک کانال( به شبکه متصل شود. با این حال برنامه هایي که به تبادل اطالعات11با استفاده از شبکه ها

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

1. Terminology2. Packets3. Protocols4. Hosts5. Routers6. Web Browser7. Gateway8. Communication Channel9. Wired10. Wireless11. Information

Page 17: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

17

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

مسیریاب ها از چنین اطالعات کنترلي براي بررسي چگونگي مسیریابي هر بسته استفاده مي کنند.پروتکل قراردادي است که نوع بسته های مبادله شده میان برنامه ها )منظور برنامه هایی است را مشخص می کند. در واقع که به وسیلة شبکه به مبادله اطالعات می پردازند( و مفهوم هر بسته پروتکل ساختار بسته ها - به عنوان مثال، مکان قرارگیري اطالعات مربوط به گیرنده بسته و طول آن- و چگونگي تفسیر هر بسته را نیز مشخص مي کند. عمومًا هر پروتکل برای انجام کاری بخصوص انتقال اشیاي ابرمتن بین سرویس دهنده ها و برای 2 HTTP می شود. برای مثال، پروتکل طراحی

مرورگرهاي وب طراحی شده است که این اشیاء را در اختیار کاربر قرار می دهند. پیاده سازي یک شبکه مفید نیازمند رسیدگی به مسائل مختلفی است. به منظور مدیریت بهتر و ماژوالر3 نگاه داشتن این مسائل از پروتکل های متفاوتی استفاده شده است. TCP/IP یکي از این مجموعه راه حل ها است که گاهي به آن"مجموعه پروتکل4" مي گویند. TCP/IP مجموعه پروتکل هایي است که در اینترنت استفاده مي شوند، البته مي توان از آن ها در شبکه هاي خصوصي مستقل5 نیز استفاده کرد. در ادامه کتاب، هر گاه که درباره شبکه صحبت مي کنیم، منظورمان شبکه هایی است که از TCP/IP استفاده مي کنند. پروتکل هاي اصلي این مجموعه شامل پروتکل اینترنت )IP(6، پروتکل

کنترل انتقال )TCP(7 و پروتکل داده گرام کاربر )UDP(8 هستند.TCP/IP و دسته بندي پروتکل ها به صورت الیه اي براي یادگیري آن ها بسیار رایج و مفید است. ارتباط میان بدین شکل سازماندهي شده اند. شکل 1-1 تمامي مجموعه پروتکل هاي دیگر تقریبًا از داده ها جریان همراه به مسیریاب ها و میزبان ها در را سوکت API و برنامه ها پروتکل ها، برنامه اي به برنامه دیگر )با استفاده از TCP( نشان مي دهد. جعبه هایي که با TCP و IP عنوان گذاري شده اند پیاده سازي این پروتکل ها را نشان مي دهند. چنین پیاده سازي هایي در سیستم عامل میزبان مقیم هستند. برنامه هاي کاربردي که از طریق API سوکت به سرویس هایي دسترسي دارند که به

1. Control Information2. Hypertext Transfer Protocol3. Modular4. Protocol Suite5. Standalone Private Networks6. Internet Protocol7. Transfer Control Protocol8. User Datagram Protocol

فصل اول/ سرآغاز

Page 18: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

18

C در TCP/IP برنامه نویسی سوکت های

وسیله TCP و UDP فراهم آورده شده اند با خط چین مشخص شده اند. پیکان ها جهت جریان داده را مشخص مي کنند.

TCP/IP شکل1-1: یک شبکه

در TCP/IP کانال های ارتباطي1 اصلي در پایین ترین الیه قرار دارند. برای مثال، در ارتباطات اترنت2 یا مودم هاي Dial Up: این کانال ها به وسیله الیه شبکه3 که وظیفه ارسال بسته ها را به مقصد بر عهده دارد )برای مثال: اعمالي که مسیریاب ها انجام مي دهند( مورد استفاده قرار مي گیرد. تنها

پروتکل الیه شبکه در TCP/IP پروتکل اینترنت )IP( است.به شبکه در بسته هر مي آورد. فراهم را داده گرام4 بر مبتنی سرویسی اینترنت پروتکل از استفاده با که یا بسته هایي نامه ها مانند داده مي شود، درست کنترل و تحویل صورت مجزا پست ارسال مي شوند. بدین دلیل هر بسته IP باید حاوي آدرس گیرنده باشد، دقیقًا مانند بسته هاي پستي که باید حاوي آدرس گیرنده باشند )در ادامه درباره آدرس ها بیشتر صحبت خواهیم کرد(. IP پروتکلي کوشا5 است. یعني IP ،اگرچه اکثر کمپاني هاي انتقال، تحویل بسته را تضمین مي کنندسعي مي کند هر بسته را تحویل دهد، اما ممکن است بسته ها گم شوند یا به ترتیب ارسال دریافت

نشوند یا دوبار به مقصد برسند.

1. Communication Channel2. Ethernet3. Network Layer

5. Best-Effort4. به یک بسته و یا واحد اطالعاتی که حاوی اطالعات الزم برای تشخیص مقصد باشد اصطالحًا داده گرام می گویند )Datagram(. –م-

Page 19: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

19

انتخاب میان دو پروتکل را فراهم امکان این الیه نام دارد. انتقال1 IP، الیه الیه باالیي الیه مي آورد: TCP و UDP. هر یک از این دو پروتکل از سرویس ارائه شده به وسیله الیه IP استفاده مي کنند، اما عمل انتقال را به روش هاي متفاوتي انجام مي دهند؛ بدین سان روش هاي انتقال متفاوتي روش ها این از یکی از نیازشان برحسب تا می گیرد قرار کاربردی الیه پروتکل های اختیار در بسته ها IP که داریم یاد به آدرس دهي. دارند: مشترک کارایي یک UDP و TCP کنند. استفاده را به میزبان ها تحویل مي دهد؛ اما براي تحویل بسته ها به برنامه هاي کاربردي در حال اجرا بر روي هر میزبان متصل به شبکه به مکانیزمی دقیق تر نیاز داریم2. هر دو پروتکل TCP و UDP از آدرس هایی به نام "شماره درگاه3" برای ایجاد تمایز بین برنامه های مختلف موجود بر روی هر میزبان استفاده می کنند. این دو پروتکل را اصطالحًا پروتکل هاي انتقال "انتها به انتها4" مي نامند، IP چرا که این پروتکل ها داده ها را از برنامه اي به برنامه دیگر انتقال مي دهند )در حالي که پروتکل

داده ها را از میزباني به میزبان دیگر منتقل مي کند(.TCP به منظور تشخیص و جبران خطاهایی نظیر گم شدن بسته ها، دریافت بسته های تکراری

و سایر خطاهایی که ممکن است در کانال انتقال فراهم آورده شده به وسیلة IP رخ دهند طراحي شده است. پروتکل TCP کانالی قابل اعتماد5 و مبتنی بر جریان بایت ها6 را فراهم مي آورد؛ به دلیل قابل اعتماد بودن سرویس فراهم شده به وسیلة این پروتکل برنامه های کاربردی استفاده کننده از آن نیازی به رسیدگی به خطاهای واقع در زمان انتقال ندارند. این پروتکل پروتکلي ارتباط گرا7 است، یعنی پیش از استفاده از TCP براي مخابره داده ها، دو برنامه ابتدا باید یک ارتباط 8TCP برقرار کنند که خود شامل تکمیل ارسال یک پیام دست تکانی9 میان پیاده سازي 10TCP دو کامپیوتر مرتبط است. فایل ها از استفاده با مشابه ورودي/خروجي11 بسیاري جهات از TCP از استفاده است. در واقع، از نظر منطقي، استفاده از TCP مانند استفاده دو برنامه از فایلی است که به وسیلة یکی

1. Transport Layer

2. منظور نویسنده از این جمله این است که بر روی هر میزبان ممکن است ده ها یا صدها برنامه در حال اجرا باشد، اما پروتکل IP تنها امکان تحویل بسته ها به یک میزبان خاص را فراهم می آورد نه امکان تحویل بسته ها به برنامه ای خاص که بر روی میزبان در حال

اجرا است. –م-3. Port Number4. End to end5. Reliable6. Byte-stream7. Connectio-Oriented8. Connection9. Handshake10. Implementation11. I/O

فصل اول/ سرآغاز

Page 20: C رد TCP/IP یاهتکوس یسیونهمانرب - نشر دانشگاهی کیانkianpub.com/sites/default/files/pdf/1-20_1.pdfهنیمز رد هربخ سیونهمانرب کی

20

C در TCP/IP برنامه نویسی سوکت های

نوشته و به وسیلة دیگری خوانده می شود. برخالف TCP، پروتکل UDP سعي در جبران خطاهایي نمی کند که به علت ماهیت ذاتی IP رخ مي دهند، بلکه تنها سرویس داده گرام IP را توسعه مي دهد تا به جاي ارتباط میزبان به میزبان بتوان از آن براي ارتباطات بین برنامه ها استفاده کرد. بنابراین، برنامه هایي که از UDP استفاده مي کنند، باید آمادگي مقابله با از دست رفتن بسته ها، تغییر ترتیب

آن ها و ... را داشته باشند.

1-2 آدرس هاآغاز از پیش کنید. درج بسته به صورت خوانا روی را گیرنده آدرس باید نامه ، از پست پیش به دیگر برنامه ای با بتواند برنامه اي این که از پیش همین طور بگیرید. باید شماره تلفني مکالمه TCP/IP براي شناسایي مخابره داده ها بپردازد باید به نحوی مقصد داده ها را مشخص کند. در IP هر برنامه به آدرسی دوبخشی نیاز داریم. بخش اول حاوی آدرس اینترنتي است که به وسیلةمورد استفاده قرار مي گیرد و بخش دوم حاوی شماره درگاه. شماره درگاه به وسیلة پروتکل های به اعداد دودویي1 هستند و بسته اینترنتي UDP(. آدرس هاي یا TCP( به کار می روند انتقال الیه استاندارد پروتکل IP مورد استفاده دو نسخة2 متفاوت دارند. رایج ترین نسخه، نسخة IPv4( 4, ]ر12[( و دیگري نسخه IPv6( 6, ]ر5[( است که به تازگي پا به عرصه نهاده است. IPهاي نسخة 4، 32 بیت طول دارند. با این تعداد بیت مي توان 4 بیلیون3 کامپیوتر مجزا را شناسایي کرد؛ اما امروزه این رقم براي اینترنت کفایت نمي کند. )ممکن است این تعداد زیاد به نظر برسد، اما به دلیل شیوه اي که به منظور تخصیص این آدرس ها مورد استفاده قرار گرفته است، تعداد بسیاري از این آدرس ها هدر رفته اند. بیش از نیمي از آدرس هاي IPv4 هدر رفته اند(. به همین دلیل IPv6 ایجاد شد. آدرس هاي

IPv6، 128 بیت طول دارند.

IP 1-2-1 نوشتن آدرس هايبراي نمایش آدرس هاي IP به گونه اي که براي انسان قابل فهم باشد )در مقابل استفاده از آن ها در برنامه ها(، قواعد متفاوتي در IPv4 و IPv6 مورد استفاده قرار مي گیرند. آدرس هاي IPv4 به صورت گروهي چهارتایی از اعداد صحیح که با نقطه ).( از هم جدا شده اند )به عنوان مثال 10.1.2.3( نوشته مي شوند4. چهار قسمت موجود در این رشته، محتویات چهار بایت آدرس IP را مشخص مي کنند،

بنابراین، هر بخش حاوی عددی است در بازة صفر تا 255.1. Binary Number2. Version3. Billion

4. به این روش نمایش اصطالحًا Dotted-quad می گویند.