جریان ترافیک، سوکت و بسته چه نقشی در شبکه‌های کامپیوتری دارند؟
زمانی که درباره انتقال بسته‌های اینترنتی در شبکه‌های محلی یا اینترنت صحبت می‌کنیم، در اغلب موارد به پروتکل‌ها و ابزارهایی اشاره داریم که برای انتقال بسته‌ها استفاده می‌شوند. با این‌حال نکته‌ای که مهم است در مورد آن اطلاع داشته باشیم، مولفه‌ای است که نقش اصلی در انتقال اطلاعات را بر عهده دارد. این مولفه کلیدی سوکت نام دارد.

1606683296_1_0.gif

بسته شبکه چیست؟

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

ساختار بسته

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

قاب‌بندی بسته

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

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

شناسایی خطا

محاسبه کردن checksum و کد افزونگی چرخشی روی اطلاعات یک بسته، نتیجه‌ای موثرتر و قابل اعتمادتر نسبت به بررسی خطاها با استفاده از بیت Parity کاراکتر به کاراکتر دارد. دنباله یک بسته به‌طور معمول حاوی اطلاعاتی برای تشخیص دادن خطاهایی است که ممکن است در هنگام ارسال بسته بر روی شبکه اتفاق بیفتند.

آدرس‌دهی میزبان

شبکه‌های پیشرفته به‌طور معمول سه یا بیشتر کامپیوتر را به هم متصل می‌کنند. در چنین شبکه‌هایی، قسمت سرآیند بسته، حاوی اطلاعات آدرس‌دهی (نظیر آدرس مبدا، آدرس مقصد و ...) است که به کمک آن‌ها یک بسته توسط گیرنده صحیح آن دریافت می‌شود. در شبکه‌های پیچیده که از چندین گره مسیریابی و سوئیچینگ تشکیل شده‌اند (همانند آرپانت و اینترنت)، بسته‌هایی که از یک رایانه به رایانه‌ای دیگر ارسال می‌شوند، ممکن است هر کدام مسیر متفاوتی را برای رسیدن به همان مقصد طی کنند. این فناوری راهگزینی بسته نامیده می‌شود. بسته‌های آی‌پی ترکیبی از یک بخش سرآیند و یک بخش بسته (داده‌های کاربری) هستند. سرآیند این بسته‌ها شامل ۴ بیت که نسخه بسته را مشخص می‌کند. یا نسخه ۴ یا نسخه ۶، ۴ بیت که طول سرایند اینترنت را دربرمی‌گیرد، که طول بسته به صورت مضربی از ۴ است (مثلاً ۵ به معنی ۲۰ بایت است)، ۸ بیت که دربرگیرنده نوع سرویس است که البته به آن کیفیت خدمات (به انگلیسی: Quality of Service) هم می‌گویند. این فیلد اولویت بسته را مشخص می‌کند، ۱۶ بیت که دربرگیرنده طول بسته بر حسب بایت است، ۱۶ بیت که دربرگیرنده تگ شناسایی است که برای بازسازی بسته از چند تکه است، ۳ بیت. اولین بیت یک صفر است، دومین بیت پرچمی است که می‌گوید آیا بسته می‌تواند تکه تکه شود یا نه، ۱۳ بیت که دربرگیرنده آفست تکه است. فیلدی که جایگاه آن تکه در بسته اصلی را مشخص می‌کند، ۸ بیت که دربرگیرنده TTL بسته است که تعداد هپ‌های (یک رایانه، مسیریاب یا دیگر دستگاه‌های شبکه) مجازی که بسته قبل از مرگش می‌تواند از آنها عبور کند را مشخص می‌کند. (برای مثال اگر TTL برابر با ۱۶ باشد، یعنی اینکه بسته مورد نظر مجاز است که حداکثر از ۱۶ مسیریاب عبور کند تا بالاخره به مقصد برسد)، ۸ بیت که پروتکل بسته را مشخص می‌کند. (مثل TCP, UDP یا ...)، ۱۶ بیت که سرایند چکسام نام دارد، عددی است که برای کنترل و تشخیص خطاها استفاده می‌شود، ۳۲ بیت که حاوی آدرس مبدا بسته است و ۳۲ بیت که حاوی آدرس مقصد بسته است را شامل می‌شوند.

