LINUX ÖĞRENİYORUM SERİSİ 8

Linux Öğreniyorum Serisi 8 – Network Yönetimi: IP, IPv4/IPv6, MAC, MTU, CIDR ve Subnet

Merhabalar,

Linux öğreniyorum serimizin yeni bir yazısıyla karşınızdayım. Aşağıya şu ana kadar yayınlanmış yazılarımızın tam adreslerini yazdım. LinkedIn üzerinden de bu makalelere ulaşabilirsiniz. Bu makalemizde yine en merak uyandıran konulardan birisi olan Network (Ağ) yönetimine odaklanacağız. Network, sizi bilmem ama benim başlangıçta korktuğum, öğrendikçe de çok sevdiğim bir konu. Şunu da belirtmeliyim ki, Network bilmeden bir mühendis asla tam olmaz. O yüzden Network deyip geçmeyin, tek başına hiçbir erişimin olmadığı bir adada kim yaşamak ister? Bu amaçla Microsoft Azure üzerinde Ubuntu Linux sanal makineleri oluşturacak ve uygulamalarımızı bu ortamda gerçekleştireceğim.

https://asiyeyigit.com/linux-ogreniyorum-dizin-hiyerarsisi-ve-baslangic-dosyalari-ders-1/

https://asiyeyigit.com/linux-ogreniyorum-serisi-ders2/ (Linux izinler…)

https://asiyeyigit.com/linux-ogreniyorum-serisi-3-dosya-izinleri-ve-ozel-izinler/  (Linux izinler devam…)

https://asiyeyigit.com/linux-ogreniyorum-serisi-4-acl-access-control-list/ (ACL)

https://asiyeyigit.com/linux-ogreniyorum-serisi-5/ (SELinux)

https://asiyeyigit.com/linux-ogreniyorum-serisi-6/ (Süreç yönetimi)

https://asiyeyigit.com/linux-ogreniyorum-serisi-7/ (Disk, Partition, File System, LVM)

Yazımız için ilk makinemiz hazır. “uname -a” ve “hostnamectl” komutlarının çıktılarını aşağıya yapıştırdım.

azureuser@vm-linux-net-01:~$ uname -a
Linux vm-linux-net-01 7.0.0-1017-azure #17~24.04.1-Ubuntu SMP PREEMPT Thu Sep 24 18:46:57 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
azureuser@vm-linux-net-01:~$
azureuser@vm-linux-net-01:~$ hostnamectl
Static hostname: vm-linux-net-01
Icon name: computer-vm
 Chassis: vm
Machine ID: 65b9642ace6f49d38b0b3663842c5128
Boot ID: bd0dd1a9d1a14893a2c3b184330b73cf
Virtualization: microsoft
Operating System: Ubuntu 24.04.5 LTS
Kernel: Linux 7.0.0-1017-azure
Architecture: x86-64
Hardware Vendor: Microsoft Corporation
 Hardware Model: Virtual Machine
Firmware Version: Hyper-V UEFI Release v4.1
Firmware Date: Thu 2026-01-08
Firmware Age: 9month 3w 2d
azureuser@vm-linux-net-01:~$

 En temel tanımıyla Network, iki veya daha fazla cihazın birbirleriyle iletişim kurabilmesini ve kaynak paylaşabilmesini sağlayan yapıdır. Ancak cihazların bir ağa bağlı olması, tek başına iletişimin gerçekleşeceği anlamına gelmez. Cihazların birbirlerini adresleyebilmesi, verilerin doğru hedefe ulaştırılması ve iletişimin belirli kurallar çerçevesinde yürütülmesi gerekir. Bu kurallara protokol (Protocol) adını veriyoruz. Burada Network ile Internet kavramlarını birbirinden ayırmakta fayda var. Network, kendi içerisinde iletişim kurabilen yerel veya geniş kapsamlı bir ağ olabilir. Internet ise dünya genelinde birbirine bağlanmış çok sayıda ağın oluşturduğu küresel bir sistemdir. Dolayısıyla iki Linux sunucusunun birbiriyle iletişim kurabilmesi için Internet bağlantısı zorunlu değildir. Linux işletim sisteminde ağ iletişimi, çekirdeğin (Kernel) ağ alt sistemi yani Linux Network Stack tarafından yönetilir. Uygulamalar, ağ iletişimini genellikle socket arayüzleri üzerinden gerçekleştirirken Kernel; IP adresleme, paket işleme, yönlendirme ve TCP/UDP gibi taşıma protokollerinin işleyişinde görev alır. Şimdi bu mimariyi anlamaya, ağ iletişiminin temel bileşenlerinden başlayalım.

