انتقال از سرويسهاي مهيا شده توسط لايه شبكه مانند انتخاب بهترين مسير و آدرس دهي منطقي استفاده نموده و ارتباطي End-to-End بين مبدأ و مقصد ايجاد مي كند. اين لايه متشكل از يك سلسله مراتب قرارداد است كه قابل اعتماد و مقرون به صرفه داده ها از ماشين منبع به ماشين مقصد و به صورت مستقل از شبكه فيزيكي را بر عهده دارند. اين لايه با فراهم آوردن

خدمات سازماندهي شده و مطمئن براي برنامه هاي كاربردي در لايه هاي بالاترؤ مشكلات و ناكارآمدي لايه IP را نيز جبران مي نمايد. كاستي هاي مربوط به لايه IP كه بايستي در لايه انتقال پوشانده شوند عبارتند از:
۱- پس از ارسال متوالي بسته هاي داده، در مقصد ممكن است به صورت نامرتب و خارج از ترتيب ارسالشان دريافت شوند.
۲- ممكن است پس از ارسال يك بسته، به علت تأخير در دريافت آن در سمت گيرنده، بسته مجدداً توسط فرستنده ارسال گردد كه اين امر توسط لايه IP قابل تشخيص نيست و در هر بسته در سمت گيرنده به ماشين تحويل مي گردد. بنابراين بسته دوم بايستي توسط لايه انتقال تشخيص و حذف گردد.
۳- برروي هر يك از ماشينهاي واقع در شبكه مي تواند چند برنامه به صورت همزمان يا چند كاربره در حال اجرا باشد و هر كدام از آنها نيز نيازمند ارسال و دريافت بسته هاي داده برروي شبكه باشند. در لايه IP تمايزي بين بسته هاي ارسالي دو برنامه در حال اجرا برروي يك ماشين وجود ندارد.

بنابراين در لايه شبكه بايستي بتوان هر بسته را به پردازة مربوط به خود انتساب داد.
۴- با توجه به امكان متفاوت بودن توان توليد بسته هاي ارسالي در مبدأ و پردازش آنها در مقصد، لذا بايستي برروي سرعت تحويل بسته ها به يك ماشين كنترل صورت بگيرد كه اين كنترل در لايه IP فراهم نيست لذا در لايه انتقال بايستي تضمين نمود كه ماشين گيرنده بسته هاي ارسالي به علت توان پردازش و استفاده از بسته هاي ارسالي و برداشتن آنها از روي شبكه، هيچ بسته ارسالي مربوط به خود را از دست ندهد.
بر اساس موارد مطرح شده در بالا، توابع ارائه شده در لايه انتقال عبارتند از:
– تقسيم بندي داده هاي برنامه هاي كاربردي لايه هاي بالاتر: لايه انتقال توانايي گنجاندن داده

هاي مربوط به برنامه هاي كاربردي مختلف در يك جريان داده متعلق به ماشين را دارد. اين امر توسط اختصاص مشخصه اي به نام شماره پورت براي هر برنامه كاربردي كه به صورت همزمان در حال اجرا با برنامه هاي ديگر برروي يك ماشين است محقق مي گردد كه شرح آن در ادامه بحث ذكر خواهد گرديد.
– ايجاد ارتباط End-to-End بين فرستنده و گيرنده.
بدين مفهوم كه دريافت يك و تنها يك كپي از بسته ارسالي در سمت گيرنده و همچنين مرتب سازي باسته هاي دريافتي بر اساس ترتيب ارسال آنها توسط اين تابع فراهم گردد.
– مهيا نمودن سرويسهاي انتقال از ماشين مبدأ به ماشين مقصد.
– كنترل جريان داده و تضمين قابليت اعتماد داده: لايه انتقال جامعيت داده دريافتي را بوسيله كنترل جريان داده و قادر نمودن كاربر به درخواست انتقال داده بين دو ماشين مبدأ و مقصد، تأمين مي نمايد. كنترل جريان داده مكانيزمي است كه به ميزبانهاي انتقال اجازه مي دهد تا برروي حجم داده هاي ارسال در هر زمان توافق نمايند. براي بدست اوردن آنتقال داده قاغبل اعتماد نيز از يك ارتباط اتصال گرا جهت ايجاد ارتباط بين فرستنده و گيرنده استفاده مي گردد.
كنترل جريان داده: زماني كه لايه انتقال بسته هاي داده خود را ارسال مي نمايند مي تواند جامعيت داده ارسالي را نيز تضمين كند كه يكي از روشهاي آن كنترل جريان ناميده مي شود. كنترل جريان از ارسال داده در سمت گيرنده به گونه اي كه بافرهاي موجود در گيرنده را سرريز نمايدت، جلوگيري مي نمايد. سرريز باعث مي گردد كه قسمتي از داده در سمت گيرنده از دست برود كه اين امر در انتقال داده بسيار خطرناك مي نمايد.

