PHP Socket Programming – Part1
برنامه نویسی سوکت یک راه برای ارتباط مانا میان دو node ( کلاینت و سرور ) می باشد. یک سوکت (یا node) تحت یک IP و پورت به دیگر سوکت گوش می دهد (listen) .
Basic Web Socket
به عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از سمت سرور به سمت کلاینت نیاز داریم که ابتدا یک درخواست به سمت سرور بدهیم تا بعد پاسخ را دریافت کنیم ولی در ارتباط سوکت می توان مستقیم از سرور به کلاینت ( یا کلاینت ها ) درخواست ارسال کنیم.
تصویر زیر نمونه یک ارتباط مانا میان یک کلاینت و یک سرور ( دو node در سوکت ) روی یک پورت می باشد. این ارتباط با ارسال یک پالس از سمت سرور به کلاینت شروع می شود و در ادامه پس از گذشت زمان دو پالس از سمت کلاینت به سرور می آید.
برنامه های چت ( telegram ) ، بازی های آنلاین ، یا برخی برنامه های آنلاین گوگل ( Google Docs ) بنا به ماهیت برنامه از برنامه نویسی سوکت استفاده می کنند.
این ارتباط مانا می تواند میان یک یا چند node تحت یک پورت برقرار گردد. به طور مثال در یک بازی آنلاین فرض کنید کلاینت شماره یک پالس را روی سرور می نویسد و سرور نیز آن پالس را تحت پورت جاری روی سایر کلاینت های در جریان بازی می نویسد. به این ترتیب بروزرسانی پیام کلاینت یک روی تمامی node ها انجام می گیرد.
همان طور که می دانید در دنیای کامپیوتر هر سرور یک آدرس IP دارد و کلاینت و سرور با استفاده از این آدرس با هم هر نوع ارتباطی را برقرار می کنند. وقتی که ما از طریق کلاینت مرورگر آدرس یک وب سایت که روی یک سرور قرار دارد را وارد می کنیم چه روالی طی می شود که نتیجه برای ما باز می گردد.
Port Numbers
مثلا ما به مرورگر آدرس دامنه داده شده است و آدرس IP را نمی داند . برای دریافت آدرس IP مرورگر یک درخواست به یکی از سرور های دی ان اس ( مثلا گوگل ) می فرستد و سرور آدرس IP سرور مربوطه رو با استفاده از آدرس دامنه به مرورگر بر می گرداند.
وقتی ما در قسمت Network Setting کامپیوتر خودمان دی ان اس به صورت دستی Set می کنیم برای همین کار استفاده می شود. و همچنین وقتی ما دامنه ثبت می کنیم برای این که دامنه به یک سرور مرتبط گردد دی ان اس سرور را (مثلا ns1.example.com) را برای دامنه وارد می کنیم.به عبارت دیگر ادمین های وب سایت ها دامنه ها را در DNS Server رجیستر کرده اند و تعیین کرده اند که مثلا این دامنه معادل این IP است.
پس از این که مرورگر آدرس IP سرور را بدست آورد یک connection تحت پروتکل Http به سرور بر قرار می کند. یعنی یک Http Request با یکی از متد های GET,POST ارسال و یک پاسخ Http Response نیز از سمت سرور به کلاینت ما بر می گردد.
سرور یک مدل پیچیده تری از یک کامپیوتری است که یک سری نرم افزار روی آن نصب می باشد.هر سرور یک connection را روی یک پورت دریافت می کند. هر پورت به یک سرویس یا یک نرم افزار اشاره می کند.
به طور مثال زمانی که شما از طریق یک کامپیوتر به یک سرور درخواست ارسال می کنید ( با وارد کردن دامنه gnutec.net ) در پشت زمینه به آی پی سرور و روی پورت 80 این درخواست را ارسال می کنید. یا فرض کنید یک درخواست لیست فایل از سمت کلاینت شما (مثلا FileZilla ) به یک سرور روی اینترنت از طریق پروتکل FTP ارسال شده است ، پروتکل TCP واقع در لایه transport-layer protocol پورت را برای این درخواست روی 21 قرار می دهد.
Socket Programming
سوکت برابر است با IP:PORT یا به بیان ساده تر به ترکیب یک آدرس ماشین (IP) و یک شماره درگاه (PORT) سوکت گفته می شود ، که در آن IP متشکل از چهار عدد که هر کدام از 0 تا 255 می باشد و به وسیله . از هم جدا شده اند و پورت شامل یک عدد بین 0 تا 65535 می باشد.
برای برقراری ارتباط میان دو کامپیوتر در یک شبکه دو مورد را باید در نظر بگیریم :
- آدرس کامپیوتری که می خواهیم به آن متصل شویم
- برنامه ای از آن کامپیوتر که میخواهیم با آن ارتباط برقرار کنیم
هر برنامه یا یک سرویس از طریق یک پورت قابل دستیابی است و همچنین هر برنامه روی یک سرور نصب شده که آن سرور دارای یک آدرس IP است.
مطابق با استاندارد های تعریف شده از 65535 پورت موجود 1024 پورت اول آن برای مقاصد خاص و سرویس های خاصی رزرو شده است و ما باید برای برنامه نویسی سوکت از پورت هایی غیر از اینها استفاده کنیم . برخی از پورت های رزرو شده در پروتکل های TCP و UDP به شرح زیر می باشند.
TCP | Telnet | 23 |
SMTP | 25 | |
HTTP | 80 | |
FTP | 21 | |
UDP | DHCP | 67 |
NBNS | 137 | |
DNS | 53 | |
SNTP | 123 | |
SNMP | 161 |
پروتکل های خانواده TCP , UDP مربوط به transport-layer protocol شبکه می باشند و سایر پروتکل های موجود در سمت چپ مربوط به application-layer می باشند. حال این که چگونه این دو نوع پروتکل با هم ارتباط برقرار می کنند تا در پازل انتقال داده نقشی را ایفا کنند توضیحات مختصری ارائه می دهیم.
جریان داده ای که از سمت مبدا به سمت مقصد حرکت می کند برای مدیریت صحیح در بسته های خاصی تحت عنوان packets تقسیم بندی می شود. این اطلاعات توسط پروتکل TCP به آن ها افزوده شده است. به عبارت دیگر کار پروتکل TCP این است که تایید کند جریان داده ای که از نقطه A به نقطه B ارسال شده است به صورت صحیح و دست نخورده باشد.
پس پروتکل TCP شامل اطلاعاتی است که چه نوع داده ای باید میان کلاینت و سرور انتقال پیدا کند و همچنین HTTP شامل دستورالعمل هایی است که چگونه داده های دریافت شده خوانده و پردازش شوند.
Transport-layer Protocols
در برنامه نویسی سوکت ما از دو پروتکل برای انتقال اطلاعات در میان کامپیوتر ها استفاده می کنیم :
TCP (Transmission Control Protocol): این پروتکل یک پروتکل اتصال گرا یا connection-oriented می باشد یعنی ارتباط میان کلاینت و سرور تا پایان روند انتقال اطلاعات باقی می ماند. در چنین حالتی کامپیوتر مقصد با دریافت صحیح هر بسته از مبدا یک Acknowledge به منظور اطلاع از دیفات صحیح به کامپیوتر مبدا ارسال می کند. اگر پیغام اعلام وصول فوق به مبدا نرسد ، دوباره بسته را ارسال می کند.
UDP (User Diagram Protocol) : این پروتکل یک پروتکل بدون اتصال یا connection less می باشد . این پروتکل امکان توزیع داده ها را با سرعت بالا تضمین می کند ، ولی هیچ تصمینی در جهت صحت ارسال داده ها و دریافت آن ها توسط کامپیوتر مقصد ارائه نمی دهد.
دیدگاهتان را بنویسید