Network Interface, bir sistemin ağ ile iletişim kurmasını sağlayan fiziksel veya sanal bağlantı arayüzüdür. Fiziksel sunucularda Ethernet kartları, kablosuz ağ adaptörleri; sanallaştırılmış ortamlarda ise Virtual Network Interface Card (vNIC) örnek olarak gösterilebilir. Linux’ta ağ arayüzlerinin yönetimi ve gözlemlenmesi için günümüzde yaygın olarak iproute2 araç takımı kullanılmaktadır. Bu araç takımındaki ip komutu sayesinde arayüzleri, IP adreslerini ve yönlendirme bilgilerini inceleyebiliriz. İlk olarak sistemimizde bulunan ağ arayüzlerini listeleyelim.

azureuser@vm-linux-net-01:~$ ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000

    link/ether 60:45:bd:fb:71:55 brd ff:ff:ff:ff:ff:ff

azureuser@vm-linux-net-01:~$

 Bu komut ağ arayüzlerinin isimlerini, MAC adreslerini, MTU değerlerini ve bağlantı durumlarını gösterir. Henüz IP adreslerinin ayrıntılarına odaklanmadan, Linux’un hangi ağ arayüzlerini tanıdığını görmemizi sağlar. Bir Linux sunucusunda karşılaşabileceğimiz bazı arayüz türleri şunlardır:

lo (Loopback): Sistemin kendi içerisinde ağ iletişimi gerçekleştirmesini sağlayan sanal arayüz.

eth0, ens33, enp0s3: Ethernet ağ arayüzlerine örnek isimler. Kullanılan isim, dağıtıma ve sistem yapılandırmasına göre değişebilir.

bond0: Birden fazla ağ bağlantısının mantıksal olarak birleştirilmesiyle oluşturulabilen arayüz.

br0: Linux Bridge yapısında kullanılan sanal köprü arayüzü.

vlan100: VLAN yapılandırmalarında kullanılabilecek mantıksal arayüz.

Burada önemli bir noktayı belirtelim: Bir Linux sunucusunda birden fazla ağ arayüzü bulunabilir ve aynı ağ arayüzüne birden fazla IP adresi atanabilir.

Bir ağda veri iletişiminin gerçekleşebilmesi için kaynak ve hedef sistemlerin IP katmanında adreslenmesi gerekir. IP (Internet Protocol), verilerin mantıksal olarak adreslenmesini ve farklı ağlar arasında yönlendirilmesini sağlayan ağ katmanı protokolüdür. IP adresi ise bu iletişimde kullanılan mantıksal adresi ifade eder. IP adresleri, cihazın kendisinden çok ağ arayüzleriyle ilişkilidir. Bu nedenle aynı Linux sunucusunda birden fazla IPv4 veya IPv6 adresi bulunabilir. Günümüzde iki temel IP sürümü kullanılmaktadır: IPv4 (Internet Protocol Version 4) ve IPv6 (Internet Protocol Version 6).

IPv4, 32 bitlik adresleme yapısına sahiptir. IPv6 ise 128 bitlik adresleme yapısıyla çok daha geniş bir adres alanı sunar. IPv6’nın geliştirilmesinde IPv4 adres alanının sınırlı olması önemli bir etkendir. Bununla birlikte IPv6; adres yapılandırması, komşu keşfi (Neighbor Discovery) ve paket yapısı açısından da IPv4’ten farklı özellikler taşır. Günümüzde pek çok sistem her iki protokolü birlikte kullanmaktadır. Dual Stack olarak adlandırılan bu yaklaşımda IPv4 ve IPv6 aynı sistem üzerinde eş zamanlı çalışabilir.