آدرس پورت:
همانگونه كه ذكر گرديد برروي هر ماشين موجود در شبكه مي تواند پروسه هاي همزمان در حال اجرا باشند و هركدام از آنها بخواهد از امكانات شبكه استفاده نمايد. هر پروسه براي تقاضاي برقراري ارتباط با پروسه ديگر برروي شبكه، يك شماره شناساسيي براي خود برمي گزيند كه اين شماره شناسايي تنها در لايه انتقال مفهوم داشته و در لايه IP قابل تشخيص نيست. اين شماره شناسايي را آدرس پورت مي نمايند. در سرآيند بسته اي كه توسط پروتكل انتقال سازماندهي مي شود، آدرس پورت فرستنده و آدرس پورت پروسه گيرنده آن درج مي گردد. يكتا بودن شماره هاي پورت كه به پروسه ها رسميت و هويت يكتا مي بخشد،‌ توسط پروتكل كنترل انتقال به عنوان جزئي از سيستم عامل نظارت خواهد شد. بدين صورت كه سيستم عامل جدولي را نگهداري مي كند كه شماره شناسايي تقاضا دهنده ارتباط در آن وجود دارد. آدرس پورت شماره اي دوبايتي است كه بدين لحاظ مي تواند عددي بين صفر تا ۶۵۶۳۵ باشد باشد كه اين نشاندهنده اين است كه از نظر لايه انتقال حدود ۶۵ هزار پروسه به صورت همزمان مي توانند برروي يكي از ماشينهاي فرستنده يا گيرنده از امكانات شبكه استفاده نمود و يا پروسه هاي ديگر موجود در ميزبانهاي ديگر ارتباط برقرار

نمايند (ابده آل). شماره پورتهاي كمتر از ۲۵۶، پورتهاي معروف نام دارند و براي خدمات استاندارد رزرو گرديده اند. به عنوان مثال هر فرآيندي كه مايل به برقراري اتصال با ميزباني باشد تا فايل را به كمك FTP انتقال دهد، مي تواند به پورت ۲۱ ميزبان مقصد وصل شود و يا پورت ۲۳ كه بريا ارتباط راه دور با سرور (Telnet) مورد استفاده قرار مي گيرد. تركيب آدرس پورت و آدرس IP را كه نشاندهنده يك پروسه خاص در يك ماشين خاص در شبكه است را سوكت مي ناميم. در هنگام ايجاد ارتباط

در سمت گيرنده و نيز در سمت فرستنده، يك سوكت ايجاد مي گردد. در سوكت ايجاد شده در سمت مشتري، آدرس پورت به صورت دلخواه و متغير انتخاب مي گردد و در سمت سرور سوكت ايجاد دشه حاوي آدرس مشخص و شناخته شده اي براي مشتريهاي آن برنامه در حال اجرا است.
در لايه انتقال درپروتكل به نامهاي TCP و UDP تعريف شده اند كه ابتدا پروتكل TCP و سپس UDP را معرفي خواهيم كرد.

