127.0.0.1 ve localhost nedir? Özel ve ayrılmış adresler
Yazılım geliştiriyorsanız ya da bir programın ayarlarına baktıysanız localhost ya da 127.0.0.1 ifadesiyle karşılaşmışsınızdır. İkisi de "bu bilgisayar" anlamına gelir.
Loopback adresi
127.0.0.0/8 aralığı loopback (geri döngü) için ayrılmıştır. Bu aralığa gönderilen paketler ağ kartından dışarı çıkmaz, doğrudan aynı bilgisayara geri döner. En çok kullanılan adres 127.0.0.1'dir. IPv6'daki karşılığı ::1'dir.
localhost nedir?
localhost, genellikle 127.0.0.1 (ve ::1) adresine çözülen standart bir ad olarak ayrılmıştır. Çoğu işletim sisteminde bu eşleme hosts dosyasında yazılıdır. Windows'ta bu dosya C:\Windows\System32\drivers\etc\hosts, macOS ve Linux'ta /etc/hosts konumundadır.
Ne işe yarar?
- Geliştirme: Kendi bilgisayarınızda çalışan bir web sunucusuna
http://localhost:3000gibi bir adresle bağlanırsınız. Sayılar port numarasıdır. - Test: Bir programın ağ yığınının çalışıp çalışmadığını görmek için
ping 127.0.0.1komutu kullanılabilir. Yanıt gelirse bilgisayarınızdaki ağ yazılımı çalışıyor demektir. İnternete ulaşıp ulaşmadığınızı göstermez. - Yerel hizmetler: Veritabanları ve bazı masaüstü uygulamaları dışarıya açılmak yerine yalnızca
127.0.0.1üzerinde dinleyerek erişimi aynı bilgisayarla sınırlar.
127.0.0.1 ile 0.0.0.0 farkı
Bir sunucu 127.0.0.1 üzerinde dinlerse yalnızca aynı bilgisayardan erişilebilir. 0.0.0.0 üzerinde dinlerse bilgisayarın tüm ağ arayüzlerinde dinler, yani aynı ağdaki başka cihazlar da bağlanabilir. Bir geliştirme sunucusunu yanlışlıkla 0.0.0.0 üzerinde açmak, onu ağdaki herkese göstermek demektir.
Döngü adresi tam olarak ne yapar?
127.0.0.1'e gönderilen paket ağ kartından dışarı çıkmaz. İşletim sistemi paketi kendi içinde geri çevirir ve aynı cihazdaki başka bir programa teslim eder. Bu nedenle bu adres internet bağlantısı olmasa da çalışır. IPv4'te 127.0.0.0/8 bloğunun tamamı, yani 16 milyondan fazla adres, döngü için ayrılmıştır, ama pratikte hep 127.0.0.1 kullanılır. IPv6'daki karşılığı ::1 adresidir.
Localhost, IP adresi ve hosts dosyası
localhost bir isimdir ve işletim sistemindeki hosts dosyasında 127.0.0.1'e (ve IPv6 için ::1'e) çevrilir. Bu dosya DNS'ten önce bakılan yerel bir rehberdir:
- Windows:
C:\Windows\System32\drivers\etc\hosts - macOS ve Linux:
/etc/hosts
Bu dosyaya kendi satırlarınızı ekleyerek bir alan adını geçici olarak başka bir adrese yönlendirebilirsiniz. Web geliştiricileri test sitelerini bu yolla kendi bilgisayarlarına bağlar. Dosyayı düzenlemek yönetici yetkisi gerektirir ve bilmediğiniz satırları silmemek gerekir, çünkü zararlı yazılımlar da bu dosyayı bankacılık sitelerini sahte sunuculara yönlendirmek için kullanabilir.
127.0.0.1, 0.0.0.0 ve ağ adresi farkı
Bir sunucu programı başlatırken hangi adreste dinleyeceğini seçer ve bu çok önemli bir güvenlik ayrımıdır:
- 127.0.0.1'de dinleyen program yalnızca aynı cihazdan erişilebilir. Geliştirme sunucuları için güvenli varsayılandır.
- 0.0.0.0'da dinleyen program cihazın bütün ağ arayüzlerinde dinler. Aynı ağdaki diğer cihazlar da, güvenlik duvarı izin veriyorsa, ona ulaşabilir.
- Cihazın yerel adresinde (örneğin 192.168.1.23) dinleyen program yalnızca o arayüzden gelen bağlantıları kabul eder.
Telefonunuzdan bilgisayarınızdaki geliştirme sitesine bakmak istiyorsanız sunucuyu 0.0.0.0'da başlatıp bilgisayarın yerel adresini kullanmanız gerekir. Veritabanı gibi hassas servisleri ise 127.0.0.1'e bağlı bırakmak daha güvenlidir.
Port çakışmaları
Aynı adres ve portta aynı anda yalnızca bir program dinleyebilir. "Address already in use" hatası, o portu başka bir programın tuttuğunu gösterir. Hangisi olduğunu şu komutlarla bulabilirsiniz:
# macOS ve Linux
lsof -i :3000
ss -ltnp | grep 3000
# Windows
netstat -ano | findstr :3000
Port kavramı ayrıntılı olarak port nedir yazısında anlatılıyor.
Kapsayıcılar ve sanal makinelerde localhost
Docker kapsayıcısının içinde localhost, ana bilgisayarı değil kapsayıcının kendisini gösterir. Kapsayıcıdan ana bilgisayardaki bir servise ulaşmak için Docker Desktop'ta host.docker.internal adı, Linux'ta ise ağ geçidi adresi ya da ağ ayarları kullanılır. Sanal makinelerde de aynı mantık geçerlidir: sanal makinenin "localhost"u kendi içidir. Bu, yeni başlayanları en çok yanıltan noktalardan biridir.
Sık sorulan sorular
127.0.0.1 internet adresim mi?
Hayır. Yalnızca kendi cihazınızı gösterir. İnternetteki genel adresinizi ana sayfadan görebilirsiniz.
Ping 127.0.0.1 çalışıyorsa internetim vardır diyebilir miyim?
Hayır. Bu test yalnızca cihazınızın ağ yığınının çalıştığını gösterir. İnternet erişimini test etmek için ağ geçidine ve sonra dışarıdaki bir adrese ping atmak gerekir, ayrıntısı ping ve traceroute yazısında.
Tarayıcıda localhost açılmıyor, neden?
Sunucu çalışmıyor olabilir, farklı bir portta olabilir ya da yalnızca IPv6'da (::1) ya da yalnızca IPv4'te dinliyor olabilir. Adres çubuğuna 127.0.0.1:PORT ve [::1]:PORT yazarak ikisini ayrı ayrı deneyin.
Diğer ayrılmış adresler
| Aralık | Kullanım |
|---|---|
| 127.0.0.0/8 | Loopback, bu bilgisayar |
| 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 | Özel ağlar, internette yönlendirilmez |
| 169.254.0.0/16 | Otomatik atanan link-local adresler |
| 100.64.0.0/10 | Sağlayıcıların paylaşımlı adres kullanımı (CGNAT) |
| 224.0.0.0/4 | Çok noktaya yayın (multicast) |
Alt ağ gösterimini anlamak için CIDR ve alt ağ maskesi yazısına bakabilirsiniz.