Linux’ta ağ arayüzlerine atanmış IPv4 ve IPv6 adreslerini görüntülemek için aşağıdaki komutu kullanabiliriz. Bu komut hem ağ arayüzlerini hem de bu arayüzlere atanmış IP adreslerini ayrıntılı olarak gösterir. Çıktımızda lo ve eth0 olmak üzere iki ağ arayüzü bulunuyor. Loopback (lo), sistemin kendi kendisiyle ağ protokolleri üzerinden iletişim kurmasını sağlayan sanal arayüzdür. IPv4 tarafında 127.0.0.1, IPv6 tarafında ise ::1 adresi kullanılır. Örneğin aynı sunucuda çalışan bir uygulama ile veritabanı servisi, uygun şekilde yapılandırılmışsa loopback üzerinden haberleşebilir. Bu iletişim fiziksel ağ bağlantısına ihtiyaç duymaz. Ethernet Interface (eth0) ise sunucumuzun ağ bağlantısını sağlayan arayüzdür. Şimdi komut çıktımızdaki parametrelerin ne anlama geldiğini inceleyelim. UP, ağ arayüzünün yönetimsel olarak aktif olduğunu, LOWER_UP ise fiziksel veya sanal bağlantının alt katmanda çalışır durumda bulunduğunu gösterir. MTU (Maximum Transmission Unit), ağ arayüzünün tek bir paket halinde iletebileceği maksimum veri birimi boyutunu belirtir. Örneğimizde bu değer 1500 byte olarak görülmektedir. link/ether, Ethernet arayüzünün MAC (Media Access Control) adresini ifade ederken inet IPv4, inet6 ise IPv6 adreslerini gösterir. IP adreslerinin sonunda gördüğümüz /24 ve /64 ifadeleri, CIDR gösteriminde ağ önekinin (Network Prefix) kaç bitten oluştuğunu belirtir. Scope host, adresin yalnızca yerel sistem kapsamında geçerli olduğunu, scope link ise adresin bulunduğu ağ bağlantısı kapsamında kullanılabildiğini ifade eder. Son olarak qdisc (Queueing Discipline), Linux çekirdeğinin ağ paketlerinin gönderim kuyruklarını yönetmek için kullandığı mekanizmadır. Çıktımızdaki qdisc mq (Multi Queue), birden fazla gönderim kuyruğunun yönetilmesini sağlayan kuyruk disiplinini gösterir.

azureuser@vm-linux-net-01:~$ ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
    valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

link/ether 60:45:bd:fb:71:55 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.4/24 metric 100 brd 172.16.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::6245:bdff:fefb:7155/64 scope link
valid_lft forever preferred_lft forever
azureuser@vm-linux-net-01:~$
Sunucumuzun IPv4 adresi: 172.16.0.4/24

Bu adres özel IPv4 (Private IP) adres aralığında bulunmaktadır. RFC 1918 kapsamında tanımlanan bu adresler, kurum içi ağlarda ve özel ağ yapılarında kullanılabilir; genel Internet üzerinde doğrudan yönlendirilmez. Adresin sonundaki /24 ifadesi ise CIDR (Classless Inter-Domain Routing) gösterimidir. İlk 24 bitin ağ öneki olduğunu belirtir. Bu kavramı ilerleyen bölümümüzde subnet mask, network address ve broadcast address ile birlikte ayrıntılı olarak inceleyeceğiz.

Sunucumuzun IPv6 adresi: fe80::6245:bdff:fefb:7155/64

Bu adres, IPv6 Link-Local adresidir. IPv6’da fe80::/10 adres aralığı link-local iletişim için ayrılmıştır. Bu adresler aynı bağlantı üzerindeki cihazlar arasında iletişimi ve Neighbor Discovery gibi işlemleri destekler. Router’lar link-local adresli paketleri başka bağlantılara yönlendirmez. Burada dikkat etmemiz gereken önemli bir nokta var: Linux üzerinde IPv6 adresi bulunması, sistemin mutlaka IPv6 üzerinden Internet erişimine sahip olduğu anlamına gelmez. Sunucumuzdaki adres link-local kapsamındadır. Global IPv6 bağlantısının bulunup bulunmadığını değerlendirmek için ayrıca global adresleri, yönlendirme tablosunu ve bağlantı durumunu incelemek gerekir.

Linux üzerinde yalnızca IPv4 adreslerini görmek istersek:

 