سوکت شبکه چیست؟

کانال شبکه یا سوکت شبکه (Network socket) نقطه پایانی جریان ترافیک ارتباطات بین پردازشی در تمام طول یک شبکه رایانه‌ای است. امروزه، بیشترین ارتباطات بین رایانه‌ها بر پایه پروتکل اینترنت می‌باشند، بنابراین بیشترین کانال‌های شبکه، کانال‌های اینترنت هستند. کیستون نیز یک نوع خروجی برای اتصال رایانه با شبکه است. پریزهای شبکه دو نوع پریز شبکه روکار و پریز شبکه توکار را شامل می‌شوند. پریزهای شبکه شکل‌های مختلفی دارند و در اندازه و ابعاد مختلف و در مکانهای خاص خود مورد استفاده قرار می‌گیرند. پریز شبکه و کامپیوتر با کابل‌های شبکه و لن به هم متصل می‌شوند. در بخش دیگری از دنیای شبکه با مفهومی نرم‌افزار به‌نام سوکت شبکه سروکار داریم. یک کانال رابط برنامه‌نویسی نرم‌افزار (Socket Application Programming interface یا Socket API) که اجازه می‌دهد یک برنامه کاربردی کانال‌های شبکه را استفاده و مدیریت نماید، توسط سیستم‌عامل ارائه می‌گردد. کانال‌های اینترنت رابط برنامه‌نویسی نرم‌افزار به‌طور براساس استاندارد کانال برکلی (Berkeley sockets) هستند. یک نشانی کانال ترکیبی از نشانی پروتکل اینترنت (IP) و شماره درگاه (Port Number) است و شباهت زیادی به یک شماره تماس تلفنی است که ترکیبی از پیش شماره تماس و یک شماره داخلی که به پیش شماره افزوده گردیده است. بر پایه این نشانی، کانال‌های اینترنت، بسته‌های اطلاعات دریافتی را به برنامه‌های کاربردی مرتبط یا پردازش و ریسه مناسب تحویل می‌دهند.

انواع سوکت‌ها

اگر در نظر داشته باشید به لحاظ اهمیت سوکت‌ها را بررسی کنیم با دو نوع اصلی سروکار داریم، زیرا انواع دیگر کم اهمیت‌تر هستند. این دو نوع سوکت پر کاربرد سوکت‌های نوع استریم که سوکت‌های اتصال گرا (connection oriented) و سوکت‌های نوع دیتاگرام که سوکت‌های بدون اتصال (connectionless) هستند. سوکت یک مفهوم انتزاعی از تعریف ارتباط در سطح برنامه‌نویسی است و برنامه‌نویس با تعریف سوکت عملا تمایل خود را برای مبادله داده‌ها به سیستم عامل اعلام کرده و بدون درگیر شدن با جزئیات پروتکل TCP یا UDP از سیستم عامل می‌خواهد تا فضا و منابع مورد نیاز را جهت برقراری یک ارتباط، ایجاد کند. منظور از این جمله که "سوکت یک مفهوم انتزاعی است" آن است که چیزی به نام سوکت وجود خارجی ندارد، بلکه سیستم عامل آن را تجسم بخشیده است!

سوکت‌های نوع استریم

روش ارسال برای سوکت‌های نوع استریم همان روش TCP است و بنابراین داده‌ها با رعایت ترتیب، با اطمینان صد در صد و با نظارت کافی بر خطاهای احتمالی مبادله می‌شوند. به عنوان مثال پروتکل انتقال فایل (FTP)، پروتکل انتقال صفحات ابرمتن (HTTP) یا پروتکل انتقال نامه‌های الکترونیکی (SMTP) همگی نیازمند برقراری یک ارتباط مطمئن و عاری از خطا هستند و طبعا از سوکت‌های نوع استریم بهره می‌برند. سوکت‌های نوع استریم دقیقا بر روی پروتکل TCP بوده و طبیعتا قبل از مبادله داده‌ها باید یک اتصال به روش دست تکانی سه مرحله‌ای (Three Way Handshake) بین دو پروسه نهایی برقرار بشود.

