| AmirHossein | – Telegram
| AmirHossein |
591 subscribers
44 photos
8 videos
2 files
73 links
نوشته‌های یک برنامه‌نویس ناشی

🫂 @StartUnity
Download Telegram
#security #bug
دسته بندی Information Leakage

باگ Information Disclosure Vulnerabilities به مشکلات امنیتی اشاره دارد که به حمله‌کنندگان اجازه می‌دهد اطلاعات حساس، مهم یا مخرب را از سیستم یا برنامه‌ی هدف دریافت کنند. این نوع باگ می‌تواند اطلاعات کاربران، تنظیمات داخلی سیستم، رمزها و سایر جزئیات حساس را آشکار کند.

مثال:

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

روش‌های جلوگیری :

1- پیام‌های خطا نباید حاوی جزئیات حساس باشند. به جای آن، پیام‌های کلی و مشخص کننده برای کاربران نمایش داده شوند.

2- اطلاعات حساس در پاسخ‌ها، لاگ‌ها و خروجی‌های دیگر فیلتر شوند یا به‌طور مناسب مخفی شوند.

3- اطلاعات حساس در حالت عادی به‌صورت پنهانی نمایش داده نشوند و فقط در صورت ضرورت، مانند حالت اشتباه در ورود اطلاعات، نمایش داده شوند.

4- اطمینان حاصل کنید که تنظیمات و پیکربندی‌ها (مانند فایل‌های تنظیمات) به‌طور صحیح تنظیم شده‌اند تا اطلاعات حساس منتشر نشود.

5- اطلاعات داخلی سیستم یا برنامه به کاربران عادی نمایش داده نشوند. این اطلاعات تنها برای اشخاصی با دسترسی مناسب قابل دسترسی باشند.

.
#security #bug
دسته بندی Business Logic Errors

مشکلی که توی این پست بهش پرداخته شده خیلی مهمه و خیلی ها بهش توجه نمیکنن و آخر کار چیزی که تحویل میدن 20 درصدش پروژه س بقیه ش باگ.

خطای Business Logic Errors به خطاهایی اشاره دارند که در منطق کسب و کار و عملیات اصلی یک برنامه یا سیستم وجود دارند. این نوع از خطاها معمولاً به دلیل نقص در طراحی یا پیاده‌سازی منطق کسب و کار به وجود می‌آیند و می‌توانند منجر به عملکرد نادرست یا ناپایدار سیستم شوند.

مثال:

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

روش‌های جلوگیری:

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

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

3- محدودیت‌های منطقی در سیستم اعمال کنید تا به کاربران اجازه عملیات‌های نامعقول ندهید. به‌عنوان مثال، تعداد حداکثری محصولاتی که می‌توانند به سبد خرید اضافه کنند.

4- برای تغییرات در منطق کسب و کار از واحد‌های تراکنشی استفاده کنید تا تغییرات منطقی به تمامی بخش‌های مرتبط اعمال شود.

5- کدها را به‌صورت دوره‌ای بازبینی کنید تا از وجود خطاهای منطقی غافل نشوید.

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

.
#security #bug

دسته بندی Cryptographic Vulnerabilities

باگ Cryptographic Vulnerabilities به مشکلات امنیتی اشاره دارند که در مورد استفاده از الگوریتم‌های رمزنگاری و مکانیزم‌های امنیتی مربوط به حفاظت از اطلاعات مهم و حساس به وجود می‌آیند. اشتباهات در استفاده از رمزنگاری می‌توانند به حملاتی مانند دسترسی غیرمجاز به اطلاعات یا تخریب امنیت دسترسی منجر شوند.

مثال:

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

یک حمله‌کننده با تجزیه و تحلیل دقیق بر روی این رمزنگاری خودساخته می‌تواند به‌طور نسبتاً آسان ترکیبی را بشکند و اطلاعات مهم مانند رمز‌های عبور کاربران را به‌طور غیرمجاز بدست آورد.

روش‌های جلوگیری:

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

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

3- از الگوریتم‌های رمزنگاری با امنیت بالا و تاثیر ثابت مانند AES استفاده کنید.

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

5- به جز رمزنگاری، سایر اجزای سیستم را نیز به درستی محافظت کنید تا امنیت کلی تضمین شود.