azureuser@vm-linux-net-01:~$ ip -4 addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 172.16.0.4/24 metric 100 brd 172.16.0.255 scope global eth0
valid_lft forever preferred_lft forever
azureuser@vm-linux-net-01:~$
alnızca IPv6 adreslerini görmek istersek:

azureuser@vm-linux-net-01:~$ ip -6 addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000

    inet6 ::1/128 scope host noprefixroute

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000

    inet6 fe80::6245:bdff:fefb:7155/64 scope link

       valid_lft forever preferred_lft forever

azureuser@vm-linux-net-01:~$

 Daha kısa ve okunabilir bir çıktı almak için:

 azureuser@vm-linux-net-01:~$ ip -br addr
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             172.16.0.4/24 metric 100 fe80::6245:bdff:fefb:7155/64
azureuser@vm-linux-net-01:~$

 Bu komut özellikle birden fazla network interface bulunan sunucularda hızlı kontrol yapmak açısından kullanışlıdır. Bu ilk incelememizde Linux’un ağ arayüzlerini nasıl temsil ettiğini, IP adreslerinin bu arayüzlerle ilişkisini ve IPv4 ile IPv6 adreslerinin birlikte nasıl görüntülendiğini görmüş olduk.

IP adreslerini inceledik ancak ağ iletişiminde IP adresleri kadar önemli bir başka adresleme mekanizması daha bulunuyor: MAC adresleri. MAC (Media Access Control) adresi, Ethernet gibi ağ teknolojilerinde cihazların ağ arayüzlerini veri bağlantı katmanında (Layer 2) tanımlamak için kullanılan adrestir. Geleneksel Ethernet MAC adresleri 48 bit uzunluğundadır ve hexadecimal biçimde gösterilir. MAC adresleri genellikle ağ arayüzü üreticisi tarafından atanır ancak sanal ortamlarda yazılımsal olarak da oluşturulabilir veya değiştirilebilir.

Peki IP adresimiz zaten varsa MAC adresine neden ihtiyaç duyuyoruz? Çünkü bu iki adresin görevleri farklıdır. IP adresi, paketin ağ katmanındaki kaynak ve hedefini belirlerken MAC adresi, Ethernet frame’in (çerçeve) yerel bağlantı üzerindeki kaynak ve hedefini belirler. Örneğin bir Linux sunucusu aynı yerel ağdaki başka bir sunucuya IPv4 paketi göndermek istediğinde, hedef IP adresine karşılık gelen MAC adresini ARP (Address Resolution Protocol) mekanizmasıyla öğrenebilir. Hedef farklı bir ağdaysa Ethernet frame’i (çerçeve) genellikle bir sonraki yönlendiricinin (Gateway) MAC adresine gönderilir. IPv6 tarafında ise benzer adres çözümleme işlemleri Neighbor Discovery Protocol (NDP) ile gerçekleştirilir.

 

Linux sunucumuzda MAC adresini görüntülemek için aşağıdaki komutu kullanabiliriz:

 

azureuser@vm-linux-net-01:~$ ip link show eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000

    link/ether 60:45:bd:fb:71:55 brd ff:ff:ff:ff:ff:ff

azureuser@vm-linux-net-01:~$

Daha kısa bir çıktı almak istersek:

azureuser@vm-linux-net-01:~$ cat /sys/class/net/eth0/address

60:45:bd:fb:71:55

azureuser@vm-linux-net-01:~$

Sunucumuzun önceki çıktısında MAC adresinin `60:45:bd:fb:71:55` olduğunu görmüştük. MAC adresini görmek kadar, Linux’un IP adresleri ile MAC adresleri arasındaki eşleşmeleri nasıl tuttuğunu anlamak da önemlidir. Bu bilgileri incelemek için aşağıdaki komutu kullanabiliriz.

azureuser@vm-linux-net-01:~$ ip neigh show

172.16.0.1 dev eth0 lladdr 12:34:56:78:9a:bc REACHABLE

azureuser@vm-linux-net-01:~$

Çıktımızda 172.16.0.1 IP adresinin eth0 arayüzü üzerinden 12:34:56:78:9a:bc MAC adresiyle eşleştiğini görüyoruz. Buradaki lladdr (Link Layer Address), komşu cihazın bağlantı katmanı adresini; REACHABLE ise Linux Neighbor Unreachability Detection mekanizmasına göre bu komşuya yakın zamanda erişilebilir olduğunun doğrulandığını gösterir. Bu durum, komşunun sürekli erişilebilir olacağını garanti etmez; kayıt zamanla STALE gibi başka durumlara geçebilir.

MTU (Maximum Transmission Unit) Nedir?

Ağ iletişiminde önemli bir diğer kavram da MTU’dur. MTU (Maximum Transmission Unit), bir ağ arayüzünün tek bir veri bağlantı katmanı iletiminde taşıyabileceği maksimum ağ katmanı paket boyutunu ifade eder. Ethernet ağlarında yaygın olarak kullanılan MTU değeri 1500 byte’tır. Bu değer Ethernet başlığı ve FCS alanını kapsamaz; Ethernet frame’in (çerçeve) taşıdığı IP paketinin maksimum boyutunu ifade eder. Örneğin IPv4 kullanıldığında, seçenek içermeyen standart 20 byte IP başlığı ve 20 byte TCP başlığı düşünüldüğünde, 1500 byte MTU üzerinden tek bir TCP segmentinde en fazla 1460 byte uygulama verisi taşınabilir. Bu değere MSS (Maximum Segment Size) adı verilir. TCP seçenekleri, ek protokoller ve tünelleme mekanizmaları kullanılınca hesap değişebilir.

MTU değerinin doğru yapılandırılması özellikle VPN, VXLAN, GRE gibi tünelleme teknolojilerinde ve sanallaştırılmış ağlarda önemlidir. Çünkü bu teknolojiler paketlere ek başlıklar ekleyebilir. İletim yolunun desteklediği MTU değerini aşan paketler, IPv4’te belirli koşullarda parçalanabilir (Fragmentation). IPv6’da ise yönlendiriciler paketleri parçalamaz; iletim yolunun MTU değerini aşan paketler düşürülür ve kaynak sisteme ICMPv6 Packet Too Big mesajı gönderilir. Bu nedenle Path MTU Discovery (PMTUD) mekanizması, kaynak sistemin hedefe giden yol üzerinde desteklenen uygun paket boyutunu belirleyebilmesi açısından önemli bir rol oynar.

Linux sunucumuzda MTU değerini görmek için aşağıdaki komutu kullanabiliriz.

azureuser@vm-linux-net-01:~$ ip link show eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000

    link/ether 60:45:bd:fb:71:55 brd ff:ff:ff:ff:ff:ff

azureuser@vm-linux-net-01:~$

Bizim çıktımızda eth0 arayüzünün MTU değeri 1500, loopback arayüzünün MTU değeri ise 65536 olarak görülmektedir. MTU konusunu ilerleyen bölümlerde TCP iletişimi, paket analizi ve network troubleshooting uygulamaları sırasında yeniden ele alacağız.

CIDR (Classless Inter-Domain Routing) Nedir?

IP adreslerini incelerken sunucumuzun adresinin 172.16.0.4/24 olduğunu görmüştük. Peki adresin sonundaki /24 ne anlama geliyor? Bu gösterime CIDR (Classless Inter-Domain Routing) adı verilir. CIDR, IP adres alanlarının sabit adres sınıflarına bağımlı kalmadan, değişken uzunluktaki ağ önekleriyle tanımlanmasını ve yönlendirme bilgilerinin daha verimli biçimde birleştirilmesini sağlayan adresleme yaklaşımıdır. IPv4 adresleri 32 bitten oluşur. CIDR gösteriminde IP adresinin sonuna eklenen /24, bu 32 bitin ilk 24 bitinin ağ önekini (Network Prefix) temsil ettiğini belirtir. Geriye kalan 8 bit ise adresin ağ öneki dışında kalan bölümüdür. Örneğin: 172.16.0.4/24 adresinin subnet mask karşılığı 255.255.255.0 olacaktır. Dolayısıyla CIDR gösterimi, bir IP adresini yalnızca tanımlamakla kalmaz; bu adresin ait olduğu ağ bloğunu hesaplamamıza da yardımcı olur.

Subnet (Alt Ağ) Nedir?

