# TR-069
TR-069 (Teknik Rapor 069 - Technical Report 069) CPE WAN Management Protocol (CWMP - Müşteri Tarafı Cihazı Geniş Alan Ağı Yönetim Protokolü) 'ü açıklayan DSL Forum (sonradan adı Broadband Forum oldu) tarafından yayınlanmış teknik raporun kısa adıdır. Bu rapor son kullanıcı cihazlarının uzaktan yönetimini sağlayan bir uygulama katmanı protokolünü anlatır. Çift yönlü SOAP/HTTP tabanlı bir protokoldür ve CPE ile Auto Configuration Servers (ACS) arasındaki iltişimi anlatır. Protokol halen sayıları artmakta olan son kullanıcı internet erişim cihazlarını hedef edinmiştir. Bunlar yönlendirici, ağ anahtarı, modem, set-top box cihazları v.b. dir. TR-069 standardı bu türden cihazların ACS'ler aracılığıyla otomatik olarak ayarlarının yapılması amacıyla geliştirilmiştir. Bu teknik rapor Broadband Forum tarafından geliştirilir ve yayınlanır. İlk TR-069 standardı Mayıs 2004'te yayınlanmıştır. 2006, 2007, 2010 ve Temmuz 2011'de gelen eklerle 1.3 nolu sürüme yükseltilmiştir.
Home Gateway Initiative (HGI), Digital Video Broadcasting (DVB) ve WiMAX Forum gibi diğer forumlar CWMP'yi ev ağ cihazları ve terminallerinin (örneğin DVB IPTV set-top box'lar) uzaktan yönetimi için kullanılan bir protokol olarak açıklamaktadır. TR-069 özelliklerinin ev ağ cihazlarına eklenmesi gün geçtikçe popüler olmaktadır.


## ACS ile CPE arasındaki iletişim.
### Taşıma detayları.
CWMP metin tabanlı bir protokoldür. CPE ile ACS arasında gönderilen istekler HTTP (çoğunlukla HTTPS) üzerinden gönderilir. Burada CPE HTTP iletişiminin istemcisi, ACS sunucusu olarak davranır. Burada provizyon (ayar yapma) için açılan HTTP oturumlarının kontrolü CPE'nin elindedir.


### Provizyonlama Oturumu.
Bütün iletişim ve işlemler provizyonlama oturumları kapsamında yapılır. Oturum her zaman cihaz tarafından başlatılır ve ilk iletilen ileti "Inform"'dur. Bu iletinin alındığına dair onay mesajı sunucudan "InformResponse" olarak gönderilir. Bu oturum başlatma aşamasının sonudur. Sonra gelen 2 aşamanın sırası "holdRequest" bayrağının değerine bağlıdır. Eğer bu değer false ise, başlatma aşamasının ardından cihazın istekleri iletilir, tersi durumda önce ACS'in istekleri iletilir. Şimdi holdRequest değerinin false olması durumunda gerçekleştirilecek iletişimi açıklayalım:
Başlatma aşamasından sonraki ikinci aşamada istekler cihazdan ACS'e iletilir. Protokol cihazın ACS üzerinde çağırabileceği birden fazla metot tanımlasa da, genelde bir tanesi kullanılır: TransferComplete. Bu aşama ACS'e boş bir HTTP isteği gönderilmesi ile sonlandırılır.
Üçüncü aşamada CWMP açısından roller değiştirilir. Cihazın yaptığı isteğin cevabı olarak ACS'den cihaza gönderilen HTTP-cevabı, ACS'in cihazdan isteklerini bildiren bir CWMP-isteği içerir. Bunun devamında cihaz ACS'e, az önce gelen CWMP-isteğinin cevabını, bir HTTP-isteği içinde gönderecektir. Eğer birden fazla istek varsa bunlar teker teker gönderilir. Bu aşama (ve tabi bütün provizyonlama oturumu) boş bir HTTP-cevabının iletilmesiyle son bulur. Bu bekleyen başka bir istek olmadığını belirtir.