6- کدها را بازبینی کرده و با تست‌های امنیتی الگوریتم‌ها و مکانیزم‌های رمزنگاری را ارزیابی کنید.

7- از مدیریت مناسب کلید‌ها و مواد رمزنگاری استفاده کنید تا از دسترسی غیرمجاز به اطلاعات جلوگیری شود.

.
#security #bug

دسته بندی Privilege Escalation Vulnerabilities

باگ Privilege Escalation Vulnerabilities به مشکلات امنیتی اشاره دارد که به حمله‌کننده اجازه می‌دهد سطح دسترسی خود را از سطح کاربر عادی به سطح دسترسی بیشتر (مانند مدیر سیستم) ارتقاء دهد. این نوع از حملات می‌توانند منجر به دسترسی غیرمجاز به منابع و عملیات حساس شوند.

مثال:

فرض کنید یک سیستم عامل با معماری چندکاربره داریم که کاربران مختلف با سطوح دسترسی متفاوت می‌توانند وارد سیستم شوند. هر کاربر به منابع معینی دسترسی دارد و کاربران معمولاً به منابع دیگر دسترسی ندارند.

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

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

روش‌های جلوگیری:

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

2- از مکانیزم‌های قوی احراز هویت و دسترسی استفاده کنید تا از افراز و انتقال دسترسی‌های غیرمجاز جلوگیری شود.

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

4- تست‌های امنیتی مرتب روی سیستم‌ها و نرم‌افزارها اجرا کنید تا از وجود آسیب‌پذیری‌های احتمالی آگاه شوید.

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

6- اجازه ندهید که کدهای اجرایی یا اسکریپت‌ها با دسترسی‌های بالا اجرا شوند.

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

.
#security #bug

دسته بندی Race Conditions

باگ Race Conditions به مشکلاتی در برنامه‌نویسی اشاره دارد که در آن ترتیب اجرای دستورات توسط برنامه توسط عوامل خارجی تعیین می‌شود. این موقعیت‌ها به حمله‌کنندگان اجازه می‌دهند تا در مواقعی که همزمانی اجرای دستورات در حالی که از منابع مشترک استفاده می‌کنند، ضعیفی ایجاد کنند و به نحوی اطلاعات را تغییر دهند یا منابع را دسترسی‌پذیر کنند.

مثال:

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

حالا فرض کنید دو کاربر به طور همزمان درخواست افزایش موجودی حساب خود را می‌دهند. در صورتی که برنامه ما قابلیت همزمانی (Concurrency) را به خوبی مدیریت نکند، دو کاربر ممکن است در همان لحظه مقدار موجودی را بخوانند، هر دو مقدار جدید را محاسبه کنند و در نهایت مقدار موجودی را با توجه به محاسبات خود به روزرسانی کنند. اینجاست که Race Conditions ایجاد می‌شود؛ اگر هر دو کاربر به همان زمان به دیتابیس نوشته خود دسترسی داشته باشند، ممکن است یکی از آن‌ها تغییرات دیگری که توسط دیگری انجام داده شده است را پوشش ندهد.

روش‌های جلوگیری:

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

2- در مواردی که از پایگاه داده استفاده می‌کنید، از تراکنش‌ها برای محدود کردن دسترسی‌ها و به‌روزرسانی‌ها استفاده کنید.

3- از مکانیزم‌های Semaphore و Mutex برای مدیریت دسترسی‌های همزمانی در برنامه‌ها استفاده کنید.

4- در زبان‌های برنامه‌نویسی که از نخ‌ها (Threads) استفاده می‌کنند، از مکانیزم‌های Thread-safe مانند synchronized استفاده کنید.

5- در زبان‌های برنامه‌نویسی که از متغیرهای اتمی پشتیبانی می‌کنند، از آنها برای جلوگیری از مشکلات Race Conditions استفاده کنید.

6- طراحی مناسب و اجرای کد با رعایت اصول همزمانی و به‌روزرسانی منابع مشترک، مشکلات Race Conditions را کاهش می‌دهد.

.
خب این مبحث باگ های امنیتی هم تموم شد
فک کنم ۲۳ تا شد
خیلی داشت خسته کننده میشد که از ۴۰ تا ممبر عزیز ۵ تاشون لفت دادن😂

در نتیجه بهتره از هر مبحث تعداد کمتری توضیح داد که خسته کننده نشه