سوکت‌های نوع دیتاگرام

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

جریان ترافیک

در شبکه‌های سوئیچینگ بسته جریان ترافیک (traffic flow)، جریان بسته یا جریان شبکه دنباله‌ای از بسته‌ها از یک منبع کامپیوتر به یک مقصد است که ممکن است برای یک میزبان دیگر یا فرستادن اطلاعات به چند شبکه به‌طور هم‌زمان باشد. RFC2722 جریان ترافیک را معادل «یک تماس یا ارتباط منطقی» تعریف می‌کند. RFC3697 جریان ترافیک را «دنباله‌ای از بسته‌های اطلاعاتی که از یک منبع خاص به یک مقصد خاص یا به گروهی از کامپیوترها ارسال می‌شوند» تعریف می‌کند. جریان می‌تواند همه بسته‌ها در یک انتقال داده یا جریانی از رسانه‌ها را شامل شود. به هر طریق، در یک ارتباط برای انتقال داده‌ها لازم نیست جریان به صورت ۱ به ۱ نگاشته شود. همچنین در RFC3917 جریان «به عنوان یک سری از بسته‌های اطلاعاتی در حال عبور از شبکه در یک بازه زمانی خاص» تعریف می‌شود. یک جریان مجموعه پروتکل اینترنت می‌تواند به وسیله پارامترهای آدرس IP منبع و مقصد، پورت منبع و مقصد، پروتکل‌های لایه ۴ (TCP/UDP/ICMP) و جریان UDP و ICMP در یک مدت زمان معین، به‌طور منحصربه‌فردی شناسایی شود.

تمام بسته‌هایی که آدرس منبع/پورت و آدرس مقصد/پورت یکسانی در یک بازه زمانی داشته باشند، به عنوان یک جریان در نظر گرفته می‌شوند. به دلیل اینکه UDP یک جهته است، یک جریان ایجاد می‌کند.ICMP دو سویه است، پس دو جریان را ایجاد می‌کند.

جریان TCP

برقراری یک ارتباط TCP با یک دست تکانی سه مرحله‌ای آغاز می‌شود و دو جریان را ایجاد می‌کند. یکی از A به B، دیگری از B به A، که A و B شامل IP-Port منبع و مقصد هستند.

دست‌دهی در شبکه‌ها چه معنایی دارد؟

در هر مکانیزم ارتباطی مقداری بار اضافی وجود دارد که در اصطلاح دست‌دهی (handshaking) نامیده می‌شود و بدین معنی است که مودم از کامپیوتر سرور سؤال می‌کند، آیا داده‌ها را دریافت کرده‌ و سرور پاسخ مثبت یا منفی می‌دهد. دست‌دهی سه مرحله‌ای (Tree Way Handshake) برای برقراری اتصال در پروتکل TCP استفاده می‌شود. البته ابتدا طرفین باید آماده باشند و بعد بین طرفین مذاکرات سه مرحله‌ای زیر صورت می‌گیرد. در مرحله اول طرف شروع کننده ارتباط، یک بسته TCP (خالی از داده) ارسال می‌کند که در آن بیت SYN=1  و بیت ACK=0 است و درون فیلد شماره ترتیب عدد x قرار داده شده که در آن x یک عدد تصادفی است. در حقیقت با این شماره به طرف مقابل اطلاع داده می‌شود که به‌طور قرار دادی ترتیب داده‌های ارسالی بجای 0 از شماره x+1 شروع می‌شود. در پروتکل TCP شماره ترتیب ۳۲ بیتی است لذا برای پیشگیری از مشکلات احتمالی ناشی از مساوی بودن شماره ترتیب بسته‌های ارسالی، داده‌ها از شماره ۰ شروع نمی‌شود، بلکه از یک عدد تصادفی (که به صورت خودکار تولید می‌شود)، شروع خواهد شد و در همان مرحلهٔ اول، این شمارهٔ ترتیب به طرف مقابل اعلام می‌گردد. در مرحله دوم طرف مقابل با دریافت تقاضای فوق اگر تمایل به برقراری ارتباط نداشته باشد با ارسال یک بسته خالی که در آن بیت RST به ۱ تنظیم شده، این تقاضا را رد می‌کند ولی اگر تمایل به برقراری ارتباط بود یک بستهٔ خالی از داده با مشخصات زیر تولید می‌کند:

بیت SYN را یک می‌کند.

بیت ACK را یک می‌کند.

مقدار فیلد Acknowledgement Number را x+1 قرار می‌دهد.

مقدار فیلد Sequence Number را مقدار تصادفی y قرار می‌دهد.

در این مرحله که به معنای پذیرش ارتباط است، طرف مقابل با قرار دادن مقدار فیلد ACK=x+1  نشان می‌دهد که شماره ترتیب x را پذیرفته و منتظر داده‌ها از شماره ترتیب x+1 به بعد است. درضمن خودش عدد تصادفی y را در فیلد Seq. No. قرار می‌دهد و به طرف مقابل اعلام می‌کند که شماره ترتیب داده‌های ارسالی از y خواهد بود.

مرحله سوم شروع کننده ارتباط با قرار دادن مقادیر زیر شروع ارتباط را تصدیق می‌کند:

بیت SYN را صفر می‌کند.

بیت ACK را یک می‌کند.

فیلد Seq. No. =x+۱ را قرار می‌دهد.

فیلد ACK را برابرy+1  قرار می‌دهد.

در حقیقت با قرار دادن Seq.No= x+1 و ACK=y+1 شروع کننده ارتباط اعلام می‌کند که بر روی پارامترهای شماره ترتیب توافق شده‌است و او پذیرفته که داده‌های طرف مقابل را از شماره y+1 بپذیرد. پس از این مرحله، ارسال و دریافت داده‌ها توسط طرفین تا هنگامی که ارتباط با اطلاع طرفین خاتمه داده نشده‌است آزاد است.

سوکت‌های برکلی

سوکت‌های برکلی (Berkeley sockets) یا سوکت‌های بی‌اس‌دی (BSD sockets) کتابخانه‌ای شامل رابط‌های برنامه‌نویسی نرم‌افزار برای کار با سوکت‌های اینترنتی و سوکت‌های دامنه لینوکسی است، که از این سوکت‌ها برای ارتباطات بین پردازشی استفاده می‌شوند. سوکت‌های برکلی به عنوان رابط برنامه‌نویسی نرم‌افزار از سیستم‌عامل ۴/۲بی‌اس‌دی سرچشمه گرفتند که این سیستم‌عامل در سال ۱۹۸۳ منتشر شد. امروزه تمام سیستم‌عامل‌های مدرن یک پیاده‌سازی از سوکت‌های برکلی را به همراه دارند چون این سوکت‌ها روش استاندارد برای دسترسی به اینترنت هستند. این رابط‌ها در اصل به زبان سی نوشته شدند اما بیشتر زبان‌های برنامه‌نویسی رابط‌های مشابهی را در دسترس کاربر قرار می‌دهند و می‌توان از آن‌ها در اکثر زبان‌های برنامه‌نویسی مدرن استفاده کرد.

ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را می‌توانید از کتابخانه‌های عمومی سراسر کشور و نیز از دکه‌های روزنامه‌فروشی تهیه نمائید.

ثبت اشتراک نسخه کاغذی ماهنامه شبکه     
ثبت اشتراک نسخه آنلاین

 

کتاب الکترونیک +Network راهنمای شبکه‌ها

  • برای دانلود تنها کتاب کامل ترجمه فارسی +Network  اینجا  کلیک کنید.

کتاب الکترونیک دوره مقدماتی آموزش پایتون

  • اگر قصد یادگیری برنامه‌نویسی را دارید ولی هیچ پیش‌زمینه‌ای ندارید اینجا کلیک کنید.

ایسوس

نظر شما چیست؟