تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 3 از 3

نام تاپيک: Socket و HTTP

  1. #1
    کاربر فعال تالار .Net Msba's Avatar
    تاريخ عضويت
    Dec 2006
    محل سكونت
    ! My Mind
    پست ها
    506

    14 Socket و HTTP

    با سلام به همه ی دوستان.
    یک سوال چند وقتی فکرم رو درگیر کرده یعنی دقیقا از بعد از ظهر تا حالا. .
    سوال:
    مثلا به مروگر، صفحه ی Google را درخواست می زنیم. مطمئنا یک TCP Connection بین سرور گوگل و ما ایجاد می شود. اونم روی پورت 80 .
    این اتصال روی پورت 80 ممکن است توسط 200 میلیون کاربر یکجا ارسال شود. این ارتباط چگونه هندل می شود؟ اگر از سخت افزار سرور ها صرفه نظر کنیم، این همه ارتباط چگونه برنامه نویسی می شود؟ این همه در یک پورت؟ هم دنبال تئوری شبکه ی این مطلب هستم هم برنامه نویسی آن. ذهنم آنجایی درگیر است که ارتباط TCP/IP کاملا پوینت به پوینت با آدرس URI است. پس این همه Connection در یک پورت؟
    امیدوارم منظور رو رسونده باشم.

    ممنون.

  2. این کاربر از Msba بخاطر این مطلب مفید تشکر کرده است


  3. #2
    در آغاز فعالیت
    تاريخ عضويت
    Dec 2010
    پست ها
    13

    پيش فرض

    سلام،
    خب اول بد نیست بگم همونطور که خودت هم میدونی سایتی مثل گوگل خیلی بیشتر از یک سرور داره که همه 200 میلیون بخوان به اون وصل شند. حالا بزار ببینیم مثلا 1000 نفر چطور به یک پورت وصل میشند. برای شروع يه نگاه به کد زير بنداز
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در اين کد، اول برنامه server يک socket ميسازه (در صورت آزاد بودن پرت مربوطه) که آماده دريافت يک ارتباط TCP از طريق local_port هست.
    خط دوم باعث ميشه server به پرت مربوطه گوش کنه و هروقت يک connection request دريافت کرد يک ارتباط با client مربوطه بر قرار کنه. تا وقتی که درخواستی دريافت نشده اجرا برنامه در در همين خط باقی ميمونه. در نتيجه اگه شما بخوای server بتونه 1000 تا client رو در آن واحد ساپرت کنه بايد 1000 تا thread ايجاد کنی که اين تابع رو فراخانی ميکنند. خط سوم هم که همون طور که معلوم هست يه استريم ميسازه برای ارسال data. خوب تا اينجا از نظر برنامه نويسی بود.
    از نظر شبکه بايد بگم که نگاه شما به مفهوم پرت اشتباه هست. پرت همين طور که از اسمش پيداست يک درگاه هست که ميتونه تا حدی که نرم افزار و سخت افزار اجازه ميداند بستر connection های مختلف باشه. يک پرت مثل يک در از 65536 دری هست که هر چند packet که باشه ميتونه از اون عبور کنه. حالا اون طرف در کسی باشه که جواب گو باشه يا نه به پرت مربوط نميشه.اين packet ها چطوری از هم متمايز ميشند؟ از طريق sequence number در هدر TCP. يعنی اينکه هر کدوم از اين connection های مختلف از يک sequence number يکتا برای ارتباط استفاده ميکنند به اين معنی که در اول ارتباط يک عدد 32 بيتی به صورت random ايجاد ميشه که client و server از اون برای ارسال data استفاده ميکنند (به صورت sequential)
    ويرايش: ارتباط های مختلف توسط 4 مشخصه (server ip, port & client ip, port) از هم متمايز ميشوند. sequence number فقط در حالت خاصی نقش تمايز دهنده رو داره


    اميدوارم ذهنت رو يکم آزادتر کرده باشم
    Last edited by behzaf; 10-10-2013 at 09:08.

  4. این کاربر از behzaf بخاطر این مطلب مفید تشکر کرده است


  5. #3
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    شما تحت یک جفت IP,PORT یکسان میتوانید تعداد نامحدودی ارتباط دوطرفه ایزوله شده را برقرار کنید.
    حتی در سطح HTTP بد نیست بدانید که روی یک IP,PORT یکسان میتواند تعداد نامحدودی سایت را میزبانی کرد.
    از لحاظ شهودی این مانند تماس با تلفن واحد 118 توسط چندین نفر در آن واحد است.

    از لحاظ TCP/IP شما در سمت کلاینت یک IP,PORT را میدهید و به سرور متصل میشود، سرور درخواست شما را Accept میکند.
    در این لحظه یک کانال دوطرفه منحصر بفرد ایجاد میشود، کانالی که فقط یک درخواست از یک کلاینت با یک ریسمان از سرور در حال تبادل اطلاعات هستند.

    سپس طبق پروتکل HTTP کلاینت یک متنی مانند این را به سرور ارسال میکند.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این متن درخواست را سوکت سمت سرور که معمولا برنامه های پایه ای مانند IIS یا Apache هستند دریافت میکنند و پس از یک مسیریابی اولیه برنامه وب سایت مرتبط با این درخواست را پیدا میکنند،
    در مثال ما باید برنامه ای باشد که در فهرست IIS یا Apache خود را برای پاسخ به درخواست های HTTP آدرس [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ثبت کرده باشد.

    این برنامه میتواند بستر زیر ساخت پایه ASP.Net یا PHP و... باشد که درخواست را تحویل میگیرد.
    این برنامه هم طبیعتاً مجدد درخواست را یک مسیر یابی میکند و کد aspx یا php مرتبط با درخواست را پیدا و اجرا میکند.
    بعنوان نمونه ازجمله اقدامات دیگر پلتفرم پایه، میتوان به خواندن کوکی (یکی از هدرهای HTTP) و ردیابی کاربر و یافتن شی صحیح Session اوست.
    (((
    ترجمه شده و مدون شده اطلاعات اولیه این درخواست string که سوکت کلاینت ارسال کرده بوده، همان شی Request را شامل میشود که ما در ASP.Net به آن دسترسی داریم
    )))

    سپس اینجاست که کدهای برنامه نویسی ما اجرا میشود و در نهایت با کمک بستر زیر ساخت زبان، کل نتایج کد به یک متن صریح string با فرمت HTML تبدیل میشود.

    این جوابیه همان مسیر را معکوس طی میکند تا در نهایت توسط IIS و Apache پاسخی این چنین برای کلاین ارسال میشود.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (((
    اطلاعات این پاسخ همان چیزی هستند که ما در برنامه نویسی ASP.Net آن ها را در شی Response تنظیم کرده ایم
    )))

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


    خلاصه:
    مرورگر
    بازکردن سوکت
    ارسال درخواست HTTP
    مسیر یابی در برنامه IIS و یافتن برنامه مرتبط
    مسیر یابی درخواست درون خود برنامه
    اجرای برنامه و گرفتن جوابیه HTML برای درخواست
    ارسال جوابیه HTML در پوشش HTTP
    بستن ارتباط


    خوب حالا دقیقاً کجایش ابهام دارد؟!

  6. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •