# Ns (simülatör)
ns (network simulator ifadesinin kısaltması), bir dizi ayrık olay ağ simülatörleri, özellikle ns-1, ns-2 ve ns-3 için kullanılan bir isimdir. Hepsi, öncelikle araştırma ve öğretimde kullanılan ayrık olay bilgisayar ağı simülatörleridir.


## Tarihçe.
### ns-1.
ns-1 olarak bilinen ns'nin ilk sürümü 1995-97 zaman diliminde Steve McCanne, Sally Floyd, Kevin Fall ve diğer katkıda bulunanlar tarafından Lawrence Berkeley National Laboratory (LBNL)'de geliştirilmiştir. Bu, LBNL Ağ Simülatörü olarak biliniyordu ve 1989 yılında S. Keshav tarafından REAL olarak bilinen daha önceki bir simülatörden türetildi.


### ns-2.
ns-2, ns-1'in bir revizyonu olarak başladı. 1997'den 2000'e kadar ns'nin geliştirilmesi DARPA tarafından LBL, Xerox PARC, UC Berkeley ve USC/ISI'deki VINT projesi aracılığıyla desteklendi. 2000 yılında ns-2'nin geliştirilmesi DARPA tarafından SAMAN ile ve NSF tarafından CONSER ile, her ikisi de USC/ISI'de, ACIRI dahil diğer araştırmacılarla işbirliği içinde desteklenmiştir.


#### NS2'nin özellikleri.
  - Ağ araştırmaları için ayrık bir olay simülatörüdür.
  - TCP, FTP, UDP, HTTPS ve DSR gibi bir grup protokolü simüle etmek için önemli destek sağlar.
  - Kablolu ve kablosuz ağ simülasyonu yapar.
  - Öncelikle Unix tabanlıdır.
  - Betik dili olarak TCL kullanır.
  - Otcl: Nesne yönelimli desteği
  - Tclcl: C++ ve otcl bağlantısı
  - Ayrık olay çizelgesi
Ns-2, UCB Daedelus ve CMU Monarch projeleri ve Sun Microsystems'den kablosuz kod dahil olmak üzere üçüncü tarafların önemli katkılarını içermektedir.


### ns-3.
2003 yılında Tom Henderson, George Riley, Sally Floyd ve Sumit Roy liderliğindeki bir ekip, ns-2'nin yerine ns-3 adında bir yazılım geliştirmek için ABD Ulusal Bilim Vakfı'na (NSF) başvurmuş ve fon almıştır. Bu ekip, Sophia Antipolis'teki INRIA'nın Planete projesi ile işbirliği yaptı ve Mathieu Lacage'ın yazılım lideri olduğu yeni bir açık kaynak projesi oluşturdu.
ns-3'ün geliştirilmesi sürecinde, ns-2 ile geriye dönük uyumluluğun tamamen terk edilmesine karar verildi. Yeni simülatör C++ programlama dili kullanılarak sıfırdan yazılacaktı. ns-3'ün geliştirilmesine Temmuz 2006'da başlandı.
Üç sürümün mevcut durumu şöyledir:
  - ns-2 kurulduğunda ns-1'in geliştirilmesi durduruldu. Artık geliştirilmemekte ve bakımı yapılmamaktadır.
  - ns-2'nin geliştirilmesi 2010 yılı civarında durdu. Artık geliştirilmemekte ve bakımı yapılmamaktadır.
  - ns-3 aktif olarak geliştirilmekte ve sürdürülmektedir.


## Tasarım.
ns-3, C++ ve Python kullanılarak betik oluşturma özelliği ile oluşturulmuştur. ns kütüphanesi, ns C++ başlıklarının ayrıştırılmasını castxml ve pygccxml'ye devrederek ilgili C++ bağlama (binding) yapıştırıcısını otomatik olarak üreten pybindgen kütüphanesi sayesinde Python tarafından sarmalanır. Otomatik olarak oluşturulan bu C++ dosyaları son olarak ns Python modülünde derlenerek kullanıcıların Python komut dosyaları aracılığıyla C++ ns modelleri ve çekirdeği ile etkileşime girmesine olanak tanır. ns simülatörü, simülasyon parametreleri için varsayılan ve örnek başına değerleri yönetmek için entegre bir öznitelik tabanlı sisteme sahiptir.