#### Güvenlik ve kimlik doğrulama.
Önemli veriler (kullanıcı adı/şifre gibi) CPE'ye TR-069 ile gönderildiği için, güvenli bir iletişim kanalı açmak ve ACS'i kimlik doğrulamaya tabi tutmak, bu protokolün temel özeliiği olmalıdır. Güvenli iletişim ve ACS'in kimliğini doğrulama işlemi HTTPS kullanılarak ve ACS sertifikasının doğrulanmasıyla kolayca sağlanabilir. CPE'nin kimlik doğrulaması ise daha zordur. Cihazın kimliği HTTP seviyesinde paylaşımlı bir şifreye dayanılarak doğrulanır. Her provizyonlama oturumumda şifreler hakkında CPE ve ACS arasında karşılıklı bir anlaşma yapılır (negotiate). Cihaz ACS ile ilk defa iletişime geçtiğinde (ya da fabrika ayarlarına geri döndükten sonra) ön tanımlı şifreler kullanılır. Büyük ağlarda her cihazın benzersiz bilgilere sahip olmasını sağlamak tedarikçinin görevidir. Bu bilgilerin listesi cihazlarla birlikte verilir ve güvenliği sağlanır.


### Bağlantı İsteği.
Oturumun başlatılması ve kontrolü cihazım sorumluluğunda olduğu için, ACS'in de bir şekilde cihazdan oturum başlatma için istek gönderebilmesi gerekmektedir. Bağlantı isteği mekanızması da HTTP'ye dayanmaktadır. Bu durumda CPE, HTTP sunucusu rolündedir. ACS, üzerinde anlaşılan URL'i ziyaret edip, HTTP kimlik doğrulaması gerçekleştirerek cihazdan bağlantı talep eder. CPE'lerin ACS'lere karşı DDoS saldırılarında kullanılmalarını önlemek üzere, CPE ve ACS arasında paylaşılan bir şifre üzerinde de daha önceden anlaşılmış olmalıdır. Cihaz tarafından onay gönderildikten sonra provizyonlama oturumu en geç 30 saniye içinde başlamalıdır.