پروتكل كنترل Transmission Control Protcol (TCP)
TCP پروتكي اتصالگر و قابل اعتماد است. در يك محيط اتصالگرا، يك ارتباط بين فرستنده و گيرنده قبل از انتقال اطلاعات بين آنها، ايجاد مي نمايد. TCP مسئول شكستن پيامها به قطعات و سپس بازسازي پيام توسط اتصال قطعات در مقصد و نيز ارسال مجدد پيامهايي كه در بين راه به هر علتي از بين مي روند مي باشد. در حقيقت TCP، مداري مجازي بين برنامه هاي كاربردي نهايي ايجاد مي نمايد.
به پروتكلهايي كه قبل از مبادله داده ها سعي در برقراري يك ارتباط و ايجاد هماهنگي قبلي مي نمايند، پروتكلهاي اتصالگرا گويند. همانگونه قبلاً ذكر شد يكي از كاستيهاي لايه IP عدم تضمين در آماده بودن و توانايي دريافت داده ها توسط ماشن مقصد مي باشد، لذا در پروتكل TCP ابتدا يك ارتباط بين فرستنده و گيرنده ايجاد شده و پس از هماهنگي بين مبدأ و مقصد دادده ها ارسال مي گردند. براي مثال فرض كنيد پروسه A تمايل داشته باشد براي پروسه B برروي يك ماشين مشخص، داده هايي را ارسال نمايد، قبل از ارسال داده، ماشن A يك بسته خاص به عنوان درخواست براي ارتباط به آدرس ماشين B مي فرستد و منتظر مي ماند. B درخواست ارتباط را ذيافت و در صورتي كه آماده برقراري ارتباط باشد و يا نتواند درخواست A را برآورده كند، به ماشن A آمادگي و يا عدم آمادگي خود را اعلام مي نمايد. در صورتي كه فرستندة A در مهلت زماني شخص پاسخ مثبت گيرنده B را دريافت نمايد، آنگاه شروع به ارسال داده به گيرنده مي نمايد. در هنگام خاتمه مبادله داده ها نيز فرستنده A اتمام ارسال داده هاي خود را به گيرنده اعلام و منتظر مي ماند و در همين هنگام به دريافت داده هاي ارسالي از طرف B نيز ادامه مي دهد تا آنكه B نيز اعلام ختم ارتباط را به فرستندة A ارسال نمايد.
بنابراين ارسال داده ها به صورت هماهنگ و با اطلاع قبلي انجام مي گيرد. در صورتي كه بهر عللي ازجمله خراب شدن خط ارتباطي ئ يا خاتمة ناهنگام يكي از دو طرف فرستنده يا يگرنده در ارتباط خوشه وارد گردد، پروتكل TCP بوسيله زمان سنجي هاي خاص آن را كشف و مديريت مي نمايد. كاستي ديگر در لايه IP تضمكين به ترتيب رسيدن داده ها و صحت آنهاست. براي برطرف كردن اين نياز پروتكل TCP به روش زير عمل مي نمايد. فرض كنيد پروسه فرستنده A داده هاي مورد نظر خود جهت ارسال را در قالب يك بسته سازماندهي نموده و سرآيند آنرا با شماره ترتيب، ترتيب بندي نموده است. فرستنده A بسته سازماندهي شده را در يك بافر نگهداري مي نمياد و همچنين آنرا جهت ارسال تحويل لايه IP مي دهد. در همين زمان يك زمان سنج را تنظيم مي نمايد و نيز براي

خطايابي در سمت گيرنده كه ۱۶ بيتي كشف خطا را نيز بر اساس داده هاي آن بسته در سرآيند مي گذارد. پس از ارسال بسته، در سمت گيرنده در صورتي كه گيرنده B، بسته ارسالي A را به صورت سالم (با چك كردن كدهاي كشف خطا) دريافت كند، يك پيغام تصديق (Acknowledge) يا به اختصار ACK به فرستنده مي فرستد. اگر فرستنده در زمان مقرر پيغام ACK را دريافت كند، بسته ارسال شده از بافر حذف مي گردد و در صورتي كه به هد عللي ACK توسط فرستنده دريافت نگردد، زمان سنج تنظيم شده Time out گرديده و بسته بافر شده مجدداً ارسال مي

گردد. ترتيب بندي داده ها نيز بوسيله قرار دادن شماره ترتيب براي داده هاتي ارسالي و نرتب سازي بسته هاي دريافتي در مقصد بر اساس شماره ترتيب آن مي باشد. همچنين با استفاده از اين شماره مي توان بسته هايي را كه دوبار ارسال گرديده اند را شناسايي و يكي از آنها را حذف نمود.
به صورت خلاصه، پروتكل TCP براي پروسه هايي كه از استفاده مي نمايد، سرويسهاي زير را تأمين مي نمايد.

– انتقال داده ها به صورت نهري (Stream).
اين پروتكل جريان پيوسته بايتهاي داده را برروي شبكه به صورت نهري منتقل مي نميايد و در اين انتقال، برنامه هاي كاربردي درگير سازماندهي داده ها در بسته هاي ارسالي نيستند.

– قابليت اعتماد:
پروتكل TCP همانگونه كه ذكر گرديد با استفاده از شماره ترتيب (Sequence number) و نيز مكانيزم ACK براي هر بسته و نيز ارسال مجدد بسته هاي از بين رفته، ارتباط مطمئن را جهت ارسال داده فراهم مي نمايد.
– كنترل جريان
در پروتكل TCP، گيرنده در ارسال ACK به فرستنده مقدار اندازه بافر ورودي خود را به فرستنده اطلاع مي دهد درنتيجه فرستنده داده ها را به صورتي كه بافر گيرنده سررسيز نمايد ارسال نمي كند.
– ارسال داده توسط پروسه هاي در حال اجرا به صورت همزمان برروي يك ماشين با استفاده از شماره پورت سوكت.
– ارتباطات منطقي: تركيب اطلاعات سوكت، شماره ترتيب و اندازه پنجره به عنوان ارتباط منطقي شناخته مي شود.
– ارتباط دوطرفه همزمان.
پروتكل TCP جريان داده همزمان را به صورت دوجهته بين فرستنده و گيرنده برقرار مي كند.

قالب بسته TCP:
بسته TCP مشتكل از دو قسمت سرآيند و داده مي شود. سرآيند ۲۰ بايتي بوده كه قالبي ثابت دارد. بعد از اين سرآيند ثابت، گزينه هاي سرايند نيز وجود دارد. پس از گزينه ها، در صورت لزون تا ۶۵۵۱۵ بايت از داده ها وجود دارد. سرايند TCP مي تواند تا ۶۰ بايت باشد. حال فيلدهاي سرآيند TCP را بررسي مي نمائيم.

– شماره اعلام وصول (Ask no). اين فيلد ۳۲ بيتي شماره ترتيب بايتي كه فرستنده بسته منتظر دريافت آن است را تعيين مي كند. بنابراين گيرنده اگر در آخرين بايت با شماره n را دريافت كرد، n+1 را به عنوان شماره اعلام وصول به فرستنده ارسال مي كند.
– طول سرآيند. (HLEN) Header Length: اين فيلد نشادهنده طول سرايند بسته TCP را بر مبناي چهار بايت تعيين مي نمايد.
– بيتهاي رزرو شده به تعداد ۶ عدد كه جهت استفاده در آينده بلااستفاده رها شده اند.
– فيلد آدرس پورت مبدأ (Source port) كه شماره ۱۶ بيتي است كه آدرس پورت پروسة

مبدأ در ارسال بسته توليد شده است.
– فيلد آدرس پورت مقصد (Destination port): اين فيلد نيز شماره ۱۶ بيتي است كه آدرس پورت پروسه مقصد كه در ماشين مقصد بسته ارسالي را تحويل مي گيرد را مشخص مي نمايد.
– فيلد شماره ترتيب: فيلدي ۳۲ بيتي است كه شماره ترتيب آخرين بايتي را كه در فيلد داده از بسته جاري قرار دارد را نشان مي دهد. اين شماره در هنگام برقراري ارتباط به صورت تصادفي بين فرستنده و گيرنده توافق شده و شروع مي گردد.
– فيلد Checksum: اين فيلد ۱۶ بيت بوده و كد كشف خطايي است كه در سمت فرستنده بر اساس داده ارسالي مجاسبه شده و در سمت گيرنده همان محاسبات برروي داده رسيده مجدداً تكرار مي گردد و اگر نتيجه حاصل با مقدار فيلد مذكور يكسان نباشد، تمامي بسته ارسالي از بين برده شده و مجدداً درخواست ارسال آن به فرستنده ارجاع مي گردد.
– فيلد Urgent Pointer: عدد واقع در اين فيلد اشاره گر به موقعيت داده اضطراري واقع در بسته در حال انتقال است. داده هاي اضطراري مي توانند بدون قطع ارتباط، داده هاي اضطراري را كه معمولاً شبيه وقوع وقفه ها در حين اجراي برنامه كاربردي است را به گيرنده ارسال كنند و در سكت گيرنده اين داده ها از اولويت پردازشي بالاتري برخوردار خواهند بود.
– فيلد Options: سرايند مي تواند حداكثر ۴۰ بايت اطلاعات دلخواه را در اين بخش جاي دهد. براي آنكه طول بسته ضريبي از ۴ باقي بماند از اين فيلد با كدهاي بي ارزش استفاده مي گردد. ماكزيمم اندازه سگمنت (MSS)TCP برابر است با بيشترين حجم داده اي است كه TCP به گيرنده ارسال خواهد نمود. در هنگام ايجاد يك ارتباط TCP هر يك از طرفين ارتباط MSS دريافت داده خود را به طرف مقابل اعلام مي نمايند در غير اين صورت عدد پيش فرض ۵۳۶ بايت به عنوان پيش فرض MSS استفاده مي گردد. بنابراين با احتساب ۲۰ بايت سرآيند TCP و ۲۰ بايت به عنوان سرايند IP، در ديتاگرام IP، به صورت پيش فرض ۵۷۶ بايت قرار مي گيرد. مشخصه ديگري كه مي تواند در فيلد Option قرار گيرد، Time stamp است كه توسط فرستنده در ارسال سگمنت و جهت محاسبه round Trip time كه مدت زمان ارسال سگمنت، دريافت در سمت گيرنده و سپس دريافت ACK گيرنده در سمت فرستنده است، مشخص و در آن فيلد قرار مي گيرد.
– فيلد اندازه پنجره (Windows Size): اين فيلد نشاندهنده فضاي خالي بافر گيرنده مي باشد. گيرنده توسط اين فيلد به فرستنده حداكثر اندازة مقدار داده اي را كه فرستنده مجاز است پس از بايت با شماره ترتيب ذكر شده در اعلام وصول (ACK) به گيرنده ارسال نمايد، گوشزد م

 