Subnet, daha büyük bir IP adres alanının belirli ağ önekleri kullanılarak mantıksal olarak bölümlendirilmesiyle oluşturulan alt ağdır. Subnetting işlemi, IP adres alanının daha verimli kullanılmasına, ağların farklı bölümlere ayrılmasına ve yönlendirme ile güvenlik politikalarının daha düzenli yönetilmesine yardımcı olur. Örneğin 172.16.0.4/24 adresini ele alalım. Buradaki /24 gösterimi, subnet mask değerinin 255.255.255.0 olduğunu belirtir. Bu durumda ağ adresimiz 172.16.0.0, broadcast adresimiz ise 172.16.0.255 olur. Bu subnet toplam 256 IPv4 adresi içerir. Geleneksel bir IPv4 broadcast subnet’inde ağ ve broadcast adresleri host adresi olarak kullanılamadığından 254 adet atanabilir host adresi bulunur. Ancak bazı özel ağ türlerinde ve bulut platformlarında kullanılabilir adres sayıları farklılık gösterebilir. Subnetting’in asıl mantığını anlamak için IP adreslerini yalnızca ondalık gösterimleriyle değil, binary (ikili sayı sistemi) üzerinden de incelemek gerekir. Çünkü subnet mask, network address ve host adres alanı arasındaki ilişki, bit seviyesinde yapılan işlemlerle belirlenir. Şimdi bu hesaplamaları kendi Linux sunucumuzun IP adresi üzerinden adım adım inceleyeceğiz. Sunucumuzun 172.16.0.4/24 adresini bit düzeyinde düşünürsek:

 

Bu örnekte ilk 24 bit ağ önekidir. Son 8 bit ise aynı ağ bloğu içindeki farklı IPv4 adreslerini oluşturur. Sunucumuzda aşağıdaki komutu çalıştıralım:

azureuser@vm-linux-net-01:~$ ip -4 route show dev eth0

default via 172.16.0.1 proto dhcp src 172.16.0.4 metric 100

168.63.129.16 via 172.16.0.1 proto dhcp src 172.16.0.4 metric 100

169.254.169.254 via 172.16.0.1 proto dhcp src 172.16.0.4 metric 100

172.16.0.0/24 proto kernel scope link src 172.16.0.4 metric 100

172.16.0.1 proto dhcp scope link src 172.16.0.4 metric 100

azureuser@vm-linux-net-01:~$

CIDR ve subnet kavramlarını öğrendikten sonra Linux işletim sisteminin bu bilgileri nasıl kullandığına bakalım. Az önce çalıştırdığımız ip -4 route show dev eth0 komutu, sistemimizin IPv4 yönlendirme tablosunda eth0 arayüzüyle ilişkili kayıtları gösteriyor. Çıktımızdaki en önemli satırlardan biri şu: 172.16.0.0/24 proto kernel scope link src 172.16.0.4 metric 100

Bu satırı birlikte yorumlayalım. 172.16.0.0/24, doğrudan bağlı olduğumuz ağın adresini ve CIDR önekini gösteriyor. proto kernel, bu yönlendirme kaydının Kernel tarafından oluşturulduğunu; scope link, hedef ağın doğrudan bağlı bağlantı üzerinden erişilebilir olduğunu; src 172.16.0.4, bu rota için tercih edilen kaynak IPv4 adresini; metric 100 ise rota seçiminde kullanılan metrik değerini ifade ediyor. Buradan önemli bir sonuca ulaşıyoruz: Linux, ağ arayüzüne atanmış IP adresini ve subnet bilgisini kullanarak doğrudan bağlı olduğu ağı yönlendirme tablosunda temsil edebiliyor. Peki 172.16.0.4/24 adresinden 172.16.0.0/24 ağını nasıl hesaplıyoruz? IPv4 adresimiz 32 bitten oluşuyor. /24, ilk 24 bitin ağ öneki olduğunu belirtiyor. Bu durumda subnet mask 255.255.255.0 oluyor. İşlemi binary olarak gösterelim:

 

IP Address:

10101100.00010000.00000000.00000100
Subnet Mask:
11111111.11111111.11111111.00000000
Network Address (AND):
10101100.00010000.00000000.00000000

