discord icon
سرور دیسکورد گاردایران
anonyking

سوکت چیست؟(SOCKET)

پست های پیشنهاد شده

سوکت به دو رابط فایل مانند در دو سوی ارتباطهای شبکه ای گفته میشه که در برنامه نویسی از اونا استفاده میکنیم.

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

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

سوکت یک رابط پایه ای در ارتبط بین دو برنامهء لوکال یا ریموت هست که پروتکل خاصی نداره. یعنی شما میتونید هر دیتایی رو به هر شکلی توسط سوکت ها ارسال و دریافت کنید. این قرارداد و کار دو طرف هست که از چه پروتکل و فرمتی برای ارسال و دریافت اطلاعات استفاده کنن. بطور مثال HTTP یک پروتکل هست که روی سوکت های زیرین که از نوع TCP هستن استفاده میشه.
سوکت هایی که ما با اونها در شبکه و اینترنت سروکار و داریم عمدتا دو نوع هستن، یکی TCP و یکی UDP.

سوکت های TCP برای ارسال و دریافت نیاز به اتصال اولیه دارن؛ یعنی نیاز هست دو طرف با هم اتصال اولیه و با توافق و تنظیم پارامترهای لازم برقرار کنن. و خاصیت دیگرش اینه که شما اطلاعات رو ارسال میکنید و بقیهء کارها رو خود سوکت و سرویسهای سطح پایینتر بصورت خودکار انجام میدن؛ یعنی تضمین میکنن که بسته های اطلاعاتی شما بصورت سالم و کامل طبق ترتیب به مقصد برسن. البته اگر مشکل جدی در ارتباط بوجود بیاد که اطلاعات به هیچ وجه نتونن بصورت سالم و کامل دریافت و ارسال بشن، این مشکل با استفاده از خطا و (مقدار برگشتی) توابع و Exception های مربوطه به اطلاع برنامه میرسه.

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

موقعی که مرورگر وب شما با سرور تماس میگیره درواقع اول یک ارتباط سوکتی TCP با اون سرور برقرار میکنه و بعد اطلاعات بر اساس فرمت و استاندارد و قراردادهای پروتکل HTTP با سرور مبادله میشن.

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

پروتکل هایی مثل HTTP, FTP و غیره همه چیزی نیستن جز قراردادهایی برای روش و فرمت و رفتارهای ارسال و دریافت اطلاعات بین دو طرف، و همهء این پروتکل ها برای ارسال واقعی اطلاعات خودشون از سوکت ها (معمولا از نوع TCP) استفاده میکنن.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلام خدمت همه دوستان عزیز

ممنون که توضیح خیلی کلی دادین اما کل این هارو بنده اگر بی ادبی نباشه توی 2خط توضیح بدم

چون معیار من ساده و درک فهم تر بودنه(با اجازه)

سوكت ( Socket ) چيست:

با يك بيان ساده  مي توان گفت كه سوكت به تركيب يك آدرس ماشين ( IP ) و يك شماره  درگاه ( Port ) گفته میشه.

در برقراري ارتباط بين كامپيوتر ها در يك شبكه دو چيز بسيار مهم است

1) آدرس ماشيني كه مي خواهيم اطلاعاتي از ان بگيريم يا به آن ارسال كنيم

2) برنامه اي از آن ماشين كه در خواست اطلاعات كرده يا اينكه مي خواهيم اطلاعاتي از آن برنامه درخواست بكنيم.

اين دو يعني آدرس ماشين و شماره برنامه به وسيله سوكت در شبكه مشخص مي شوند.

سوکت در اصل مانند يک کانال ارتباطی است
که ميان دو نقطه ايجاد شده و پيغامها رد و بدل ميشود.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری