ماشین‌های کامپیوتری با نام میزبان [نام دستگاه میزبان] و آدرس IP شان مشخص می‌شوند.

 

نمودار زیر به طور مختصر آن را نشان می‌دهد.

 

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

در ادامه به جزئیات بیشتری در این زمینه پرداخته شده است.

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

این به ما کمک می‌کند تا سرویس‌های شبکه را در دستگاه (حتی در هنگام خرابی سخت افزار شبکه) بررسی نماییم. هنگام استفاده از localhost، سرویس‌های شبکه از طریق رابط منطقی شبکه به نام loopback قابل دسترسی هستند. آدرس IP رابط loopback در اصل همان 127.0.0.1 است. بنابراین، localhost به عنوان بخشی از name resolution به 127.0.0.1 نگاشت می‌شود.

 

آدرس Loopback چیست؟

Loopback یک رابط منطقی شبکه است که در همه سیستم عامل‌ها وجود دارد. بسته‌های منتقل شده از طریق این رابط به همان رابط در همان دستگاه بازگردانده می‌شوند. به همین دلیل است که این رابط شبکه loopback نامیده می‌شود.

طبق استانداردهای IETF برای آدرس دهی IPv4، کل بلوک 127.0.0.1/8 برای اهداف loopback شبکه اختصاص داده شده است. به طور پیش فرض، یک رابط loopback پس از نصب هر سرور پیکربندی می‌شود.

 

بیایید نگاهی به قطعه کد زیر بیندازیم.

ip a show lo
output:
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 76238871 bytes 6955286874 (6.9 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 76238871 bytes 6955286874 (6.9 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 
sudo cat /etc/hosts
output:
127.0.0.1 localhost
127.0.1.1 sandbox1

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback

 

پردازش داخلی بسته Loopback

به طور کلی، بسته‌های Loopback با آدرس‌های خود از سایر بسته‌های IP متمایز می‌شوند. پردازش بسته‌های loopback با آدرس loopback در لایه پیوند TCP/IP اتفاق می‌افتد. این ترافیک داخل خود سیستم‌های رایانه‌ای عبور خواهد کرد و مانند سایر بسته‌های IP از کارت‌های سخت افزاری NIC استفاده نمی‌کنند. علاوه بر این، یک قانون وجود دارد که روترها نباید آدرس IP مربوط به loopback را مسیریابی کنند.

به عنوان مثال، وقتی ما آدرس 127.0.0.1 را درخواست می‌کنیم، این درخواست به دلیل اولین بخش آدرس (127) به اینترنت ارسال نمی‌شود؛ چراکه پشته TCP/IP درخواست را تشخیص داده و آن را به همان دستگاه باز می‌گرداند.

تصویری سریع از نحوه گردش بسته برای localhost و سایر بسته‌های IP در زیر آمده است.

 

ping -c 4 localhost
output:
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.035 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.043 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.041 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.040 ms

--- localhost ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3075ms
rtt min/avg/max/mdev = 0.035/0.039/0.043/0.008 ms
ping -c 4 google.com
output:
PING google.com (142.250.71.46) 56(84) bytes of data.
64 bytes from maa03s35-in-f14.1e100.net (142.250.71.46): icmp_seq=1 ttl=120 time=2.14 ms
64 bytes from maa03s35-in-f14.1e100.net (142.250.71.46): icmp_seq=2 ttl=120 time=2.18 ms
64 bytes from maa03s35-in-f14.1e100.net (142.250.71.46): icmp_seq=3 ttl=120 time=2.19 ms
64 bytes from maa03s35-in-f14.1e100.net (142.250.71.46): icmp_seq=4 ttl=120 time=2.20 ms

--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 2.147/2.180/2.203/0.051 ms

 

تست برنامه با استفاده از Localhost

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

توسعه و تست کد از سرور محلی همیشه آسان‌تر از میزبان ریموت است. برای دستیابی به این هدف، نام دامنه تولیدی خود را با یک آدرس loopback جدید (یعنی 127.0.1.100) در فایل /etc /host نگاشت نمایید. دقت کنید که مقادیر موجود در /etc/host بر DNS اولویت دارند.

 

قطعه کد زیر، پاسخ ping از سرور محلی را به وب سرور Linuxize ریموت نشان می‌دهد. نگاشت دامنه در قطعه کد دوم نشان داده شده است. هنگامی‌که خروجی پس از نگاشت IP بخش 127 به linuxize.com در فایل میزبان از نزدیک را بررسی می‌کنیم، ترافیک به یک رابط شبکه loopback هدایت شده است.

ping -c 4 jeyserver.com
PING jeyserver.com (172.67.74.167) 56(84) bytes of data.
64 bytes from 172.67.74.167 (172.67.74.167): icmp_seq=1 ttl=59 time=34.5 ms
64 bytes from 172.67.74.167 (172.67.74.167): icmp_seq=2 ttl=59 time=34.5 ms
64 bytes from 172.67.74.167 (172.67.74.167): icmp_seq=3 ttl=59 time=34.5 ms
64 bytes from 172.67.74.167 (172.67.74.167): icmp_seq=4 ttl=59 time=34.5 ms

--- jeyserver.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 34.521/34.529/34.541/0.227 ms
sudo cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 sandbox1
127.0.1.100 jeyserver.com

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
ping -c 4 jeyserver.com
PING jeyserver.com (127.0.1.100) 56(84) bytes of data.
64 bytes from jeyserver.com (127.0.1.100): icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from jeyserver.com (127.0.1.100): icmp_seq=2 ttl=64 time=0.094 ms
64 bytes from jeyserver.com (127.0.1.100): icmp_seq=3 ttl=64 time=0.042 ms
64 bytes from jeyserver.com (127.0.1.100): icmp_seq=4 ttl=64 time=0.055 ms

--- jeyserver.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3062ms
rtt min/avg/max/mdev = 0.042/0.066/0.094/0.020 ms

 

 

 

منبع:

linuxize