Bu işlemde IP adresi ile subnet mask arasında bit düzeyinde AND (mantıksal VE) işlemi gerçekleştiriliyor. İki bit de 1 olduğunda sonuç 1, diğer durumlarda 0 oluyor. Sonuç olarak Network Address değerimiz 172.16.0.0 oluyor. Aynı subnet için IPv4 broadcast adresimiz 172.16.0.255 ve geleneksel kullanılabilir host adres aralığımız 172.16.0.1–172.16.0.254 olacaktır. Bu örnekte son 8 bit host alanına ayrıldığından toplam adres kapasitesini 2⁸ = 256 şeklinde hesaplayabiliriz. Genel IPv4 broadcast subnet’lerinde ağ ve broadcast adreslerini çıkardığımızda 254 host adresi kalır. Bununla birlikte /31, /32 gibi özel öneklerin kullanımında ve bazı altyapılarda farklı kurallar geçerlidir. Subnetting işlemi sayesinde büyük IP adres alanlarını daha küçük mantıksal ağlara ayırabilir, adres kullanımını planlayabilir ve farklı ağlar arasında iletişimin nasıl gerçekleştirileceğini tasarlayabiliriz.

Öğrendiklerimizi Linux Üzerinde Doğrulayalım.  Buraya kadar kullandığımız komutların yanında, network yönetiminde sıklıkla başvuracağımız birkaç komutu daha tanıyalım.

Ağ arayüzlerinin kısa özetini görmek için:

azureuser@vm-linux-net-01:~$ ip -br addr

lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             172.16.0.4/24 metric 100 fe80::6245:bdff:fefb:7155/64
azureuser@vm-linux-net-01:~$

Yalnızca IPv4 yönlendirme tablosunu görüntülemek için:

azureuser@vm-linux-net-01:~$ ip -4 route show

default via 172.16.0.1 dev eth0 proto dhcp src 172.16.0.4 metric 100
168.63.129.16 via 172.16.0.1 dev eth0 proto dhcp src 172.16.0.4 metric 100
169.254.169.254 via 172.16.0.1 dev eth0 proto dhcp src 172.16.0.4 metric 100
172.16.0.0/24 dev eth0 proto kernel scope link src 172.16.0.4 metric 100
172.16.0.1 dev eth0 proto dhcp scope link src 172.16.0.4 metric 100
azureuser@vm-linux-net-01:~$

ip -4 route show komutu, Linux işletim sisteminin IPv4 yönlendirme tablosundaki (Routing Table) kayıtları görüntüler. Bu tablo, Kernel’in bir IP paketini hangi ağ arayüzünden ve gerekiyorsa hangi yönlendirici (Gateway) üzerinden göndereceğini belirlemesinde kullanılır. Çıktımızdaki default via 172.16.0.1 dev eth0 ifadesi, daha özel bir yönlendirme kaydıyla eşleşmeyen hedeflere gönderilecek paketlerin eth0 arayüzü üzerinden 172.16.0.1 adresindeki varsayılan Gateway’e iletileceğini gösterir. 172.16.0.0/24 dev eth0 kaydı ise bu ağın doğrudan bağlı (Directly Connected) olduğunu, yani bu subnet içindeki hedeflere ulaşmak için normal koşullarda başka bir yönlendiriciye ihtiyaç duyulmadığını ifade eder. Çıktıda ayrıca belirli IP adreslerine yönelik özel yönlendirme kayıtları da bulunabilir. proto dhcp ilgili rotanın DHCP yapılandırmasıyla öğrenildiğini, src 172.16.0.4 tercih edilen kaynak IP adresini, metric 100 ise rota seçiminde kullanılan öncelik değerini gösterir. Linux, hedef IP adresi için uygun rotayı belirlerken öncelikle en uzun eşleşen ağ önekini (Longest Prefix Match) değerlendirir. Aynı hedef önekine sahip alternatif rotalarda ise metrik gibi ek kriterler önem kazanır.

Linux’un belirli bir IPv4 hedefine ulaşırken hangi rotayı seçeceğini görmek için:

azureuser@vm-linux-net-01:~$ ip -4 route get 1.1.1.1

1.1.1.1 via 172.16.0.1 dev eth0 src 172.16.0.4 uid 1000

    cache

azureuser@vm-linux-net-01:~$