ایده ایی برای مبحث جدید ندارم
پس تو این چند روز پست زیادی نیست

شاید فکر کنید چرا با ۳۵ تا عضو باز هم پست میزارم😂
ولی خب از همین ۳۵ تا ۱ نفر هم چیز جدیدی یاد بگیره برای من کافیه
و دوم اینکه خودم هم با نوشتن هر پست چیز های جدیدی یاد میگیرم

در اخر اگه مشکلی توی پست ها بود بگید
و اگه نظری برای مبحث جدید داشتید اون رو هم بگید❤️

‌.
4
چطور توی php اکستنشن خودمون رو بسازیم؟

یه موضوعی که شاید براتون جالب باشه اکستنشن های php هست
قطعا کسایی که با php کار میکنن با این اکستنشن ها آشنا هستن
مثل curl , gd , pdo , mysqli و....
و یک سری ابزار توسعه داده شده به زبان های C یا C++ هستند که قابلیت هایی رو به php اضافه میکنن.
هدف این پست تعریف اکستنشن ها نیست بلکه ساخت یک اکستنشن شخصی هست که میتونه جالب باشه برای همه.

1- در مرحله اول باید محیط توسعه رو آماده کنیم
من توی این آموزش از یک دبین بیس (WSL-Ubuntu) استفاده کردم که کاربر های ویندوزهم میتونن با wsl کار کنن
و از کامپایلر GCC، ادیتور هم که اهمیتی نداره
در ادامه ابزار رو نصب میکنیم
sudo apt-get install build-essential php8.0 php8.0-dev

2- در مرحله بعد باید فایل کانفیگ اکستنش رو درست بکنیم به نام config.m4 با مقادیر زیر:
PHP_ARG_ENABLE(php_helloworld, Whether to enable the HelloWorldPHP extension, [ --enable-helloworld-php Enable HelloWorldPHP])

if test "$PHP_HELLOWORLD" != "no"; then
PHP_NEW_EXTENSION(php_helloworld, php_helloworld.c, $ext_shared)
fi

3- در مرحله سوم شروع به کد زدن اکستنشن خودمون میکنیم (این اکستنشن صرفا یه تابع helloworld درست میکنه)
کد ها توی دو فایل php_helloworld.h و php_helloworld.h نوشته میشن که در ادامه کد هارو میبینید:

php_helloworld.h:
// we define Module constants
#define PHP_HELLOWORLD_EXTNAME "php_helloworld"
#define PHP_HELLOWORLD_VERSION "0.0.1"

// then we declare the function to be exported
PHP_FUNCTION(helloworld_php);

php_helloworld.c:
// include the PHP API itself
#include <php.h>
// then include the header of your extension
#include "php_helloworld.h"

// register our function to the PHP API
// so that PHP knows, which functions are in this module
zend_function_entry helloworld_php_functions[] = {
PHP_FE(helloworld_php, NULL)
{NULL, NULL, NULL}
};

// some pieces of information about our module
zend_module_entry helloworld_php_module_entry = {
STANDARD_MODULE_HEADER,
PHP_HELLOWORLD_EXTNAME,
helloworld_php_functions,
NULL,
NULL,
NULL,
NULL,
NULL,
PHP_HELLOWORLD_VERSION,
STANDARD_MODULE_PROPERTIES
};

// use a macro to output additional C code, to make ext dynamically loadable
ZEND_GET_MODULE(helloworld_php)

// Finally, we implement our "Hello World" function
// this function will be made available to PHP
// and prints to PHP stdout using printf
PHP_FUNCTION(helloworld_php) {
php_printf("Hello World! (from our extension)\n");
}

4- حالا نوبت build کردنش هست:
اول محیط ساخت رو آماده میکنیم
phpize
سپس بیلد رو کانفیگ میکنیم و افزونه رو فعال می کنیم:
./configure --enable-php-helloworld

ور در نهایت بیلدش میکنیم
make
sudo make install
5- حالا نوبت تست هست
میتونید extension=php_helloworld رو به فایل php.ini خودتون اضافه کنید و سپس تابع helloworld_php() رو توی یک فایل php فراخوانی کنید یا در ترمینال خودتون درستور زیر رو بزنید
php -d extension=php_helloworld.so -r 'helloworld_php();'
و در نهایت زیبایی رو میبینید
Result:
Hello World! (from our extension)