### NAT üzerinden bağlantı isteği.
CWMP, herhangi bir NAT ardındaki cihazlara (örneğin IP-Telefon'lar) erişim için de bir mekanizma tanımlar. Bu mekanizma STUN ve UDP NAT dolaşımına dayalıdır. TR-111 belgesinde açıklanmıştır.


## Veri modeli.
Ayarların birçoğu, cihaz parametrelerini alıp değerlerini güncellemekle yapılır. Bunlar güzel biçimde tanımlanmıştır ve genelde bütün cihaz modelleri ve üreticileri arasında ortak olan hiyerarşik bir yapıdadır. Broadband Forum bu veri model standartlarını iki biçimde yayınlar: Her bir veri modelinin detaylı özellikleri ve bunların sürümleri arasındaki değişimleri gösteren XML dosyaları ve daha insanca anlaşılır biçimde olan PDF dosyaları. Desteklenen standartlar ve ekleri cihaz veri modelinde açıkça belirtilmelidir. Bu bilgi ya "Device.DeviceSummary" alanında ya da "InternetGatewayDevice.DeviceSummary" alanında olmalıdır. Bu alanlar Device:1.0 ve InternetGatewayDevice:1.1 sürümlerinden itibaren zorunludur. Eğer alan bulunamazsa InternetGatewayDevice:1.0 'ın kastedildiği varsayılır. Device:1.4 ve InternetGatewayDevice:1.6'dan itibaren belgeye desteklenen standart özellik için yeni bir alan ("<RO>.SupportedDatamodel") eklenmiştir.
Model'in kökü üreticinin seçimine bağlı olarak ya Device ya da InternetGatewayDevice'tır. Veri yapısının herhangi bir seviyesinde nesneler ya da parametreler (ya da dizi örnekleri) bulunabilir. Anahtarlar, nesnelerin adları ve parametreler birleştirilerek oluşturulur. Sonra bu değerlerin arasına ayraç olarak '.' (nokta) konulur. Örneğin: "InternetGatewayDevice.Time.NTPServer1"
Her bir parametre yazılabilir ve yazılamaz olarak tanımlanmıştır. Bu ayar cihaz tarafından "GetParameterNamesResponse" iletisi içinde rapor edilir. Cihaz sadece-okunabilir olarak işaretli parametrelerden hiçbirinin değerinin değiştirilmesine izin vermemelidir. Veri modeli raporu ve ekleri bu parametrelerin gerekli olup olmadığını açıkça belirtir.
Parametrelerin alabileceği değerler, tipleri ve anlamları da hassas bir şekilde bu standart tarafından tanımlanmıştır.


### Diziler.
Veri modelinin bazı kısımları altağacın birden fazla kopyasının bulunmasını gerektirir. Buna en iyi örnekler açıklama tablolarıdır: Örn, Port Forwarding Tabloları. Dizi tipindeki bir nesne yalnızca kendi çocukları olan örnekleri (tam sayı -integer- tipinde verilerle gösterilen) olabilir. Genellikle dizi ile aynı seviyede, halihazırda var olan örneklerin sayısını gösteren bir parametre bulunur.
Temsil edilen verinin tipine göre, diziler yazılabilir (dinamik olarak çocuk ekleyip çıkarılmasına izin veren) ya da salt okunur olabilir. Örneğin dizi gömülü (built-in) bir anahtar (switch)'daki 4 portu temsil ediyorsa, bu portlara veri modelinden ekleme ve çıkartma yapılamamalıdır. Diziye bir nesne daha eklenirse, bu nesneye tam sayı tipinde bir kimlik numarası atanır. Kimlik numaraları atandıktan sonra cihazın fabrika ayarlarına geri döndürülmesi veya bir ayar dosyasının yüklenmesi dışında cihazın yaşam süresi boyunca değiştirilemez.


### Sık karşılaşılan sorunlar.
Gerekli parametreler ve bunların özellikleri standart tarafından detaylı bir şekilde tanımlanmış olsa da, cihazların çoğu standardın kurallarına tamamıyla uymamaktadır. Sık karşılaşılaşan sorunlardan bazıları şunlardır: Eksik parametreler, atlanmış örnek (instance) numaraları (tek örnekli-instance diziler için), yanlış parametre erişim seviyesi ve parametrenin değerinin yanlış anlaşılması. Örneğin erişim noktası cihazının desteklediği standardı belirten alanın değeri 'g' ise bu 802.11b ve 802.11g'yi desteklediği anlamına gelir. Eğer değer 'g-only' ise cihaz sadece 802.11g'yi destekliyor demektir. 'bg' veya 'b/g' gibi değerler Broadband Forum standartlarına göre geçersiz olsa da, bu değerler cihazların veri modellerinde sıkça görülmektedir.


## Sık yapılan işlemler.
Tüm provizyonlama işlemi, bir miktar basit işlemin üstüne inşa edilmiştir. Her bir istek atomik yapıdadır, transaction desteği yoktur. Eğer cihaz isteği yerine getiremezse uygun bir hata iletisi ACS'e dönülmelidir. Cihaz asla provizyonlama oturumunu bölmemelidir.


## TR-069 ile yapılabilecek yüksek seviye işlemler.
  - Servis etkinleştirme ve ayarlarını değiştirme.
  - Sıfır ayar - ya da tek tuşla ayar hizmeti verebilmek için servisin ilk ayarlarının yapılması.
  - Servisin tekrar kurulması (cihaz fabrika ayarlarına döndükten sonra)
  - Müşteriye Uzaktan Destek
  - Cihazın durumunun ve fonksiyonelliğinin teyit edilmesi 
  - Elle tekrar ayarlama
  - Firmware ve Ayar Yönetimi
  - Firmware güncelleme, sürüm düşürme
  - Ayar yedekleme, geri getirme
  - İnceleme ve İzleme
  - Başarım (TR-143) ve bağlantı testleri
  - Parametre değerini öğrenme
  - Günlük dosyası elde etme