## Gereksinimler.
ns'i oluşturmak için bir bilgisayara ve bir C++ derleyicisine ihtiyacınız var. Ns'yi çeşitli Unix türleri (FreeBSD, Linux, SunOS, Solaris) üzerinde geliştiriyoruz, bu nedenle en sorunsuz şekilde orada kurulur, ancak muhtemelen bazı ince ayarlarla Posix benzeri bir bilgisayarda çalışmalıdır. Ns ayrıca Windows altında da kurulur ve çalışır, özel Windows/Cygwin sayfasına bakın. Basit senaryolar makul herhangi bir makinede çalışmalıdır, ancak çok büyük senaryolar büyük miktarda bellekten yararlanır.
Ns oldukça büyüktür. Allinone paketini oluşturmak için yaklaşık 320MB disk alanı gerekir. Parçalardan ns oluşturmak biraz disk alanı kazandırabilir. (Birden fazla kişi yer kazanmak için ns derleme ağacındaki dosyaları paylaşmak isterse, basit bir Perl betiği indirebilir, ardından README'deki talimatları takip edebilirsiniz. USC'nin CS599b sınıfından ayrıntılı talimatlar var. Ayrıca ns-users posta listesi arşivindeki tartışmaları da yararlı bulabilirsiniz).


## Ns indirme ve oluşturma.
Kasım 2005 itibarıyla, ns bu SourceForge sitesinde mevcuttur.
Ns, Tcl/Tk'nın (başlık dosyalarıyla birlikte) mütevazı bir şekilde güncel bir kurulumunu ve iki ek paketi gerektirir: tclcl ve otcl. Çoğu işletim sistemi kurulumu tam Tcl/Tk kurulumları veya bu diğer paketlerle birlikte gelmez, bu nedenle büyük olasılıkla ilave olarak birkaç paket yüklemeniz gerekecektir.
  - Genel Linux, BSD, OS X ve Solaris talimatları
Ns oluşturmanın iki tipik yolu vardır: her bileşeni ayrı ayrı ("parçalardan") oluşturmak veya hepsini tek seferde yükleyen bir komut dosyası çalıştırmak ("allinone"). Eğer sadece hızlı bir şekilde denemek istiyorsanız, allinone paketini deneyebilirsiniz. C düzeyinde geliştirme yapmak istiyorsanız, indirme süresinden veya disk alanından tasarruf etmek istiyorsanız ya da allinone ile sorun yaşıyorsanız, parçalardan oluşturmalısınız.
"allinone paketinin yüklenmesi:" Bu paket, Tcl/Tk, OTcl, tclcl, ns-2, nam-1 ve diğer paketlerin kurulumunu gerçekleştiren bir kurulum betiğine sahiptir.
"allinone paketinin güncelleme:" "allinone" paketi yalnızca her sürüm için güncellenir. Platformunuz için allinone paketinin rahatlığıyla ilgileniyorsanız, ancak ns-2 kodunun daha taze bir anlık görüntüsünü kullanmak istiyorsanız güncelleme yöntemini kullanabilirsiniz.
 - Kaynaklardan ns oluşturma - Talimatlar
Farklı sistemlere özgü bazı talimatlar dokümantasyonda almaktadır.
Wouter Horré ns/nam için bir PPA tutmaktadır, böylece kullanıma hazır deb paketlerini oradan alabilirsiniz. Eğer bir sebepten dolayı build-from-sources kurulum talimatlarını arıyorsanız dokümana göz atın.


## Simülasyon iş akışı.
Bir simülasyon oluşturmanın genel süreci birkaç adıma ayrılabilir:
  - "Topoloji tanımı (Topology definition)": Temel tesislerin oluşturulmasını kolaylaştırmak ve birbirleriyle ilişkilerini tanımlamak için ns-3, bu süreci kolaylaştıran bir kapsayıcı ve yardımcılar sistemine sahiptir.
  - "Model geliştirme (Model development)": Modeller simülasyona eklenir (örneğin, UDP, IPv4, noktadan noktaya cihazlar ve bağlantılar, uygulamalar)  çoğu zaman bu yardımcılar kullanılarak yapılır.
  - "Düğüm ve bağlantı yapılandırması (Node and link configuration)": modeller varsayılan değerlerini ayarlar (örneğin, bir uygulama tarafından gönderilen paketlerin boyutu veya noktadan noktaya bağlantının MTU'su)  çoğu zaman bu, öznitelik sistemi kullanılarak yapılır.
  - "Yürütme (Execution)": Simülasyon tesisleri olaylar üretir, kullanıcı tarafından talep edilen veriler günlüğe kaydedilir.
  - "Performans analizi (Performance analysis)": Simülasyon tamamlandıktan sonra veriler zaman damgalı olay izi olarak kullanılabilir. Bu veriler daha sonra R gibi araçlarla istatistiksel olarak analiz edilerek sonuçlar çıkarılabilir.
  - "Grafiksel Görselleştirme (Graphical Visualization)": Bir simülasyonda toplanan ham veya işlenmiş veriler Gnuplot, matplotlib veya XGRAPH gibi araçlar kullanılarak grafik haline getirilebilir.