ي نمايد. اگر اين مقدار صفر باشد نشاندهنده پر بودن بافر گيرنده است.
– بيتهاي پرحجم (Flag): شش بيت در بسته TCP به عنوان بيتهاي پرحجم عمل مي نمايند كه عبارتند از
• بيت URG: در صورت يك بودن اين بيت، فيلد اشاره گر اضطراري بايستي در سمت گيرنده مورد توجه قرار گيرد چرا كه داراي مقداري قابل استناد و معتبر است و صفر بودن اين بيت نشاندهنده آن است كه گيرنده بايستي از فيلد اشاره گر اضطراري (urgent pointer) چشم پوشي نمايد چرا كه آن فيلد شامل مقدار معتبر و قابل استناد نيست.
• بيت syn: كه در برقراري ارتباط بين فرستنده و گيرنده نقش دارد كه ذكر خواهد گرديد.
• بيت ACK: يك بودن اين بيت نشاندهنده معتبر بودن مقدار فيلد شماره اعلام وصل مي باشد. همچنين از اين فيلد در هنگام برقراري ارتباط TCP نيز استفاده مي گردد. بدين صورت كه يك شدن بيت syn و صفر بودن بيت ACK و ارسال آن به طرف مقابل به معناي درخواست برقراري ارتباط است. در سمت گيرنده، در صورتي كه گيرنده متمايل به برقراري ارتباط با فرستنده باشد، بسته اي را ارسال خواهد نمود كه در آن بيت syn برابر يك و نيز بيت ACK برابر يك خواهد بود كه نشاندهنده پذيرش يك ارتباط است كه بر فرستنده ارسال خواهد گرديد.
• بيت (push) PSH: يك بودن اين بيت نشاندهنده اين است كه فرستندة اطلاعات از گيرنده تقاضا مي كند كه داده هاي موجود را بافر ننماليد بلكه آنرا تحويل برنامة كاربردي خود بدهد.
• بيت RST يك شدن اين بيت نشاندهنده قطع ارتباط توسط يك طرف به صورت يك طرفه و ناتمام خواهد بود و نيز اين بيت مي تواند به عنوان نشاندهنده عدم پذيرش درخوسات برقراري ارتباط باشد.
• بيت FIN: هر يك از طرفين ارتباط. پس از پايان داده هاي خود بيت FIN را يك مي كند و ارسال بيته حاوي بيت FIN يم شده نشاندهنده قطع ارسال اطلاعات توسط يك طرف است و پس از آن ارسال كننده اين بسته به ارتباط گوش داده و داده هاي ارسالي طرف مقابل خود را تا خاتمه داده هاي ارسالي آن، دريافت مي نمايد تا زماني كه طرف مقابل نيز پس از پايان اطلاعات ارسالي خود در بسته آخر بين FIN را يك نمايد و بدين ترتيب ارتباط به صورت هماهنگ و دوطرفه قطع خواهد گرديد.

برقراري ارتباط TCP: مي نمايند. اين مراحل عبارتند از:
۱- مرحله برقراري ارتباط
۲- مرحله انتقال داده ها