منبع
.

سلام رفقا 👋🏻
توی این فولدر تلگرام ی سری کانال های خوب برنامه نویسی رو اد کردم.
روش بزنید تا به پوشه های تلگرامتون اضافه بشه

📁
t.me/addlist/NvmUA9kgu8w3NWY0

اگر شما هم کانال برنامه نویسی دارید برای اضافه شدن کانالتون به این لیست، اینجا بهم پیام بدید
🔥4
#composer
شاید پیش اومده باشه پکیج یا کتابخونه ایی رو توسعه داده باشید و قصد داشته باشید اون رو به کامپوزر اضافه کنید.
کار پیچیده ایی نیست!

اول توجه داشته باشید که پروژه تون روی جایی مثل گیت هاب به صورت پابلیک وجود داشته باشه
(من فقط با گیتهاب کارکردم و برای بقیه سایت های مشابه گیت هاب تست نکردم اطلاعی ندارم اگر میدونید بگید)

در مرحله اول باید کامپوزر رو روی سیستمتون نصب کنید که میتونید از این لینک استفاده کنید.

سپس یک اکانت توی packagist بسازید، بهتره با گیت هابتون لاگین کنید.

در مرحله بعد یک ترمینال باز کنید و وارد روت پروژه خودتون بشید و کامند زیر رو بزنید:
composer init

چند سوال ازتون میپرسه که به ترتیب بررسی میکنیم:
1- سوال اول اسم پکیج شمارو میخواد که از دو بخش وندور و نام پیکیج تشکیل میشه و باید فرمت زیر رو داشته باشه
vendor/name 
قسمت vendor رو یوزرنیم گیت هابتون بزارید
و قسمت name هم نام ریوزیتوری که پروژه تون داخلش قرار داره
به عنوان مثال برای آدرس زیر
github.com/myGithub/myLibrary
مقدار ریز رو وارد کنید
myGithub/myLibrary

2- سوال دوم ازتون توضیحات پروژه رو میخواد
3- سوال سوم ناشر پروژه
4- سوال چهارم Minimum Stability هست که میتونید یکی از موارد زیر رو بسته به پروژه بزنید یا خالی بزارید
stable, RC, beta, alpha, dev

5- سوال پنجم نوع پیکج هست که میتونه یکی از موارد زیر بر اساس پروژه باشه یا خالی بزارید
library, project, metapackage, composer-plugin

6- سوال ششم لایسنس پروژه رو میخواد که باز میتونید خالی بزارید

سوال هفتم و هشتم میگه میخواید دپندنسی های پروژه رو اضافه کنید
میتونید اضافه کنید یا no بزنید و بعدا اضافه کنید

سوال نهم namespace هایی که میخواید autoload بشه رو میخواد که باز هم میتونید skip کنید و بعدا اضافه کنید.

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

پروژه رو مجدد کامیت و پوش کنید تا موارد ساخته شده مربوط به کامپوزر آپدیت بشه و وارد packagist بشید، از منو بالا Submit رو بزنید و آدرس کامل ریپوزیتوری پروژه تون رو وارد کنید و Check رو بزنید.

اگر اروری نداشته باشید با موفقیت اضافه میشه و بعد از اون از طریق composer میتونید پروژه رو دانلود کنید.

برای مدیریت ورژن های پروژه میتونید هر ورژن رو توی branch جدا با نام ورژن قرار بدید.
سوال یا اشکالی بود بپرسید

.
🔥2
درود به همه
اگر مبحث یا موردی مد نظرتون هست بگید توضیح بدیم

مهم نیست چی باشه فقط توی حوزه برنامه نویسی باشه

اگر بلد بودم توضیح میدم، بلدهم نبودم با هم یاد میگیریم🫂

.
5
ساخت autoloader در php

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

اگر بخواهیم با include یا require عمل autoloading رو انجام بدیم قطعا کد کثیفی داریم، ممکنه بعضی مواقع تا هزاران فایل داشته باشیم که نمیشه هزار بار require کرد که ترتیب لود فایل ها هم به مشکل نخوره.

برای این موقعیت تابعی توی php وجود داره به نام spl_autoload_register که ورودی اون یک callable هست.

بریم یک مثال ازش بنویسیم:

spl_autoload_register(function ($className) {
require_once "$className.php";
});

همانطور که گفته شد ورودی تابع یک فانکشن هست، این فانکشن به صورت پیشفرض نام کلاس صدا زده شده را به همراه دارد که در مثال بالا در متغییر $className قرار دارد.

درون این فانکشن شما باید عملیاتی که می خواهید برای لود شدن کلاس انجام شود را بنویسید.
در مثال بالا تنها فایل با نام کلاس و پسوند php صدا زده شده.

متغییر $className در حالت عادی نام کلاس شما هست، اگر کلاسی با نام User را صدا بزنیم مقدار $className برابر با User میشود.

اگر در پروژه خود از namespace ( راجب namespace ها بخوانید ) استفاده کنید مقدار $className برابر با:
namespace + classname

به عوان مثال اگر یک namespace با نام MyProject\Class داشته باشید و یک کلاس به نام User، مقدار $className برابر با MyProject\Class\User می شود.

در نهایت نکاتی که بسیار مهم هستند برای استفاده از autoload :

1- توجه داشته باشید نام namespace دقیقا با ساختار پوشه بندی شما یکی باشد. (حساس به حروف کوچک و برزگ)

2- نام کلاسی که درون یک فایل قرار دارد دقیقا با نام فایل یکی باشد. (حساس به حروف کوچک و برزگ)


کافی است spl_autoload_register را درون یک فایل بنوسید و بسته به پروژه خود آن را برنامه ریزی کنید.
سپس فایل autoload را در اولین قسمت پروژه require کنید و بقیه require هارا به autoload بسپارید.

مورد آخر درصورتی که پروژه شما ساختار استانداردی داشته باشد میتونید از composer هم استفاده کنید به جای autoloader شخصی سازی شده.

.
👍6
| AmirHossein |
کدوم یکی از مباحث زیر رو شروع کنیم؟
خب مرسی از اعضا کانال که از طنز بودن خودشون کم نزاشتن🫂

طبق نتایج امشب آموزش حاک ناسا داریم🗿
و از فردا مبحث آشنایی با شبکه و انواع پروتکل ها رو شروع می‌کنیم.
سعی می‌کنم طولانی نشه که حوصله سر بر نباشه براتون❤️
👍1😁1
آموزش حاک ناسا با اچ تی ام ال:

1- یک فایل index.html درست کنید و کد زیر را درون آن بریزید:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<noscript>Document</noscript>
</head>
<body>
<div style="text-align: center;">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTK4MfykJOLFagA449Lv7VGZpTCj3pAbluGFQ&usqp=CAU" style="width: 80%;">
</div>
</body>
</html>

2- حالا فایل را باز کنید و واکنش ناسا را ببینید.

.
👍3😁1
خب طبق آرا از فردا مبحث آشنایی با شبکه و انواع پروتکل ها رو شروع میکنیم.

سرفصل ها به این صورت هست
1- شبکه چیست؟
2- پروتکل چیست؟
3- توضیح انواع پروتکل ها

توی این مبحث 14 تا از مهم ترین پروتکل هارو توضیح میدم.
TCP
UDP
HTTP
HTTPS
FTP
SMTP
POP3
IMAP
DNS
SNMP
DHCP
ICMP
ARP
BGP

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

.
👍12🤩2
#network #protocol
شبکه چیست؟

شبکه
به ارتباط و اشتراک گذاری اطلاعات و منابع بین دستگاه‌ها یا کامپیوترها در یک محیط متصل اشاره دارند. این محیط می‌تواند شبکه‌های کامپیوتری محلی (Local Area Network یا LAN) در یک سازمان یا، شبکه‌های وسیع (Wide Area Network یا WAN) مثل اینترنت.

مثال:

فرض کنید یک LAN در یک دفتر کار وجود دارد:

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

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

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

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

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

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

به عنوان یک مثال ساده‌تر، می‌توانید این LAN را مانند یک محیط مشابه به یک خانه فرض کنید که دارای دستگاه‌های مختلفی مانند تلویزیون، تلفن، رایانه و دستگاه‌های مخابراتی است، و این دستگاه‌ها با یکدیگر ارتباط دارند تا اطلاعات و منابع را به اشتراک بگذارند.

.
👍6
#network #protocol

