محمد لینوکس

همه چیز به غیر از لینوکس!

محمد لینوکس

همه چیز به غیر از لینوکس!

قسمت 5 از سریال آبکی لینوکس بیاموز

-----------------------------------------------------------------------
در بخوش (بخش‌های) قبول (قبلی) دیدیم که لینوکس عجب چیزیه بابا
امروز در مورد شبکه، شبکه در لینوکس، مدیریت شبکه و کلیات سیستم عاملیش صحبت می‌کنیم.


قبل از اینکه شروع کنیم، کتابی هست به نام

Linux Network Administration Guide

برای کسانیه که می‌خوان Network رو به صورت کاربردی در لینوکس استفاده کنن، مثل DHCP، DNS، MAIL و ...

امروز زیاد سر این مسائل صحبت نمیشه، تنها در مورد مدیریت شبکه توضیح داده می‌شه، تا در مورد خود شبکه و کاربردش.
----------------------------------------------------------------------

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

دیگه ارسال کنه. تمامی علم شبکه که تو این چند سال تولید شده‏، صرفا برای مدیریت این داده‌های ارسالیه.

داده‌ها چیستند؟
امروزه داده‌هایی که ما از طریق شبکه ارسال می‌کنیم، با تعریف اولیش خیلی فرق داره. در ابتدا تفکر این بود که از شبکه قراره استفاده بشه که فایلهای کاربران و

داده‌هاشون رو منتقل کنه.
امروزه داده‌هایی که در شبکه منتقل می‌شن، فایلهای کاربران، تصویر، صوت، RPC، PPS و IM هست.

فایلهای‌کاربران: فایلهای کاربران شامل تمامی داده‌های Pack شده می‌باشد که به نام فایل شناخته می‌شوند. این داده می‌تونند دارای هر نوع کاراکتری باشند،

یکی از وظایف شبکه اینه که در لایه Presentation این داده‌ها رو آماده کنه تا از طریق راه ارتباطی یا Network Media منتقل شن.

تصویر: ای بابا. خوب تصویرم یه فایله دیگه. خیر. شاید این برای شما سوال باشه، که چرا می‌گن VOIP یعنی Voice Over IP یا صدا بر روی ‍IP. خوب تا حالا هم تو

Yahoo Messenger صدا رو منتقل می‌کردیم دلشون خوشه ها. ولی اینجا می‌گیم که تصویر با فایل تصویری فرق داره. در انتقال فایل تصویری مسئله مهم، رسیدن

صحیح فایل به طرف مقابل مثل یک فایل داده که محتوی خاصی نداره. اما در انتقال تصویر مسائل مهمی مثل عدم قطع تصویر، تغییر کیفیت، مسئله Load Over

Server، مسئله Video Proxy و خیلی مسائل دیگه مطرح میشه، که بحران رو در عدم پخش RealTime تصویر عنوان می‌کنه.

صدا: همینطور در صدا، مانند تصویر، مشکل فرستادن صدا نیست، مسئله تغییر BitRate صدا برای Stream کردن اون توی شبکس و مسئله رسیدن به موقع صدا به

طرف مقابل. مسئله محاسبه زمان بین شما و طرف مقابل و در اصل استفاده از الگوریتم Latency به منظور حساب کردن تاخیر در صدا و رفع این خطا با

الگوریتم‌های مشخص انتقال صدا یا VoIP رو تشکیل می‌دن.

PPS: یه زمانی هست شما روی سیستمتون، 2 یا چند CPU دارید. همسان سازی یا Synchronization که در بخش قبلی گفته شد، بین‌اونها از طریق Interruptها

صورت می‌گیره اما فرض کنید شما 4 تا کامپیوتر قدیمی دارید و می‌خواهید از اینها به صورت Parallel یا موازی استفاده کنید. همسان سازی پردازش موازی یا Parallel

Processing Synchronization(PPS( بین اونها از طریق شبکه‌های پر سرعت صورت می‌گیره.

RPC: یه زمانی بود هرکس برنامه‌ای می‌نوشت و در این برنامه برای خودش تعدادی تابع کاربردی فراهم می‌کرد که مرگ این توابع با Binary شدن برنامه بود و

شخص دیگه‌ای نمی‌تونست از این توابع استفاده کنه. بعد از اون کتابخانه‌ها اومدن، که به برنامه‌ها Link میشد، بعد از اون DLLها اومدن که به برنامه‌های درحال

اجرا Link می‌شد و در نسل جدید این DLLها، این Linkکردن ها می‌تونه از خارج کامپیوتر شما صورت بگیره. برای مثال شما یه برنامه نوشتید که از یک الگوریتم

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

من یه راه جدید تر برای الگوریتم پیاده کردم، میام و برنامه خودم رو روی کامپیوتر خودم تغییر می‌دم. این تغییر باعث افزایش سرعت برنامه‌شما هم می‌شه. حالا اینو

گسترش بدید تو اینترنت که یه شبکه درهم بسیار پیچیده از سرویس‌ها وجود داره که همه دارن استفاده می‌کنن. علم مربوط به این مسئله در SOA یا Service

Oriented Architecture بیان شده. پس یکی دیگه از استفاده‌های شبکه RPC یا Remote Procedure Call یا صدا زدن تابع از راه دور.

IM: این نوع از ارتباط شبکه‌ای، یک ارتباط همیشگی On-Demand است. یعنی اینکه قرار نیست داده‌ای‌ ارسال شه برای طرف مقابل و ارتباط قطع شه. این ارتباط

همیشگیه و در هر زمان بسته به درخواست کاربر یا Demand یه بسته کوچک اطلاعات که می‌تونه شامل متن و داده‌های کنترلی باشه برای طرف مقابل ارسال

می‌شه. روی بعضی از گوشی‌های موبایل مخصوصا Nokia سرویسی هست به نام Push To Talk!. حتما تا حالا باهاش برخورد کردید. این یک سرویس IM روی

شبکه GSM مخابراتیه. شما به یک نفر تماس می‌گیرید، و به جای اینکه قطع کنید، می‌رید رو سرویس Push To Talk. اونوقت مثل بیسیم، زمانی که شما دکمه

مربوط به Push To Talk رو فشار بدید، ارتباط در کمتر از 300ms یعنی 1/3 ثانبه بر قرار می‌شه و طرف مقابل شما، از این موضوع با یه Alarm مطلع میشه و به

صدای شما گوش می‌ده. هزینه‌ای که شما پرداخت می‌کنید فقط هزینه‌زمان‌هایی که دکمه Push To Talk رو نگه داشتید. این برای خیلی از جاها که ارتباطات

سریع و کوتاه دارن مثل خطوط تولید خیلی مفیده در مقابل تلفن زدن که حداقل 10 ثانیه Head داره. در کشور ما هم قول دادن در برنامه 4 ساله 18ام یعنی 72

سال دیگه این سرویس رو راه بندازن :P

----------------------------------------------------------------------
خوب پس این از شبکه، حالا ببینیم لینوکس با این موضوع چطور برخورد می‌کنه.

قبل از شروع، یه سری تعریفات هست که باید بدونیم:

Host: یه زمان بود، که فقط Computerها به شبکه وصل می‌شدن، مثل بالا که من از کلمه کامپیوتر استفاده کردم. امروزه یخچال‌ها، ماکروفر‌ها و کمد‌های شبکه‌ای

هم داریم. برای همین به هر Object که به شبکه وصل شه و توانایی ارسال و دریافت اطلاعات رو داشته باشه و بر روی Protocolهای مشخص اون شبکه فعالیت

کنه یه Host گفته می‌شه.

IP: هاست شما باید شناسه داشته باشه. باید با بقیه فرق داشته باشه. باید اسم داشته باشه. ‍اسم Host شما در شبکه IP شماست (اینجا قرار نیست در

مورد کلاسهاش و تعداد بایت‌هاش صحبت بشه. کتاب Network For Beginners، Network ، CCNA Volume 1، Network For Dummies رو مطالعه کنید)

NIC: شما برای ارتباط با شبکه، نیاز به یک Media، مثل کابل، فیبر نوری و موج‌های مغناطیسی دارید و برای ارسال اطلاعات بر روی این Mediaها نیاز به یک وسیله

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

این ارتباط در یک ماژول یه نام درایور کارت شبکه در اختیار سیستم عامل قرار می‌گیره.

MAC: هر کارت شبکه که تولید می‌شه باید شناسه داشته باشه. این شناسه باید واحد یا Unique باشه. از این شناسه برای ارتباطات شبکه ای هم استفاده

می‌شه.

Host Name: اسم در شبکه معنی نداره. اما Protocolهایی مثل NetBios و WINS در Microsoft Windows با اسم شما خیلی سر و کار دارن. اما به طور کلی اسم

یک HOST زیاد بحث شبکه‌ای نیست.

Socket: هر Host می‌تونه تنها یک خط از داده‌ها رو روی Media خودش منتقل کنه، اما سیستم‌عامل با اشتراک این خط بین چندین برنامه به اونها اجازه کار همزمان

و استفاده همزمان از شبکه رو میده. مثل زمانی که شما چت می‌کنید و فایل Download می‌کنید. از اداره برق برای شما یک کابل کشیده شده، اما شما در

خونتون سوکت Socket هایی رو در دیوار کار گذاشتید که اجازه کار همزمان یخچال و تلویزون رو فراهم کردید. اگر یخچال آمپر زیادی بکشه، تلوزیون نمی‌تونه کار کنه.

تنها فرق شبکه با برق اینه‌که در سوکت‌های برق مدیریتی اعمال نمی‌شه، چون این سوکت با اون سوکت تفاوتی نداره، اما در Hostها اطلاعات اضافی مربوط به

این که هر Socket برای چه برنامه‌ای باید ذخیره سازی شه و مدیریتی روی اون اعمال شه.

Packet: داده‌های منتقل شده در شبکه رشته‌ای از بیت‌ها هستند. برای کارت‌های شبکه، داده‌ها بیت‌ها هستند. اما برای سیستم‌های عامل و منابع مدیریتی

شبکه، به دلیل وجود Policyها و سیاست‌های خاص در انتقال اطلاعات، به دلیل چند کاربره بودن شبکه، درخواست‌ها باید منظم و بسته بندی شده باشند. فرض

کنید در یک اداره من برم و یه کاغذ بدم به کارمند اول (البته فرض کنید، مگه کارمندا تو ادارات کار می‌کنن آخه) و بگم اینو انجام بده رد کن بره به بعدی. درجا می‌گه

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

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

مربوط به شبکه نیست، برای مثال در ارتباط Serial چیزی به نام Packet نداریم . بلکه داده‌ها ارسال می‌شن تا زمانی که تموم بشن و به همین منظور چیزی به نام

استفاده چند نفره از یک کابل سریال وجود نداره. در مقابل اون در USB ما بسته‌های اطلاعاتی داریم، به دلیل اینکه به هر USB HUB میتونه به طور همزمان 127

دستگاه وصل شه، و اینجا نظم باید وجود داشته باشه.

----------------------------------------------------------------------
خوب بریم سراغ لینوکس، ببینیم با اینها چیکار می‌کنه.

لینوکس و کارت شبکه
----------------------------------------------------------------------
در لینوکس بسیاری از کارت‌های شبکه General که امروزه در Hostهای شما نصب شده به طور صحیح شناسایی می‌شن. کارت‌های شبکه‌ای که در لینوکس شما

شناسایی نشه، یا کارت General نیست و یا اینکه مدل بسیار جدیدیه که هنوز در Kernel لینوکس شما وجود نداره و اگر لینوکس شما بسیار به روزه، هنوز برای

درایور نوشته نشده. چند سال پیش کسی لینوکس رو حساب نمی‌کرد، یعنی تولید کننده‌های NIC برای لینوکس درایور نمی‌نوشتن و تنها برای ویندوز می‌نوشتن و

برای همین Reverse Engineering اون بسیار طول می‌کشید و درایور های تولید شده کیفیت مناسبی نداشتند. اما امروزه، Intel، Marvel، Cisco و LinkSys و

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

درایور در اصل یک Kernel Module که باید یک رابط خاص به نام رابط net_device رو پیاده سازی کنه. در پیاده سازی این رابط، یه درایور باید این اطلاعات رو برای کرنل

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

ببینید، دقیقا مثل FileSystem که در بخش قبلی دیدید، شبکه‌هم لایه های مختلفی دارید (لطفا این رو با لایه‌های TCP/IP اشتباه نگیرید). لینوکس می‌تونست به

این صورت باشه، که داده‌های رو بگیره، بسته بندی کنه، نوع شبکه رو مشخص کنه و داده ها رو بریزه رو Media. اما در لینوکس، به این صورت:

- من نرم افزارم - شبکه برام مهم نیست - من داده دارم - این داده‌ها باید بره اینجا - اینهارو از من تحویل بگیر فایل Socket
- من فایل Socket هستم - شبکه برام مهم نیست - من یک فایلم - فابلیت نوشتن و خوندن دارم - داده‌هایی تحویل من شده و من اینها رو به شبکه لینوکس تحویل

می‌دم
- من شبکه لینوکسم - شبکه برای من مهم نیست - برای من داده‌ها مهم  هستند که کجا می‌خوان برن - اونها را بسته بندی می‌کنم و تحویل درایور شبکه

می‌دم
- من درایور شبکه هستم - من شبکه رو می‌شناسم!!!!! - داده‌ها برای من مهم نیست!!!! - من داده‌هایی رو گرفتم با فرمت مشخص در بسته بندی مشخص !!!  

تحویل کارت شبکه می‌دم
- من کارت شبکه هستم - شبکه ماله منه !!! - من داده نمی‌شناسم !!! - من بسته نمی‌شناسم !!! - من بیت‌هایی رو تحویل گرفتم و با استفاده از مدارات فیزیکی

اونها رو روی Media شبکه قرار می‌دم.

این لایه بندی‌ها در لینوکس که بسیار بیشتر و پیچیده تر از اینه باعث میشه که شما در هر بخشی که خواستید وارد شید و اون لایه رو برای خودتون شخصی

سازی کنید و در نهایت چیزی که کاربر می‌بینه، یک سیستم مدیریتی بسیار قوی، بدون خطا، بدون زمان‌های تلف شده زیاد در لینوکسه.

خوب برگردیم به بحث خودمون،
اولین داده اسم شماست. برای سیستم‌عامل اسم کارت شبکه خیلی مهمه. چون هر Host می‌تونه به تعداد نا محدود کارت شبکه داشته باشه و برای شناسایی

اینها در لایه Application باید یک شناسه وجود داشته باشه.

داده‌های دیگر، شامل، Routineهای مربوط به باز کردن و بستن کارت شبکه می‌باشد. درایور شبکه شما باید قابلیت فعال سازی و غیر فعال شدن داشته باشد.

داده‌های دیگر IOCTL و stat. اینها بازهم دو تابع یا Routine هستند. اولی یا IOCTL در تمامی درایورها وجود داره. چه ویندوز، چه لینوکس. سیستم عامل و

Applicationها برای ارتباط با درایور‌ها از IOCTL استفاده می‌کنند. یک سری کد برای درایور ارسال می‌کنند و در نتیجه درایور برای اونها، جوابی رو ارسال می‌کنه. این

کدها همگی عملیاتی نیستند، کد‌هایی وجود دارد برای دریافت وضعیت سیستم که در شبکه یک Routine خاص به نام Stat برای دریافت اطلاعات وضعیتی وجود

داره.
برای مثال درایور CDROM یه IOCTL داره به نام IOCTL_CDROM_EJECT که باعث میشه در CDROM شما باز بشه.

داده‌های بعدی، Featureها یا قابلیتها و Flagهاست. قابلیت‌ها به این صورت نیست که هر کارت شبکه برای خودش یک سری قابلیت جدید ایجاد کنه، بلکه در

لینوکس لیستی بزرگی از قابلیتها وجود داره که لینوکس قادره اونها رو استفاده کنه. برای مثال در لینوکس این قابلیت پیش بینی شده که کارت شبکه برای لحظه

ای در حالت کم قدرت کار کنه. حالا اگر کارت شبکه ای این قابلیت رو می‌تونه پیاده سازی کنه باید به لینوکس اطلاع بده. برای مثال کارت‌های شبکه Wireless این

قابلیت رو برای خودشون به صورت سخت افزاری پیاده کردن و زمانی که درایورشون در حال نصب شدن، این موضوع رو به لینوکس می‌گن:

- من می‌تونم، تو بخوا

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

می‌شه، برای همین زمانی که Laptop شما به برق وصل نیست و روی باطری کار می‌کنه، اگر شبکه لینوس (که تو لایه‌ها بود) تشخیص بده یک کارت شبکه IDLE

یا بیکار و در ضمن گفته (من می‌تونم تو بخوا) از اون کارت شبکه می‌خواد (یک IOCTL) که در حالت کم قدرت کار کنه.

Flagها مثل Jumperها هستند. مثل Featureها که درایور می‌گفت من دارم تو بخوا، Flagها تنظیماتی هستند که لینوکس گفته

من دارم، تو کدوم‌ها رو می‌خوای

برای همین شما در نوشتن درایور، تعدادی از این Flagها رو می‌تونید انتخاب کنید، مثلا مشخص کنید، کارت شبکه من ARPنداره. از من ARP نخوا.

دیگه چیزایی که شما باید به عنوان یک درایور برای لینوکس فراهم کنید، یه Buffer یا حافظس که لینوکس روش بنویسه و ازش بخونه. برای لینوکس مهم نیست

شما این حافظه رو از کجا میارید. بعضی از کارتهای شبکه بخشی به نام Buffer دارن که داده‌های رسیده در اون ذخیره میشه تا شما بگیرید. اگه بافر کارت شبکه

پر بشه، کارت شبکه به صورت فیزیکی به بقیه کارتهای شبکه اعلام می‌کنه که داده ارسال نکنن یا اگه داده‌ای بیاد اون رو Reject می‌کنه. بنابر این اگر NIC دارید

که Buffer داره، از اون استفاده کنید، اگر نداره، باید حافظه‌ای بسازید، و داده‌ها رو خودتون نگه دارید. در هر 2 صورت سیستم عامل دخالتی در کار شما نمی‌کنه. از

شما یه حافظه می‌خواد.

بعد از فراهم کردن این اطلاعات باید این اطلاعات در Stack شبکه لینوکس ثبت شن. اگر این ثبت انجام به درستی صورت بگیره، زمانی که شما دستوری مثل

ifconfig رو اجرا می‌کنید (همون Ipconfig در Windows) به صورت زیر نمایش داده می‌شه:

mni0 ETHERNET ... mac 00:00:00:00:00:00 ...

Mni رو من فرض کردم که شما به عنوان اسم دادید، My Network Interface.

حالا اگر کسی به لینوکس بگه

ifconfig mni0 192.168.0.1

لینوکس می‌گه به من چه!!!! - توسط یک IOCTL به اون Routine که شما مشخص کردید، میگه کاربر از من خواسته که برای شما IP قرار بدم. این اطلاعات رو به

من داده، من نمی‌دونم چی می‌گه ببین به درد تو می‌خوره

همینطور زمانی که کاربر دوباره ipconfig میگیره،
لینوکس می‌گه، کاربر از من اطلاعات می‌خواد در باره تو. من که نمی‌دونم چی بگم، با استفاده از تابع Stat شما یا IOCTLهای وضعیتی از شما اطلاعات لازم رو

می‌گیره و در اختیار کاربر قرار می‌ده.

در سناریو بالا یه مثالی از لایه بندی در لینوکسه.

----------------------------------------------------------------------
لینوکس و Socket
----------------------------------------------------------------------
خوب، حالا این از اون ور لینوکس، یعنی طرفی که داده‌هارو میده به کارت شبکه و درایورش. لینوکس باید این طرف رو هم پیاده سازی کنه، یعنی دریافت داده‌ها از

کاربران  وApplicationها .

- همه چیز در لینوکس فایل است

Socketها فایل هستند. شما ابتدا یک Socket باز می‌کنید.
موقع باز کردن Socketها شما Protocol انتقال و ارتباط رو مشخص می‌کنید. همونطور که گفتیم، بسته بندی توسط لایه شبکه لینوکس صورت می‌گیره و ربطی به

کارت شبکه نداره. برای همین لینوکس دیگه نمی‌تونه، به کارت شبکه بگه به من چه، بیا ببین این چی می‌گه :P. باید خودش جواب بده.

int fd = socket (AF_INET, SOCK_STREAM, 0);

این یک سوکت با انتقال IP و ارتباط TCP می‌سازه. اگه fd رو بخواهید باهاش کار کنید، دقیقا مثل فایلها:
write
read
close
ioctl
می تونید بهش بزنید:

write(fd,"mydata",6);//write 6 bytes to fd

زمانی که شما یک Socket باز می‌کنید مستقیما نمی‌تونید روش بنویسید، بلکه اول باید بقیه مسیر رو هم مشخص کنید.

یعنی باید بگید این سوکت چیه ؟‌ میزبانه (Listen) یا مهمان (Connect).

Listen: در این حالت شما آماده دریافت یک Connection از شبکه هستید، یعنی منتظر می‌شید تا یه نفر بیاد به شما بگه سلام، تا شما بگی علیک سلام، چطوری؟
Connect: در این حالت شما می‌خواهید به یه نفر که Listen می‌کنه در یک Host دیگه متصل شید.

نمونه:
Host www.yahoo.com
Listen On TCP Port 80

Host YOUR_HOME_COMPUTER
Connect to www.yahoo.com Port 80

یعنی yahoo رو Port شماره 80 داره گوش می‌ده - Port رابط خروجی Socketهاست. یعنی زمانی که شما یک Socket باز می‌کنید  و داده‌هارو از Host خودتون

می‌فرستید بیرون، اگه یادتون باشه گفتیم باید این پرونده که می‌دید به کارمند اول، اسمتون رو روش بنویسید که وقتی برگشت صداتون بزنه. شماره Port هم

همینه وقتی شما Socket باز می‌کنید دادتون میخواد بره بیرون، باید یه شماره به شما بده، که بهش می‌گن Port. وقتی بسته رفت و برگشت کارش انجام شد،

لینوکس می‌گه به به Port مثلا 32477. یه نگاه تو دفترچش می‌کنه می بینه مال Socket شماره 300e مثلا که این Socketهم ماله برنامه FireFoxe. سریعا Firefox

رو از خواب دریافت اطلاعات (در بخش قبلی در مورد SUSPENDها صحبت شد) بلند می‌کنه می‌گه بلند شه اطلاعات اومده رو Porti که مربوط به Socket شماست.

البته یادتون باشه، که Connect و Listen مربوط میشه به TCP که از سلام و علیک سلام پشتیبانی می‌کنه. اما پروتکل آب دوغ خیاری مثل UDP که یهو یکی شروع

می‌کنه به ارسال اطلاعات روی یک Port دارای Connect و Listen نیست.
برای همین شما در پروتکلی مثل UDP فقط باید Socket خودتون رو BIND کنید یا بچسبونید به یه UDP Port. بعدم دیگه، باید وایسید که یه چیزی بیاد، سلام علیک

و Connect دیگه نداره، یهو یه سری داده میاد باید دریافت کنید.

----------------------------------------------------------------------
لینوکس و Protocolها
----------------------------------------------------------------------
پروتکل ‌ها دو دسته هستند، پروتکل‌هایی که زن و بچه شبکن، مثل IP، TCP و ... . این پروتکل ها در بخش شبکه لینوکس تعبیه شده و توسط خودش کنترل

می‌شن. پروتکل‌هایی دیگه‌ای هستند که دایی و خاله شبکن مثل، Name Resolve، ARP و ... . اینها توسط Moduleهایی برای لینوکس مشخص می‌شن و توسط

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

پروتکل‌ها Application Level هستنند و روی خاله و دایی و زن و بچه شبکه کار می کنن. خداییش جایی اینجوری در مورد شبکه صحبت می‌کنن.

اینجا سوال پیش میاد، که تو گفتی 2 دسته هستند، اینا که شد 3 دسته. دلیلش اینه که 1- حال ندارم برم دو رو بکنم سه 2-دوست نداری نخون، من دوست دارم

سه رو بگم دو.
یه دلیل فرعی هم داره، اینه که دسته اول اگه نباشن، شبکه کار نمی‌کنه، ولی دسته دوم اگه نباشن، شبکه فعالیت داره ولی مدیریت اون ممکنه ممکنه ممکنه با

مشکل مواجه بشه.ژ

پروتکل‌های دسته سوم،
DNS
DHCP
Mail
Http
FTP
Goopher
Finger
Stream Media
و ... هستند.

----------------------------------------------------------------------
شبکه لینوکس
----------------------------------------------------------------------
خوب طرف چپ و راست رو گفتیم.

می مونه وسط.

یعنی خود شبکه لینوکس، که سخت ترین و پیچیده ترین بخش شبکه در لینوکسه.

در این بخش این مسائل وجود داره:
چند کارت شبکگی،
چند پردازشگری،
چند پردازه‌ای،
کنترل حافظه،
Session Tracking،
Packet Tracking،
Process Tracking،
Load Control،
Module Control،
و ...

چند کارت شبگی: زمانی که چند کارت شبکه وجود داره، مثل چند تا خیابون، پلیس می‌خواد، چراغ راهنمایی می‌خواد و از اون بدتر، زمانی که یه بسته میاد باید

توسط ProtocOl های Routing مشخص شه این قراره رو کدوم کارت شبکه بره. در این بخش این سوال پیش میاد که کجا بره؟ اصلا بره یا نره ؟ بحث Packet

Filtering یا Firewall . شاید اصلا Packet مربوط به Host ما نیست. فقط اومده تو تا بره تو یه کارت شبکه دیگه، یعنی Forward کردن، یا bridging یا NAT.
اصلا این بسته کامل ؟ یعنی داده‌های لازم رو داره؟ با برش گردونم. اگر قراره برش گردونم به کی بدم ؟

چند پردازشگری: این خودش 280 صفحه مقاله می‌شه فقط بدونید در کد‌های کرنلی بخش‌هایی هستند به نام Critical Section که هرگز وسط یکیشون یکی دیگه

نباید اجرا بشه. برا همین پیدا کردن و مشخص کردن این بخش‌ها بسیار مهم.

چند پردازه‌ای: زمانی که چند تا پردازه وجود داره، دریافت Packetها از اینها و قرار دادن در جاهای مشخص و Tag کردن اونها با اون Process خیلی مهم. باید کنترل

اونها به طور کامل در دست باشه.

کنترل حافظه: بخش شبکه لینوکس همیشه به عنوان یک Media سریع که داده‌های زیادی رو اینور اونور می‌کنه باید حواسش به حافظه باشه. یعنی اینجوری

نباشه که یه بسته بیاد و طرف مقابلش آماده دریافت نباشه و این بخش بسته رو نگه داره و بگه Process غصه نخور، من نگهش می‌دارم تا طرف مقابل بگیره. این

باعث Load بالای حافظه می‌شه و در اینجا بسته باید سریعا به صاحبش برگردونده بشه و گفته بشه:

نبود

Unable to connect
Firefox can't establish a connection to the server at 128.9.9.0.

دیدید لینوکس به FireFox گفت: نیست، نگرد. این هم کمک به FireFox و کاربر می‌کنه که تصمیم جدید بگیرند و هم کمک به خود شبکه لینوکس می‌کنه که این

بسته در حافظه نمونه.

Session Tracking: تو یه سرور شلوغ میلیون‌ها Packet در ثانیه میرن و میان، باید اینها سریعا شناسایی بشه که مربوط به کدوم Socket یا Port هستند و سریعا

تحویل داده بشن. بنباید بسته ای گم بشه. در شبکه گم شدن بسته یعنی مرگ کامل Protocol. هیچ بسته‌ای نباید گم بشه، ببینید، نرسیدن بسته به دلیل

شلوغی یه مسئله دیگس ولی اینطوری نباید باشه که لینوکس یه بسته رو بگیره و ندونه باهاش چیکار کنه.

Process Tracking: فرض کنید، الان یک بسته اومد از port شماره 200 که مربوط به Socket شماره فلان و Process شماره فلان. فرض کنید این Process از بین رفته

با Dead شده یا Zombie شده. حالا مسئلس که این بسته باید چیکار بشه. Port باید بسته شه. به طرف مقابل باید گفته شه دیگه نفرست (TCP) و ...

Load Control: اگر استفاده از شبکه خیلی بالا رفت، بالا تر از حدی که شبکه لینوکس نتونه کنترل کنه باید از هر 2 طرف سرعت رو بیاره پایین، طرف داخل میشه

Suspend کردن Processها و طرف خارج میشه زبون خوش ICMP برای پایین آوردن سرعت و یا زبون ناخوش Reject کردن Packet.

Module Control: ماژول‌های شبکه همیشه باید Live باشن و نگهداری از اونها دست بخش شبکه لینوکسه، نباید یه ماژول سرش انقد شلوغ که گیر کنه یا تو

Loopهای بی مصرف بیافته، برای همین، شبکه‌ی لینوکس از ماژول‌های شبکه استفاده‌های سرویسی می‌کنه. یه کاری مشخص ازشون می‌خواد و خروجی

مشخص می‌گیره و چک می‌کنه آیا اون ماژول می‌تونه اون‌کار رو انجام بده یا نه.

----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
خوب پس دیدید، شبکه در لینوکس خیلی پیچیدس. واقعا هم همینطوره ماژول‌های شبکه در لینوکس پیچیده‌ترین و سخت ترین ماژول‌ها هستند و کنترل اونها دقت

زیادی می‌خواد. بیشترین Patchهای لینوکسم برای بخش شبکش طراحی میشه و البته نباید این سختی رو اینطوری باهاش بر خورد کرد که لینوکس توش مونده.

خیر لینوکس با الگوریتم‌های فوق پیچیده و فوق ارتقاع یافته (طی 20 سال) الان شبکه‌ای بسیار پویا و پایدار Stable داره و در Hostهایی با Load خیلی بالا، معمولا

media ها هستن که قدرت انتقال ندارند و نه لینوکس. سربار لینوکس روی شبکه چه از حافظه و چه از پردازش بسیار بسیار ناچیزه و تنها داده‌های کنترلی هستند

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

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

موفق باشید
از طرفEmadCT

قسمت یعدی

با سلامی دوباره

آنچه گذشت،

روز اول در مورد خود لینوکس صحبت کردیم که ببینیم آیا اصلا به ما می خوره یا نه. یعنی آیا نیازهای مارو برطرف می کنه و آیا استفاده از اون در سازمان

یا شرکت ما باعث بهبود در راندمان کاری یا بازدهی بیشتر میشه یا نه.

در قسمت دوم کمی در مورد کارهای ساده سیستم عامل صحبت کردیم که افرادی که می خوان با این سیستم عامل آشنا بشن حد اقل هارو بدونن و

در اصل اونارو هل دادیم تو محیط لینوکس. دستورات ساده، محیط گرافیکی و اطلاعات کلی.

قسمت سوم، افراد رو جدا کردم به 2 گروهی که می خوان همون در محیط لینوکس سرو کله بزنن و اصطلاحا با آزمون و خطا و تست برنامه ها خیلی

چیزهارو یاد بگیرن و افرادی که براشون جالب بود بشینن ببینن لینوکس چیه و آموزشی در این مورد ببینن. در قسمت قبلی از مجموعه آبکی با Kernel

آشنا شدیم. با Kernel لینوکس نه با Kernel. در چند بخش با Kernel لینوکس آشنا میشیم و بعد شرو می کنیم با خارج شده از محیط Kernel وارد محیط

کاربری بشیم و برنامه سازی لینوکس رو تجربه کنیم.

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

اپراتوری با اون رو (مثل ICDL).

-------------------------------------------------------------------------------
قسمت چهارم از سریال آبکی لینوکس بیاموز،
مدیریت حافظه، مدیریت پردازه

همانطور که گفته شد یکی از مهمترین مسئولیت های سیستم عامل مدیریت یکی از منابع Critical سیستم به نام Physical Memory که ما اون رو به

عنوان RAM می شناسیم.
اگر بخواهیم برگردیم به خیلی قبل، زمانی که مدیران IBM سرو کله می زدن که از Motorolla M6000 استفاده کنیم یا از Intel 8086، گزینه مورد انتخاب

اونها CPU ساخت شرکت Intel بود. از دید CPU حافظه به صورت Flat دیده میشه. یعنی اگر شما RAM سیستمتون 1GB پس از دید CPU از شماره 0 تا

1GB-1 آدرس دهی میشه.
یکی از مشکلاتی که این Arch داره اینه که، زمانی که سیستم عامل می خواد برنامه های مختلف رو در حافظه Load کنه دچار یه مشکل بزرگ میشه

و اونم اینه که یکبار برنامه ممکنه در آدرس 1000 قرار بگیره و بار دیگه در آدرس 2000. زمانی که شما برنامه می نویسید، متغیرهاتون رو به صورت

Relative آدرس دهی می کنید. یعنی من میگم یه متغیر دارم به نام A در آدرس 100 و یه متغیر دارم به نام B در آدرس 200. زمانی که برنامه من در

حافظه آدرس 1000 قرار میگیره، آدرس متغیر A من تبدیل به 1100 و متغیر B به 1200 تغییر پیدا می کنه.

نظر Motorolla این بود که زبان های برنامه سازی، در جدولی به نام Variable Table متغیر های خود رو قرار بدن و سیستم عامل زمان Load برنامه، آدرس

شروع برنامه رو به کل اعضای این Table اضافه کنه. اینجا بود صاحب بچه پدر نویسنده زبان برنامه نویسی در مورد اشاره گر ها و متغیر های Runtime در

می اومد.

یکی از دلایلی که ما الان میریم بازار رضا و ایران و پایتخت CPU شرکت Intel رو می خریم (AMD اون موقع تو دعوا نبود) اینه که در همون زمان Intel اومد

گفت، هزینه این محاسبه با من. اومد با ساختن یک Arch جدید به نام Segmentation مشکل رو حل کرد. گفت من حافظه رو به صورت Flat نمی بینم

بلکه اون رو به بخش های مجزایی تقسیم می کنم به نام Segment. آدرس دهی تبدیل شد به دو بخش، یک بخش Segment که مثل کشور می مونه و

یه بخش Offset که مثل شهر می مونه. Offset فاصله مورد نظر از اول اون بخش بود. یعنی فرض کنید من 100 بایت حافظه دارم و این رو به بخش های

10 بایتی تقسیم کنیم. آدرس 46 دیگه وجود نداره، آدرس درست میشه Segment شماره 4 و Offset یا فاصله شماره 6.

این اتفاق باعث شد که برنامه در Segment های مجزا Load شن و سیستم عامل نیازی نبود که آدرس متغیر ها رو عوض کنه، زیرا زمانی که برنامه از

CPU درخواست نوشتن در متغیر A یا آدرس 100 رو میکرد، CPU در فاصله یا Offset شماره 100 ازدن عامل از Load کردن پروسس ها در هر بخشی از

حافظه راحت بود.

CPU این اجازه رو به برنامه ها میدید که به آدرس های خارج از Segment خودشون هم دسترسی داشته باشند یعنی من به عنوان یه برنامه C تحت

DOS می تونستم، بخشی از حافظه که در Segment من نبود رو عوض کنم. به این نوع آدرس دهی اصطلاحا Far Addressing گفته میشد و در اون زمان

نیاز بود.

دلیل اجازه دادن Far Addressing در CPU های Intel خانواده های قدیمی نبودن بخش مرکزی به نام Kernel بود. بعنی در اون زمان از نظر سازنده های PC

برنامه هایی که روی کامپیوتر ها اجرا می شد همگی مهم و حیاتی بودن و یک هدف رو دنبال می کردند.

خانواده 8086 پیشرفت کرد و رسید به 80186( اینجا کامپیوتر اومد ایران، منم نداشتم ) و بعد 80286.

قبل از اینکه Intel پردازنده جدید خودشو به نام 80286 بده بیرون فشار هایی بهش اومد، چه فشاری. خیلی محافل خصوصی، عمومی و دانشگاهی دم

از Multiprogramming می زدند. یعنی اجرای چند برنامه به صورت همزمان.

Intel زیر این فشار ها Arch جدیدی رو همراه 286 بیرون داد به نام Protected Mode که در مقابل سیستم های قدیمی به نام Real Mode عمل می کرد.

همونطور که اسمش پیداس، مد محافظت شده نام داره. بعد از بیرون دادن 286 سیستم زمان بوت شدن در مد Real فعالیت میکرد و سیستم های عامل

اون زمان می تونستن از Protected Mode استفاده کنن. هنوز هم در سیستم های Pentium IV سیستم به صورت Real بوت میشه و در لینوکس

Start.o و در Windows فایل ntoskrnl.exe سیستم رو به مد Protected می برن.

در مد Protected از سیستم Segmentation استفاده میشه. با چند تفاوت بسیار مهم:
1- سایز Segmentها بسته به دلخواه سیستم عامل تنظیم می شه و سایز ثابتی ندارند.
2- در Real Mode حداکثر میزان آدرس دهی 16 بیت بود که میشد 65536 بایت یعنی 65K که Intel با اضافه کردن سیستم A20 به CPU های خانواده

186 به بالا، قابلیت استفاده از 20 بیت آدرس یا 1MB آدرس رو به سیستم عامل میداد. پس یکی از مشکلات Real Mode پشتیبانی حداکثر از 1MB

حافظست، در حالی که در Protected Mode آدرس دهی به صورت 32 بیت انجام میشه یعنی 4GB حافظه.
3- در Real Mode سطح دسترسی وجود نداشت که باعث میشد برنامه های مختلف بر روی هم نفوذ داشته باشند در حالی که در Protected Mode با

اجرای سطح دسترسی شما می تونید از Far Addressing برای Segment های خاصی جلوگیری کنید و این امر باعث این شده که زمانی که شما در

سیستم عامل Windows به آدرس غیر مجازی دسترسی داشته باشید، سیستم عامل به شما خطای Segmentation Fault بده و برنامه شما رو ببنده.

حالا اینکه چطور این عمل انجام میشه، در قسمت های بعدی آبکی در بخش Interrupt and Exceptions بهش میرسیم.
4- در مد Protected امکان ساختن یک محیط امن و غیر قابل دسترسی از بیرون وجود داشت، یعنی سیستم های عامل یک محیط امن با حداکثر سطح

دسترسی به همه Segmentها ایجاد می کردند و کدهایی که در این بخش نوشته میشه به Kernel یا هسته معروفن. کدهایی که امکان دسترسی به

تمامی بخش های حافظه رو دارن ولی از بیرون یعنی توسط Processها قابل دسترسی نیستند. پس عجیب ندونید که در سیستم عاملی مثل Windows

کاربران حق نداشته باشن که برای مثال به بخشی از حافظه مدیر سیستم دسترسی داشته باشند و اون رو خراب کنند. برای مثال دوستانی که با

برناهم نویسی آشنا هستند اگر از دید پروسس های سیستم حافظه Flat بود، امکان داشتن چند User بی معنی بود زیرا همشون به آدرس های هم

دسترسی داشتند و برای مثال فایلهای هم و Mail های یکدیگرو می خوندن.

مدتی گذشت و Intel شاداب از این قضیه که Segmentation داره، عمر خودشو سپری کرد. یه چیز رو فراموش نکنید، اینکه شما روی سیستم ویندوزتون

و لینوکستون چند کاربر بالا هستند و همشون چند برنامه رو دارند اجرا می کنن و به هم دسترسی ندارند 90% مدیون سیستم های حفاظتی سخت

افزاریه.

مدتی گذشت و سیستم جدید ارائه شد در زمینه بخش بندی حافظه به نام Paging. سیستم Segmentation از چرخه خارج شد به 2 دلیل:
1- قدرت Paging در ضمینه جدا سازی بخش های حافظه، امکان داشتن Virtual Addressing و امکان قرار نداشتن بخشی از اطلاعات بر روی Ram( ولی

دیده شدن به صورت آدرس های حافظه) و خیلی مسائل دیگر، وجود Segmentation رو زیر سوال می برد.
2- از نظر سیستم Linux که یک سیستم عامل Multiplatform استفاده از Segmentation که در خیلی از CPUها موجود نبود امری بی اساس بود.

الان در Windows و لینوکس از Paging استفاده میشه و استفاده از Segmentation در حد بسیار ناچیز و ابتدایی صورت می گیره و اصول کار بر روی اون

نیست.

Paging این قدرت رو به شما میده که برنامه خودتون رو به بخش های یکسان به نام Page تقسیم کنید و اون رو در حافظه Load کنید. در سیستم Paging

مسئله ای هست به نام Virtual Addressing. یعنی از دید هر Process حافظه از 0 شروع میشه تا برسه به 4GB. درحالی که آدرس 0 از دید پروسه،

ممکنه در هر بخشی از حافظه باشه. پس Virtual Addressing در سیستم Paging اون مشکل مربوط به بارگذاری برنامه در هرجایی از حافظه رو حل می

کنه. مورد بعدی اینکه در Segmentation بخش های مختلف حافظه در Physical Memory هم پشت سر هم قرار دارند که این باعث میشد که زمانی که

شما مقدار حافظه خالی معدل 1MB داشتید ولی به صورت Fragmented یعنی بخش بخش شده به صورت 2 تا 512KB برنامه شما که حجمش 1MB

بود در حافظه Load نشه. البته در این سیستم ها، سیستم عامل عملی رو انجام میده به نام Compaction یا جمع و جور کردن، یعنی Segmentهای

کوچک رو جمع می کرد بغل هم که فاصله خالی به انتها انتقال پیدا کنه، ولی با همه سرعت RAM این عمل خیلی وقتگیر بود.

در سیستم Paging شما نیازی نیست که آدرسی که از دید برنامه 0 تا 1MB دیده میشه رو در حافظه اصلی هم به همین صورت قرار دهید، بلکه

Pageهای مختلف می تونند در هر بخشی از حافظه اصلی و یا روی Disk قرار بگیرند.

پیدا کردن و رهگیری Pageها توسط CPU صورت می گیره ( یعنی همون 90%) کار. پس سیستم عامل چیکارس؟
سیستم عامل در جداولی به نام Page Directory و Page Table میاد این آدرس ها رو قرار می ده و CPU رو کمک می کنه در زمینه این که برای پیدا

کردن یک آدرس مجازی به چه بخشی از حافظه اصلی برو.

Paging یه خوبیه دیگم داره. چند آدرس مجازی می تونن به یه آدرس واقعی اشاره کنن. این مزیت باعث میشه که زمانی که من برای اولین بار برنامه

Office رو Load می کنم در حافظه و دارم نامه ای رو می خونم و در کنارش برنامه Office دیگه ای رو باز می کنم و اون نامه رو خلاصه می کنم، فقط یک

نسخه از برنامه Office در حافظه باشه. همانطور که گفته شد در جلسه قبلی حافظه به طور عمده دو نوع Data و Code داره. Code بخشهایی از

حافظه هستند که تغییر نمی کنن و فقط اجرا می شن پس چه نیازی هست به اینکه چند نسخه از برنامه office در حافظه باشه ؟

در ضمن لینوکس تلنولوژی دیگه ای داره به نام COW یا Copy On Write. یعنی زمانی که من برنامه Office رو دوباره اجرا می کنم، سیستم حتی بخش

داده رو هم بین من و Office قبلی Share می کنه. اههههههههههههههههههههه.
اینجوری که شیر تو شیر میشه، من تو این Office می نویسم، اون تو اونیکی ، بعد قاطی میشه، پاطی میشه و الی آخر.

لینوکس جواب می دهد خیر.

زمانی که شما Office رو برای بار دوم اجرا کردید به جای Copy گرفتن از 30-40 مگابایت آدرس داده ای که Word داره ازش استفاده می کنه، میاد همرو

به اشتراک می ذاره. فقط برای برنامه دوم این بخش از حافظه رو در همون جداول Page که گفتیم به صورت Read Only قرار میده. زمانی که من در

Office دوم شروع به نوشتن می کنم، CPU با یه Interrupt به سیستم عامل میگه، این برنامه رو ببند، این یه برنامه بی ادب فلان که می خواد بیاد بره

رو یه بخش از یه برنامه دیگه بنویسه. سیستم عامل لینوکس چک می کنه مینینه نه، خودش از قصد Read Only کرده بود. اینجا سریعا میاد فقط از اون

Page که Office دوم می خواد روش بنویسه یه کپی می گیره و داده های جدید رو تو اون بخش می نویسه و آدرس این Page جدید رو و فقط همین

Page رو در جدول مربوط به برنامه Office دوم وارد می کنه.

نتیجه اخلاقیش اینه که فقط بخش هایی از حافظه در Office دوم ایجاد می شن که دست خورده باشن.

به همین خاطر به این تکنیک گفته میشه کپی کردن در زمان نوشتن یا همان گاو (COW).

پس بدونید اگر مدیریت حافظه در سیستم های عامل به صورت سطحی دیده می شد شما با یک RAM 1GB محال بود بتونید برید Counter Strike بازی

کنید چه برسه به اینکه از پشت برید با چاقو بکنید شیکمش بپاشه به دیوار.

یه مدت گذشت دوباره به Intel فشار وارد کردن، و گفتن که بابا 32 بیت آدرس یا همون 4GB برای سرور های ما کمه. از CPU مدل 64 بیتم نمی خواهیم

استفاده کنیم. زیر این فشارها Intel تکنولوژی رو به خودش اضافه کرد به نام گسترش آدرس دهی فیزیکی . اومد پایه های حافظه رو از 32 کرد 36. یعنی

16 برابر، در ضمن Code Name مربوط به CPU هاشو عوض کرد به Intel Pentium Pro. این تکنولوژی ملغب به PAE است که مخفف Physical Address

Extension و یا Physical Address Expansion. حالا CPUهای Intel می تونستند به جای 4GB آدرس 64GB حافظه اصلی رو آدرس دهی کنن که خیلی

هم کافیه برای همه سرور ها.

مشکلی که بود، این بود که آدرس دهی هنوز در درون سیستم به صورت Virtual تنها 32 بیت بود، یعنی برنامه ها فقط می تونستند از 4GB از حافظه به

صورت شخصی استفاده کنند. این شخصی رو دقت کنیدا. ما می تونستیم از کل حافظه 64GB استفاده کنیم ولی هر برنامه، یعنی یه برنامه به صورت

تنها فقط می تونست 4GB استفاده کنه. Windows اومد گفت AWE استفاده می کنم (مایع دستشویی نه ها) لینوکس هم اومد با mmap سرو تهشو

هم اورد ( و هم میارن، چون الان هم همینه) یعنی مشکل به صورت نرم افراری حل شد، تا جایی که 64 بیتی ها اومدند و دیگه حافظه کیه. البته بگما

در سیستم های 64 بیت فقط از 48 بیت برای آدرس دهی استفاده می شه که میشه یه چیزی در حدود 280TB که اگه شما برای شن های کویر لوت

هم شناسنامه درست کنی که چند سالشونه و چند تا شتر لهشون کردن با چه خشونتی کم نمیاد.

خوب از مدیریت حافظه یه کم خارج می شیم چون اگر تخصصی بخواهیم در مورد Memory Management صحبت کنیم، 270 صفحه باید مورد Intel و

270 صفحه هم باید در مورد AMD صحبت کنیم که اینا چه می کنن با حافظه.

نتیجه گیری: لینوکس هیچکارس، همه چیز با سخت افزار
لینوکس به سخت افزار کمک می کنه که از حافظه بهینه استفاده کنه.
در CPU های جدید ما دیگه RAM رو نمی بینیم.
در CPU های جدید سیستم عامل نیست که جلوی مارو می گیره و نمی ذاره به بخش های دیگه حافظه دست بزنیم بلکه سخت افزار Processor این

کار رو می کنه.
در CPU های L2 Cache عمل Cache کردن Page ها در خود CPU انجام میشه و لینوکس هیچکارس و فقط Policy تعریف می کنه و می تونه برای خودش

Cache داشته باشه که مسخرس، RAM رو RAM کش کنه که پس Caching کامل به عهده CPU.

------------------------------------------------------------------------------------------------------------------------------------
بخش دوم در مورد مدیریت پردازه هاست:

زمانی که Protected Mode اومد 2 تا ارمغان برای ما داشت. یکی همین بخش بخش کردن حافظه و عدم دسترسی به بخش های دیگه بود. دیگریش

امکان داشتن کاربران زیاد و برنامه های همزمان بود.

اولا بریم سراغ اینکه چطور Winamp و Word باهم کار می کنن.

ببینید، در سیستم های کامپیوتری همیشه CPU مظلوم واقع میشد. یعنی شما به CPU هر حرفی میزدید یا باید از RAM اطلاعات می خوند و یا باید روی

DISK می نوشت.

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

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

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

سیستم عامل نویسان دیدن اینجوری نمیشه، مثلا برنامه ای مثل Winamp فقط 2% از CPU رو نیاز داره، ولی همیشه فعال. یعنی همش داره از روی

Disk می خونه و میده به کارت صدا.

پس اگه مدیریت Process نداشته باشیم، Word و Winamp که سهله، زمان پخش آهنگ Mouse رو نمی تونید تکون بدید.

فرض کنید Winampبه CPUبگه فلان اطلاعات رو به من از دیسک بده، CPU این دستور رو به کنترلر هارد میده و اون تنبل هم شروع می کنه به چرخیدن،

زمانی زیاد طول می کشه که اطلاعات رو به CPU برگردونه. زمانی که این اطلاعات میرسه به CPU، دوباره Winamp میگه خیلی خوب همرو کپی کن رو

آدرس کارت صدا. دوباره CPU آروم آروم باید این اطلاعات رو بده کارت صدا.

اولا از کارت صدا ممنونیم که یه بخش Buffer داره و می گه تو بده من تند تند من کم کم پخش می کنم ولی دیسک چی ؟

نتیجه این شد که اومدن گفتن، زمانی که هارد داره کار می کنه، CPU وای نسه، بره سراغ کارای بعدیش. پس از کجا CPU بفهمه که کار هارد تموم شد؟

ما دو روش اطلاع گیری در CPU داریم. یه روش معروف به Polling. یعنی CPU میگه اومد ؟ اومد ؟ اومد ؟ اومد ؟ آهان بده - مرسی - گرفتی ؟ گرفتی ؟

گرفتی ؟ گرفتی ؟

این روش در Port ها استفاده می شه. روش دیگه ای هست به نام Interrupt، یعنی جا اینکه CPU خودشو ناراحت کنه، هارد زمانی که کارش تموم شد

به CPU میگه خوندم یا نوشتم، حالا ازم بگیر. باز هم از DMA تشکر می کنیم که کارای حافظه ای رو هم از CPU گرفته و CPU فقط صرف پردازش می

شه.

در روش دوم، زمانی که Winamp به CPU میگه آهنگ رو یه تیکه بده من از دیسک، CPU به دیسک میگه آهنگ  رو بده. دیسک آهنگ رو به CPU نمیده،

این وسط DMA میاد کمک CPU و آهنگ رو از دیسک میگیره، میریزه رو RAM و بعدش به CPU میگه تموم شد. CPU در این مدت داشته Cursor برنامه

Word رو چشمک میزده و Mouse شما رو که تکون می دادید نقاشی می کرده. تو این زمان سریعا CPU میپره به کار قبلیش اطلاعات رو از RAM ور می

داره یه کله میده حافظه کارت صدا و میاد دوباره برای شما چشمک میزنه.

زمانی که یه برنامه به CPU میگه یه کار Interrupti برای من بکن، در اصل این درخواست رو از طریق سیستم عامل میگه. سیستم عامل درخواست رو

به CPU میده ( و قبلش چک می کنه اصلا این Winamp حق داره فلان آهنگ رو که مال خودش نیست پخش کنه) و Winamp رو از لیست برنامه ها

میندازه بیرون.

هر Interrupt ( که بعدا می گیم چیه) برای خودش یه لیست داره، سیستم عامل Winamp رو قرار می ده تو این لیست و دیگه اجراش نمی کنه، چون

Winamp از دیسک یه چیزی خواسته که طول می کشه. زمانی که اطلاعات از دیسک رفت تو DMA، و DMA ریخت تو RAM و بعد به CPU گفت، CPU

هم میاد به سیستم عامل میگه. اینجاست که سیستم عامل میاد همه برنامه های موجود در لیست اون Interrupt رو دوباره میاره تو لیست اجرایی.

دقت کنید اجراشون نمی کنه ها میاره تو لیست، تا اینکه زمان بهشون برسه و اجرا بشن.

در اصل عمل Switch کردن بین برنامه ها، زمانی که ما یه CPU داریم و در آن واحد می تونه یه کار کنه به این صورت انجام میشه، که به جز DIsk و DMA

و امثالهم، یکی دیگه هست که به CPU همش Interrupt میده و اون هم Timer سیستم شماست. CPU هم از خدا بی خبر این رو میده به سیستم

عامل، سیستم عامل این Tick هایی که میاد رو میشمره اگه رسید به یه عددی، کلیه متغیر های خودشو که اسمشون رجیستر، میریزه تو RAM، بعد از

یه بخش دیگه RAM یه برنامه دیگرو فعال میکنه، میگه حالا چند تا Tick هم تو برو. اینجاست که شما ساعت Windowsتون بازه داره ثانیه میزنه اون ور هم

Cursor برنامه Word شما داره چشمک میزنه.

سوال پیش میاد، که تو Task Manager که کلی برنامس، اگه بخواد به هر کدوم یه ذره بده، که کلی میشه، پس ثانیه باید دیر بره. اینطور نیست. بیشتر اون برنامه هایی که میبینید در لیست Task Manager، همشون خوابننننننننننننننننننننننننن. یکی منتظر شبکس، یکی منتظر Keyboard، یکی منتظر دیسک، یکی منتظر یه تغییر تو Registry و ... .

در هر زمان به صورت معمول شما 2 تا Process  از نوع Ready دارید. Ready یعنی Processهایی که خیلی هم هوشیارن، فقط هم CPU میخوان کار دیگه هم ندارن. مثل Photoshop زمانی که دارید Filter میدید. یعنی از تمام وقتش می خواد استفاده کنه. برنامه ای مثل Winamp حتی زمانی که Ready میشه و سیستم عامل میگه بیا چند تا Tick ماله تو، از وقتش استفاده نمی کنه و سریع میگه از دیسک چیزی می خوام و دوباره میره تو خواب و زمان میاد دوباره برای Photoshop.

به جز Process های Ready همیشه به تعداد CPU ها Process داریم به صورت Running. اگر شما یه CPU دارید پس همیشه یه Process هست که داره اجرا میشه، خوب زمانی که Winamp دیسک می خواد، Office هم یه چشمک میزنه میره تو لیست Timer که نیم ثانیه بگذره دوباره چشمک بزنه، این وسط چی ؟

پروسسی در لینوکس و ویندوز هست با شماره 0 - در لینوکس بهش میگن idle در ویندوز میگن System Idle Process. همیشه هم مصرفش بالاست یعنی 95% . زمانی که کسی CPU میخواد اول به اون داده میشه و بعد به IDLE.

بازم سوال پیش میاد، پس اگه این داره عین خوره CPU می خوره اونم 95% چرا وقتی Photoshop رو بالا میارم و اون هم 95% از CPU استفاده می کنه CPU داغ میشه و مثلا در Laptopها فن سیستم روشن میشه و الی آخر ؟

جواب می دیم که کدی که در کرنل Windows و لینوکس نوشته شده برای این برنامه که idle نام داره، یکی از Instruction های مخصوص CPU و یا در صورت عدم وجود Instruction تهی یا nop. زمانی که شما به CPU میگید nop یعنی استراحت کن، برای همینه در Laptopها زمانی که شما برنامه ای رو باز می کنید صدای فنتون زیاد میشه، چون دستوری که داره اجرا میشه دیگه استراحت نیست و CPU شروع می کنه به کار کردن.

مطلب دیگه ای که هست اینه که، فقطی تیک های یه برنامه تموم شد، دفعه بعد چطوری از همونجا ادامه میده.

گفتیم که سیستم عامل میاد Registerهارو میریزه در بخش های از حافظه. این بخش ها در لینوکس معروف هستند به Task Strcture. غیر از اینکه آخرین بار تا کجا رفته جلو و چیکار کرده، اینکه چه بخش هایی از حافظه رو اشغال کرده در چه Pageهایی و چه فایل های بازی داره و کدوم کاربر این رو اجرا کرده و خیلی چیز های دیگه در این ساختار ذخیره می شن.

سوال دیگه اینکه، اگر من می خوام یه کار مهم کنم، کاری که وسطش نباید قطعی داشته باشم، یعنی خیالم باید راحت باشه که سیستم یهو هوس نمی کنه وقت رو از من بگیره و چند ثانیه بعد به من بده، چیکار کنم. به این بخش ها اصطلاحا میگن Critical Section یا بخش های حیاتی. در روش ساده قبل از ورود به این بخش ها توسط دستور cli، کلیه Interruptها قطع میشن، این قطعی باعث این مشه که دیگه CPU صدای Timerرو که جیغ میزنه Tick، Tick نشنونه و چون نمی شنونه به سیستم عامل هم نمیگه و همینطوری راهشو ادامه میده و اون بخش Critical به صورت یکپارچه اجرا میشه. بعد که کار بخش Critical تموم میشه، دستور sti صدا زده میشه و پنبه از گوش CPU در میاد.

این بحث های Critical Section و Race Condition و Synchronization رو در بخش های بعدی داستان های آبکی لینوکس بیاموز آموزش می دیم.

خوب یه سری نکته می مونه که باید بگم:
1- کلیه عملیاتی که گفته شد، چه در بخش حافظه و چه در بخش CPU از دید کاربر مخفیه و فقط نتیجه مثبتش به اون میرسه.
2- مدیریت حافظه و پردازه ها خیلی خیلی خیلی سنگینتر از این نقشه ای که طرح شد، و اسناد مربوط بهش رو می تونید در کتابهای Intel Architecture و کتب مربوط به سیستم عامل پیدا کنید.
3- اضافه شدن یک CPU به سیستم کلی کلی کلی کلی مسائل رو پیچیده تر می کنه، چون قطع کردن Interrupt گوش یکی از CPU هارو می گیره و اون یکی هر کاری دلش بخواد می کنه، برای همین زمانی که شما Source kernel لینوکس رو مشاهده می کنید، پیچیدگی های خیلی زیادی داره که 90% مربوط به Synchronization و SMP یا همون Symmetric Multi Processing یا چند پروسسوریه.

خوب تا قسمت بعدی سریال آبکی لینوکس بیاموز
موفق باشید
از طرف EmadCT

تکنولوژی DSL

امروزه، اینترنت میرود که بعنوان جزء لاینفک زندگی انسان این عصر قرار گیرد. بدون شک حتی اگر یکبار هم شده با این تکنولوژی روز دنیا برخورد کرده باشید به نقش وسیع و اهمیت و لازمه حضور آن پی خواهید برد. همان اندازه که روز به روز به اهمیت وجودی اینترنت افزوده میشود به موازات آن سرعت دستیابی به اطلاعات از طریق این تکنولوژی نیز اهمیت فراوانی پیدا میکند. به همین جهت راه حل های متفاوتی در جهت اتصال به شبکه جهانی پیشنهاد میشود که بی شک آسان ترین و کم هزینه ترین روش همیشه مورد توجه قرار میگیرد. در این بین تکنولوژی DSL گوی سبقت را از مابقی راه حلها ربوده به نحوی که روزانه حداقل 000ر20 نفر در سطح جهان به علاقه مندان این تکنولوژی افزوده میشود. اما براستی چرا؟ چرا تکنولوژی DSL به محبوبیتی این چنینی دست یافته است؟

شاید دلایلی که در ذیل میآید به اندازه کافی سخنگوی این سئوال باشد.
· شما میتوانید ضمن ارتباط با اینترنت، از خط تلفن خود برای مکالمات صوتی استفاده کنید.
· سـرعت این ارتباط خـیلی بالاتر از یک مودم معمولی اسـت (mbps5/1 در مقایسه با kbps56 مودمهای کنونی)
· در این شیوه لزوماً نیازی به کابل کشی جدید ندارید بلکه میتوانید از خط تلفن معمولی خود برای ارتباط استفاده کنید.
· ارتباط دائمی با شبکه اینترنت و عدم قطعی
· هزینه شارژ ماهیانه پایین تر
· مدیریت ساده تجهیزات DSL
· پشتیبانی از کلیه پروتکلها و بهره وری از آخرین امکانات سوئیچها چون:
IP PACKET FILTERING, TRAFFIC SHAPING, VLAN


چگونگی عملکرد تکنولوژی DSL:

1. آشنایی با خطوط معمولی تلفن و مشخصات آنها:
بی شک اولین سوالی که در مورد DSL مطرح میشود این است که چگونه از خط تلفن میتوانید بطور همزمان برای مکالمات تلفنی و ارتباط on Line با اینترنت استفاده کنید؟ همانطوریکه همگی میدانید سیستم تلفن استاندارد مبتنی بر یک زوج سیم مسی میباشد که مخابرات منطقه آنرا در خانه شما نصب میکند. سیمهای مسی دارای مقدار زیادی فضا برای حمل اطلاعات بیش از مکالمات تلفنی هستند. استفاده از بخش بسیار کوچکی از کل عرض باند سیم مسی جنبه تاریخی دارد. همچنین محدود شدن فرکانسها از طرف دیگر به سوئیچها, تلفنها و سایر تجهیزات, دارد که مسئولیت انتقال صوت را برعهده دارند. اما در سیستم DSL مبنای کارکرد براساس انتقال دیجیتال اطلاعات و صوت پایه گذاری شده به همین دلیل بر محدودیتهای موجود در سیستم آنالوگ کنونی غلبه کرده است.

2. تجزیه سیگنال:
اغلب منازل و کاربران تجاری کوچک به یک خط DSL نامتقارن (ADSL) متصل میشوند. ADSL فرکانسهای موجود در یک خط را براساس این فرض که اغلب کاربران اینترنت اطلاعات بسیار بیشتری را نسبت به آنچه که ارسال میکنند از اینترنت دریافت مینمایند, تقسیم میکند. دو استاندارد تقریبا" ناسازگار در مورد تکنولوژی ADSL وجود دارد. استاندارد رسمی ANSI که روش DMT را برای تکنولوژی DSL پایه گذاری کرده که البته اغلب تجهیزات ADSL امروزی از این روش استفاده میکنند و استاندارد قدیمی تر بنام Carrie less Amplitude/Phase یا سیستم SCAP که قبلا" از آن استفاده میگردید.
در سیستم ADSL به منظور استفاده بهینه از پهنای باند 1/1 مگا هرتزی خطوط مسی, آن را به 257 کانال 4 کیلوهرتزی تقسیم مینمایند. از آنجا که برای انتقال صوت (تلفن) تنها 4 کیلو هرتز پهنای باند کافی است لذا کانال آخر را برای انتقال فاکس و تلفن (صوت) استفاده مینمایند و 256 کانال دیگر را بصورت 64 کانال برای ارسال اطلاعات و 128 کانال برای دریافت اطلاعات ( و مابقی 64 کانال برای اطلاعات کنترلی) تقسیم بندی مینمایند, بطوریکه در بهترین وضعیت ( با در نظر گرفتن 192 کانال khz4) به سرعتی معادل mbps9 (مگابیت بر ثانیه) میرسیم که البته حداکثر سرعت مورد استفاده در ADSL ها معادل mbps3/2 میباشد.

تجهیزات DSL:

1. مودم DSL یا ATU-R
اغلب مشترکین خانگی به منظور دریافت اطلاعات از اینترنت از این مودم بهره میگیرند. شرکتی که سرویس DSL را ارائه میدهد معمولا" مودم را بعنوان بخشی از نیازهای نصب سیستم عرضه مینماید.

2. Splitter
همانطوریکه ذکر شد صوت و data به طور همزمان روی خطوط مسی در تکنولوژی xDSLفرستاده میشود. به منظور جدا کردن صوت و data در طرف مشترک از splitter بهره میگیرند تا data را بسمت کامپیوتر و صوت (تلفن و فاکس) را به سمت تجهیزات مربوطه هدایت کند.

3. DSLAM
DSLAM، خطوط ارتباطی جهت یافته از سوی تعداد زیادی از مشترکین را دریافت نموده و آنها را روی یک خط ارتباطی واحد با ظرفیت بالا به اینترنت منتقل میکند.
DSLAM قادر به پشتیبانی چندین نوع DSL در یک مرکز تلفن واحد و تعداد گوناگونی از پروتکلها و روشهای مدولاسیون میباشد بعلاوه DSLAM میتواند امکاناتی همچون مسیریابی یا تخصیص آدرس دینامیکی IP نیز برای مشرکین فراهم کند. در واقع DSLAM را میتوان دلیل اصلی تفاوت بین سرویس دهی از طریق ADSL و از طریق مودم کابلی به حساب آورد.

معایب DSL:
عیب اصلی سیستم DSL در این است که میزان بهره گیری شما از DSL مبتنی بر فاصله ایست که شما از سرویس ADSL دارید. ADSL یک سرویس حساس به فاصله میباشد همچنانکه طول ارتباط افزایش می یابد کیفیت سیگنال کاهش یافته وسرعت ارتباط کم میشود. حداکثر فاصله جهت سرویس دهی توسط سیستم ADSL میتواند به 5460 متر برسد. تکنولوژی ADSL میتواند حداکثر سرعت 8Mbps downstream در فاصله حدود 1820 متر و سرعت upstream تا kbps640 را در اختیار کاربران قراردهد. که البته در عمل حداکثر سرعت مورد استفاده در ADSL ها 2.3mbps میباشد. اما چرا فاصله یک محدودیت برای سیستم DSL به شمار میرود در حالیکه این محدودیت برای مکالمات تلفنی وجود ندارد؟ جواب این سئوال در تقویت کننده های کوچکی به نام Loading coils میباشد که شرکت تلفن برای تقویت سیگنالهای صوتی استفاده میکند. که این تقویـت کننده ها با سیگنالهای ADSL سازگاری ندارند. البته پارامترهای دیـگری همچـون Bridge Taps و کابلهای فیبرنوری نیز میتوانند تآثیر منفی روی تکنولوژی ADSL بگذارند.

آینده DSL:
همانطوریکه در مقدمه ذکر شد روزانه 000ر20 نفر به علاقه مندان ارتباط از طریق DSL در سطح جهان افزوده میشود و این به نوبه خود رقابت این تکنولوژی را با تکنولوژیهایی همچون مودم های کابلی و اینترنت ماهواره ای به خوبی نشان میدهد. برطبق تحقیقات انجام گرفته از طرف شرکت IDC تا سال 2003 تعداد مشترکین خانگی استفاده کننده از مودم کابلی فراتر از 8980000 خواهد بود درحالیکه DSL در سال 2003 بیش از 9300000 مشترک خانگی دارد.
درسالهای اخیر کشور کره تنها با داشتن 55 میلیون جمعیت بشترین مصرف کننده DSL در جهان میباشد به نحویکه سئول به بهشت DSL مبدل شده است و شرکتهای فعال در زمینه شبکه در کره پیشرو این تکنولوژی در جهان میباشند.

منبع:www.cappuccinomag.com

استفاده از 100 درصد پهنای باند در ویندوز XP

در ویندوز XP در حالت پیش فرض Packet Scheduler سیستم را به 20 درصد از پهنای باند یک اتصال به اینترنت
محدود می کند. یعنی اگر شما این تنظیمات را تغییر ندهید تنها قادرید از 20 درصد از پهنای باند اتصالتان به اینترنت
بهره ببرید. برای این که بتوانید از 100 درصد پهنای باندتان استفاده کنید مراحل زیر را انجام دهید:

1- Run را از منوی Start اجرا کنید.
2- در Run عبارت gpedit.msc را تایپ کرده و OK را کلیک کنید.
3- منتظر بمانید تا Group Policy اجرا شود.
4- در بخش Local Computer Policy و در زیر Computer Configuration گزینه Administrative Templates را
گسترش دهید (این کار را با کلیک بر روی علامت + کار آن انجام دهید)
5- در لیست باز شده گزینه Network را نیز گسترش دهید.
6- حال در این لیست QoS Packet Scheduler را انتخاب کنید.
7- به گزینه هایی که در سمت راست ظاهر می شوند دقت کنید.
8- بر روی Limit reservable bandwith کلیک راست کرده و Properties را کلیک کنید.
9- پس از اینکه پنجره Limit reservable bandwith Properties باز شد در برگه Setting و در زیر Limit reservable
bandwith گزینه Enabled را انتخاب کنید .
10- مشاهده می کنید که با انتخاب آن در روبروی Bandwidth Limit مقدار پیش فرض آن یعنی 20 درصد به نمایش
در می آید.
11- به جای عدد 20 مقدار 0 را تایپ کرده و OK را کلیک کنید.
12- حال به Connection ی که بوسیله آن به اینترنت وصل می شوید رفته و بر روی دکه Properties کلیک کنید.
13- به برگه Networking بروید و دقت کنید که QoS Packet Scheduler فعال باشد (تیک کنار آن مشاهده شود)
14- این پنجره را OK کنید.
15- کامپیوتر خود را Restart کنید.

شبکه های خصوصی مجازی

در طی ده سال گذشته دنیا دستخوش تحولات فراوانی در عرصه ارتباطات بوده است . اغلب سازمانها و موسسات ارائه دهنده کالا و خدمات که در گذشته بسیار محدود و منطقه ای مسائل را دنبال و در صدد ارائه راهکارهای مربوطه بودند ، امروزه بیش از گذشته نیازمند تفکر در محدوده جهانی برای ارائه خدمات و کالای تولیده شده را دارند. به عبارت دیگر تفکرات منطقه ای و محلی حاکم بر فعالیت های تجاری جای خود را به تفکرات جهانی و سراسری داده اند. امروزه با سازمانهای زیادی برخورد می نمائیم که در سطح یک کشور دارای دفاتر فعال و حتی در سطح دنیا دارای دفاتر متفاوتی می باشند . تمام سازمانهای فوق قبل از هر چیز بدنبال یک اصل بسیار مهم می باشند : یک روش سریع ، ایمن و قابل اعتماد بمنظور برقراری ارتباط با دفاتر و نمایندگی در اقصی نقاط یک کشور و یا در سطح دنیا

اکثر سازمانها و موسسات بمنظور ایجاد یک شبکه WAN از خطوط اختصاصی (Leased Line) استفاده می نمایند.خطوط فوق دارای انواع متفاوتی می باشند. ISDN ( با سرعت 128 کیلوبیت در ثانیه )، ( OC3 Optical Carrier-3) ( با سرعت 155 مگابیت در ثانیه ) دامنه وسیع خطوط اختصاصی را نشان می دهد. یک شبکه WAN دارای مزایای عمده ای نسبت به یک شبکه عمومی نظیر اینترنت از بعد امنیت وکارآئی است . پشتیانی و نگهداری یک شبکه WAN در عمل و زمانیکه از خطوط اختصاصی استفاده می گردد ، مستلزم صرف هزینه بالائی است

همزمان با عمومیت یافتن اینترنت ، اغلب سازمانها و موسسات ضرورت توسعه شبکه اختصاصی خود را بدرستی احساس کردند. در ابتدا شبکه های اینترانت مطرح گردیدند.این نوع شبکه بصورت کاملا" اختصاصی بوده و کارمندان یک سازمان با استفاده از رمز عبور تعریف شده ، قادر به ورود به شبکه و استفاده از منابع موجود می باشند. اخیرا" ، تعداد زیادی از موسسات و سازمانها با توجه به مطرح شدن خواسته های جدید ( کارمندان از راه دور ، ادارات از راه دور )، اقدام به ایجاد شبکه های اختصاصی مجازی VPN)Virtual Private Network) نموده اند.

یک VPN ، شبکه ای اختصاصی بوده که از یک شبکه عمومی ( عموما" اینترنت ) ، برای ارتباط با سایت های از راه دور و ارتباط کاربران بایکدیگر، استفاده می نماید. این نوع شبکه ها در عوض استفاده از خطوط واقعی نظیر : خطوط Leased ، از یک ارتباط مجازی بکمک اینترنت برای شبکه اختصاصی بمنظور ارتباط به سایت ها استفاده می کند.

عناصر تشکیل دهنده یک VPN

دو نوع عمده شبکه های VPN وجود دارد :

● دستیابی از راه دور (Remote-Access) . به این نوع از شبکه ها VPDN)Virtual private dial-up network)، نیز گفته می شود.در شبکه های فوق از مدل ارتباطی User-To-Lan ( ارتباط کاربر به یک شبکه محلی ) استفاده می گردد. سازمانهائی که از مدل فوق استفاده می نمایند ، بدنبال ایجاد تسهیلات لازم برای ارتباط پرسنل ( عموما" کاربران از راه دور و در هر مکانی می توانند حضور داشته باشند ) به شبکه سازمان می باشند. سازمانهائی که تمایل به برپاسازی یک شبکه بزرگ " دستیابی از راه دور " می باشند ، می بایست از امکانات یک مرکز ارائه دهنده خدمات اینترنت جهانی ESP)Enterprise service provider) استفاده نمایند. سرویس دهنده ESP ، بمنظور نصب و پیکربندی VPN ، یک NAS)Network access server) را پیکربندی و نرم افزاری را در اختیار کاربران از راه دور بمنظور ارتباط با سایت قرار خواهد داد. کاربران در ادامه با برقراری ارتباط قادر به دستیابی به NAS و استفاده از نرم افزار مربوطه بمنظور دستیابی به شبکه سازمان خود خواهند بود.

● سایت به سایت (Site-to-Site) . در مدل فوق یک سازمان با توجه به سیاست های موجود ، قادر به اتصال چندین سایت ثابت از طریق یک شبکه عمومی نظیر اینترنت است . شبکه های VPN که از روش فوق استفاده می نمایند ، دارای گونه های خاصی در این زمینه می باشند:

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

▪ مبتنی بر اکسترانت . در مواردیکه سازمانی در تعامل اطلاعاتی بسیار نزدیک با سازمان دیگر باشد ، می توان یک اکسترانت VPN را بمنظور ارتباط شبکه های محلی هر یک از سازمانها ایجاد کرد. در چنین حالتی سازمانهای متعدد قادر به فعالیت در یک محیط اشتراکی خواهند بود.

استفاده از VPN برای یک سازمان دارای مزایای متعددی نظیر : گسترش محدوه جغرافیائی ارتباطی ، بهبود وضعیت امنیت ، کاهش هزینه های عملیاتی در مقایسه با روش های سنتی WAN ، کاهش زمان ارسال و حمل اطلاعات برای کاربران از راه دور ، بهبود بهره وری ، توپولوژی آسان ،... است . در یکه شبکه VPN به عوامل متفاوتی نظیر : امنیت ، اعتمادپذیری ، مدیریت شبکه و سیاست ها نیاز خواهد بود.

شبکه های LAN جزایر اطلاعاتی

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

با توجه به موارد گفته شده ، چه ضرورتی بمنظور استفاده از VPN وجود داشته و VPN تامین کننده ، کدامیک از اهداف و خواسته های مورد نظر است ؟ با توجه به مقایسه انجام شده در مثال فرضی ، می توان گفت که با استفاده از VPN به هریک از ساکنین جزیره یک زیردریائی داده می شود. زیردریائی فوق دارای خصایص متفاوت نظیر :

دارای سرعت بالا است .

هدایت آن ساده است .

قادر به استتار( مخفی نمودن) شما از سایر زیردریا ئیها و کشتی ها است .

قابل اعتماد است .

پس از تامین اولین زیردریائی ، افزودن امکانات جانبی و حتی یک زیردریائی دیگرمقرون به صرفه خواهد بود

در مدل فوق ، با وجود ترافیک در اقیانوس ، هر یک از ساکنین دو جزیره قادر به تردد در طول مسیر در زمان دلخواه خود با رعایت مسایل ایمنی می باشند. مثال فوق دقیقا" بیانگر تحوه عملکرد VPN است . هر یک از کاربران از راه دور شبکه قادربه برقراری ارتباطی امن و مطمئن با استفاده از یک محیط انتقال عمومی ( نظیر اینترنت ) با شبکه محلی (LAN) موجود در سازمان خود خواهند بود. توسعه یک VPN ( افزایش تعداد کاربران از راه دور و یا افزایش مکان های مورد نظر ) بمراتب آسانتر از شبکه هائی است که از خطوط اختصاصی استفاده می نمایند. قابلیت توسعه فراگیر از مهمتزین ویژگی های یک VPN نسبت به خطوط اختصاصی است .

امنیت VPN

شبکه های VPN بمنظور تامین امنیت (داده ها و ارتباطات) از روش های متعددی استفاده می نمایند :

● فایروال . فایروال یک دیواره مجازی بین شبکه اختصای یک سازمان و اینترنت ایجاد می نماید. با استفاده از فایروال می توان عملیات متفاوتی را در جهت اعمال سیاست های امنیتی یک سازمان انجام داد. ایجاد محدودیت در تعداد پورت ها فعال ، ایجاد محدودیت در رابطه به پروتکل های خاص ، ایجاد محدودیت در نوع بسته های اطلاعاتی و ... نمونه هائی از عملیاتی است که می توان با استفاده از یک فایروال انجام داد.

● رمزنگاری . فرآیندی است که با استفاده از آن کامپیوتر مبداء اطلاعاتی رمزشده را برای کامپیوتر دیگر ارسال می نماید. سایر کامپیوترها ی مجاز قادر به رمزگشائی اطلاعات ارسالی خواهند بود. بدین ترتیب پس از ارسال اطلاعات توسط فرستنده ، دریافت کنندگان، قبل از استفاده از اطلاعات می بایست اقدام به رمزگشائی اطلاعات ارسال شده نمایند. سیستم های رمزنگاری در کامپیوتر به دو گروه عمده تقسیم می گردد :

رمزنگاری کلید متقارن

رمزنگاری کلید عمومی

در رمز نگاری " کلید متقارن " هر یک از کامپیوترها دارای یک کلید Secret ( کد ) بوده که با استفاده از آن قادر به رمزنگاری یک بسته اطلاعاتی قبل از ارسال در شبکه برای کامپیوتر دیگر می باشند. در روش فوق می بایست در ابتدا نسبت به کامپیوترهائی که قصد برقراری و ارسال اطلاعات برای یکدیگر را دارند ، آگاهی کامل وجود داشته باشد. هر یک از کامپیوترهای شرکت کننده در مبادله اطلاعاتی می بایست دارای کلید رمز مشابه بمنظور رمزگشائی اطلاعات باشند. بمنظور رمزنگاری اطلاعات ارسالی نیز از کلید فوق استفاده خواهد شد. فرض کنید قصد ارسال یک پیام رمز شده برای یکی از دوستان خود را داشته باشید. بدین منظور از یک الگوریتم خاص برای رمزنگاری استفاده می شود .در الگوریتم فوق هر حرف به دوحرف بعد از خود تبدیل می گردد.(حرف A به حرف C ، حرف B به حرف D ) .پس از رمزنمودن پیام و ارسال آن ، می بایست دریافت کننده پیام به این حقیقت واقف باشد که برای رمزگشائی پیام لرسال شده ، هر حرف به دو حرق قبل از خود می باطست تبدیل گردد. در چنین حالتی می باطست به دوست امین خود ، واقعیت فوق ( کلید رمز ) گفته شود. در صورتیکه پیام فوق توسط افراد دیگری دریافت گردد ، بدلیل عدم آگاهی از کلید ، آنان قادر به رمزگشائی و استفاده از پیام ارسال شده نخواهند بود.

در رمزنگاری عمومی از ترکیب یک کلید خصوصی و یک کلید عمومی استفاده می شود. کلید خصوصی صرفا" برای کامپیوتر شما ( ارسال کننده) قابل شناسائی و استفاده است . کلید عمومی توسط کامپیوتر شما در اختیار تمام کامپیوترهای دیگر که قصد ارتباط با آن را داشته باشند ، گذاشته می شود. بمنظور رمزگشائی یک پیام رمز شده ، یک کامپیوتر می بایست با استفاده از کلید عمومی ( ارائه شده توسط کامپیوتر ارسال کننده ) ، کلید خصوصی مربوط به خود اقدام به رمزگشائی پیام ارسالی نماید . یکی از متداولترین ابزار "رمزنگاری کلید عمومی" ، روشی با نام PGP)Pretty Good Privacy) است . با استفاده از روش فوق می توان اقدام به رمزنگاری اطلاعات دلخواه خود نمود.

● IPSec . پروتکل IPsec)Internet protocol security protocol) ، یکی از امکانات موجود برای ایجاد امنیت در ارسال و دریافت اطلاعات می باشد . قابلیت روش فوق در مقایسه با الگوریتم های رمزنگاری بمراتب بیشتر است . پروتکل فوق دارای دو روش رمزنگاری است : Tunnel ، Transport . در روش tunel ، هدر و Payload رمز شده درحالیکه در روش transport صرفا" payload رمز می گردد. پروتکل فوق قادر به رمزنگاری اطلاعات بین دستگاههای متفاوت است :

روتر به روتر

فایروال به روتر

کامپیوتر به روتر

کامپیوتر به سرویس دهنده

● سرویس دهنده AAA . سرویس دهندگان( AAA : Authentication ,Authorization,Accounting) بمنظور ایجاد امنیت بالا در محیط های VPN از نوع " دستیابی از راه دور " استفاده می گردند. زمانیکه کاربران با استفاده از خط تلفن به سیستم متصل می گردند ، سرویس دهنده AAA درخواست آنها را اخذ و عمایات زیر را انجام خواهد داد :

شما چه کسی هستید؟ ( تایید ، Authentication )

شما مجاز به انجام چه کاری هستید؟ ( مجوز ، Authorization )

چه کارهائی را انجام داده اید؟ ( حسابداری ، Accounting )

تکنولوژی های VPN

با توجه به نوع VPN ( " دستیابی از راه دور " و یا " سایت به سایت " ) ، بمنظور ایجاد شبکه از عناصر خاصی استفاده می گردد:

نرم افزارهای مربوط به کاربران از راه دور

سخت افزارهای اختصاصی نظیر یک " کانکتور VPN" و یا یک فایروال PIX

سرویس دهنده اختصاصی VPN بمنظور سرویُس های Dial-up

سرویس دهنده NAS که توسط مرکز ارائه خدمات اینترنت بمنظور دستیابی به VPN از نوع "دستیابی از را دور" استفاده می شود.

شبکه VPN و مرکز مدیریت سیاست ها

با توجه به اینکه تاکنون یک استاندارد قابل قبول و عمومی بمنظور ایجاد شVPN ایجاد نشده است ، شرکت های متعدد هر یک اقدام به تولید محصولات اختصاصی خود نموده اند.

- کانکتور VPN . سخت افزار فوق توسط شرکت سیسکو طراحی و عرضه شده است. کانکتور فوق در مدل های متفاوت و قابلیت های گوناگون عرضه شده است . در برخی از نمونه های دستگاه فوق امکان فعالیت همزمان 100 کاربر از راه دور و در برخی نمونه های دیگر تا 10.000 کاربر از راه دور قادر به اتصال به شبکه خواهند بود.

- روتر مختص VPN . روتر فوق توسط شرکت سیسکو ارائه شده است . این روتر دارای قابلیت های متعدد بمنظور استفاده در محیط های گوناگون است . در طراحی روتر فوق شبکه های VPN نیز مورد توجه قرار گرفته و امکانات مربوط در آن بگونه ای بهینه سازی شده اند.

- فایروال PIX . فایروال PIX(Private Internet eXchange) قابلیت هائی نظیر NAT ، سرویس دهنده Proxy ، فیلتر نمودن بسته ای اطلاعاتی ، فایروال و VPN را در یک سخت افزار فراهم نموده است .

Tunneling( تونل سازی )

اکثر شبکه های VPN بمنظور ایجاد یک شبکه اختصاصی با قابلیت دستیابی از طریق اینترنت از امکان " Tunneling " استفاده می نمایند. در روش فوق تمام بسته اطلاعاتی در یک بسته دیگر قرار گرفته و از طریق شبکه ارسال خواهد شد. پروتکل مربوط به بسته اطلاعاتی خارجی ( پوسته ) توسط شبکه و دو نفطه (ورود و خروج بسته اطلاعاتی ) قابل فهم می باشد. دو نقظه فوق را "اینترفیس های تونل " می گویند. روش فوق مستلزم استفاده از سه پروتکل است :

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

پروتکل کپسوله سازی . از پروتکل هائی نظیر: IPSec,L2F,PPTP,L2TP,GRE استفاده می گردد.

پروتکل مسافر . از پروتکل هائی نظیر IPX,IP,NetBeui بمنظور انتقال داده های اولیه استفاده می شود.

با استفاده از روش Tunneling می توان عملیات جالبی را انجام داد. مثلا" می توان از بسته ای اطلاعاتی که پروتکل اینترنت را حمایت نمی کند ( نظیر NetBeui) درون یک بسته اطلاعاتی IP استفاده و آن را از طریق اینترنت ارسال نمود و یا می توان یک بسته اطلاعاتی را که از یک آدرس IP غیر قابل روت ( اختصاصی ) استفاده می نماید ، درون یک بسته اطلاعاتی که از آدرس های معتبر IP استفاده می کند ، مستقر و از طریق اینترنت ارسال نمود.

در شبکه های VPN از نوع " سایت به سایت " ، GRE)generic routing encapsulation) بعنوان پروتکل کپسوله سازی استفاده می گردد. فرآیند فوق نحوه استقرار و بسته بندی " پروتکل مسافر" از طریق پروتکل " حمل کننده " برای انتقال را تبین می نماید. ( پروتکل حمل کننده ، عموما" IP است ) . فرآیند فوق شامل اطلاعاتی در رابطه با نوع بست های اطلاعاتی برای کپسوله نمودن و اطلاعاتی در رابطه با ارتباط بین سرویس گیرنده و سرویس دهنده است . در برخی موارد از پروتکل IPSec ( در حالت tunnel) برای کپسوله سازی استفاده می گردد.پروتکل IPSec ، قابل استفاده در دو نوع شبکه VPN ( سایت به یایت و دستیابی از راه دور ) است . اینترفیش های Tunnel می بایست دارای امکانات حمایتی از IPSec باشند.

در شبکه های VPN از نوع " دستیابی از راه دور " ، Tunneling با استفاده از PPP انجام می گیرد. PPP بعنوان حمل کننده سایر پروتکل های IP در زمان برقراری ارتباط بین یک سیستم میزبان و یک سیستم ازه دور ، مورد استفاده قرار می گیرد.

هر یک از پروتکل های زیر با استفاده از ساختار اولیه PPP ایجاد و توسط شبکه های VPN از نوع " دستیابی از راه دور " استفاده می گردند:

- L2F)Layer 2 Forwarding) . پروتکل فوق توسط سیسکو ایجاد شده است . در پروتکل فوق از مدل های تعیین اعتبار کاربر که توسط PPP حمایت شده اند ، استفاده شد ه است .

PPTP)Point-to-Point Tunneling Protocol) . پروتکل فوق توسط کنسرسیومی متشکل از شرکت های متفاوت ایجاد شده است . این پروتکل امکان رمزنگاری 40 بیتی و 128 بیتی را دارا بوده و از مدل های تعیین اعتبار کاربر که توسط PPP حمایت شده اند ، استفاده می نماید.

- L2TP)Layer 2 Tunneling Protocol) . پروتکل فوق با همکاری چندین شرکت ایجاد شده است .پروتکل فوق از ویژگی های PPTP و L2F استفاده کرده است . پروتکل L2TP بصورت کامل IPSec را حمایت می کند. از پروتکل فوق بمنظور ایجاد تونل بین موارد زیر استفاده می گردد :

سرویس گیرنده و روتر

NAS و روتر

روتر و روتر

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

منبع:amoozesh11.blogsky.com