Network Öğrenme Günlüğü — Gün 3: Bu IP Kimin Mahallesi?
IPv4, binary, subnet mask ve CIDR mantığını; network, broadcast ve kullanılabilir host aralığını hesaplayarak öğrendiğim üçüncü gün notlarım.
İçindekiler · 14 bölüm
Dün paketlerin katmanlar arasında nasıl yolculuk ettiğine bakmıştım. Bugün o paketin navigasyon ekranını biraz daha yaklaştırıyorum.
Çünkü karşıma sürekli şöyle adresler çıkıyor:
192.168.1.25/24
10.0.0.5/8
172.16.5.100/27
IP kısmına az çok alıştım. Ama sondaki /24 veya /27 ne anlatıyor? İki cihaz yan yana görünen adreslere sahipken neden bazen doğrudan konuşuyor, bazen router’a ihtiyaç duyuyor? Bir adresin “mahallesi” nerede başlayıp nerede bitiyor?
Bugünkü hedefim tam olarak bu:
Bir IPv4 adresine baktığımda ağ adresini, broadcast adresini ve kullanılabilir host aralığını kendim hesaplayabilmek.
IPv4 neden dört parçalı görünüyor?
IPv4 adresi toplam 32 bitten oluşuyor. Okumamız kolay olsun diye bu bitler sekizerli dört gruba ayrılıyor. Her gruba octet deniyor.
192 . 168 . 1 . 25
octet octet octet octet
Bir octette sekiz bit var ve her bit ya 0 ya da 1. Sekiz bitin alabileceği en küçük değer 00000000, yani 0; en büyük değer 11111111, yani 255. Bu yüzden IPv4 adresindeki her octet 0–255 arasında olmak zorunda.
Bitlerin basamak değerleri şöyle:
128 64 32 16 8 4 2 1
Örneğin 192, binary olarak 11000000:
128 + 64 = 192
168 ise 10101000:
128 + 32 + 8 = 168
Dolayısıyla adresin tamamı şöyle yazılabilir:
192.168.1.25
11000000.10101000.00000001.00011001
İlk bakışta Matrix’in düşük bütçeli devam filmi gibi görünüyor. Neyse ki her IP’yi baştan sona binary çevirmem gerekmiyor. Ama subnet mask’in neden çalıştığını anlamak için bu görüntüyle bir kez tanışmak şart.
Bir IP adresinde mahalle ve kapı numarası
Bir IPv4 adresi mantıksal olarak iki parçaya ayrılıyor:
Network portion | Host portion
Ağ kısmı | Host kısmı
192.168.1.25/24 adresindeki /24, ilk 24 bitin ağı; kalan 8 bitin o ağdaki hostu gösterdiğini söylüyor.
Bunu mahalle ve kapı numarası gibi düşünebilirim:
192.168.1 | 25
mahalle kapı
Benzetme mantığı kuruyor ama teknik gerçeğin tamamı değil. Ağ sınırı her zaman octet’in bittiği yerde durmaz. /25, /26 veya /27 geldiğinde sınır son octetin ortasına girer. İşte subnetting’in eğlencesi — veya ilk yarım saatteki hafif baş ağrısı — burada başlıyor.
Subnet mask ve CIDR aynı sınırı tarif ediyor
Subnet mask, IP’nin hangi bitlerinin network, hangilerinin host olduğunu gösteriyor. Maskedeki 1 bitleri ağ kısmını, 0 bitleri host kısmını temsil ediyor.
255.255.255.0
11111111.11111111.11111111.00000000
Burada 24 tane 1 olduğu için bu maskenin kısa gösterimi /24.
CIDR, Classless Inter-Domain Routing ifadesinin kısaltması. Günlük kullanımda slash notation ile subnet mask’i daha kısa yazmamı sağlıyor:
| CIDR | Subnet mask | Toplam adres | Geleneksel kullanılabilir host |
|---|---|---|---|
| /24 | 255.255.255.0 | 256 | 254 |
| /25 | 255.255.255.128 | 128 | 126 |
| /26 | 255.255.255.192 | 64 | 62 |
| /27 | 255.255.255.224 | 32 | 30 |
| /28 | 255.255.255.240 | 16 | 14 |
| /29 | 255.255.255.248 | 8 | 6 |
| /30 | 255.255.255.252 | 4 | 2 |
Temel formül:
Host biti = 32 - CIDR
Toplam adres = 2^(host biti)
Geleneksel kullanılabilir host = 2^(host biti) - 2
Neden eksi iki? Geleneksel bir subnet’te ilk adres network address, son adres broadcast address olarak ayrılıyor. /31 ve /32 gibi özel durumlar bu klasik hesabın dışında; bugün standart host subnetlerine odaklanıyorum.
Network, broadcast ve kullanılabilir hostlar
192.168.1.0/24 ağına bakalım:
Network: 192.168.1.0
First host: 192.168.1.1
Last host: 192.168.1.254
Broadcast: 192.168.1.255
Network address, subnet’in kendisini temsil ediyor. Bir cihaza verilecek normal host adresi değil; mahallenin tabelası gibi.
Broadcast address, o subnet içindeki tüm hostlara yönelik yayın adresi. Network dünyasının “bu sokaktaki herkes duysun” anonsu.
Arada kalan adresler de cihazlara atanabilen geleneksel host aralığı.
Burada kritik nokta şu:
Subnet mask olmadan IP adresi, ağ sınırını tek başına söylemez.
Örneğin aynı IP iki farklı maskeyle bambaşka ağlara aittir:
192.168.1.25/24 → 192.168.1.0/24
192.168.1.25/16 → 192.168.0.0/16
Sadece apartman numarasını bilip hangi ilçede olduğunu bilmemek gibi. Adres var ama bağlam eksik.
Aynı subnet’te miyiz?
İki cihazın “aynı subnet’te” olması, subnet mask uygulandığında aynı network address’i üretmeleri demek.
Host A: 192.168.1.20/24 → Network: 192.168.1.0
Host B: 192.168.1.50/24 → Network: 192.168.1.0
İkisi aynı yerel ağda. Uygun Layer 2 bağlantısı da varsa birbirleriyle yerel olarak haberleşebilirler.
Ama ikinci cihaz 192.168.2.50/24 olsaydı network adresleri farklı çıkardı. Bu durumda araya router girmesi gerekirdi.
Aynı subnet → yerel teslimat
Farklı subnet → router üzerinden teslimat
Gün 1’deki default gateway şimdi daha anlamlı: Bilgisayarım hedefin kendi subnet’inde olmadığını maskeyle anlıyor ve paketi çıkış kapısına bırakıyor.
Blok boyutu: Subnet hesabının kısa yolu
/24 kolay; son octet baştan sona host. Peki /25, /26 ve /27?
Pratik yöntem şu:
Blok boyutu = 256 - maskenin değişen octeti
/26 maskesi 255.255.255.192 olduğuna göre:
256 - 192 = 64
Alt ağlar son octette 64’er 64’er başlar:
0, 64, 128, 192
192.168.1.70/26 adresinde 70, 64–127 aralığına düşüyor:
Network: 192.168.1.64
First host: 192.168.1.65
Last host: 192.168.1.126
Broadcast: 192.168.1.127
Hesabın özü bu: IP’nin hangi iki blok başlangıcı arasında kaldığını buluyorum. İlk sınır network, bir sonraki sınırdan hemen önceki adres broadcast oluyor.
Bir /27 örneği
172.16.5.100/27 için maskenin son octeti 224:
Blok boyutu: 256 - 224 = 32
Başlangıçlar: 0, 32, 64, 96, 128, 160, 192, 224
100, 96–127 aralığında:
Network: 172.16.5.96
First host: 172.16.5.97
Last host: 172.16.5.126
Broadcast: 172.16.5.127
Binary tarafta gerçekte ne oluyor?
Kısa yol faydalı ama sihir değil. Network address teknik olarak IP adresiyle subnet mask arasında bit düzeyinde AND işlemi yapılarak bulunuyor.
IP: 11000000.10101000.00000001.00011001
Mask: 11111111.11111111.11111111.00000000
AND: 11000000.10101000.00000001.00000000
Sonuç 192.168.1.0. AND işleminde yalnızca iki bit de 1 ise sonuç 1 oluyor. Blok boyutu yöntemi günlük hesapta hızlı; binary ise sonucun neden doğru olduğunu gösteriyor.
Private, public ve diğer özel adresler
Her IPv4 adresi internette doğrudan dolaşamıyor. Yerel ağlarda kullanılmak üzere ayrılmış private aralıklar şunlar:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
Burada sık yapılan hata: 172 ile başlayan her adres private değil. Yalnızca 172.16.0.0–172.31.255.255 aralığı private.
Evde laptopum 192.168.1.20, telefonum 192.168.1.21 olabilir. Router, NAT yardımıyla bu cihazların trafiğini public IP üzerinden internete çıkarabilir. NAT’ı ilerleyen güne bırakıyorum; şimdilik tek bir public çıkışın arkasında birden fazla private adres olabileceğini bilmem yeterli.
Karşıma çıkabilecek birkaç özel aralık daha var:
| Adres | Ne düşündürür? |
|---|---|
127.0.0.0/8 |
Loopback; cihazın kendisi |
169.254.0.0/16 |
Link-local; çoğu zaman DHCP’den adres alınamadı |
0.0.0.0 |
Bağlama göre belirtilmemiş adres, tüm arayüzler veya default route |
255.255.255.255 |
Limited broadcast |
169.254.x.x gördüğümde ilk refleksim “internet bozuk” demek değil, “DHCP neden adres veremedi?” diye sormak olmalı.
Default gateway neden aynı subnet’te olmalı?
Normal bir yapılandırma:
Host: 192.168.1.20/24
Gateway: 192.168.1.1
Sorunlu örnek:
Host: 192.168.1.20/24
Gateway: 192.168.2.1
Host, gateway’e paket teslim edebilmek için önce ona yerel ağda ulaşabilmeli. İkinci örnekte gateway farklı subnet’te; yani başka ağa gitmek için ulaşmam gereken kapı zaten başka ağda. Anahtar içeride kaldı, çilingir de evin içinde gibi bir durum.
Subnetting neden yapılıyor?
Büyük bir ağı daha küçük mantıksal ağlara bölmek birkaç işe yarıyor:
- Broadcast alanını küçültmek
- Departmanları ve cihaz gruplarını ayırmak
- IP adreslerini daha düzenli kullanmak
- Routing ve hata ayıklamayı kolaylaştırmak
- Güvenlik politikalarının uygulanacağı sınırlar oluşturmak
Ama subnetting tek başına güvenlik duvarı değil. İki ağı ayırmak, aralarındaki trafiği otomatik olarak güvenli yapmaz. Firewall, ACL, VLAN ve doğru routing politikaları hâlâ işin içinde.
Küçük laboratuvar: Önce elle, sonra araçla
macOS’ta yerel IPv4 ve default route için:
ipconfig getifaddr en0
route -n get default
netstat -rn
Linux’ta:
ip addr
ip route
Hesabı doğrulamak için ipcalc kullanabilirim:
ipcalc 172.16.5.100/27
Python’ın standart ipaddress modülü de aynı işi yapıyor:
import ipaddress
network = ipaddress.ip_network("172.16.5.100/27", strict=False)
print("Network:", network.network_address)
print("Broadcast:", network.broadcast_address)
print("Netmask:", network.netmask)
print("Total:", network.num_addresses)
Kuralım şu:
Önce elle hesapla, sonra araçla doğrula.
Araç cevabı verir. Benim hedefim, cevabın neden doğru olduğunu anlayabilmek.
Kendime çözmek için bıraktığım adresler:
192.168.10.37/24
192.168.1.140/25
192.168.1.70/26
172.16.5.100/27
10.10.10.14/30
Her biri için network, broadcast, ilk host, son host, toplam adres ve kullanılabilir host sayısını bulacağım.
Günün sonunda kafamda kalan formül
Bugün şu cümle yerine oturdu:
IP adresi + subnet mask = ağ sınırı
Artık 172.16.5.100/27 gördüğümde yalnızca noktalı dört sayı ve sonunda gizli tarikat işareti görmüyorum. Şunu okuyabiliyorum:
Network: 172.16.5.96
Broadcast: 172.16.5.127
Host range: 172.16.5.97–172.16.5.126
CIDR’ın sorduğu soru aslında basit:
Bu adresin kaç biti ağı, kaç biti o ağdaki hostu anlatıyor?
Bir sonraki gün MAC adresi ve ARP’ye geçeceğim. Yani aynı subnet’te olduğuma karar verdim; sırada “Peki bu IP’nin MAC adresini nasıl bulacağım?” sorusu var.
Görsel kaynakları
- Kapak illüstrasyonu: Bu yazı için yerel olarak üretilmiştir.
- IPv4 anatomisi ve subnet blokları şemaları: Bu yazı için yerel olarak hazırlanmıştır.
$ leave_reaction --one
Bu yazı sende ne bıraktı?
Bir reaction seç. Kararını daha sonra değiştirebilirsin.
Bu seçim yalnızca bu tarayıcıda saklanır. Herhangi bir kişisel veri veya reaction bilgisi sunucuya gönderilmez.