قبل از اینکه به ادامه بحث بپردازیم بهتره با چند تا از اجزا مهم توی شبکه آشنا بشیم:

1- مودم (Modem):
مودم یک دستگاه است که ارتباط شما را با شبکه اینترنت برقرار می‌کند. وقتی شما به ارائه‌دهنده اینترنت خود متصل می‌شوید (از طریق ADSL، کابل کواکسیال، فیبر نوری و ...)، مودم این اتصال را ترجمه و تبدیل می‌کند تا دستگاه‌های شما بتوانند از اینترنت استفاده کنند.

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

3- فایروال (Firewall):
فایروال یک دستگاه یا نرم‌افزاری است که برای محافظت از شبکه شما در برابر تهدیدات امنیتی از جمله حملات نفوذ و برنامه‌های مخرب مورد استفاده قرار می‌گیرد. فایروال قوانینی را تعیین می‌کند که کدام داده‌ها می‌توانند وارد شبکه شما شوند و کدام داده‌ها باید مسدود شوند.

4- سوئیچ (Switch):
سوئیچ یک دستگاه شبکه است که به شما اجازه می‌دهد تا چندین دستگاه را به یکدیگر متصل کنید و ارتباطات شبکه بین آنها را فراهم کنید. این دستگاه بر اساس آدرس MAC دستگاه‌ها به طور هوشمند داده‌ها را ارسال می‌کند. به عنوان مثال، اگر شما چند کامپیوتر و چاپگرها را به یک سوئیچ متصل کنید، آنها می‌توانند به آسانی اطلاعات را به یکدیگر ارسال کرده و اشتراک گذاری منابع شبکه را انجام دهند.

.
👍2
#network #protocol
پروتکل چیست؟

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

مثال:

پروتکل HTTP یکی از پروتکل‌های مهم در شبکه‌های کامپیوتری است که برای انتقال اطلاعات و صفحات وب بین مرورگر و وب سرورها استفاده می‌شود. برای درک بهتر، فرض کنید که شما یک مرورگر وب مثل Chrome را باز کرده‌اید و قصد دارید یک وب‌سایت را مشاهده کنید.

شما در مرورگر خود URL وب‌سایت را وارد می‌کنید، به عنوان مثال: http://www.example.com. وقتی شما این URL را وارد می‌کنید و Enter را می‌زنید، مرورگر شروع به ارسال یک درخواست HTTP به وب‌سرور می‌کند. این درخواست به عنوان GET Request شناخته می‌شود.

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

وب‌سرور به شما یک پاسخ HTTP ارسال می‌کند. این پاسخ شامل کدهای وضعیت مانند 200 OK (که به معنای درخواست موفقیت‌آمیز است)، هدرهایی (Headers) که اطلاعات اضافی مثل نوع محتوا و انتقال فایل را تعیین می‌کنند، و بدنه پیام (Body) که معمولاً محتوای صفحه وب است.

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

پروتکل‌ها می‌توانند تعیین کننده‌های ارتباطی بین دستگاه‌ها باشند. در اینجا، HTTP به مرورگر و وب‌سرور کمک می‌کند تا ارتباط و تبادل اطلاعات را انجام دهند.

.
3
#network #protocol
پروتکل TCP - Transmission Control Protocol

پروتکل TCP یکی از مهمترین پروتکل‌ها در مدل OSI (مدل مرجع ارتباطات) است که در لایه ترانسپورت قرار دارد. این پروتکل برای ارتباطات امن و اطمینان‌پذیر بین دو دستگاه در شبکه‌های کامپیوتری مورد استفاده قرار می‌گیرد.

پروتکل TCP یک پروتکل اتصال گرا (Connection-Oriented) است، به این معنی که قبل از ارسال داده‌ها، یک اتصال بین دو دستگاه برقرار می‌شود و سپس داده‌ها به صورت مطمئن و به ترتیب ارسال می‌شوند. این پروتکل از مفاهیمی مانند تأیید دریافت (Acknowledgment)، ترتیب (Sequencing) و بازیابی خطا (Error Recovery) استفاده می‌کند تا اطمینان حاصل کند که داده‌ها به درستی و بدون اشکال انتقال پیدا می‌کنند.

توضیح :

اولین مرحله در TCP برقراری اتصال است. این مرحله با استفاده از Three-Way Handshake انجام می‌شود که شامل سه مرحله است:

