در این قسمت به معرفی انواع زمانسنج های استفاده شده توسط پروتکل TCP پرداخته میشود.
زمان سنج ها در پروتکل tcp
اولین زمان سنج، زمان سنج ارسال مجدد (Retransmission Time) است. پس از برقراری یک ارتباط وقتی بسته ای برای پروسه ی مقصد ارسال میشود، ضمن نگهداری آن در یک بافر برای آن یک زمان سنج تنظیم و فعال میشود و اگر در مهلت مقرر تصدیق دریافت آن به فرستنده نرسید، آن بسته مجددا برای مقصد ارسال میشود. این زمانسنج که RT نامیده میشود با ارسال هر بسته با یک مقدار مشخص مقداردهی میشود و شروع به شمارش معکوس میکند.
در صورتی که مقدار زمانسنج به صفر برسد ولی Ack بازنگردد رخداد انقضای ارسال مجدد (Retransmition Timeout Event) حادث میشود که نرم افزار TCP را وادار به ارسال مجدد بسته میکند و مراحل قبلی تکرار میشوند (در ابتدا این زمانسنج با یک مقدار پیشفرض مقداردهی میشود). با توجه به تفاوت بین شبکه های مختلف (مثلاً شبکه های WAN که فاصله ی بین سیستم های انتهایی در آنها زیاد است و شبکه های LAN که فاصله ی سیستم های انتهایی در آنها کمتر است)، زمانسنج مورد نظر به صورت پویا تنظیم میگردد. الگوریتم بکاررفته برای تنظیم مقدار این زمانسنج به شرح زیر است:
وقتی یک ارتباط TCP برقرار میشود، یک فضای حافظه به نام EstimatedRTT برای آن در نظر گرفته میشود که به یک مقدار پیش فرض بزرگ مقداردهی میشود (بزرگتر از حداکثر زمان انتظار برای برگشت پیغام ACK در طولانیترین مسیر ممکن).
به ازای هر بسته ی ارسالی یک زمانسنج تنظیم میشود که مدت زمان رفت و برگشت پیغام تصدیق آنرا اندازهگیری میکند. فرض میشود که زمان مورد نظر برای یک بسته به اندازهی SampleRTT اندازگیری شده است.
مقدار EstimatedRTT طبق رابطه ی زیر بروزرسانی میشود:
EstimatedRTT = (1 – α) . EstimatedRTT + α . SampleRTT
شامل یک مقدار بین صفر و یک است که مشخص میکند مقدار قبلی α متغیر RTT با چه وزنی در محاسبه ی مقدار جدید حضور داشته باشد. پیش از تنظیم زمانسنج RT یک عمل محاسباتی دیگر مورد نیاز است. در واقع، آنچه که تاکنون محاسبه شده است فقط یک میانگین از زمان رفت بسته ها و بازگشت پیام تصدیق آنها در طول زمان است. حال لازم است که با توجه به شرایط شبکه و پویایی آن، یک مقدار دیگر به مقدار محاسبه شده اضافه گردد تا مقدار مناسب برای RT بدست بیاید. بدین منظور، یک مقدار انحراف از معیار برای SampleRTT ها به شکل زیر محاسبه میگردد:
|DevRTT = (1 – β) * DevRTT + β * |SampleRTT – EstimatedRTT
در نهایت به این شکل عمل میشود که مقدار انحراف معیار حاصل شده ضرب در عدد ۴ میشود (این عدد بر اساس تجربه و آزمایش بدست آمده است):
RT = TimeoutInterval = EstimatedRTT + 4 * DevRTT
دومین زمان سنج مورد بررسی “زمان سنجKeep-Alive” نامیده میشود. ممکن است طرفین یک ارتباط به هر دلیلی ارسال اطلاعات را موقتاً متوقف کنند و هیچ داده ی مبادله نشود، هرچند که ارتباط TCP فعال و باز است. از طرف دیگر، ممکن است هر کدام از طرفین ارتباط به هر دلیلی مثل خرابی سخت افزار یا نرم افزار، بدون اطلاع، ارتباط را رها کرده باشند. به همین دلیل و به منظور ایجاد تمایز بین این دو رخداد، با اتمام زمانسنج Keep-Alive یک بسته ی TCP خالی از داده برای طرف مقابل ارسال میشود و در صورتی که پیغام دریافت آن بازگشت، نشان دهنده ی آن است که ارتباط TCP فعال و باز است. در غیر این صورت، ارتباط TCP به صورت یکطرفه قطع میشود.
زمان سنج بعدی “زمان سنج Persistence” است. با اعلام مقدار صفر برای بافر در سمت گیرنده ی ارتباط TCP ، فرستنده عملاً متوقف میشود. با استفاده از این بافر، با آزاد شدن فضای بافر در فواصل زمانی منظم یک بسته ی TCP برای طرف مقابل ارسال میشود تا از آخرین وضعیت بافر مطلع گردد. ممکن است پس از بسته شدن یک ارتباط TCP همچنان چند بسته ی آن در شبکه باقی مانده باشند که نیاز به دسترسی به پورت بسته شده دارند.
“زمان سنج Quiet Time” مانع از باز شدن مجدد پورت بسته شده توسط یک برنامه ی کاربردی دیگر شده و از دریافت بسته های معلق در شبکه توسط برنامه ی کاربردی جدید جلوگیری میکند.
در نهایت”زمانسنج Idle “به این منظور استفاده میشود که اگر تلاش برای ارسال یک بسته بیش از حد متعارف انجام شود، ارتباط TCP را به صورت یکطرفه رها کرده و قطع نماید.