******************************************************************************************************************************************
Bu Sitedeki Tüm Yazılar Ücretsizdir. Sadece Sizden İstediğimiz "Allah Bu Siteyi Hazırlayandan Razı Olsun" Amin... Demenizdir.
************************************************************************************************************************************ www.odeveson.blogspot.com adresindeki yazı ve makalelerin Kaynak göstermeksizin Tamamı veya Bir Kısmının KOPYALANMASI YASAKTIR.
8 Haziran 2008 Pazar Gönderen admin

INTERNET AĞLARI

INTERNET AĞLARI




GİRİŞ
Burada ele aldığım konular ayrıntılı olarak LINUX altında "NET-3-HOWTO" (Copyright (c) 1997 Terry Dawson) adlı belgede İnglizce olarak yazılmıştır. Benim yaptığım bu belgeyi Türkçe'ye çevirmek. Buradaki bilgilerde daha çok LINUX işletim sistemindeki ayrıntıları anlatır, ama iyi bir programcı (C dili ve UNIX biliyorsa) bu bilgileri kullanarak diğer UNIX işletim sistemleride benzeri tanımlamaları kolaylıkla yapabilir. Ben bu bölümde adı geçen bazı programları ve komutları başka UNIX ortamlarında derledim, denedim ve çalıştırabildim. Programları çalıştırırken biraz kod üzerinde değişiklik yapmak gerekebiliyor. Ama emek harcanmadan sonuç elde edilmez ki...




INTERNET İÇİN KENDİ AĞINIZI KURMAK

Önce bilgisayarınızda kullanacağınız araçlara ve "fire-wall" yazılımına ihtiyacınız var. Bu araçlar ya aldığınız bilgisayarın işletim sistemi ile gelmiştir, ya da siz bunları INTERNET üzerinden sağlamışsınızdır. Benim gördüğün kadarı ile Türkiye'deki en iyi ve en son bilgi sunsite.bilkent.edu.tr sunucusunda var. Ama isterseniz ODTÜ ve EGE Üniversitesi sunucularından da gereken yazılımı alabilirsiniz.

GEREKLİ AĞ ARAÇLARI

Bu araçlar, sisteminizin Ağ bilgilerini (parametrelerini) düzenlediğiniz yönlendirmeyi (routing) yaptığınız programlardır.

INTERNET ADRESLERİ

Bugün için INTERNET adresleri 4 byte uzunluğunda bir sayıdır (Bu sayının 6 byte uzunluğunda olması çalışmaları devam etmektedir). Bu sayıyı kolay hatırlamamız ve söyleyebilmemiz için "noktalı tamsayı kavramı" geliştirilmiştir. Bu sayıdaki her byte için kullanılan 0-255 değeri ayrı ayrı aralarına nokta konarak yazılınca belirttiğimiz noktalı tamsayı kavramı çıkar. Bu kavramda sayı sıfır değilse soldaki sıfırla yazılmaz ve okunmaz.

INTERNET kavramlarına göre ağdaki her bilgisayarın noktalı tamsayılarla gösterilen bir adresi vardır ve bu adres tekildir. Bu kavramı biraz genişletip her ağ donanımı için bir adres kullanmak gerekir diyebiliriz. Böylece bir bilgisayarda seri uçtan bağlantı olanağı varsa bu seri uç için bir adres, iki ethernet kartı varsa, her ethernet için ayrı bir adres gerekir. Biz bu adreslere IP adresi adını veriyoruz.

Bir yerel ağda bulunan bilgisayarların IP adreslerinin bir bölümü (2 ayda 3 byte'lık bir bölümü) ortaktır. Ortak olan adreslere yerel ağ adresi ya da "yöre" (domain) adresi diyoruz. Kalan bölümüne ise adresin bilgisayar bölümü diyoruz. O yerel ağdaki ortak adres bilgisinin ilki her zaman yerel ağın adresi olarak kabul edilir. Ağ maskesi ise o ağa gelecek mesajlardan yalnız o ağa ait olanları almak için kullanılan maskeye verilen addır. Bir ağ içindeki tüm bilgisayarlara mesaj göndermek için Yayım Adresi kullanılır ve bu adres ağ için tanımlanmış bilgisayar adreslerinin en büyüğüdür.

Örneğin :

Bilgisayar Adresi 192 .168 .110 .23

Ağ Maskesi 255 .255 .255 .0

Ağ (Yöre) Bölümü 192 .168 .110 .

Bilgisayar Bölümü .23



Yerel Ağ Adresi 192 .168 .110 .0

Yayım Adresi 192 .168 .110 .255



Bir yerel ağın INTERNET için bir anlam taşıyabilmesi ancak bir ağ adresi, bir yayım adresi ve en az iki bilgisayar adresi olması gerekir. INTERNET ortamında ardaşık en az dört adres bir ağ oluşturur. Bu sayı iki sayısının katları olarak artar (4, 8, 16, 32 v.b.)

Ağ maskesi ile mantıksal VE işlemine sokulan bir adres sonunda bulunduğu ağın adresini verir.

Ağ içindeki tüm bilgisayarlar kendi adresleri dışında bir de yayım adresine gelen mesajları dinlerler. Onun için yayım adresi ağ içindeki en büyük IP adresi olarak tanımlanır. Bazı yönlendirme mesajları ve uyarı mesajları yayım adresini kullanır. Böylece ağ içindeki tüm bilgisayarlar bu mesajı aynı anda alabilirler. Bazen yayım adresi olarak ağ adresi kullanılabilir. Aslında yayım adresinin ne olduğu pek önemli değildir. Ağ maskesi sınırları içinde kalmak ve ağ içindeki tüm bilgisayarlarda aynı tanımlanmak koşulu ile herhangi bir IP olabilir.

Eskiden kalan bir kullanım biçimine göre IP adresleri ağlara ve sınıflara ayrılmıştır. Bu sınıflar ve ağlar aşağıdaki tabloda gösterilmiştir :

Ağ Sınıfı Ağ Maskesi Ağ Adresi

A 255.0.0.0 0.0.0.0 - 127.255.255.255

B 255.255.0.0 128.0.0.0 - 191.255.255.255

C 255.255.255.0 192.0.0.0 - 223.255.255.255

Multicast 240.0.0.0 224.0.0.0 - 239.255.255.255

Hangi tür adres kullanacağınız aslında sizin ne yapmak istediğinize göre değişir. Bazen yapacağınız işleme bağımlı olarak yukarıdaki adreslerin bir dolu karışımını kullanabilirsiniz.

Bir bilgisayarı mevcut bir yerel ağa bağlamak için gerekli olan adresler :

Bilgisayar IP Adresi Ağ için IP adresi Yayım IP adresi Ağ Maskesi Eşik - Router (Gateway) adresi Yörenin Ad Sunucu Adresi

Yeni bir ağ kuruyorsanız ve bu ağı INTERNET ortamına hiç bağlamayacaksanız :

Aslında ağınızı INTERNET ortamına hiç bağlamayacaksanız herhangi bir adresi seçebilirsiniz. Ama aşağıdaki tabloda bulunan adresleri kulanırsanız, bu adresler INTERNET ortamında tanımlı olmadığından, dah güvenli bir yerel ağ kurmuş olursunuz.

Bu tabloda yer alan adresler RFC1697 belgelerinde belirtilmiştir.

ÖZEL AĞLAR İÇİN AYRILMIŞ ADRESLER

Ağ Sınıfı Ağ Maskesi Ağ Adresi

A 255.0.0.0 10.0.0.0 - 10.255.255.255

B 255.255.0.0 172.16.0.0 - 172.31.255.255

C 255.255.255.0 192.168.0.0 - 192.168.255.255

Önce ağınızın büyüklüğünü belirlemek daha sonra bu ağ için hangi adres sınıflarını kullanacağınızı seçmek sizin ilk tasarım işiniz olacaktır.

AĞ BİLGİSİ VE KOMUTLARI NEREYE KONULMALI (TANIMLAMA)

Tüm UNIX ortamlarında kernel yüklendikten sonra ilk olarak 'init' programı çalışır. Bu program işlemleri nasıl yapacağını /etc/inittab kütüğündeki bilgilerden öğrenir.

Genelde inittab kütüğünde aşağıdaki gibi bir satır bulunur :

si::sysinit:/etc/init.d/boot

Bu satır işletim sisteminin belleğe yüklenmesi, ilk anda çalışacak programların belirlenmesi için kullanılır. Bu bir "shell" yazılımıdır. Bu kütük MS-DOS ortamındaki AUTOEXEC.BAT gibidir.

Aynı mantıkla yazılmış bakşa "shell" yazılımları da vardır. Bunlardan bazıları ağı tanımlamak için kullanılır.

Aşağıdaki tablo çeşitli Linux dağıtıcılarının kullandığı "shell" yazılımlarının yerlerini gösteren bir örnektir. Diğer UNIX sistemleri için de aynı bilgiler benzer yollarda bulunmaktadır.

Distrib. Interface Config/Routing Server Initialisation

Debian /etc/init.d/network /etc/init.d/netbase
/etc/init.d/netstd_init
/etc/init.d/netstd_nfs
/etc/init.d/netstd_misc

Slackware /etc/rc.d/rc.inet1 /etc/rc.d/rc.inet2

RedHat /etc/sysconfig/network-scripts/ifup- /etc/rc.d/init.d/network

Pek çok UNIX dağıtıcısı bu tür "shell" yazılımlarını ayarlamak için hazır programların dağıtımını yapmışlardır. Kullanıcı yalnız bu programları çalıştırarak "shell" yazılımlarının içine girmeden ağ ayarlamalarını yapabilir.




KENDİ AĞ ARAYÜZLERİNİZİ YARATMA

Pekçok UNIX ortamında ağ donanımlarına ilişkin çevre birimi tanımı /dev yolu altında yer alır (Linux hariç). Linux ortamında dinamik olarak ağ arayüzü çevre birimi yaratılır, ayrıca /dev altında tanım gerekmez.

Çoğunlukla çevre birimi tanımı işletim sistemindeki donanım arayüzü tarafından otomatik olarak yaratıldığından ve donanıma bağlanmış olduğundan ayrıca bir işlem yapmak gerekmez. Tabi ilk işlemde bu donanım arayüzü kernel (çekirdek) yazılıma eklenmiş olmalı ve arayüz çalışır durumda bulunmalıdır.

Bazı koşullarda (slip ya da ppp için geçerlidir) ağ çevre birimleri bir kullanıcı programı tarafından oluşturulur. Bir dizi çevre birimi numaralaması yapılır ancak bu çevre birimleri sistem başlarken otomatik olarak üretilemez. Bunun en büyük nedeni, sistem çalışırken, slip ve ppp çevre birimlerinin sayısının kullanıcı sayısına göre değişiklik göstermesidir.

BİR AĞ ARAYÜZÜNÜ HAZIRLAMA

Burada söylemek istediğimiz, donanıma ve diğer parametrelere göre ağ bilgilerini sisteme tanıtma işlemidir. Bu işlem için en çok kullanılan komut ifconfig (interface configure) komutudur.

Çoğu zaman aşağıdakine benzer bir komut kullanılır :

# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up

Burada bir ethernet arayüzü 192.168.0.1 adresi ve 255.255.255.0 ağ maskesi ile sisteme tanıtılmıştır. Ve bu arayüz aktif olarak çalışmaya başlayacaktır. Bu örnekte ağ adresi ve yayım adresi kullanılmamıştır. ANcak programlar ve çekirdek kod IP adresinin tipinden belirtilmeyen adres yerine en uygun adresi tanımlar. Bu örnekte ağ adresi (C sınıfı adres olarak) 192.168.0.0 biçiminde, yayım adresi ise 192.168.0.255 biçiminde belirlenir.

ifconfig komutunun bir dolu parametresi vardır. Her UNIX ortamında başka parametreler, kullanılan donanıma ve arayüze göre değişik işlevler yapabilir. Bu nedenle her UNIX ortamında bu komutun dökümanı incelenmelidir. Biz burada en çok kullanılan parametreleri anlatmaya çalışacağız :

up
Bu seçenek bir arayüzü çalışır duruma getirir.
down
Bu seçenek bir ayaüzün çalışmasını durdurur.
-arp
Bu seçenek adres çözümleme protokolunun kullanılmasını ya da kullanılmamasını sağlar.
· -allmulti
Bu seçenek gelen paketlerin çevre birimi tarafından algılanıp algılanmamasını sağladığı için önemlidir. Aslında bir çevre birimi tanımlanan adres dışındaki paketleri algılamaz. Ancak tcpdump ve snooper tipi programlar için tüm paketlerin algılanması gerekir.

mtu N
Bu seçenek bu çevre birimi için Metrik Birim tanımlamaya yarar. (Metrik Birim IP paketlerinin boyu ile ilgili bir parametredir).
netmask addr
Bu seçenek ağ için maske tanımlamakta kullanılır.
irq addr
Bu parametre bazı ağ donanımları için geçerlidir ve donanımın IRQ adresini belirlemek için kullanılır.
-broadcast addr
Bu parametre yayım adresini tanımlamak için kullanılır.
-pointopoint addr
Uç uca bağlanmış bilgisayarlarda diğer uçtaki bilgisayarın adresini tanımlamak için kullanılır (slip ya da ppp bağlantılar için önemli olabilir).
hw
Bazı ağ donanımlarının donanım adreslerini tanımlamak için kullanılır.
Bir ifconfig komutunu hertür ağ arayüzü tanımlamak için kullanabilirsiniz. Bazı programlar (pppd, dip gibi) kendi ağ arayüzlerini otomatik olarak tanımlayabildiklerinden ayrıca ifconfig komutu kullanmak gerekmez.




AD ÇÖZÜCÜSÜNÜ TANIMLAMA

UNIX ortamında ad çözücü noktalı tamsayı tanıma göre hazırlanmış IP adresleri yerine kullanılan bilgisayar adlarını (bodrum.yore.com.tr gibi) bilgisayarların anladığı IP adreslerine çevirme işlemini yapan programlardır.

BİLGİSAYAR ADI NEDİR ?

Bu dökümanı okumak için bu sayfaya bağlandığınıza göre bilgisayar adlarına alışkın olmalısınız. Ancak arkasındaki mantık ilişkisini bilmeyebilirsiniz. Bu isimler nasıl üretilir ve nasıl IP adresi haline dönüştürülür bilmiyor olabilirisin. Burada bilgisayar adlarının nasıl bir mantığa göre hazırlanmış olduğunu anlatmaya çalışacağız.

Internet yöre adları bir sınıf ya da bir aileye verilen addır. Bir yöre kendi içinde alt yörelere bölünebilir. En üst düzey yöre adı alt yörelere bölünmemiş olan addır. Türkiye için en üst düzey yöre adları : COM : Ticari Kurumlar
EDU : Eğitim Kurumları
GOV : Devlet Kuruluşları
MIL : Askeri Kuruluşlar
ORG : Diğer Organizasyonlar
Ülke Kodu : İki hane ülke kodu, o ülkeyi belirtir. Türkiye için "tr" tanımlanmıştır.

Bu üst düzey yörelerin alt yöreleri vardır. Ülke adına göre düzenlenen yöre adları yukarıda sıralanan alt yörelere bölünür. Ülke kodu olmayan üst düzey yöre adları ABD kuruluşlarını belirtir.

Üst düzey sınıflamadan sonra gelen yöre adı genelde kuruluşun kendi adıdır. Bu tanımın altındaki yöre adı ayrımları kuruluşların bölümlerine göre düzenlenebilir.

En soldaki ad o bilgisayarın tekil adıdır. Bu ad genelde "hostname" olarak adlandırılır. Bilgisayar adının sağındaki yöre adının tamamı ise açıkça tanımlanmış yöre adı olarak geçer `Fully Qualified Domain Name'.

Bu sayfaların bulunduğu bilgisayarın adını açıkça yazınca "bodrum.yore.com.tr" olduğunu görürsünüz. Burada bilgisayarın adı "bodrum". Açık yöre adı "yore.com.tr" olarak belirtilmiştir. "yore" firmanın adı, "com.tr" ise Türkiyede faaliyet gösteren ticari bir kurum olduğunu belirtir.

NE TÜR BİLGİYE GEREKSİNİM VARDIR.

Bilmeniz gerekenen önemli özellik, bilgisayarınızın bağlandığı yöre adının açık olarak ne olduğudur. Adres çevirim yazılımı IP adresini yöre adı sunucusundan (Domain Name Server) alır. Eğer varsa yerel ad sunucunun IP adresinin bilmeniz gerekir. Böyle bir adres yoksa en yakın ad sunucunun IP adresinin bilmelisiniz. Türkiye için en yakın ad sunucu adresini bulamadı iseniz ODTU ve TURNET tarafından tanımlanmış ad sunucuları yazabilirsiniz. Ancak bu adresleri kullandığınızda ilk bağlantılarınız çok yavaş olacaktır. Kendi yörenizdeki ad sunucunun IP adresini kullanmanız en doğrusudur.

Üç değişik kütükte düzeltme yapmanız gerekir. Bunlar sırası ile :

/etc/resolv.conf

Ad çözücü kodlama için en önemli kütüktür. Yapısı oldukça basittir. Her satırında bir anahtar kelime olan basit bir metin kütüğüdür. En çok kullanılan anahtar kelimeler :

domain : Bu komut yerel yöre adını belirtir.

search : Bu komut bilgisayar adına eklenerek adres çözümlemesi yapılacak yöre adlarını belirtir.

nameserver : Açık adlara ilişkin IP adreslerinin çözümünde kullanılacak ad sunucuların IP adreslerinin tanımlandığı satırdır.

Örnek bir resolv.conf aşağıdaki satırlardan oluşur :

domain yerel.yore.com.tr
search yore.com.tr yerel.yore.com.tr
nameserver 195.174.26.15
nameserver 195.174.26.1

Bu örnekte yöre adı verilmemiş bilgisayar adlarının sonuna yöre adı ekleneceği belirtilmiştir. Ayrıca iki ad sunucu belirtilmiştir. Ad sunucular, bilgisayar adının çözümlenmesinde kullanılır.

/etc/host.conf

Bu kütük, ad çözücü kodlamanın ad çözüm biçimini tanımlamaya yarayan bilgilerden oluşur. Pekçok koşul için aşağıdaki satırlar sorunlarınızı çözümler :

order hosts,bind
multi on

Bu tanım ad çözümleyicisine bir adı çözümlerken önce /etc/hosts adlı kütüğe bakmasını söyle. Buradan bilgi alınamazsa ad sunucuya bağlanılır. Bir bilgisayar adı için bu kütükte bulunan tüm geçerli IP numaralarının alınmasını sağlar.

/etc/hosts

Bu kütüğe yerel bilgisayarın adını ve IP numarasını yazarız. Eğer bir bilgisayarın adını buraya yazdıysanız IP adresini almak için ad sunucuya sorgulama yapmaya gerek olmaz. Bunun en kötü yanı bu kütüğün her zaman güncel tutulmasını sağlamak gerektiğidir. İyi düzenlenmiş bir yerel ağda bu kütükte yalnız :

# /etc/hosts
127.0.0.1 localhost loopback
192.168.0.1 this.host.name

satırların bulunmalıdır.

İlk satırda belirtildiği gibi bir satıra birden çok bilgisayar adı yazabilirsiniz.

Loopback arayüzünü tanımlama.

Kendi bilgisayarınıza bağlantı yapabilmeniz için gereken arayüz tanımına "loopback" tanım denir. Kendi bilgisayarınızda kendinize bağlantı yapmak istediğinizde (program denemeleri gibi) yerel ağdaki başka bilgisayarları etkilemeden çalışmanız sağlanır. Tanım olarak bu adres 127.0.0.1 olarak belirtilmiştir. Diğer bir deyimle hangi bilgisayarda olursanız olun 127.0.0.1 için telnet bağlantısı kurmak istediğinizde kendi bilgisayarınıza bağlantı kurarsınız.

"loopback" arayüzünü tanımlamak için aşağıdaki komutları kullanmak yeterlidir :

# ifconfig lo 127.0.0.1
# route add -host 127.0.0.1 lo




YÖNLENDİRME (ROUTE KOMUTU)

Yönlendirme çok geniş bir konudur. Bu konuda sayfalarla yazı yazılabilir. Bir çoğunuzun basit yönlendirme komutlarına gereksinimi vardır. Bir kısmınızın hiçbir yönlerdirmeye gereksinimi yoktur. Biz burada oldukça basit yönlendirme gereksinimlerini ele alacağız.

IP yönlendirmesi nedir ?

IP yönlendirmesi bir bilgisayarın IP data gram mesajlarını çoklu bir ağda nereye yönlendirmesi gerektiğini belirleme işlemi olarak tanımlanabilir.

Bu tanımı bir örnekle anlatmaya çalışalım. Bir işyerindeki bir Router (Yönlendirici) düşünelim. Bu alete birden çok yerel ağ bağlı olsun. Bu alet PPP ile INTERNET ortamına bağlansın, bir başka PPP bağlantı ile uzakta bir yerleşime bağlantısı olsun. Bu alet bağlantılardan birinden bir datagram aldığında, yapacağı işlem bu mesajı hangi bağlantıya yönlendireceğini bulmasıdır. INTERNET bilgisayarlarının üç değişik bağlantısı bulunur. Biri yukarıda belirttiğimiz "loopback" bağlantı, ikincisi bağlı olduğu yerel ağ, sonuncusu ise PPP ya da SLIP ile bağlandığı INTERNET ortamı.

Bu durumda yönlendirme nasıl yapılır. Her bilgisayar kendi içinde yönlendirme tabloları tutar. En basit koşulu ile bu tabloda üç alan bulunur. İlki gideceği adres, ikincisi arayüzün adı, sonuncusu ise datagramı başka bilgisayarlara iletecek olan bilgisayarın IP adresidir.

Bu tabloyu görmek için kullanılacak komut :

# netstat -rn

olabilir.

Yönlendirme işlemi oldukça basittir. Bir datagram alındığında gideceği adres incelenir. Yönlendirme tablosunda bu adrese en uygun olan satır seçilir ve datagram burada belirtilen adrese, yine burada belirtilen arayüz üzerinden yönlendirilir. Eğer eşik (gateway) adresi tanımlı ise datagram bu adresin bulunduğu arayüze iletilir. Eğer eşik adresi yoksa iletilen arayüzde gideceği adres var olduğu kabul edilir.

Bu tabloda değişiklik yapmak, kernel bilgilerine değişikliği işlemek için özel bir komut kullanılır. Bu komuta "route" adı verilir.

Basit bir örnek. Ethernet yerel ağınız olsun. Ve bu ağda C sınıfı ağ adresi 192.168.1.0 olarak tanımlanmış olsun. Sizin kullanımınız için tanımlanan IP adresi 192.168.1.10 olarak verilmiş olsun ve 192.168.1.1 adresli router INTERNET'e bağlantı ucunuz olarak size verilmiş olsun. Yapacağınız işlemler :

Önce ethernet arayüzünü tanımlamanız gerekir :

# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up

Yönlendirme tablosuna eklemeniz gereken bilgi ise 192.168.1.* adresi ile başlayan tüm data gram bilgilerinin ethernet arayüzüne yönlendirilmesi gerektiğidir. Bunun için aşağıdaki komutu kullanmanız gerekir :

# route add -net 192.168.0.0 netmask 255.255.255.0 eth0

Burada "-net" seçeneğini "route" komutu ile kullanmak gerekir. Burada ağ yönlendirmesi yapıldığı belirtilir. Diğer seçenek ise "host" yönlendirmesi olup yalnız bir IP adresine yönlendirme yaparken kullanılır.

Bu yönlendirme sizinle aynı ağı paylaşan tüm bilgisayarlarla bağlantı kurmanızı sağlar. Ancak sizin ethernet ağınızda olmayan diğer bilgisayarlarla bağlantı için bu komut yetersiz kalır.

Her tür bilgisayar ağı için bir yönlendirme komutunu tabloya eklemek çok zor olacağından bu işlem için bir kaçamak yöntem kullanılır. Buna "default" yönlendirme adı verilir. Bir adres için en zayıf uyum "default" yönlendirmede bulunur. Ancak bir adres için daha başka bir tanım daha uygun ise yönlendirme o adrese yapılır. "default" yönlendirme kısaca başka seçenek yoksa buraya yönlendirilecek anlamını taşır.

# route add default gw 192.168.1.1 eth0

"gw" seçeneği route komutuna bir sonraki IP adresi bu satıra uygun datagram bilgilerinin gönderileceği adrestir bilgisini tanıtır.

# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
# route add default gw 192.168.1.1 eth0
olur.

Eğer kendi bilgisayarınızdaki ağ ile ilgili "rc" kütüklerine bakacak olursanız en az biri yukarıdaki tanıma uygun bir yapıdadır. Bu örnek çok genel bir yönlendirme kuralıdır.

Şimdi daha karmaşık bir yönlendirme işlemine bakalım. Şimdi Router birimininde yönlendirme yaptığımızı varsayalım. Router için bir PPP bağlantısı ve üç ethernet ağına bağlantı olsun. Bu durumda bizim Router tanımı aşağıdaki gibi birşey olur :

# route add 192.168.1.0 netmask 255.255.255.0 eth0
# route add 192.168.2.0 netmask 255.255.255.0 eth1
# route add 192.168.3.0 netmask 255.255.255.0 eth2
# route add default ppp0

Bu ağlarda yer alan iş istasyonları yukarıda belirtilen en basit yönlendirme tablolarını kullanabilir. Burada mesajları ethernet ağlarına dağıtmak Router biriminin görevidir.

"default" parametresinde "gw" tanımı bulunmaması çok doğaldır. Çünkü SLIP ve PPP tipi seri uç bağlantılarında bu bağlantının her iki ucunda da bir tane bilgisayar olduğundan, hattın öteki uçundaki bilgisayarı tanımlamak gerekmez.

"ethernet", "tokenring" ve "arcnet" gibi diğer ağlardaki tanımlarda "gw" belirtmek zorunludur. Çünkü ağ içinde birden çok bilgisayar vardır. Mesajın hangisine yönlendirileceği bilinmelidir.

O HALDE ROUTE PROGRAMININ GÖREVİ NEDİR ?

Yukarıda anlatılan ağlara ve route komutuna ilişkin örnekler eğer gönderilecek adrese bir çıkış varsa çok uygun bir yöntemdir.

Elle yapılan yönlendirme (static routing) işlemi yönlendirme yapan bilgisayarda sorun olduğunda datagram mesajlarının doğru yere gitmesi için yeniden bir dizi komut kullanmayı zorunlu kılar. Doğal olarak bu işlem oldukça yavaş ve pratik olmayan bir yöntemdir. Hattın düşmesi, bilgisayarların bozulması gibi olasılıklarda dinamik yönlendirme protokolları kullanılmalıdır.

En çok kullanılan dinamik yöntendirme protokolları RIP (Routing Information Protocol) ve OSPF (Open Shortest Path First Protocol) protokollarıdır. RIP küçük ölçekli ağlar için çok kullanışlıdır. OSPF ise daha büyük ve karmaşık ağlar için yeni ve kullanışlı yöntemdir.

Bu protokolların kullanıldığı programlar 'routed' ve 'gated' programlarıdır. 'routed' RIP için, 'gated' ise RIP ve OSPF için kullanılır.

Dinamik yönlendirme işlemlerine uygun bir örnek aşağıdaki çizimde açıklanmıştır :



Burada üç tane Router birimi sırası A, B, C vardır. Her birine C sııfı bir ethernet ağı bağlanmıştır (ağ maskesi 255.255.255.0). Aynı zamanda her Router diğer Router birimlerine PPP ile bağlanmıştır. Bu ağ PPP bağlantılarla bir üçgen gibi çalışır.

Router A üzerindeki yönlendirme tablosu aşağıdakine benzer :

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0
# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1

Bu yönlendirme tablosu A ile B arasındaki bağlantı kopmadığı sürece düzgün çalışır. Ancak bu bağlantı koptuğunda A ethernet ağındaki bilgisayarlar B ethernet ağındaki bilgisayarlarla bu yönlendirme tablosu yüzünden konuşamazlar. Ancak her iki ethernet ağı da C ethernet ağı ile hala konuşabilmektedir.

Eğer A, C ile konuşabiliyorsa, C de B ile konuşabiliyorsa neden A ile B konuşamasın ki. A datagramları C üzerinden B'ye gönderirse konuşabilirler. Yani dinamik olarak yönlendirme tablosu değişirse konuşabilirler. RIP protokolu bu tür sorunları dinamik yönlendirme ile çözmek için tasarlanmıştır. Her Router kendi üzerinde çalışan bir "deamon" programla kendi yönlendirme tablolarını duruma göre değiştirebilir ve bunu diğer Router birimlerine iletebilir. Bu tür ağları düzenlemek için aşağıdaki komutları kullanmak yeterlidir (Burada Router A için gereken komut verilmiştir).

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# /usr/sbin/routed

"routed" programı tüm çalışan ağ uçlarını otomatik olarak bulur ve buna göre kendi yönlendirme tablolarını düzenler.

Burada anlatılan dinamik yönlendirme işleminin en kısa ve kullanılabilir açıklamasıdır.

Dinamik yönlendirme ile ilgili önemli noktalar :

1. Sizin yapmanız gereken yalnız dinamik yönlerdirme protokolunu kullanan programı çalıştırmaktır.

2. Ağınızdaki değişiklikleri yönlendirme tablolarına otomatik olarak yansıtır.

3. RIP protokolu küçük ve orta büyüklükteki ağlar için uygun bir çözümdür.




AĞ SUNUCULARINI VE SERVİSLERİ TANIMLAMA

Ağ sunucuları ve servisleri kısaca ağ içindeki başka bilgisayarların bu sunucu hizmetlerini kullanması olarak adlandırılabilir. Uzak kullanıcı sunucu bilgisayara bir ağ bağlantısı kurar. Servis sunucu program "port"tan gelen mesajı kabul eder ve mesaja ilişkin programı çalıştırır. Ağ programları iki biçimde çalışır :

Yalnız Başına (Standalone)

Bu durumda program ağ protunu dinler, bağlantı geldiğinde bağlantıyı kurar ve port üzerinden servisi vermeye başlar. Program bellekte sürekli çalışır ve portu her zaman dinler.

inetd sunucusu tarafından çalıştırılarak

"inetd" özel bir ağ programı olup tanımlanan portların tümünü dinler. Bağlantı isteği olduğunda bu bağlantı için çalıştırması gereken programı belleğe yükler ve çalıştırarak servisi sunar. Bu işlem için gereken tanıtım kütüğü aşağıdaki parafgarflarda anlatılmıştır.

Burada düzenleme yapmamamız gereken iki önemli kütük vardır. Bulardan biri /etc/services diğeri ise /etc/inetd.conf kütükleridir. Birincisinde port numaralarına servis adları atanır (21 protu için ftp atamak gibi). İkincisinde inetd programı bir portu dinlerken bu porta gelen bağlantı mesajında hangi programı nasıl çalıştıracağını belirtmek içindir.

/etc/services

/etc/services kütüğü insanların anlayacağı port adları ile bilgisayarın anladığı port numarası arasındaki bağı tanımlayan bir veri tabanıdır. Yapısı oldukça basittir. Her satır boşluklarla ayrılmış üç ana bilgiden oluşur. Bu bilgi alanları kısaca :

adı port/protokol eşanlamlı_ad # açıklama

olarak tanımlanır.

Adı

Bir kelimelik port adı. Bu servisin adını belirtir.

port/protokol

Bu alan iki parçaya ayrılır.

port

port numarası, adlandırılan servisin numarasıdır. Pekçok ortak servis numarası RFC-1340 dokumanında anlatılmıştır.

protocol

Bu parça ya "tcp" ya da "udp" olarak tanımlanır.

Bilinmesi gereken önemli bir özellik 18/tcp port tanımı ile 18/udp port tanımı tümüyle birbirinden ayrı kavramlar olduğudur. Neden aynı port numarası kullanıldığı ise kısca şöyle tanımlanabilir : Bu servis hem "tcp" hem de "udp" için geçerlidir.

eşanlamlı_ad (aliases)

Bu servis için kullanılabilecek diğer adlar

"#"

işaretinden sonra yazılan tüm bilgi açıklama olarak kabul edilir.

Örnek bir /etc/services kütüğü

/etc/inetd.conf

Bu kütük inetd programı için işlem tanımlama kütüğüdür. İşlevi inetd programına bir hizmet için bağlantı isteği geldiğinde ne yapması gerektiğini belirtir. Burada ağ programlarının hangilerinin hangi hizmetler için çalışacağı ve nasıl çalışacağı söylenir. inetd programı buradaki tanıma göre programı belleğe yükler.

Yapısı oldukça basittir. Her atırı bir hizmet için tanımlanmış metin kütüğüdür. Bir satırdaki '#' işaretinden sonrası açıklama kabul edilir. Her satırda yedi bilgi alanı vardır. Bilgi alanları boşluklarla ayrılmıştır.

hizmet socket_tipi protokol değerler kullanıcı program_yolu program_parametreleri

Hizmet

kullandığınız bilgisayar için /etc/services kütüğündeki hizmet adlarından bir tanesidir.

socket_tipi

Gerçekli değerler "stream", "dgram" "raw", "rdm" ya da "seqpacket" olabilir. Bu değerler programın kabul ettiği mesaj türüne göre tanımlanır. (Ayrıntılı bilgi için socket_tipi konusuna bakın).

protokol

Burada tanımlanan protokol tipik olaak "tcp" ya da "udp" olur. Bu bilgi /etc/services kütüğü ile uyumlu olmalıdır. Sun RPC (Remote Procedure Call) tabanlı programlarda rpc/tcp or rpc/udp kullanılır.

değerler

Bu bilginin gerçekte alabileceği değer iki tanedir. Ya "inetd" program işi bitince socket'i boşaltacağı için hizmeti dinlemeye devam eder. Aynı socket'ten gelen yeni bağlantı isteklerini kabul edip yeni program başlatabilir ("nowait"), ya da inetd bekler ve başlattığı program yeni bağlantı isteklerini kendi çözümler ("wait").

Genelde tüm tcp programlar için bu eğer "nowait" olamalı, upd programlar için "wait" olmalıdır. Yapıları gereği bu programlar ancak belirtilen biçimde doğru çalışabilirler.

kullanıcı

Bu alan program başladığında /etc/passwd altında tanımlı hangi kullanıcı adına başlatıldığını belirtmek için tanımlanır. Güvenlik nedeniyle pekçok ağ programının kullanıcısını "nobody" yapmak gerekebilir.

program_yolu

Bu bilgi çalışacak programın tüm yolunu gösterir

program_parametreleri

Bu bilgi alanı zorunlu değildir. Başlatılan programa geçirilecek parametrik bilgi bu alana yazılabilir.

Örnek bir /etc/inetd.conf kütüğü




AĞLAR İÇİN GEREKLİ DİĞER ÖNEMLİ TANIM KÜTÜKLERİ

Çeşitli UNIX ortamlarında bulabileceğiniz ağ tanımlarına ilişkin kütüklerin içeriği hakkında kısa açıklama burada anlatılmıştır. Belki bu kütükleri hiç değiştirmeniz gerekmez. Ama gerektiğinde yapılarını bilmenizde yarar vardır.

/etc/protocols

/etc/protocols adı kütük kullanılan protokol adları ile numaralarının gösterildiği bir tablo biçimindedir. Protokolları adları ile kullanan programlarda (tcpdump gibi) ilgili hizmeti adı ile yazmak gerektiğinde kullanılır. Genel yapısı :

Protokol_adı numarası eşanlamlı_adı

Örnek bir /etc/protocols kütüğü :

# /etc/protocols:

# $Id: protocols,v 1.1 1995/02/24 01:09:41 imurdock Exp $

#

# Internet (IP) protocols

#

# from: @(#)protocols 5.1 (Berkeley) 4/17/89

#

# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).

ip 0 IP # internet protocol, pseudo protocol number

icmp 1 ICMP # internet control message protocol

igmp 2 IGMP # Internet Group Management

ggp 3 GGP # gateway-gateway protocol

ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')

st 5 ST # ST datagram mode

tcp 6 TCP # transmission control protocol

egp 8 EGP # exterior gateway protocol

pup 12 PUP # PARC universal packet protocol

udp 17 UDP # user datagram protocol

hmp 20 HMP # host monitoring protocol

xns-idp 22 XNS-IDP # Xerox NS IDP

rdp 27 RDP # "reliable datagram" protocol

iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4

xtp 36 XTP # Xpress Tranfer Protocol

ddp 37 DDP # Datagram Delivery Protocol

idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport

rspf 73 RSPF # Radio Shortest Path First.

vmtp 81 VMTP # Versatile Message Transport

ospf 89 OSPFIGP # Open Shortest Path First IGP

ipip 94 IPIP # Yet Another IP encapsulation

encap 98 ENCAP # Yet Another IP encapsulation

/etc/networks

/etc/networks kütüğü işlevsel olarak /etc/hosts adlı kütük gibi çalışır. Ağ adları ve numaraları ile ilgili basit bir veri tabanı olarak kullanılır. Ad sunucu kullanılmadığı durumlarda önemli olabilir. Bu kütüğün her satırında iki bilgi alanı vardır :

# ağ_adı ağ_adresi

Bu konuda bir örnek şöyle tanımlanabilir :

loopnet 127.0.0.0
localnet 195.174.130.0
amprnet 44.0.0.0

Eğer "route" komutu gibi komutlar kullanıyorsanız ve bu komutta yer alan ağ bilgisi /etc/networks kütüğünde varsa, "route" komutu ağ numarası yerine ağ adını görüntüler.

Ağ güvenliği ve Erişim Denetimi

Bu konuda ayrıntılı bilgi UNIX Ortamında Güvenlik Önlemleri adlı yazıda anlatılmıştır. Buarada yinelemek yerine oraya bağlantı verdim.




AĞ TEKNOLOJİSİNE İLİŞKİN BİLGİLER

Burada yer alan ağ teknolojilerine ilişkin bilgiler LINUX için geçerlidir. Başka UNIX otamlarındaki ağ teknolojilerine uyumlu olmayabilir, ama konuya ilişkin genel bilgi amacı ile kullanılabilir (Bakınız : AĞ TEKNOLOJİSİ).




KABLOLAR VE KABLOLAMA

Kablo yapabilenler ve lehimlemeyi bilenler için size yardımcı olabilecek bazı kablo bilgileri burada anlatılmıştır.

NULL Modem (Modemsiz) Seri uç Kablosu

Tüm NULL modem kabloları benzer değildir. Pekçok NULL modem kablosu yalnız bilgisayarınızı kandırmakla kalmaz, tüm sinyallerin var olduğunu kabul ederek "Transmit" ve éReceive" uçlarını ters çevirir. Bunda bir sakınca yoktur. Ama o zaman yazılım akış kontrollu olan XON/XOFF protokolu kullanmanız gerekir. Bu protokol donanım akış protokoluna göre çok daha yavaş çalışır. Aşağıdaki kablo iki bilgisayar arasındaki en uygun ve olası sinyal alış verişini sağlayan RTS/CTS kontolunu kullanmanıza olanak veren bir örnektir.

Pin Adı Pin Pin

Tx Data 2 ----------------------------- 3

Rx Data 3 ----------------------------- 2

RTS 4 ----------------------------- 5

CTS 5 ----------------------------- 4

Ground 7 ----------------------------- 7

DTR 20 -\--------------------------- 8

DSR 6 -/

RLSD/DCD 8 ---------------------------/- 20

\- 6

Paralel uç kablosu (PLIP kablosu)

İki makine arasında PLIP protokolu kullanmak isterseniz aşağıdaki kablo ne tür paralel uç bağlantınız olursa olsun çalışır.

Pin Adı pin pin

STROBE 1*

D0->ERROR 2 ----------- 15

D1->SLCT 3 ----------- 13

D2->PAPOUT 4 ----------- 12

D3->ACK 5 ----------- 10

D4->BUSY 6 ----------- 11

D5 7*

D6 8*

D7 9*

ACK->D3 10 ----------- 5

BUSY->D4 11 ----------- 6

PAPOUT->D2 12 ----------- 4

SLCT->D1 13 ----------- 3

FEED 14*

ERROR->D0 15 ----------- 2

INIT 16*

SLCTIN 17*

GROUND 25 ----------- 25

Notlar :

'*' ile işaretlenmiş uçları sakın lehimlemeyin, boş kalsın.

Diğer topraklar 18, 19, 20, 21, 22, 23 ve 24 nolu pin'lerdir.

Eğer kullandığınız kablonun metalik koruyucu kafesi varsa bu kafes kablonun yalnız bir ucundan DB-25 şasesine lehimlenmelidir.

Uyarı : Yalnış lehimlenmiş bir kablo paralel uçunuzu yakıp kartınızı bozabilir. Kabloyu takmadan birkaç kez kontrol edin lütfen.

10base2 (thin coax) Ethernet Kablolaması

10base2, 52 ohm'luk 5mm çapında ince coaxial kablodur ve ethernet ağlarını kablolamak için kullanılır. Bilgisayarları 10base2 ile bağlarken dikkate alınması gereken bazı önemli noktalar vardır. Kablonun her iki ucunda terminatör (sonlandırıcı) bulunmalıdır. Bir sonlandırıcı 52 ohmluk resistans'dır. Böylece kablonun sonuna ulaşan mesaj sonlandırıcı tarafından emilir ve kablo boyunca yasıma yapmak. Bilgisayarları kabloya yerleştirmek için "T" tipi konnektör gereklidir. (Örnek kablo için çizim-2'ye bakın). Burada kullanılan "T" konnektör doğrudan ethernet kartına takılır (arada uzatma kablosu kullanılmaz).

Twisted Pair Ethernet Kablosu

Eğer yalnız twisted pair ethernet kartlarınız varsa, onları ağa bağlamak için bir hup kullanmanız gerekmez. İki kartı birbirlerine doğrudan bağlayabilirsiniz.



SÖZLÜK



Bu belgede kullanılan terimlere ilişki küçük bir sözlük

ARP

Adres çözümleme Protokolu (Address Resolution Protocol) için bir kısaltmadır. Bu yöntem donanım adresi ile ağ adresinin birbirine nasıl bağdaştırıldığını gösterir.

ATM (Asynchronous Transfer Mode)

Asynchronous Transfer Mode için bir kısatmadır. Bir ATM ağında mesajlar değişmez boydaki paketlere dönüştürülerek bir noktadan diğerine aktarılır. ATM devre anahtarlamalı paket ağı teknolojidir.

client

Kullanıcının bulunduğu yerdeki bilgisayar ya da yazılım parçasının adıdır. Bu program ya da bilgisayar sunucudan hizmet alır. SLIP ve PPP gibi iki uç arasındaki bağlantılarda çağırılan tarafa verilen addır.

datagram

Bir datagram veri ve adresleri içeren başlık bilgisi ile bir paketin tümüne verilen addır. IP ağının temel öğesidir. Buna yalnızca "paket" adı da verilebilir.

DLCI (Data Link Connection Identifier)

Frame Relay bağlantıda iki uç arasındaki sanal bağlantıyı tanımlar. DLCI Frame Relay sunucusu tarafından atanır.

Frame Relay

Bir ağ teknolojisi olarak üzerinden geçen trafik yüküne uyumlu bir yapısı vardır. Ağ maliyetleri ağı paylaşan müşteriler tarafından azaltılablir.

Hardware address

Bilgisayarı fiziksel ağ içinde (media access layer) tekil olarak adlandırmaya yarayan bir sayıdır. Ethernet adresi, AX.25 adresi örnek olarak kullanılabilir.

ISDN (Integrated Services Dedicated Network).

Bu Inegrated Services Dedicated Network sözlerinin kısaltması olan bir deyimdir. Ses ve veri iletişimi için İletişim kurumu tarafından sunulan bir alt yapıdır. Teknik olarak ISDN, devre anahtarlamalı veri ağıdır.

ISP

Bu INTERNET Servis Sunucusu için kullanılan bir kısaltmadır. ISP kurum ve insanları INTERNET ortamına bağlama görevini üstlenir.

IP address (IP adresi)

Bu sayı bir TCP/IP bilgisayaraını ağ içinde tekil olarak tanımlanmsında kullanılan bir değerdir. 4 byte uzunluğundaki adres 'noktalı sayısal gösterim' ile yazılır. Bu gösterim biçiminde her byte 0 ile 255 arasındaki ondalık sayılarla yazılır ve aralarında nokta bulunur.

MSS (Maximum Segment Size - En büyük parça boyu)

Bir işlemde gönderilebilecek en büyük veri boyuna verilen addır. Yerel ortamda mesajların parçalanmasını istemiyorsanız MMS ile MTU-IP değerleri eşit olmalıdır.

MTU (Maximum Transmission Unit - En büyük gönderme birimi)

IP arayüzü tarafından parçalanmadan taşınabilecek en büyük datagram boyunu tanımlayan bir parametredir. Bu datagram gideceği yere ulaşıncaya kadar geçeceği yollarda değişik MTU parametre değerleri yüzünden parçalanabilir, ama tanımlandığı ağ arayüzünde parçalanmaz. Bu değer parçalanmadan taşınmasını istediğiniz en büyük datagram boyundan büyük olmalıdır. ethernet arayüzü için 1500, SLIP arayüzü için 576 byte tipik değerlerdir.

route (yol, yön)

"route" bir datagram mesajının gideceği yere ulaşması için kullandığı yol ya da yön olarak adlandırılır.

server (sunucu)

Bu genelde kullanıcıdan uzakta bulunan bir bilgisayar ya da yazılım parçasıdır. Sunucu, bir ya da daha çok isteğe hizmet verir. Sunucu için tipik örnekler "ftp", "NFS", "Domain Name Server". İki uç arasındaki bağlantılarda (slip ya da ppp bağlantıda) sunucu kendisine bağlantı yapılan uç olarak adlandırılır. Bağlantıyı yapana da .... denir.

window

Mesaj alan tarafta, verilen bir zamanda, alınabilen en büyük mesaj boyuna window adı verilir.

Hızlandırılmış HTML Notları:

Hızlandırılmış HTML Notları:

Giriş

HTML nedir?

Herşeyden önce bazen yanlış anlaşıldığı gibi HTML bir programlama dili değildir. HTML bir mark-up (~işaretleme) dilidir, yani tag denen özel işaretlerle bir yazının tümünü ya da sadece bir kısmının görünümünü ve/veya işlevini değiştirmeye yarar. Örneğin herhangi bir tag olmadan default yazı tipinde görünen bir yazı, HTML içinde önüne ve arkasına ve işaretleri gelince bu şekilde italik görülür

Ayrıca, gelişen browser teknolojileri sayesinde, HTML içine yazılar dışında resim, ses, video, Java, JavaScript, VBScript gibi dillerle yazılmış programlar, ya da diğer nesneler de gömülebilir. Bu sayede bir HTML dökümanı düzenlenmiş, mizampajı yapılmış bir metin dosyası olmaktan çıkıp tam anlamıyla bir multimedia ortamı olmaya da hizmet edebilir. Örneğin, browser'a özel olarak yazılan gerekli plug-in'ler (~eklentiler) sistemde varsa, HTML'le online bir gazete, bir slide-show, şirket-içi yazılımların çalışabildiği bir platform yaratabilirsiniz.

HTML tag'leri

HTML tagleri bir çok farklı şekilde sınıflandırıalabilir. Bir sınıflandırma şu şekildedir:

  1. Bir açma bir de kapama tag'inden oluşan container tag'leri,
  2. Tek başına bulunan tag'ler.

Örnek olarak, ilk gruptan

Kalın yazı

Büyükçe, gri metin parçası

ikinci gruptansa



verilebilir.

HTML Dökümanlarının Yapısı:

Bir HTML dökümanı genel olarak (istisnaları vardır) aşağıdaki şekildedir:




Burada genelde döküman içeriği dışında kalan karakter set tanımlamaları, başlık, JavaScript tanımlamaları vb elemanlar bulunur...



Burada ise dökümanın asıl içeriği vardır, içinde metin, ses, video vb içerebilir...

Kuraldışı durum olarak da frameset'ler verilebilir, framesetler tag'lerini içermeyebilirler. Frameset'lere ileride gelinecektir.


İlk HTML Dökümanı:

Örnek olarak aşağıdaki HTML kodunu ele alalım:










Güzelinden bir başlık atalım


Bu Ulakbim'deki birlikte inceleyeceğimiz ilk HTML dökümanı.

İçeriği şimdilik önemli olmasa da ona da sıra gelir :)

Bu satırın 2 altında bazı sayılar olmalı, acaba öyle mi?

298 93 00


Hemen üstümde şirin bir çizgi var.


Yukarıdaki kodun ilk satırı SGML (HTML'in atası) sözdizimine göre aşağıdaki satırların bir HTML 3.2 dökümanı olduğunu belirtmektedir, genelde ihmal edilebilir, ancak Internet üzerinde bazı HTML validator (sözdizimini kontrol eden programlar) tarafından
kullanılır ve eğer kullanılmazsa dökümanın HTML 2.0'a uygun olduğu varsayılır.

2. satırda bir HTML comment'i (açıklaması) vardır. HTML commentleri ile biter. Bu iki tag arasında kalan bütün yazılar browser tarafından ihmal edilir (JavaScript hariç, ileride bu konuya geri dönülecektir).

3. satırda dökümanımız resmi olarak açılmış bulunmakta.

4. satırda browser'ın dökümanı gösterirken işine yarayabilecek bazı bilgiler vb elemanların bulunduğu HEAD kısmı açılmaktadır.

5. satırda dökümanın render edilirken (mizanpajının yapılıp ekrana dökülürken) kullanılacak karakter seti verilmektedir. Sık kullanacağımız setler ISO-8859-1 (Latin1) ve ISO 8859-9 (Türkçe)'dur. Bazı Windows programlarının (isimleri lazım değil) kullandığı bir set ise standart olmayan Windows-1254 (Unix'te görüntülenemeyen bir Türkçe)'dür.

6. satırda döküman hazırlanırken hangi HTML editörünün kullanıldığı yazmaktadır.

7. satırda dökümanı hazırlayan kişinin ismi vardır.

8. satırda daha çok AltaVista, HotBot gibi bazı arama makinelerinin kullandığı bir bilgi bulunmaktadır. Sözgelimi AltaVista'da arama yapan birinin sizin dökümanınıza ulaşmasını istiyorsanız, verebileceği anahtar kelimeleri burada tanımlarsınız.

9. satırda döküman gösterilirken browser'da pencerenin başlığı olarak ne görüleceği bilgisi vardır. Bu bilgi ayrıca sayfanızı bookmark'ına (Navigator) ya da favorites'ine (Explorer) ekleyen kişilerde görülecek olan isimdir.

10. satırda HEAD kısmı kapanmaktadır.

11. satırdan itibaren dökümanın içeriği hemen hemen başlamaktadır. Burada sayfanın görüntülenirken ana görünümün nasıl olacağı belirlenir. BODY'den sonra gelen 5 eleman sırasıyla şunları ifade eder:

  • Düz metin rengi
  • Arka fon rengi
  • Ziyaret edilmemiş linklerin rengi
  • Ziyaret edilmiş linklerin rengi
  • Fareyle link'e tıklandığı andaki (düğme halen basılıken) link'in rengi
  • Arka fonda kullanılacak olan resim

Burada renkleri verirken 2 tip gösterim kullandık, #RRGGBB ve Renk_İsmi. #RRGGBB, hexedecimal olarak 2şer bayttan Kırmızı, Yeşil ve Mavi bileşenleri verir. Örneğin saf kırmızı #FF0000, camgöbeği #00FFFF'dir. Diğer gösterim daha kolaydır ve HTML standardında bulunan 16 (Navigator için yüze yakın) renkten birini verir. White, Blue, Gold gibi bir çok renk bulunmaktadır.

Arka fonda resmin kullanıldığı ve tabii ki kullanıcıda gösterilebilen bir resmin olduğu dökümanda arka fon renginin işi ne? Internet'e bağlı kullanıcıların bir kısmı hatları yavaş olduğu için resimleri otomatik yüklemezler. Böyle bir durumda dökümanınızın istediğinize en yakın görülebilmesi ve, bazen olduğu gibi siyah üstüne siyah yazan, yani boş gibi görünen bir sayfayla karşılaşmamaları için verilmesi tavsiye edilir.

Renkleri verdikten sonra artık sıra geldi içeriğe. Önce

ve

arasına kocaman bir başlık koyduk. Burada H1 ve H6 arasında istediğiniz birini başlık veya altbaşlık atmak için kullanabilirsiniz. H1 en önemli başlıklar içindir ve en büyüğüdür. H6 ise en önemsiz başlıklar içindir ve en küçüktür. Bu başlıkların kullanıcı tarafında nasıl görüleceğini bilemezsiniz, ancak elinizle yapacağınız bir düzenlemeden (puntoyu 2 arttır vs gibi) daha kolay ve garantilidir, çünkü browser uygun bir büyüklük seçecektir.

Başlığı attıktan sonra biraz metin yazılmış ve satır sonunda browser'ın bir alt satırdan devam etmesini söyleyen
tag'i var. Devam edelim, alt satıra geçilmiş ve tekrar
verilmiş. Onun altındaki satırda yazdığına göre iki alt satırda bir telefon numarası olması gerekiyormuş. Ancak browser'da bakıldığı zaman böyle olmadığı görülecektir, çünkü HTML
,

,

gibi tagler dışında döküman içindeki bütün satır sonu karakterlerini, tab'lerini ve birden fazla boşluğu, üçüne birden whitespace de denir, ihmal eder ve tek bir boşluk karakteriyle değiştirir.

Sonraki satırda,


yatay bir çizgi çektik (maalesef diye bir tag'imiz yok).

Sonra biraz daha metin ve sırasıyla BODY'yi ve HTML dökümanımızı kapattık.

HTML 4.0 ve StyleSheet'lerin kullanıma girmesiyle değişen yukarıdaki BODY tanımı artık desteklenmemektedir.

yerine

kullanılması önerilmektedir.

Temel HTML Tag'leri:

, ve : HTML'in en temel blok tag'leridir. Bir HTML dökümanı genelde ile başlar ve ile biter, ancak verilmese bile, browser dökümanı sorunsuz olarak görüntüleyebilir. Aynı şey için de gereklidir. Ancak, 'in verilmesi ve döküman içinde HEAD bloğu varsa, 'nin de verilmesi zorunludur. Parametre olarak bir çok blok elemanı gibi LANG=Dil alır. Örneğin .

: İlk öğrenilmesi gereken tag'lerden biridir. Kullanımı basittir ve HEAD bloğunda kullanılı.

: Paragraf açma kapama tag'leri. Yeni bir paragraf açarken/kapatırken kullanılır. Browser

tag'iyle karşılaştığı yerde yukarıdan ve aşağıdan biraz boşluk bırakır. Çoğu browser kapama tag'inin olmasına ihtiyaç duymaz.
Yararlı bir parametre olarak ALIGN=LEFT|CENTER|RIGHT alabilir.

Metin....

dediğiniz zaman aradaki bütün metin sol tarafa yaslı değil ortalanmış görülür. RIGHT ise yazıyı sağa dayar.


:
Satır sonu tag'i. Kapama tag'i yoktur.

gibi altta, üstte boşluk bırakmadan yeni bir satır açar.


: Yatay çizgi tag'i. Parametre olarak ALIGN=LEFT|CENTER|RIGHT, WIDTH=xx%, SIZE=x ve NOSHADE alabilir. WIDTH ile yüzde olarak genişliğini verebilirsiniz. SIZE'ın varsayılan değeri 2'dir. NOSHADE ileyse, 3 boyut etkisini istemediğinizi belirtebilirsiniz.

: Kalın yazı tag'i. İçeride kalan bütün metin kalın harflerle görüntülenir. Ancak yeni HTML standartlarını hazırlayan organizasyon yerine ileriki günlerde kullanılmasını önermektedir.

: İtalik yazı tag'i. İçeride kalan bütün metin italik harflerle görüntülenir. Yine gibi, yerine (emphasis) kullanılması önerilmektedir.

...: Başlık tag'leri. Dökümanı çeşitli bölümlere ayırmak ve bunları belirtmek için kullanabilirsiniz. ALIGN=LEFT|CENTER|RIGHT parametresi alabilir.

ve

  • :
  • Numaralandırılmış liste (ordered list) tag'leri.

      ve
    listeyi açma ve kapama için,
  • ise yeni bir eleman tanımlamak için kullanılır. Numaralar otomatik olarak verilir.

    ve

  • : Numaralandırılmamış liste (unordered list) tag'leri.
      ve
    listeyi açma ve kapama için,
  • ise yeni bir eleman tanımlamak için kullanılır. Numara yerine bullet konur.

    : Karakter tipini, puntosunu, rengini vermek için kullanılır. Çok kullanılan tag'lerden biridir. Parametre olarak FACE=Font_İsmi (Arial, Helvetica vs gibi), SIZE=x|+/- x (SIZE="3", SIZE="-1" vs gibi), COLOR=#RRGGBB|Renk_İsmi (COLOR="#808080" vs gibi) alabilir. HTML 4.0'da iptal edilmiştir.

    : Dökümanın genel yazı tipini belirtmek için kullanılır. Parametreleri tag'ininkilerle aynıdır. HTML 4.0'da iptal edilmiştir.

    : Anchor tag'i. HTML'in HTML olmasını sağlayan tag'dir. Metin içinde bir başka yere, Internet üzerinde herhangi bir dökümana, resme ya da herhangi bir servise ulaşılabilmesini sağlar. En gerekli parametre olarak HREF=Kaynak_İsmi alır. Kaynak kısmında kullanılabilecek isimlere örnek olarak:

    • HREF=table_of_contents.html
    • HREF="../"
    • HREF=../MySubDir2/TarDosyası.tar
    • HREF="http://www.ulakbim.gov.tr" /
    • HREF="ftp://cu:cork@efe.ulakbim.gov.tr/" (ftp client'ını açar, efe'ye bağlanır ve kullanıcı ismi olarak cu, password olarak cork verir (şifrem tabii ki cork değil :)
    • HREF=telnet://efe.ulakbim.gov.tr/"
    • HREF=mailto:cu@ulakbim.gov.tr?subject=HTML%20hakkında+cc=cu%40reborn.com (e-mail client'ıny açar, cu@ulakbim.gov.tr adresine, subject'i HTML hakkında olan ve bir kopyası da cu@reborn.com'a gönderilecek bir e-mail taslağı çıkartır. Dikkat edilirse, boşluk yerine %20, @ işareti yerine %40 kullanılmıştır. %Karakter_Hex_Kodu olarak istediğiniz karakteri kullanabilirsiniz. İlk parametreden önce ?, sonrakilerden önce de + kullanılır.)
    • HREF="javascript:alert('Gidebilir miyim')" (bir JavaScript kodu çalıştırır, ve ekrana üstünde Gidebilir miyim? yazan ve OK tuşu olan bir diyalog kutusu çıkartır.)

    Ayrıca bir diğer parametresi NAME=Anchor_İsmi'dir. Bu şekilde bir anchor tanımladığınız zaman döküman içinde istediğiniz bir yerden tam bu noktaya zıplamanız mümkündür. Örneğin sayfa en tepesine dediğiniz zaman sayfanın en altına koyduğunuz bir Click here to go to top. link'iyle dökümanın en üstüne geri dönülebilmesini sağlarsınız. # işareti önemlidir ve link'in hedefinin bir anchor olduğunu gösterir. Ayrıca bla bla.. gibi bir link'le başka bir döküman içindeki bir anchor'a da link koyabilirsiniz.
    Tabii ki Anchor tanımlarken hem NAME hem de HREF parametrelerini verebilirsiniz. Böylece aynı anda hem dışarıya link vermiş, hem de dışarıdan link verilebilecek bir blok tanımlamış olursunuz. Örneğin, .

    : Döküman içinde bütün URL'leri uzun uzadıya vermemek için bir ön-ek URL tanımlamak için kullanılır. Parametre olarak HREF=Ön-ek_URL'i alır. Örneğin verildiği zaman İçindekiler bulunulan directory'deki değil http://www.ulakbim.gov.tr'e yönlenir. Yine de bu şekilde bir kullanım pek tavsiye edilmemektedir. HEAD bloğunda kullanılmaktadır.

    : Döküman içine bir resim yerleştirmek için kullanılır. Parametre olarak SRC=Resim_URL'i, WIDTH=Genişlik, HEIGHT=Yükseklik, ALT=Alternatif_Text, LOWSRC=Düşük_Çözünürlükteki_Resim_URL'i alabilir BORDER=Çerçeve_Kalınlığı, HSPACE=x, VSPACE=x (Yatay ve dikey marjinler) alabilir. Çok sık olarak bir bloğu içine yerleştirilir ve görsel bir link yaratılmış olur.

    ve :Sırasıyla superscript ve subscript yazı için kullanılır. Superscript yaptığınız yazı yukarıda, suscript yaptığınız yazı aşağıda görüntülenir. Örneğin x2 (superscripted) ve M1,2 (subscripted).

    : Alıntı yapmak için kullanılır. Genelde ise bir bloğu toptan içeri indent etmek için kullanılır. Bu dökümandaki kod örnekleri bu tag'le içeri doğru alınmıştır. Indent etmek için kullanılması yüzünden, alıntı yaptığınızda tırnak (") işareti koymanız tavsiye edilmez.

    : Teletype (monospaced, sabit genişlikte) karakter kullanmak için kullanılır. Courier tipik bir teletype karakter tipidir. Bu sayfalardaki bütün kod örnekleri de Teletype stilindedir.

    : Önceden düzenlenmiş (preformatted) metin blokları için kullanılır. Normalde, HTML birden çok whitespace'i tek bir boşluk karakteriyle değiştirdiği için, görüntülenmesi başka türlü mümkün olmayan metin blokları bu tag yardımıyla görüntülenebilir. Örneğin:
    Welcome to my little corner of tutorial
    
    Here are some formatting that is otherwise impossible

    May 1998
    Mon Tue Wed Thu Fri Sat Sun
    ---------------------------------
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30 31

    : Strike-Through (üstü çizili yazı) için kullanılır. Vurgu vermek ya da bir şeyin iptal edildiğini göstermek için kullanılabilir ancak pek rastlanmamaktadır. HTML 4.0'da iptal edilmiştir.

    : Altçizgi çekmek için kullanılır. Kullanılması pek tavsiye edilmeyen bir tag'dir, çünkü link'lerin altında da genellikle altçizgi olduğu için altı çizili düz metinle link'lerin birbirine karışma ihtimali vardır. HTML 4.0'da iptal edilmiştir.

    ve : Yazıyı yeni bir paragraf açmadan geçici olarak büyütmek ve küçültmek için kullanılır.

    : Netscape Navigator'ın meşhur yanıp sönen tag'i. Bir çok HTML yazarı işin suyunu kaçırsa da, efektif bir kullanım hala mümkündür.

    : Atıf (citation) yapıldığı zaman kullanılır. Genelde italik olarak render edilir.

    : Örnek kod (C, Pascal vs gibi) verildiği zaman kullanılır. Genelde Teletype olarak render edilir.

    : Adres bölümleri için kullanılır. Genelde italik olarak render edilir.

    : Örnek çıktı (program, script vs) için kullanılır. Genelde Teletype olarak render edilir.

    : Kısaltmalar için kullanılır. Parametre olarak TITLE=Kısaltmanın_Açık_Hali alır. Örneğin, WWW.

    NOT: Yukarıdaki son 5 tag çifti genelde pek sık kullanılmasa da kullanılması tavsiye edilmektedir. Dökümanlar içinde arama yapılırken ve bir arama makinesi tarafından endekslenirken yardımcı olabilmektedir. Ayrıca başka benzer tag'ler de mevcuttur.

    : Döküman içine Java applet'i gömmek için kullanılır. Parametre olarak CODE=Java_Class_Dosyası_URL'i, CODEBASE=Class_Dosyasının_Bulunduğu_Dizin, ARCHIVE=JAR_Dosyası_URL'i, ALT=Alternatif_Metin, ALIGN=LEFT|CENTER|RIGHT, HEIGHT=Yükseklik, WIDTH=Genişlik, MAYSCRIPT (JavaScript'lerle haberleşebileceği) ve NAME=İsim_Bilgisi alabilir. Ayrıca applet'in kullanabileceği parametreleri de, istenildiği kadar PARAM NAME=Applet_Parametresi_İsmi VALUE=Applet_Parametresi_Değeri kullanarak verebilirsiniz. HTML 4.0'da iptal edilmiştir.
    HTML 4.0'da şöyle bir kıllanım mevcuttur:


    Ekrana bir sürü baloncuk çizen şirin bir applet

    : Döküman içine JavaScript, VBScript gibi dillerle yazılmış programcıklar gömmek için kullanılır. Parametre olarak LANGUAGE=Script_Dili_İsmi alabilir. Ancak HTML 4.0'da LANGUAGE yerine TYPE parametresi getirilmiştir. Örneğin yerine kullanılmalıdır.

    : HTML'in en kural tanımayan elemanıdır denilebilir. Parametre olarak bir çok şey alabilir, ancak en çok kullanılan iki tanesi HTTP-EQUIV ve NAME'dir. Genel olarak bir de VALUE ya da CONTENT parametresi takip eder. Örnek olarak:







    Yukarıdan da anlaşılabileceği gibi HTTP-EQUIV, HTTP protokolü tarafından desteklenen bazı parametreleri vermek için kullanılır. Örnek olarak, 1. satırdaki tanımlama, dökümanın geçerlilik tarihinin 10 Haziran 1998'de dolacağını belirtir. Bu tarihten sonra kullanıcının bu dökümanı cache'den yüklemesi engellenir ve tekrar orijinal dökümana gitmesi zorlanır.

    : Döküman içine genelde sık kullanılan plug-in'lerin desteklediği ses, video, animasyon gibi nesnelerin gömülmesi için kullanılır. Parametreler nesnenin tipine göre değişir. Ancak ortak olan bir parametre SRC=Nesne_URL'idir. HTML 4.0'da iptal edilmiştir. Örneğin bir QuickTime 3.0 movie dosyasını şu şekilde gömebilirsiniz:

    Plug-in'iniz yok mu? Ne kötü!

    HTML 4.0 kurallarına göre yeni gösterim şu şekildedir:







    Plug-in'iniz yok mu? Ne kötü!

    Ayrıca HTML 4.0'da gelen yeniliklerden bir tanesi de DIR (direction, yön) parametresidir. LTR (left to right) veya RTL (right to left) değerini alabilir. Bir çok blok elemanı içinde kullanılabilir. Örneğin veya

    gibi. Ancak hala bir çok browser tarafından desteklenmemektedir.

    Tablolar:

    Tablolar, HTML'in sayfa mizampajı açısından en çok kullanılan kısımlarındandır. Her ne kadar büyük bir tabloya elle müdahele etmek bir işkence olabilse de, yine de bilgi açısından ele alınacaktır.

    Bir tablo genel olarak şuna benzer.














    1. sütun 1. satır2. sütun 1. satır
    1. sütun 2. satır2. sütun 2. satır
    1. sütun 3. satır2. sütun 3. satır

    tag'ini açarken BORDER="2" ile çerçevenin kalınlığının 2 pixel, CELLPADDING="3" ile hücre içindeki yazı ile çerçevesi arasında 3 pixel, CELLSPACING="1" ile hücreler arasında 1'er pixel olacağını, HEIGHT="200" ile yüksekliğinin 200 pixel olacağını, WIDTH="90%" ile genişliğinin browser penceresinin %90'ı olacağını ve en son olarak da BGCOLOR="A0A0A0" ile arka fon renginin gri olacağını vermiş olduk. Bunlardan hiçbirini vermemiş olsaydık, browser genişlik, yükseklik ayarlarını hücre içlerindeki dataya göre otomatik yapardı ve kalınlık ve arka fon rengini de varsayılanlardan atardı. Burada dikkat edilmesi gereken bir şey, verdiğiniz yükseklik veya genişlik değerleri, hücre içindeki elemanlardan küçükse, verdiğiniz değerler ihmal edilir ve hücre içindeki elemanları tamı tamına alabilecek en küçük değerler kullanılır.

    Tablo tanımlamaları her zaman için satır satır yapılır. Yukarıda görüldüğü gibi

    (table row) ile yeni bir satır açıyoruz, ve altına da ile, satırla işimiz bittiğinde ile kapatıyoruz. Tabii ki tablomuzla işimiz bittiğinde de
    (table data) ile elemanlarımızı sıralıyoruz. Sütunla işimiz bittiğinde
    ile tablomuzu kapatıyoruz.

    Peki burada birinci satırda 2 yerine 1 tane geniş sütun vermek isteseydik ne yapacaktık? İlk satır bilgisini şu şekilde değiştirecektik:


    1. satır, başlık satırı olabilir

    Aynı şekilde 1. sütunda 3 satır yerine tek bir satır kullanmak için şunu yapacaktık:


    1. sütun, başlık sütunu olabilir

    Aşağıdaki gibi bir tablonun kaynak kodu şu şekildedir.

    EN UST

    EN SOL

    SOL IC UST

    SAG IC UST

    EN SAG EN UST

    SOL IC SOL ORTA

    SOL IC SAG ORTA

    EN SAG ORTA UST

    SOL IC ORTA

    SAG IC ALT

    EN SAG ORTA ALT

    SOL IC SOL ALT

    SOL IC SAG ALT

    EN SAG EN ALT


























    EN UST

    EN SOL

    SOL IC UST

    SAG IC UST

    EN SAG EN UST

    SOL IC SOL ORTA

    SOL IC SAG ORTA

    EN SAG ORTA UST

    SOL IC ORTA

    SAG IC ALT

    EN SAG ORTA ALT

    SOL IC SOL ALT

    SOL IC SAG ALT

    EN SAG EN ALT

    Yukarıda yeni bir parametre olarak VALIGN (vertical alignment) kullanıldı. VALIGN ile hücre elemanlarının hücrenin yukarısı mı ortası mı yoksa altına mı yaslanacağını belirtebilirsiniz. Sola, sağa yaslamak veya ortalamak için de

    'ı kullanabilirsiniz.

    Tablolarla ilgili iki önemli not:

    1. Hücre içinde hiç bir data yoksa, browser o hücrenin çerçevesini göstermez. Örneğin



















    2. Eğer döküman içinde varsayılan bir font kullanıyorsanız bile tablonun her hücresi içinde bunu tekrar tanımlamanız gerekir, çünkü tablolar içinde dökümanın tanımlanan karakter tipinin üstüne varsayılan karakter tipi konur. Örneğin, döküman font'unuzu Helvetica tanımladıysanız ve browser'ın varsayılan font'u Times New Roman ise tablo içinde bütün yazılar Times New Roman olarak görünür.

    Veri Giriş FORMları:

    Veri giriş formları genelde bir sunucuya bilgi göndermek veya almak için kullanılır. Çok yaygın olarak sunucu tarafında CGI (Common Gateway Interface) kullanılarak gönderilen bilgi işlenir. CGI programları en çok Perl dilinde yazılmakta, ancak C, C++, Java, Unix shell'leri, Phyton, Dos batch file'ları, ya da Windows exe'leri de olabilmektedir. Ayrıca CGI'a alternatif olarak Servlet (Sun'ın tanımladığı Server-Side Java applet'leri), ASP (Microsoft'un tanımladığı Active Server Page'leri) ya da LiveWire (Netscape'in tanımladığı Server-Side JavaScript) de bulunmaktadır. Bu konular şimdilik bu dökümanın konusu dışındadır.

    Internet'te çok sık olarak isminizi, yaşınızı, mesleğinizi vs istedikleri formlar görmüşsünüzdür. Örneğin aşağıdaki formu ele alalım:

    Adınız:
    E-mail adresiniz
    Şifreniz:
    Kullanım tipi: Ticari Kişisel
    Mesleğiniz:
    Kullandığınız işletim sistemleri:
    Düşünceleriniz:
    Yeni bir sürüm çıktığında e-mail adresime bilgi gönderiniz.

    Yukarıda ilk iki eleman TEXT-BOX'tır. Sonraki sırada ikisinden yalnızca birini seçebildiğiniz RADIO-BUTTON'lar bulunmakta. Meslek seçilen kontrol ise bir DROP-DOWN COMBO-BOX (!)'tır. Altında birden çok elemanın arasından seçim yapılabilecek bir LIST-BOX var. Düşünceleri sorduğumuz büyük kontrolün adı TEXT-AREA. Altında evet/hayır gibi bir anlamı olan CHECK-BOX'ımız var. En altta ise formu doldurduktan sonra göndermek için kullandığmız SUBMIT ve form'u ilk haline getirmek (içeriği sıfırlamak zorunda değil) için kullandığımız RESET düğmesi var.Şimdi bu elemanlara yakından bakalım:


    Adınız:
    E-mail adresiniz:
    Şifreniz:
    Kullanım tipi: Ticari
    Kişisel
    Mesleğiniz:
    Kullandığınız işletim sistemleri:

    Düşünceleriniz:

    Yeni bir sürüm çıktığında e-mail adresime bilgi gönderiniz.


    Şimdi bu elemanları daha da bir yakından inceleyelim :)

    1. ve 2. sıradaki Input elemanlarımız Text-Box tipinde, NAME=İsim, TYPE=Eleman_Tipi, SIZE=Görünen_Büyüklük, VALUE=Varsayılan_Değer ve MAXLENGTH=Yazılabilecek_Maksimum_Karakter_Sayısı parametrelerini almakta. Name parametresine sonradan dönülecektir.

    3. sıradaki yine bir Input elemanımyz var, ancak bu sefer TYPE olarak PASSWORD verildiğine dikkat. Bu tip bir Text-Box'ın içine yazdığınız karakterler yerine standart bir karakter, genelde * karakteri (Mac'lerde • - bullet) görülür. Parametre olarak Text-Box'lar

    4. sırada 2 adet Radio-Button'ımız var. Radio-Button'lar da Input tipi elemanlardan. Parametre olarak NAME=İsim, VALUE=İçsel_İsim ve CHECKED almakta. NAME'leri aynı olan bütün Radio-Button'lar aynı grupta yer alır, ve kullanıcı bunların arasından sadece bir tanesini seçebilir. VALUE parametresi de CGI scriptine aktarılan bir parametredir, sonradan dönülecektir. CHECKED parametresi ise, başlangıçta grup içinden hangisinin ön-seçilmiş olduğunu belirtir. Birden fazla kullanılmaması gerekir.

    5. ve 6. sırada SELECT elemanımız var. Evet, aslında ikisi de aynı eleman, yalnız görüntüleri değişik. Combo-Box şeklinde görülmesinin tek sebebi, görülen eleman sayısının 1 olarak verilmesi. Parametre olarak NAME=İsim, SIZE=Görünen_Eleman_Sayısı ve MULTIPLE alabilir. MULTIPLE parametresi verdiğiniz zaman kullanıcı birden çok elemanı seçebilir. Combo-Box'larda pek kullanılmaz. arasına istediğiniz kadar yerleştirebilirsiniz. OPTION parametre olarak VALUE=İçsel_İsim ve SELECTED alabilir. VALUE, CGI script'ine aktarılan bir değerdir. SELECTED ile de önceden hangi liste elemanlarının seçili olacağını söylersiniz. arasına yazdığınız herşey, sayfada önceden yazılmış olarak çıkacaktır. Ayrıca, sadece Netscape Navigator'ın desteklediği WRAP=OFF|SOFT|HARD parametresi vardır. Normalde, yazdığınız yazı, uzun bir satır halinde devam eder. WRAP=SOFT yaptığınızda browser içinde satır sonlarında kelimeler bir alt satıra geçer ancak sunucuya yine de tek bir satır halinde gönderilir. WRAP=HARD yaptığınızda hem browser'da hem de sunucuya giden metin satır sonlarından bölünmüş olacaktır. Varsayılan değer OFF'dur ancak WRAP=SOFT iyi bir seçim olacaktır.

    8. sırada Input tipinden bir Check-Box'ımız görülüyor. NAME=İsim, VALUE=Değer ve CHECKED parametrelerini alabiliyor.

    Son sırada ise birer SUBMIT ve RESET tipinden Input elemanlarımız var. RESET'le formunuzu FORM'un ACTION kısmında belirtilen adrese yollarsınız. Burada iki tip metod vardır: POST ve GET. GET metodu yeni yüklenecek bir sayfaya parametre olarak gider ve URL'in bir parçasıdır. POST metodu ise tamamen ayrı bir veri akışı olarak gider ve sonucunda yüklenecek sayfa genelde bu parametrelerden bağımsızdır.

    Bir formu doldurup SUBMIT düğmesine bastığınızda, sunucuya giden bilgi, POST veya GET metodundan hangisinin kullanıldığına göre değişir ancak genel görünüm şuna benzer:

    ismi=Ivır+Zıvır&cinsi=erkek&medhali=müzmin&kafasız=evet

    = işaretinin sol tarafında NAME, sağ tarafında VALUE bulunur ve birden fazla alanın gönderilmesi durumunda aralarında & vardır. Yukarıda mailto: linklerinde gördüğümüz gibi POST metodu kullanılırsa da aralarında + işareti bulunacaktır.

    FRAMESET'ler:

    Frameset'ler bir browser penceresi içinde birden çok sayfayı aynı anda görüntülemek için kullanılır. Frameset kullanarak, başka türlü yapılması mümkün olmayan bir çok şeyi yapabilirsiniz, çok sık kullanılan bir örnek olarak, yukarıda (veya solda) bulunan ve hareket etmeyen bir düğme grubundan istediğinize basarak, aşağıda (veya sağda) bulunan çerçeve içinde yeni bir sayfaya yönlenebilirsiniz.

    Tipik bir frameset tanımlaması şöyledir:

    
    









    <br /> <body text="#333333" bgcolor="#FFFBF0" link="#000099" vlink="#006600" alink="#009999"><br /> <p><br /> Browser'ınız frame'leri desteklemiyor.<br /><br /> <a href="http://home.netscape.com/download/">Netscape Navigator'ı yüklemek için buraya basınız</a><br /> </body><br />

    NOT: Yukarıda BODY kısmı olmasına rağmen bir çok frameset tanımlamasında bu blok hiç yoktur.

    'le yeni bir frameset'i tanımladık, ama parametresiz hiçbir işe yaramaz. Alabildiği parametreler:

    • COLS=x|x%|*|x*, x|x%|*|x*....
    • ROWS=x|x%|*|x*, x|x%|*|x*....
    • BORDER=x
    • FRAMESPACING=x

    COLS ve ROWS ile frameset'inizi nasıl böleceğinizi belirlersiniz, ve ikisinden birini vermeniz zorunludur. Bölümlemeyi yaparken değerleri pixel cinsinden (x) veya yüzde cinsinden (x%) verebilirsiniz. * işareti ise özel bir anlam taşır. * verdiğiniz zaman, browser önce x veya x% olarak verdiğiniz değerlere bakar ve bunlara gereken boşluğu ayarlar. Daha sonra kalan boşluk ise * işaretiyle belirtilen yerlere ayrılır. Örneğin, ekranımız 800x600 genişliğinde olsun ve biz de kullanmış olalım. Browser en üstteki frame'e 800x10%=80 pixel, bir altındakine 500 pixel ve en alttakine de kalan 800-(80+500)=220 pixel'lik alanı ayırır. * işaretini birden fazla kere kullanabilirsiniz, örneğin aşağıdakilerin hepsi geçerli tanımlamalardır:



    Yukarıdaki 1* ve 3* kullandığımız zaman browser, 2. sıradaki 10%'i, 3. sıradaki 500 pixel'i ve 4. sıradaki 10%'i ayırdıktan sonra kalan boşluğu 4 eşit parçaya ayırıp en üstteki frame'e 1, en alttaki frame'e de 3 birimlik yer ayırır.

    BORDER parametresiyle frame'ler arasındaki ayıraç çizgisinin kaç pixel olacağını ve FRAMESPACING'le de aralarında kaç pixel kalacağını belirlersiniz.

    ikilisiyle de browser'ı frameset'leri desteklemeyen kullanıcılarda görülecek olan metni girebilirsiniz.

    NOT: ikilisini vermeden BODY bloğu açarsanız, frameset'iniz yerine bu BODY bloğu görülecektir.

    Ayrıca, Netscape Navigator'a özel olarak BORDERCOLOR=Ayraç_Çizgisi_Rengi ve FRAMEBORDER=YES|NO parametrelerini de verebilirsiniz. FRAMEBORDER sanıldığından biraz farklı olarak, aradaki çizginin 3D etkisinin olup olmayacağını verir.

    Frameset'ler içiçe gömülebilir, yani bir ikilisi arasında bir tane daha tanımlayabilirsiniz. Örneğin:

    
    










    ENUST.HTML, 100 pixel yükseklik,



    TOC.HTML, 150 pixel genişlik


    CONTENTS.HTML, 500 pixel yükseklik ve kalan genişlik
    SOLALT.HTML, 150 pixel genişlik ve kalan yükseklik ORTAALT.HTML, 200 pixel genişlik ve kalan yükseklik SAGALT.HTML, kalan genişlik ve kalan yükseklik

    Gelelim frame'imizi böldükten sonra içlerine konulacak sayfaları tanımlamaya. Bunu da elemanı ile yapıyoruz. Aldığı parametreler:

    • NAME=Frame'in_İsmi
    • RESIZE|NORESIZE
    • SCROLLING=YES|NO|AUTO
    • MARGINHEIGHT, MARGINWIDTH=x
    • SRC=Frame'in_URL'i

    Bu parametrelerden RESIZE veya NORESIZE ile büyüklüğünün değiştirilip değiştirilemeyeceği bilgisini verirsiniz. SCROLLING ile de frame'in içeriğinin bir ekrana sığmaması halinde browser'ın kenara bir kayma çubuğu ekleyip eklemeyeceğini belirlersiniz, varsayılan AUTO'dur. MARGINHEIGHT ve MARGINWIDTH'leyse frame'lerin kendillerine ayrılan alana yerleştirilirken sol üstten kaçar pixel'lik bir marjin bırakılacağını belirtirsiniz. SRC ile de içine yerleştirilecek dosyanın URL'ini belirtirsiniz, SRC'u belirtmediğiniz zaman browser herhangi bir hata çıkarmayacak, buraya varsayılan renklerde boş bir sayfa koyacaktır. NAME parametresi frame'lerin en önemli parametresi sayılabilir, çünkü frameset'lerde bir frame'in içindeki bir link bir başka frame'in içeriğini değiştirebilir, bunu da NAME parametresini kullanarak yapar. Örneğin tanımlamamız şu olsun:

    
    







    ve sol.html içinde şöyle bir link'imiz bulunsun: İçindekiler. Bu link'e tıkladığımızda sag.html'in bulunduğu frame'e table_of_contents.html yüklenecektir. Hatırlarsanız, frameset'i olmayan sayfalarda bir link'e tıkladığınız zaman, yeni dosya aynı pencere içinde açılırdı.

    NOT: Bu parametreyi kullanarak mükemmel şekilde dolaşılabilecek siteler hazırlayabileceğiniz gibi, gittikçe içiçe açılan frame'lerden oluşan bir siteniz de olabilir!

    Ayrıca, TARGET olarak verebileceğiniz bazı önceden-tanımlı isimler vardır, bunlar:

    • _top: tıklanan link'i bütün frame'lerden çıkarak, en üst seviyede açar.
    • _parent: tıklanan link'i kendi frameset'indeki bütün frame'leri silerek, o seviyede açar.
    • _self: tıklanan link'i, link'in bulunduğu frame'in içinde açar.
    • _blank: tıklanan link'i yeni boş bir pencerede açar.

    NOT: TARGET parametresini verdiğiniz bir link'in TARGET'ı gerçekte yoksa, etkisi _blank ile aynı olacaktır, yani link yeni bir pencerede açılacaktır.

    Relative (göreceli) ve Absolute (mutlak) Adreslemelerin Farkları:

    Şu ana kadar verilen link'lerde kimi zaman relative (ör. ../index.html), kimi zaman da absolute (ör. http://www.ulakbim.gov.tr/cgi-bin/anket.cgi) adresleme kullandık Her ikisinin de hem avantajı hem de dezavantajları vardır:

    • Relative adreslenerek oluşturulan sayfaların bir makineden diğerine taşınması kolaydır, ancak bir üst seviyedeki sayfa taşındığı zaman dağılırlar.
    • Absolute adreslemede yazılan linkler daha uzundur, ve bakımı daha zordur ancak bazı dosyaların mutlaka sunucudan yüklenmesini istiyorsanız (bir kullanıcının sayfanın bir kopyasını kendi makinesine indirmesi durumunda) kesin sonuç verir.

    İkisi arasındaki farkları bilerek hazırlanan bir sitede normalde relative ve absolute adresleme beraber kullanılır, ve relative adreslerin sayısı genelde daha çok olur. İyi bir sitede yapılabilecek bir düzenleme, bütünlüğünün bozulmaması gereken "blok" sayfalarda, relative adresleme kullanmak, ve her yüklendiğinde değişen sayfalara da absolute link vermektir, örneğin saatbaşı değişen istatistikler gibi.

  • SINIF YAPISI VE NESNELER

    SINIF YAPISI VE NESNELER

    Gerçek Dünya:

    Nesne = Nitelikler + Davranışlar

    Yazılım Ortamı:

    Nesne = Veriler + Yordamlar

    ( Object = Data + Procedures)

    Sınıf (Class)

    Class nesneleri tanımlamak için kullanılan tip tanımıdır. Ortak özelliklere sahip nesnelere ait veri ve yordamlar bir sınıfın içinde toplanırlar. Bu sınıf yapısı kullanılarak program içinde nesneler tanımlanır.

    Örnek:

    Bir grafik programındaki nokta sınıfı

    Class nokta_sinifi

    {

    İnt x,y; // x,y koordinatları NİTELİKLER

    public:

    void hareket(int,int); // yordamlar DAVRANIŞLAR

    void ciz();

    void sil();

    };

    Yordamların Gövdeleri:

    void nokta_sinifi::hareket(int x_yeni, int y_yeni)

    {

    x=x_yeni; y=y_yeni;

    }

    void nokta_sinifi::ciz()

    {

    putpixel(x,y,1);

    setcolor(WHITE);

    outtextxy(x+1,y+1,”NOKTA”);

    }

    Ana Program

    void main()

    {

    nokta_sinifi nokta1; // nokta1 nesnesinin yaratılması

    nokta1.hareket(50,50);

    nokta1.ciz();

    nokta1,sil();

    nokta1.hareket(350,200);

    nokta1.ciz();

    nokta1.sil();

    }

    Nesne İşaretçileri Kullanarak:

    void main()

    {

    nokta_sinifi *np = new nokta_sinifi; // np nesne işaretçisidir

    np->hareket(50,50);

    np-ciz>();

    p->sil();

    }

    NESNE

    VERİLER hareket nokta1.hareket(1,1)

    nokta1.ciz()


    ERİŞİM HAKLARI

    Özel (private) olarak tanımlanan verilere sadece o sınıfın üye fonksiyonları erişebilir. Sınıfın dışından erişim yapılması istenen veriler açık (public) olarak tanımlanmalıdır. Bu koruma yöntemleri ile verilerin istenmeyen değerler alması engellenmiş olur.

    Void nokta_sinifi :: hareket (int x_yeni, int y_yeni)

    {

    if ( x_yeni > 0 && x_yeni <>&&

    y_yeni > 0 && y_yeni <>)

    {

    x=x_yeni;

    y=y_yeni;

    }

    }

    nokta1.x = -10 // Derleme Hatası: Erişim Yasaklanmıştır


    ARKADAŞLIK İLİŞKİSİ

    Bir sınıf arkadaşı olduğu sınıfın tüm erişim haklarına sahiptir.

    class A

    {

    friend class B; // B sınıfı, A sınıfının arkadaşı

    int i;

    float f;

    public:

    void fonk1(char *c);

    };

    class B

    {

    int j;

    public:

    void fonk2(A s){printf(“\%d”,s.i);} // B sınıfı A’nın elemanına erişiyor.

    };

    Fonksiyonlar da bir sınıfın arkadaşı olabilirler

    class ComplexT

    {

    friend void print(ComplexT); // print fonksiyonu bu sınıfın arkadaşıdır

    float re,im;

    };

    void print(ComplexT z)

    {

    printf(“\n reel=%f im=%f”,z.re, z.im);

    }


    SINIF İŞARETÇİSİ “THİS”

    Bir sınıfın üye fonksiyonu yürütülürken this işaretçisi o fonksiyonun ait olduğu sınıfa işaret eder.

    Örnek: Çift bağlantılı liste

    class dlink

    {

    dlink *once;

    dlink *sonra;

    public:

    void ekle(dlink *);

    };

    void dlink :: ekle(dlink *p)

    {

    p->sonra=sonra

    p->once=this;

    sonra->once=p;

    sonra=p;

    }

    .

    .

    dlink dl1,dl2;

    .

    .

    dl1.ekle(&dl2);


    OPERATÖRLERE YENİ İŞLEVLERİN YÜKLENMESİ

    #include

    class ComplexT // kompleks sayıları tanımlayan sınıf

    {

    float re,im;

    public:

    void set(float re_in, float im_in)

    {re=re_in; im=im_in;}

    complexT operator +(ComplexT); // + operatörünün fonksiyonu

    void operator()(); // () operatörünün fonksiyonu

    };

    /** + operatörünün işlevini tanımlayan fonksiyon **/

    ComplexT ComplexT::operator+(ComplexT& z)

    {

    ComplexT result;

    result.re = re + z.re;

    result.im = im + z.im;

    return result;

    }

    /** () operatörünün işlevini tanımlayan fonksiyon **/

    void ComplexT::operator()()

    {

    printf(“\n (%f, %f)”, re,im);

    }

    void main()

    {

    ComplexT z1,z2,z3,z4;

    z1.set(0.5,-3);

    z2.set(2,1.5);

    z3=z1+z2; // + operatörüne ilişkin fonksiyon canlanır

    z3(); // () operatörüne ilişkin fonksiyon canlanır

    z4=z1+z2+z3; // önce result =z1+z2 ardından z4 = result+z3

    z4(); // () operatörüne ilişkin fonksiyon canlanır

    }


    KURUCU FONKSİYONLAR (CONSTRUCTOR)

    Sınıfın kurucu fonksiyonları sınıf ile aynı adı taşırlar ve sınıftan bir nesne tanımlandığı anda kendiliğinden canlanırlar.

    Kurucu fonksiyonlar nesnelere başlangıç değeri atamak için ve gerektiğinde verilere bellekte yer ayırmak için kullanılırlar.

    Class ComplexT

    {

    float re,im;

    public:

    ComplexT() // Kurucu Fonksiyon

    {

    re=0;

    im=0;

    }

    };

    void main()

    {

    ComplexT z1,z2; // kurucu fonksiyon 2 defa canlanır

    ComplexT *zp = new ComplexT; // kurucu fonksiyon 1 defa canlanır

    }

    Bir sınıfta değişik tipte ve sayıda parametreye sahip birden fazla kurucu fonksiyon olabilir.

    class ComplexT

    {

    float re,im;

    public:

    ComplexT(float re_in)

    {

    re=re _in; im=0;

    }

    ComplexT(float re_in, float im_in)

    {

    re=re_in; im=im_in;

    }

    : // diğer fonksiyonlar...

    };

    void main()

    {

    ComplexT z1(0.3);

    ComplexT z2(0.5, 1.2);

    ComplexT *zp=new ComplexT(0.4);

    ComplexT z3; // HATA parametresiz kurucu yok

    }

    Sınıflara Başlangıç Değerlerinin Atanması

    Eğer bir sınıf, kurucu fonksiyona sahip değilse ve tüm üyeleri ’public’ olarak tanımlanmışsa, üyelerine ilk değerlerini atamak için başlangıç değer dizisi kullanılabilir. Bu dizi ‘{}’ parantezleri içinde ‘ , ’ ile ayrılmış sabit değerlerden oluşur. Dizideki her sabit değer nesne içindeki üyelere tanımlandıkları sırada atanır

    class x

    {

    public:

    float a, b;

    //yordamlar....

    };

    X n ={1.1 ,2.2}; // n.a=1.1 n.b=2.2 olur.

    NESNE DİZİLERİNE BAŞLANGIÇ DEĞERLERİNİN ATANMASI

    Bir sınıftan nesne dizisi tanımlandığında o sınıfın parametre almayan bir kurucu fonksiyonu varsa, bu fonksiyon dizideki her eleman için bir kez çalışır.

    Bir nesne dizisi yaratmak ve aynı zamanda parametre alan bir kurucu fonksiyon çalıştırarak başlangıç değerleri atamak istendiğinde başlangıç değerleri listesinden yararlanılır.

    Class ComplexT

    {

    float re,im;

    public:

    ComplexT (float , float);

    };

    Complext :: ComplexT (float d1 , float d2=1)

    {

    re = d1; im = d2;

    }

    void main()

    {

    ComplexT s[]={ {1.1}, {3.3}, ComplexT(4.4,1.1)};

    }

    Bu örnekte 3 elemanlı bir s dizisi tanımlandığından kurucu fonksiyon 3 defa canlanır. Birden fazla parametre alan bir kurucu fonksiyonu canlandırmak için bu fonksiyon adı yazılarak çağrılmalıdır.

    Aşağıdaki örnekte ise 5 elemanlı bir dizi tanımlanmış, fakat sadece ilk üç elemanın başlangıç değeri verilmiştir. Bu durumda son iki eleman için parametre almayan bir kurucu fonksiyon gereklidir. Eğer sınıfta böyle bir kurucu fonksiyon yazılmamışsa derleme hatası oluşur.

    ComplexT s[5]={ {1.1},{3.3}, ComplexT(4.4,1.1)};

    Googleda AraGoogle da bu haberi ara
    Etiketler:

    ECBanner bloggping TurkeyRank.Com - Pagerank Servisi pagerankonline.de - Pagerank Anzeige ohne Toolbar On our way to 1,000,000 rss feeds - millionrss.com
    Seo Memurvadisi Backlink Austausch ECBannerFree Automatic Backlinks Free Automatic Backlinks Free Automatic BacklinksFree Automatic Backlinks Free Automatic BacklinksFree Automatic Backlinks
    Bu sitedeki yazılar telif hakkları göz önüne alınarak yayınlanmaktadır. Kaynak göstermeksizin Tamamı veya Bir Kısmının KOPYALANMASI YASAKTIR. yayınlanan bu makale ve eserlerin hak sahipleri herhangibir nedenle telif hakkı idda ederlerse ve bizce uygun görülmesi halinde (gerçeklik esası olması dahilinde) bize lütfen mail atsınlar (ozkan@mail.nu) en kısa sürede eserleriniz sitemizden kaldırlır. © 2008 www.odeveson.blogspot.com