مرحله 1 : دستگاه ارسال (Client) یک بسته SYN (Synchronize) به دستگاه مقصد (Server) ارسال می‌کند تا اتصال را درخواست کند.

مرحله 2 : دستگاه مقصد دریافت بسته SYN و درخواست اتصال را می‌پذیرد و یک بسته SYN-ACK به دستگاه ارسال، ارسال می‌کند تا تصدیق کند که اتصال درخواست شده است.

مرحله 3 : دستگاه ارسال، دریافت بسته SYN-ACK را تأیید کرده و اتصال برقرار می شود.

بعد از برقراری اتصال، دستگاه‌ها می‌توانند داده‌ها را به صورت امن ارسال و دریافت کنند. TCP از مفهوم بایت‌های تأییدی (Sequence Numbers) برای اطمینان از ترتیب صحیح داده‌ها استفاده می‌کند.

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

مثال:

فرض کنید که شما یک وب‌سرور دارید و یک مرورگر از طریق HTTP (که از TCP استفاده می‌کند) به وب‌سرور دسترسی می‌یابد تا یک صفحه وب را درخواست کند. مراحل اتصال و ارسال داده‌ها می‌تواند به این شکل باشد:

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

وب‌سرور درخواست را دریافت کرده و یک صفحه وب به عنوان پاسخ ارسال می‌کند.

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

وب‌سرور تأیید دریافت را دریافت کرده و اتصال را می بندد و صفحه وب به مرورگر نمایش می‌دهد.

در نهایت، با استفاده از پروتکل TCP، ارتباط ایمن و مطمئن بین مرورگر و وب‌سرور برقرار می‌شود تا داده‌ها به درستی انتقال پیدا کنند و اطمینان حاصل شود که هیچ داده‌ای در انتقال از دست نمی‌رود.

@AmirhDeveloper
.
👍1
#network #protocol
پروتکل UDP - User Datagram Protocol

پروتکل UDP یکی دیگر از پروتکل‌های ارتباطی در مدل OSI است که در لایه ترانسپورت قرار دارد. UDP به عنوان یک پروتکل بدون اتصال (Connectionless) شناخته می‌شود، به این معنی که ارتباطی پایدار و برقراری اتصال قبل از ارسال داده‌ها انجام نمی‌شود. این پروتکل مناسب برای ارسال داده‌هایی که به سرعت باید ارسال و دریافت شوند و از اتصال پایدار نیازی ندارند، مثل فیلم و صدا در ویدئو‌کنفرانس‌ها استفاده می‌شود.

توضیح:

پروتکل UDP یک پروتکل ساده است که برای ارسال داده‌ها بدون ایجاد اتصال برقرار می‌کند. این پروتکل تنها دو مفهوم اساسی را دارد: پورت مبدأ (Source Port) و پورت مقصد (Destination Port) برای تعیین منبع و مقصد داده، و بدون مفهوم تأیید دریافت داده‌ها یا بازیابی خطا.

مثال:

فرض کنید که شما یک برنامه چت ساده دارید که از UDP برای ارتباط با دیگر کاربران استفاده می‌کند. در اینجا مراحل ارتباط به کمک UDP به صورت زیر است:

یک کاربر می‌خواهد پیامی به یک کاربر دیگر ارسال کند. برنامه چت، پیام را به فرمتی ساده بسته بندی کرده و آن را به آدرس IP و پورت مقصد ارسال می‌کند.

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



پروتکل UDP با ارتباطات به سرعت بسیار بالا شناخته می‌شود چرا که بدون نیاز به برقراری اتصال، تأخیر کمتری دارد. این برای برنامه‌هایی که به تاخیر پایین نیاز دارند، مثل یک بازی آنلاین، مهم است.

یکی از ویژگی‌های UDP عدم نیاز به تأیید دریافت داده‌ها است. این به این معنی است که اگر یک پیام به دلایلی در مسیر گم شود یا به طور نادرست دریافت شود، هیچ تلاشی برای بازیابی آن صورت نمی‌گیرد. این ممکن است برای برنامه‌هایی که به سرعت نیاز دارند، مفید باشد، اما باید در نظر داشته باشید که اطلاعات ممکن است گم شود.

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

@AmirhDeveloper
.
👍2🔥1