Peki Linux, belirli bir IP adresine paket göndermek istediğinde hangi yolu kullanacağına nasıl karar veriyor? Bunu öğrenmek için ip -4 route get 1.1.1.1 komutunu kullanabiliriz. Bu komut, Kernel’in belirtilen hedef IP adresi için yapacağı yönlendirme değerlendirmesini gösterir. Örneğimizde 1.1.1.1, ulaşmak istediğimiz hedef IP adresidir. Komut çıktımızdaki via 172.16.0.1, paketin varsayılan Gateway üzerinden gönderileceğini; dev eth0, kullanılacak ağ arayüzünü; src 172.16.0.4, paketin kaynak IP adresini; uid 1000 ise yönlendirme sorgusuyla ilişkili kullanıcı kimliğini gösterir. Çıktının sonunda bulunan cache ifadesi, Kernel’in hesapladığı rota sonucunun gösterimine ilişkin bir bilgidir; tek başına eski tip kalıcı bir IPv4 route cache bulunduğu anlamına gelmez. Linux sunucumuzun yönlendirme kararını aşağıdaki görselden de görebiliriz. Burada dikkat edilmesi gereken önemli nokta şudur: Bu komut hedef sisteme paket göndermez, yalnızca Linux’un hangi yolu kullanacağını gösterir. Dolayısıyla bir rotanın bulunması, hedef IP adresine gerçekten erişilebildiği anlamına gelmez. Gerçek bağlantıyı doğrulamak için ping, traceroute ve diğer network analiz araçlarına ihtiyaç duyarız. Bunları bir sonraki yazımızda ayrıntılı olarak inceleyeceğiz.

 

 

Şimdiye kadar incelediğimiz bilgiler bize önemli bir şeyi gösterdi: Bir Linux sunucusunun network yapılandırmasını anlayabilmek için yalnızca IP adresini bilmek yeterli değildir. Ağ arayüzünün durumunu, MAC adresini, MTU değerini, IP adresinin ağ önekini ve sistemin yönlendirme kararlarını da değerlendirmek gerekir.

Bu Yazımızda Neler Öğrendik? Bu makalemizde Linux network yönetiminin temel bileşenlerini incelemeye başladık. Network ile Internet arasındaki farkı, Linux Network Stack’in rolünü, fiziksel ve sanal ağ arayüzlerini, IPv4 ve IPv6 adresleme yapılarını ele aldık. MAC adreslerinin yerel ağ iletişimindeki önemini, MTU’nun paket boyutları üzerindeki etkisini ve CIDR ile subnetting mekanizmalarının IP adres alanlarının yönetilmesine nasıl yardımcı olduğunu öğrendik. Tüm bu bilgileri gerçek bir Ubuntu Linux sunucusunda çalıştırdığımız komutlarla gözlemledik.

Bir Sonraki Yazımızda Neler Yapacağız? Şimdiye kadar Linux sunucumuzun ağ yapılandırmasını tanıdık. Ancak henüz çok önemli bir soruyu ayrıntılı olarak yanıtlamadık: Bir Linux sunucusu, kendi subnet’inde bulunmayan başka bir sunucuya nasıl ulaşır? Bir sonraki yazımızda bu sorunun peşinden gideceğiz. Gateway, Routing Table ve Default Route kavramlarını inceleyecek; paketlerin hedeflerine ulaşmak için hangi yolu izlediğini, Linux Kernel’in yönlendirme kararını nasıl verdiğini ve ağ bağlantılarını nasıl test edebileceğimizi uygulamalı olarak öğreneceğiz. Özellikle ip route, ping, traceroute ve ip neigh gibi komutlardan yararlanarak ağ iletişiminin arka planını daha yakından tanıyacağız. Çünkü bir network mühendisinin yalnızca bağlantının çalıştığını bilmesi yeterli değildir. Bağlantının neden çalıştığını ve çalışmadığında sorunun nerede olduğunu da anlayabilmesi gerekir.

Sarav Asiye Yiğit * 1 Kasım 2026

Hakkımda:

Kişisel Web Sayfam: https://asiyeyigit.com/

LinkedIn: https://www.linkedin.com/in/sarav-asiye-yigit-4a546524/

Instagram: https://www.instagram.com/saravasiyeyigit

Facebook: https://www.facebook.com/saravasiyeyigit

Youtube Channel: https://www.youtube.com/@saravasiyeyigit3429

Spotify: