STM32F103C8'i sevdiğim için bu çiple ethernet çalışması yapmak istiyorum.
F103C8 kartıma minik bir kart bağlayayım onun da ethernet portu olsun, ethernet kablosunun bir ucunu PC'ye diğer ucunu da bu karta takayım ve kod yazayım istiyorum.
Kartın TCP/IP ile falan alakası olmasın bana sadece ethernet üzerinden bağlantı kursun.
Yeni bir MCU önerisi istemiyorum. Bana ethernet için bir çip yada daha iyisi minik bir kart önerebilir misiniz?
(http://www.dimdim.gr/wp-content/uploads/2015/04/ENC28J60-Ethernet-Module11.jpg)
ENC28J60 piyasada kolaylıkla bulunuyor bence bu kart üzerinden gitmekte fayda var.
http://urun.gittigidiyor.com/ev-elektronigi/mini-enc28j60-ethernet-lan-ag-modulu-stm32-234842435?gclid=CKz75f3fls8CFVQW0wodyRcM3Q&ggmktg=PaidSearch (http://urun.gittigidiyor.com/ev-elektronigi/mini-enc28j60-ethernet-lan-ag-modulu-stm32-234842435?gclid=CKz75f3fls8CFVQW0wodyRcM3Q&ggmktg=PaidSearch)*PLA*232249527*22324001847*58375852887*pla**pla-79002064407&mpch=ads&ggmktg1=PaidSearch*******&scxid=14489-145818-2357-0
Süpermiş fiyatı da ucuz.
Şimdi bu kartı işlemcime bağlarsam kodları da yazarsam işlemcim internete bağlanacak öylemi?
ESP-01 kullanın. Uart üzerinden halledersiniz.
esp8266 ile kablosuz bağlasan olmaz mı?
Neyse ENC28J60 siparişi verdim.
(http://mcdn01.gittigidiyor.net/23484/tn50/234842435_tn50_0.jpg?1474127261)
http://ww1.microchip.com/downloads/en/devicedoc/39662a.pdf (http://ww1.microchip.com/downloads/en/devicedoc/39662a.pdf)
PC'yi modeme bağlamak için kullandığım bir kablom var. Bu kabloyu PC ile bu kit arasında kullanabilirmiyim? Yoksa croslu bir kabloya mı ihtiyacım olacak?
Çhipin dokümanına göre STM32 tarafına kod yazabilirim. PC tarafında hiç kod yazmadan STM tarafına test amaçlı içeriği bilinen datalar göndermek istersem işletim sisteminde hazırda utility vs varmı?
Test amaçlı olarak PC tarafına da kod yazmam gerekirse Delphi için ne yapabilirim? Komponent gerekecekse ne olacak?
Siparişi iptal edin. ESP-01 alın.
Neyse aynı satıcıdan bir kaç kalem daha ürün sipariş etmiştim.
ESP01 yada ENC28J60 için MCU tarafında yazacağım kodlarda çok fark olacakmı?
Birisi mcuda uart haberleşmesi, diğeri mcuda ethernet stack yazılımı çalıştırıp spi üzerinden haberleşme yapmak demek.
Delphi Indy yüklü geliyor. Tabi siz halen Delphi 7 kullanıyorsanız yüklemeniz gerekebilir. Winsock kullanırım diyorsanız tüm versiyonlarla birlikte geliyor. Ekli değilse sadece ekleyeceksiniz.
Alıntı yapılan: hgs - 17 Eylül 2016, 20:26:10
Birisi mcuda uart haberleşmesi, diğeri mcuda ethernet stack yazılımı çalıştırıp spi üzerinden haberleşme yapmak demek.
ENC28J60 dokümanına baktım da Ethernet hakkında çok şey bilmek gerekiyor. Kafam bir hayli karıştı.
ESP01 siparişini verirsem tamam Uart haberleşmesi yapacağım peki ethernet hakkında gene çok şey bilmem gerekecek mi?
Öte yandan Hoop internete bağlandın gibi çok hazır bir şeyler de istemiyorum.
Alıntı yapılan: z - 17 Eylül 2016, 20:12:21
Neyse aynı satıcıdan bir kaç kalem daha ürün sipariş etmiştim.
ESP01 yada ENC28J60 için MCU tarafında yazacağım kodlarda çok fark olacakmı?
ESP8266 kullanırsanız içinde size lazım herşey olduğu için kolayca basit komutlarla UART üzerinden işinizi görecektir. Çünkü modül içerisinde 80mhz MCU üzerinde koşan RTOS, TCP/IP Stack ve buna entegre WIFI hazır halde geliyor. Size uygulama geliştirmek kalıyor.
Diğer taraftan ENC28J60 kullanırsanız;
1- SPI ethernet interface driver yazmanız;
2- Bir TCP/IP stack kullanarak bu driver ile entegre etmeniz;
3- Bu TCP/IP stacki kullanarak uygulama geliştirmeniz;
gerekecek.
Eğer oldu bittiye gelmesin derseniz ESP8266' nın içerisine uygulama yazın.
Peki ENC28J60 ile STM32F103C8 kullanırsam aşağıda bahsettiğiniz amaçlar için
1- SPI ethernet interface driver yazmanız;
2- Bir TCP/IP stack kullanarak bu driver ile entegre etmeniz;
3- Bu TCP/IP stacki kullanarak uygulama geliştirmeniz;
kodları da yazarsam işlemcinin benim asıl işlerimle ilgilenecek kadar zamanı olacakmı? Elimde hala kod yazmak için flashda ve ramda yeterince alan kalacakmı?
Alıntı yapılan: z - 17 Eylül 2016, 20:54:38
Peki ENC28J60 ile STM32F103C8 kullanırsam aşağıda bahsettiğiniz amaçlar için
1- SPI ethernet interface driver yazmanız;
2- Bir TCP/IP stack kullanarak bu driver ile entegre etmeniz;
3- Bu TCP/IP stacki kullanarak uygulama geliştirmeniz;
kodları da yazarsam işlemcinin benim asıl işlerimle ilgilenecek kadar zamanı olacakmı? Elimde hala kod yazmak için flashda ve ramda yeterince alan kalacakmı?
72Mhz 20Kb RAM ve 128KBFlash olduguna gore butun bunlari vede SPI, Serial Port, ADC, GPIO kullandiginiz varsayarak, CPU Load %15-20 arasinda olur, bir tek TCP/IP stack eger profesyonel degil ise RAMda belki biraz sikinti olabilir.
Tabii siz bunlari ASM kullanarak dahada optimize ederek dahada hizli calistirabilirsiniz.
MCU' nuzun iş yükü nedir bilmiyorum. Ancak bu maddeler stack kullanımınıza göre %80 e kadar işlem yükü getirme potansiyeline sahip. Tabi bunu işlemci zamanını ideal bir şekilde yönettiğinizi farzederek söylüyorum.
Sizin kullandığınız MCU ile basit bir TCP/UDP uygulaması yaparsanız saydığım 3 madde için RAM olarak min 4-6K, Flash içinde ortalama 10-20K bir alan yetecektir.
Bu modüllerle iletişim kurmak için terminal tarzı bir yazılım var mı? Hani rs232 için Uart terminal var, peki bu işler içinde bir terminal var mı alınan ya da gönderilen paketi görebileceğimiz bir terminal yazılım.
Enc28j60 pc portuna direk bağlanacaksa cross kablo kullanmanız gerekecek. Eğer hub üzerinden bağlayacaksanız normal ethernet kablosu yeterlidir. Ben enc ile modbus tcp-ip uygulaması yazmıştım ve tek sevmediğim yanı dahili bir osilatörünün olmamasıydı. Harici 25mhz osilatör bağlamak zorundayız bu chipe.
Bunun dışında sıfırdan bu chipe kod yazarsanız gerçekten etkilersiniz beni, ben driver kullanarak hazırlamıştım paketleri ve çok başarılı bir iş yapmama rağmen yaptığım şey hakkında bilmediğim bir ton şey vardı.
Alıntı yapılan: ido2323 - 17 Eylül 2016, 21:09:20
Bu modüllerle iletişim kurmak için terminal tarzı bir yazılım var mı? Hani rs232 için Uart terminal var, peki bu işler içinde bir terminal var mı alınan ya da gönderilen paketi görebileceğimiz bir terminal yazılım.
Böyle bir şey var. http://www.hw-group.com/products/hercules/index_en.html (http://www.hw-group.com/products/hercules/index_en.html)
Şu anda benim kafamı karıştıran Enc28j60 çipinin kendisi. Bu çipi kullanmadan önce ethernet hakkında bayağı bir bilgi gerekiyor diye anladım.
Bu çip için sadece ethernet yazılımı yazmış olsaydınız (daha ortada TCP/IP yazılımları vs yok) yazdığınız kodları test etmek için ne yapardınız?
--------------
@gerbay ne demek istediğini anlıyorum.
Vakti zamanında USB ile ilk kez çalışırken National firmasının USBN9604 USB Node Controller adındaki çipiyle çalışmıştım. Bu çip de işlemciye dışarıdan bağlanıyordu SPI/paralel port bağlantı seçenekleri vardı. İşlemcinin çiple konuşabilmesi için bir ton fonksiyon yazmak gerekmişti. Aynı durum ENC28J60 için de geçerli. Elbetteki ethernet modülü MCU içinde olursa bir sürü koddan kurtulacağız ve doğrudan registerlere erişeceğiz.
Fakat basit bir internet denemesi ardından zaten hevesim geçecek. O yüzden bahsettiğin çözümler bana pek lazım olmayacak.
Alıntı yapılan: frederic - 17 Eylül 2016, 21:35:43
Ben enc ile modbus tcp-ip uygulaması yazmıştım ve tek sevmediğim yanı dahili bir osilatörünün olmamasıydı.
hocam Modbus TCP-IP için faydalandığınız kaynakları yazabilir misiniz ? ben de ilgileniyorum bu protokolle
teşekkür
Çip ile MCU arasındaki SPI yazılımlarını yazmak sorun değil. Sonuçta sıradan bir SPI haberleşmesi yapıp çipin registerlerini okuyup yazabileceğim.
Sorunum ENC28J60'ı yapılandırmak olacak. Bunu tırmalayarak aşarım fakat çipin ethernet portuna sürekli bir paket gelmesi lazım ki en azından dene yanıl flagları vs kontrol edebileyim.
PC'den gelen ethernet kablosununu ENC28J60 kitine bağladığımda USB iletişiminde olduğu gibi kitime sorgular gelirmi? Yoksa hiç kimse oralı olmazmı?
Kitime periyodik olarak içeriği bilinen paket gelmesini nasıl sağlarım?
Hocam ethernet protokolünde bir sürü paket tipi var. Paketleri çarpıştırmadan okuman gerekir ENC ile. Eğer C kullanabiliyorsanız elimde ENC'ye ait driverlar bulunmakta. Özellikle DHCP protokolünü yazmanız lazım IP almak için. STM32F103 ile ENC kolaylıkla kullanılabiliyor. Elimden geldiğince yardımcı olmaya çalışabilirim.
ENC'de gelen paketler ENC'nin ilgili register ve ramlerine doluyor, siz SPI ile periyodik olarak sende bişe var mı sende bişe var mı diye sormanız gerekiyor. Eğer sormak istemiyorsanız Int pininide bağlayabilirsiniz tabiki :)
Şu anda ihtiyacım olan şey PC'deki bir yazılımla ethernet portuna bir paket yollamak.
Paketi PCde kendim byte byte oluşturayım enter dediğimde bu paket ethernet portundan çıksın.
Eğer oluyorsa PC ethernet portuna gelen her paketi yakalasın içeriğini bana byte byte göstersin.
Böyle bir yazılım bulabilirsem kod yazma işi çok hızlanır.
Böyle bir yapı için öneriniz varmı?
https://packetsender.com/
Ethernet paketlerini izlemek için Wireshark isimli bir program kullanmıştım.
z hocam
google chrome'da sizin uC kartının IP adresini ve port nosunu girip entere basın
işte sizin uC kartına gönderilen bir TCP/IP paketi
MrDark hocanın dediği gibi wireshark ile de izleyebilirsiniz
örnek : 192.168.1.10:1024
2 adet ENC çipi karşılıklı konuşturmak en iyisi galiba. Her iki tarafa da kendin kod yazınca debug işleri vs çok daha kolay olur.
Bu çipi sıfır kütüphane kullanımı ile internete sokacağım hiç merak etmeyin.
İki ENC çipini karşılıklı bağlayıp kod yazayım fikrindeki mantığı yanlış anlamışsınız.
Bu sadece debug ortamı yaratma amaçlı bir fikirdi. Böylece çipi en temel haliyle kullanmaya çalıştığımda paket yollayabiliyormuyum yolluyorsam karşıdaki paketimi alıyormu, MAC adreslerini değiştirince ne oluyor vs vs durumları için bir çalışma ortamı hazırlamaktı.
Eğer bunu yapmazsam daha önce sorduğum PC yazılımları vs arama yoluna gitmem gerekiyor.
-----------------------
@mufitsozen hocam, gelin çocuklar ben emekliyim sizlere hayrım dokunsun size bu konuyu dilim döndüğünce anlatayım demenizi beklerdim.
Fiziksel layerdan paket yollayıp alabildiğinde bu paketleri enclerin yollamış olması hiç bir önem arzetmez.
Çok farkeder. Bu aşamayı geçip üzerine katman yazabilmem için öncelikle fiziksel layeri ayağa kaldırmam gerekiyor.
2 tane pcniz varsa pc programı yazarak ethernet haberleşmesi yapabilirsiniz. Embeded olması sadece ethernet stack yazılımını sizin yönetmenizi gerektirir.
Benim amacım ENC28J60 çipini internete sokacak kodları yazmak.
Ethernet haberleşmesi embeded seviyede 4 şekilde yapılabiliyor.
1- MAC ve Phy si olan mcular ile (66J60 gibi)
2- MAC i olan Mcu + phy çipi ile
3- MCU + Mac ve physi olan (ENCxx) gibi çiplerle SPI haberleşmesi ile. Burada ethernet ile ilgili bir sürü ayarın yapılması gerek.
4- MCU + SOC bir çip (ESP) ile uart üzerinden haberleşme ile. Genel olarak çok daha az ayar ile hızlıca nete çıkmanızı sağlar.
ENC ile bu işi elbette yapabilirsiniz. İşlerin gittiği yön 4. aşamayıda aşacak. ESPnin yenileri çıkmak üzere. O zaman mcunuzdaki uart donanımından farklı olmayan ethernet donanımı olarak algılanacak bu haberleşme sistemi. IOT nin götüreceği noktada, sizin şu andaki çabalarınız sadece bu işin mekaniğinin nasıl olduğunu bilen bir z ortaya çıkaracak. Genel olarak önemli bir etki yaratmayacak.
Eşeğin aklına karpuz kabuğu geldi bir kere. Artık Z bu işi yapmazsa uyuyamaz.
İnat önemli bir haslettir. Başarı için çok gerekli, fazlası elbette zarar.
Çalışmanızda başarılar...
Alıntı yapılan: z - 18 Eylül 2016, 13:31:35
@mufitsozen hocam, gelin çocuklar ben emekliyim sizlere hayrım dokunsun size bu konuyu dilim döndüğünce anlatayım demenizi beklerdim.
Buda bana buruk bir animi hatirlatti, bahsetmeden edemiyecegim,
Ali Sahiner diye bir sinif arkadasim var(di) lisede, cok duzgun, caliskan ve akilli bir arkadasti. Sonradan Bogazici universitesi bilgisayar bolumunde hocayken 2010 yilinda Hakkin rahmetine kavustu.
Lise 2 edebiyat dersinde hasta oldugu icin derse gelemeyen hocamizin yerine gelen bir yabanci gecici ogretmen derste "Chateaubriand (satobiryan okunur) en onemli eserleri nedir?" diye sordu,
Alide oturdugu yerden "biryan satosu!" diye cevap verdi.
Sinif kahkahadan kiriliyor,
Hoca cok bozuldu, kim soyledi onu dedi. Ali ben dedim diye cevap verince
"Hocada senden hic ummazdim Ali" dedi.
Ali yine cevap verdi "Ummadigin tas bas yarar hocam, atalar sozu!"
Derse ara vermek zorunda kaldik! :)
Onuda rahmetle anarak, ve senin yaptiklarin ve karakterinide takdir ettigimi ozellikle belirterek bende diyorumki bazi insanlar yasi ilerleyince hircin huysuz, gecimsiz bir ihtiyara donusur. Demekki bende oyleymisim, Ummadigin tas bas yarar sevgili z! :P
mesaj birleştirme:: 18 Eylül 2016, 14:27:46
Alıntı yapılan: z - 18 Eylül 2016, 13:31:35
@mufitsozen .... size bu konuyu dilim döndüğünce anlatayım demenizi beklerdim.
bide z hocam bu konuda cok da tevazu gosteremiyecegim. dilim dondugunce ne demek, bu konuda en az 3 tane kitap yazarim. Fakat (seni ve senin gibileri tenzih ederek) gunumuzdeki gencler ozel olarak picprojedeki arkadaslar "her şeyin fiyatını biliyorlar, ama hiçbir şeyin değerini bilmiyorlar!".
Herkesin ilk (vede tek) sorusu, ne isime yarar, cebime kac lira girer. Firsatciligin tavan yaptigi bir toplumda ve zamandayiz, Allah sonumuzu hayreylesin.
sevgili
@gerbay aciklama cok uzun olmus sunu 3 cumle ile kisaca yapsan daha iyi olurdu, bunu kimse okumaz simdi,
Bide butun gerekli porogramlari yazip, derleyip deneyip ornekli paylasarak daha faydali olabilirdin.
Seni teneffus ederim! (bu bir saka, aslinda "sana teessuf ederim" olacak, ama komik olsun diye benzer baska bir bir kelimeyi ne kadar cahil oldugumu gostermek amaci ile yazdim :) )
mesaj birleştirme:: 18 Eylül 2016, 15:00:46
bide ingilizce bilen var, bilmeyen var, Bi daha sadece turkce yaz!
mesaj birleştirme:: 18 Eylül 2016, 15:01:31
youtube'a uygulamali bir video hazirlayip koysan daha cok ise yarar!
Gerbay sağolasın. İnternetten de ufak tefek birşeylere bakınıyorum ve artık en azından çipin dokümanında geçen terimler için bu da neymiş demiyorum.
Kitim muhtemelen salı günü elimde olur. Henüz kod falan yazmaya başlamadım.
------------------
@Müfitsozen hocam
Hocalık yap derken ilgi alanına girdiğini bildiğim için Ahmet Mehmet demedim özellikle seni işaret etmiştim.
Toprağa mı götüreceksin bildiklerini? Bırak millet vereceğin hazır bilgileri ne yaparsa yapsın.
Yerinde olsam uzmanı olduğum konularda kitap çıkartırdım. Kitabı akademik ağızla değil de ilk okul bebesinin bile anlayacağı tarzda kaleme alırdım.
İçlerinden bir kaçı duacı olacaktır.
Hani şu an aktif iş yapıyor ya da yapacak olsan da bilgileri rakiplere hazır lokma adına saklasan anlarım.
Ama şu anki pozisyonunda anlayamıyorum.
Rahmetli babama da kaynak yapma tekniği adında diye güzel bir kitap yaz demekten dilimde tüy bitmişti.
Ne oldu arkasında eser bırakmadan gitti. Halbuki birileri faydalanabilirdi.
Allah gecinden versin. Ama sen yaz.
Elmalı kadar sevap kazanırsın.
sayin
@z @gerbay sana gicik galiba bu kadar uzun anlatim olurmu yaa!
ben sana daha kolay bir yol ogreteyim:
(http://dorianblog.info/wp-content/uploads/RJ45-plug-loopback.jpg)
yukardaki bir ethernet kablosu yap. Buna loopback diyoruz.
baglantilar su sekilde olacak:
(http://docs.oracle.com/cd/E19081-01/vts61/819-2373-10/figures/AppendixA-20.gif)
L2 icin ethernet yapisini
@gerbay yazip sana yollayacak(mistir baa kuslar oyle soyledi) boylece ne yollarsan sana geri gelir. Test etmek icin bunu kullan derim. Daha kolay olur.
mesaj birleştirme:: 18 Eylül 2016, 15:17:06
Haaa birde unutmadan arping diye bir L2 MAC ile ping eden program var, network layera kadar gitmene arp tablosu vb ICMP islerini yapmana gerek olmadan "ping" eden. Dogrudan bir PCye baglanip onun ile senin ENC chipini L2de ping edebilirsin. Onuda biraz arastir derim.
Bu iki metod sana chipini ve yazacagin yazilim icin yeterli olur daha derin sulara gitmene gerek yok.
Zaten
@gerbay'da dayanamaz sana arastirip, ornekle yapip burada paylasir. eminim
mesaj birleştirme:: 18 Eylül 2016, 15:19:55
@z sakin resimdeki loopback fisinde 2 cift kablo var senin verdiginde uc cift baglantisi var demeden once biraz arastir derim :) (tuzak soru yapilmis mi acaba?, niye resimle cizim farkli? dusunen byinler merak eder....mi acaba?)
Ansiklopedik de olsa benim gibi acemiler için temel bilgiler
Bilgisayarlar arasında yerel bir ağ oluşturmaya yarayan yöntemlerden bir tanesi Ethernetdir.
Ethernet donanımı barındıran herhangi bir MCU/PC vs üzerindeki firmeware yada işletim sisteminden vs bağımsız olarak yerel ağa katılabilir.
Aynı ağa en son işletim sistemine sahip son model bir PC de, çok sıradan bir MCU da eşit haklarla girebilir.
Ethernet donanımına sahip bu birimlere Node denir. Tüm "Node"lar eşit haklara sahiptir.
Ethernet ortamında Her bir "Node"un daha doğrusu adresi için kullanılan benzersiz bir numarası vardır. Buna MAC adresi diyoruz.
Ethernet ortamında veriler paketlere bölünür.
Örneğin 10KB verimiz varsa bu küçük paketlere ayrılır. Bu sayede veri giderken bozulsa bile tekrardan 10KB veri istenmez/gönderilmez
sadece bozulmuş paket (parça) istenir/gönderilir.
Bir paket, alıcının MAC adresi, gönderenin MAC adresi, gönderilecek veriler ve CRC kodu olmak üzere 4 bileşenden oluşur.
MAC adresi 48 bitlik bir veridir.
Gelen paketteki MAC adresi Ethernet çipinde tanımlı adres ile uyuşuyorsa çip gelen veriyi alır, uyuşmuyorsa veriyi almaz.
Bir ağ içindeki bazı "Node" larla oluşturulan bir grubun aynı veriyi alması istenirse Ethernet çipinde bu Multicast adres tanımlanabilir.
Bu durumda gelen veriler Multicast adrese sahip tüm çipler tarafından alınır.
Eğer tüm "Node"lara ortak bir yayın yapılacaksa Broadcasting bu durumda paketteki hedef adresin tüm bitleri 1 yapılır.
Böylece tüm "Node"lar gelen veriyi yakalar.
MAC adresi okuması kolay olması için hex olarak gösterilir. (01 C4 F6 E8 7F 3A gibi)
Bir "Node" kendine ethernet kablosu bağlımı değilmi anlayabilir. Eğer canlı bir kablo bağlantısı (diğer ucuna da bir Node bağlı) var ise Carrier Sense durumu var demektir.
Aynı kabloyu kullanan sistemlerde birden fazla cihaz aynı anda gönderme yapmaya kalkarsa Multiple Access durumu oluşur.
Bu durumda gönderici susma yoluna gider. Buna Collision Detection denir.
ENC28J60 çipi tüm bu durumları bize bildirebilir. http://ww1.microchip.com/downloads/en/devicedoc/39662a.pdf (http://ww1.microchip.com/downloads/en/devicedoc/39662a.pdf)
Nedense aklıma şu şarkı geldi.
Vermiycem vermiycem kuruyup gitsede vermiycem, benim değilmi vermiycem, hımm hımmm, ımmm ımm ...
Alıntı yapılan: z - 18 Eylül 2016, 15:23:53
Aynı kabloyu kullanan sistemlerde birden fazla cihaz aynı anda gönderme yapmaya kalkarsa Multiple Access durumu oluşur.
Bu durumda gönderici susma yoluna gider. Buna Collision Detection denir.
Hocam "collision domain" kavrami en temel kavramlardan biridir AMMA "collision detection" ne yaaa? hangi devirdeyiz. o dedigin coax vb fiziksel baglantilarda olur (du mesela cilali tas devrinde 1980lerde filan). Cat5/6 vb ile hub yada switche baglanan durumlarda collision filan olmaz. Kafa karistirmayalim.
Hocam bende orda aynı kabloyu kullanan diye vurguladığımı sanıyordum.
ENC28J60 çipinde collision dedect özelliği var.
@z hocam simulasyon icin "packet tracer" programini oneririm. İsin mantigini kavramaniza faydasi olacaktir.
Alıntı yapılan: gerbay - 18 Eylül 2016, 15:26:34
Ben hoca denince üstüme alınıp atlamıştım. Meğer müfit abi kastediliyormuş, daha da gelmem davos a. Ben misafirliğe gidiyom
Vay akil karistirarak benimle
@gerbay'i tokusturarak aramiza acanlari teneffus ederim.
demeki
https://www.youtube.com/watch?v=liHD7XvONwY (https://www.youtube.com/watch?v=liHD7XvONwY)
mesaj birleştirme:: 18 Eylül 2016, 15:49:15
Alıntı yapılan: z - 18 Eylül 2016, 15:46:36
Hocam bende orda aynı kabloyu kullanandiye vurguladığımı sanıyordum.
cat5 cat6 filanda ayni kabloyu istesende kullanamzsin. Coax kullanan ekipman vs kullanmak istersen Allah yardimcin olsun!
Bir dakika şimdi, bir switche bağlı cihaz ile switch arasında hiç collusion durumu oluşamaz mıi?
Alıntı yapılan: z - 18 Eylül 2016, 15:56:14
Bir dakika şimdi, bir switche bağlı cihaz ile switch arasında hiç collusion durumu oluşamaz mıi?
Hocam yazmsı zor geldi. ama nette bulduğum paragraf benim diyeceklerimle aynı.
Alıntı YapCD (collision domain=çarpışma alanı)
CD, bir paketin çarpışma ihtimalinin olduğu alana verilen addır.
Şöyle ki, Hub üzerinde aynı anda sadece bir paket akışı olabilir, yani hub a bağlı aygıtlardan sadece bir tanesi aynı anda paket gönderimi yapabilir. Eğer birden fazla aygıt aynı anda paket gönderimi yaparsa çarpışma(collision) meydana gelir..
(Ayrıca bu nedenle hublar a half dublex çalışır diyoruz, yani hub üzerindeki bir aygıt aynı anda sadece paket alımı ya da gönderimi yapabilir, aynı anda gönderim ve alım yapamaz.)
Switch ise full-dublex yapıdadır. Aynı anda hem paket alımı hem de gönderimi switch üzerine bağlı tüm aygıtlar tarafından yapılabilir. Switch e bağlı her aygıtın kendi çarpışma alanı vardır.
Broadcast Domain(genel yayın alanı), bir genel yayın(broadcast paketinin) network üzerinde ulaşabileceği tüm alanlar anlamına gelir. Bu kavramı anlayabilmek için unicast, multicast ve broadcast adlı bölümleri incelemeni öneririm.
Bridge le ve Router lar broadcast domaini ayırırlar (Vlan da ayırır)
Özetle,
Hub üzerine bağlı tüm aygıtlar için sadece bir çarpışma alanı vardır.
Switch in her portu bir çarpışma alanıdır.
Router ve Bridge broadcast paketi geçirmez.
Umarım iyi anlatabildim..
W5100 gibi tcp ip stacki içinde çipler varken olay hem driver yazarım hem stack e nasıl gitmiş
@z hocam :).
Vakit kısıtınız olmadığından zevkli bir konu stack yazmak. Zaten layerlarda ki protokoller de belli ağır ağır yazarsınız.
Açıkcası ben de zor olduğunu düşünmüyorum. Her bir layera ait veri yerleşim kurallarını (header yapısını) internetten bulduktan sonra data bloğundan bunları okuyup okuyup gereğini yapacağız.
@z hocam belki verilmiştir ama istediginiz Ethernet pakedini oluşturmak için şu açık kaynak programı kullanabilirsiniz. Bir zamanlar fpga üzerinde udp ile haberleşmek gerekmişti, testler için bu programı ve wireshark i kullanmıştık. Ben ubuntu ile derleyip kullanmıştım, muhtemelen Windows ile de derlenir.
Ekleme : Şimdi baktım Windows için exe olarak sunmuşlar, doğrudan kullanılabilir durumda.
http://packeth.sourceforge.net/packeth/Home.html
Moto G cihazımdan Tapatalk kullanılarak gönderildi
Eve gidince verdiğiniz linklere bakacağım.
(https://pbs.twimg.com/media/B7TLp4FIIAAMqjh.jpg)
Olumsuz görüşler bana hep bu resmi anımsatır.
Bilgisayardan herhangi bir IP numarasına ping attığımızda neler oluyor?
Alıntı yapılan: z - 18 Eylül 2016, 15:56:14
Bir dakika şimdi, bir switche bağlı cihaz ile switch arasında hiç collusion durumu oluşamaz mıi?
hocam tx ayri rx ayri ne collision yav?
https://www.youtube.com/watch?v=eAP6KOeyAd4 (https://www.youtube.com/watch?v=eAP6KOeyAd4)
mesaj birleştirme:: 18 Eylül 2016, 16:59:24
Alıntı yapılan: z - 18 Eylül 2016, 16:56:53
Bilgisayardan herhangi bir IP numarasına ping attığımızda neler oluyor?
neler oluyooor neleeerr!
@mufitsozenKonu gayet iyi anlaşıldı. Hah böyle de.
Bu başlık altında dolaşmaszan iyi olur. Kendine başka bir başlık aç hocam.
@z hocam ping ICMP protokolüne bağlı olarak çalışan bir program. O yüzden benim önerim size önerilen programlardan birini kullanarak kendi sabit Ethernet paketinizi üretip çalışmak. Bilgisayar üzerinden Ethernet ile veri gönderip, mcu üzerinden RS232 ile gelen paketi geri bilgisayara gönderip bakmak daha kolay bir çözüm olur sanki.
Moto G cihazımdan Tapatalk kullanılarak gönderildi
Nihayet eve geldim ve verilen linklere göz atabiliyorum. İşyerinde iken ne video ne de resim görebiliyordum.
Mufitsozen hocamızın verdiği şarkılı türkülü youtube videoları kuru gürültüden başka bir şey değil. Cımbızla ağzından laf da almak istemiyorum.
O yüzden mufitsozen hocamı bu başlıktan afaroz ediyorum. Kalmak ister ve ortalığı bulandırmak isterse de kendi bileceği iş.
Tek başına kitap isimleri ya da al şunu oku gibisinden internetteki bazı linklerinin de verilmesini de yardım olarak görmüyorum.
Gerbay hocam güzel şeyler yazıyor ama verdiği bilgiler işi bilenlere yönelik. İçinde çok fazla teknik terimler ve kısaltmalar var. Bilene yönelik açıklamalar gibi.
Gene de kafamda az buçuk bir şeyler şekilleniyor.
Taa başında da belirttiğim gibi ben zaten bu işleri hiç bilmiyorum. "Bilmiyorsan bu moku git okuluna oku" diyenlerle de işim yok.
z hocam bu konuda anlatılmış
https://www.picproje.org/index.php/topic,45144.0.html (https://www.picproje.org/index.php/topic,45144.0.html)
hatta siz de mesaj yazmışsınız zamanında
ama UDP protokolü anlatılıyor
Hocam belki cins, ukela biriyimdir. Aslını sorarsan değilim ama karşı taraftan öyle görülüyor olabilirim.
Kusuruma bakmazsan seni eleştireyim.
Şimdi bilmeyen biri olarak soru sorduğumuzda sağolasın cevap veriyorsun ama verdiğin cevap bilmeyene değil de en azından senin ayarında bir adama veriliyor gibi.
Ne demek istediğimi anlatabildim mi bilmiyorum. Dediklerin harfi harfine doğrudur ama benim işime yaramıyor. Hani konuyu bilsem tamam diyeceğim.
Bugün bir arkadaşımla konuşurken güzel bir örnek verdi.
Doktorlara gideriz ve sorun ne doktor dediğimizde bazı doktorlar şöyle der.
(Atıyorum)
Vasküler lezyonlar nedeniyle hemopapris hormonunda zitelasyon peak yapmış.
Biz de hiç bir şey anlamadan haaaa deriz.
Ama bir başka doktor şöyle açıklar.
Damarlarınızda biraz hasar var ve bir hormon seviyesi artmış bu da kolunuzda ağrıya neden oluyor.
İlk doktor %100 doğru şey söylüyordur. Fakat 2. doktor belki biraz eksik vs açıklamıştır ama bize daha yakın daha anlaılır cevap vermiştir.
Açıkcası ben senin cevaplarını ilk doktorun ki gibi görüyorum.
Yoksa sorularımıza cevap verme gayretini takdir ediyorum.
--------------
Mufit hocama bu gün kızgınım. Aslında hep kızgınım. Sana yardımcı olmuştur ama ben forumda yaralı parmağa işediğine pek tanık olmadım.
Şu kitabı oku. Bitti. Biraz C çalış bitti.
Bence bu yardım şekli değil. Belki bizzat ikili yüzyüze görüşmelerde dili açılıyordur ama forumda ki cevapları bana çok şey ifade etmiyor.
------------
Yazılanları dikkate almıyorsun demişsin ya. Bugün yazdığın mesajı okudum bir resimi gördüm diğerini göremedim. İş yerinde yasaklamalar nedeniyle sistem engellemiş.
Zaten eksik bir resim olduğunu mesajındaki anlatımından farkettim.
Bu nedenle yazının üstüne tekrar tekrar soru sorduysam sebebi budur. (Yazılanı dikkate almamam bu mu?)
Bugün yazılanları şimdi eksiksiz görebiliyorum. Eve yeni geldim çünkü.
https://www.picproje.org/index.php/topic,65601.msg509900.html#msg509900 (https://www.picproje.org/index.php/topic,65601.msg509900.html#msg509900) burada yazdığın cevaba karşılık bir soru daha sormak istiyorum ama bu yazıma cevap vereceksen onu bekliyorum.
Keşke
@z hocadaki şevk ve azim
öğrencilerde (özellikle üniversite öğrencilerinde) ve
öğretmenlerde de olsa.
Her gün yeni doğmuş bebek gibi önüne çıkanı öğrenmeye çabalıyor.
Ben hayranlıkla izliyorum
@z hocam.
Konuylada ilgileniyorum, takipteyim, bizde bir şeyler öğreniriz bu arada.
@z hocam kızmazsan bir dokuman onerecegim, terimler frame yapisi 10/100 IEEE 802.3 icin guzel aciklanmis http://ww1.microchip.com/downloads/en/AppNotes/01120a.pdf (http://ww1.microchip.com/downloads/en/AppNotes/01120a.pdf)
Anlaşıldı mimlenmişim.
Ne güzel doküman pek çok sorumun cevabını bulabileceğim gibi.
Çipimizin UniqID si yok. Gönderen kısmına bir adres yazmamız gerekecek. Mesajından anladığım kadarıyla bu adres için eski bir network kartından okuduğumuz MAC adresini kullanacağız.
1) Kartımı modemin çıkışlarından birisine bağladığımda ilk muhabbeti modem mi açacak hey sen kimsin vs gibi? Yoksa muhabbeti ben mi başlatacağım?
2)
(http://www.zwaga.com/info/net/netwerk/plaatjes/ethernet_frame_format.gif)
WAV, BMP gibi headerı olan dosyalar açıklanırken senin anlattığın şekilde şurda şuraya kadar şu saklıdır şu adresde şu vardır vs vs der en son olarak da datalar burasıdır der.
Verdiğin resimde destination ve source adreslerden sonra 2 byte type alanı ve bunu takip eden 46..1500 byte data var.
Bu dataların formatının dokumante edilmiş olması lazım ki devamında bunları yorumlayacak kodları yazabileyim.
Bu dokümanlar detaylı şekilde nerede yayınlanıyor?
Mesela aşağıdaki dokuman hoşuma gitti. Ancak bu veriler aşağıdaki resimde üst sıralarda yer alıyor.
https://tr.wikipedia.org/wiki/TCP (https://tr.wikipedia.org/wiki/TCP)
Derdimi anladın herhalde.
(http://flylib.com/books/3/223/1/html/2/files/01fig07.gif)
@z hocanın yarı yaşındayım ama onun şu anki enerjisi bende yok, hazır kütüphane kullanımı bizi bağımlı kılmaktan ve yabancılardan yeni driver çıkarmalarının yolunu gözlemekten başka bir halta yaramıyor.
Şahsen hatırı sayılır bir çok iş yaptım fakat hazır driver'lar o işe olan hakimiyetimi bir noktada hep baltaladı.
ethernet driverı deyince "3-5 satırlık kod parçası"mı anlaşılıyor ?
Benim yaptığım şey özeleştiridir manipule edilmesin lütfen. Tam olarak bundan bahsediyorum zaten, ethernet driverı 3-5 satırlık kod değil, bu yüzden de bu driver kullanıldığında insan başından sonuna kodu inceleyip temel mantığı kavrıyamıyor.
Yaptığınız devrenin kalbini ethernet oluşturmuyorsa ayrı mesele, ama ethernet üzerinden şekillenen bir kart yaptıysanız şu paket gitsin şu paket gelsin demekle olmuyor.
Tez hocam aşağıdaki projeyi verdi.
(http://mcdn01.gittigidiyor.net/23484/tn50/234842435_tn50_0.jpg?1474127261)
(http://www.direnc.net//stm32f103c8t6-mini-development-board-arduino-12636-30-O.jpg)
Yukarıda görülen iki kiti kullanarak basit bir web server yapılabilmesi için gerekli yazılımların assembly dilinde yazılması.
Proje süresi: 30 gün.
Kullanılması serebest olan araç gereçler: PC, Keil ortamında ASM derleyici, Hesap makinesi, her türlü basılı ve sanal ortamdaki dokümanlarlar, forum üyelerinden gelecek destekler
Kullanılması yasak olan araç gereçler: ASM haricindeki derleyiciler, asm dilinde bile olsa her türlü açık/kapalı kütüphane ve obj kodlar.
Not: Proje başlangıcında MCU tamamen silinecektir.
Hocama çok yalvardım ama C, C++, Ardonyo, kütüphane falan kullanmama izin vermedi.
Alıntı yapılan: z - 19 Eylül 2016, 11:00:41
Tez hocam aşağıdaki projeyi verdi.
Malum Olduğu Üzere Bu Forum Bir Ödev Yapma Forumu Değildir ;)
Zaten sizlerden hazır kod talep etmiyorum. Ayrıca Tez hocam da forumun aktif bir üyesi. Her an soluğunu ensemde hissediyorum.
Bir de şunu merak ediyorum. Kütüphane yazan adamlar neden yazıyorki. Kütüphane yazmak istediklerinde heyt huyt sen napıyon diyorlarmıdır ki?
Diyeceksiniz ki onlar okumuş uzman olmuş.
Eee ben de okudum uzman oldum. Tek bir uzmanlık alanım var, o da problemleri asm bazında çözme.
Problem önemli değil. Sorup soruşturur, araştırır, okur öğreniriz.
@gerbay hocam birebir katılıyorum yazdıklarınıza, bende aynı şeyi kastediyorum aslında, yaptığınız işin kalbi ne ise onun derinine inmekte fayda var. Değilse benimde çalışma tarzım bu şekildedir.
Ben internete çıkmadan endüstriyel ethenet seviyesinde kodlar yazıyorum çünkü haberleştiğim cihazlar PLC- HMI - SCADA.
Sahadan aldığım bir inputu veya analog bilgiyi ethernet üzerinden sürekli aktarıyorum ve hali ile iletişimin sağlığı benim için çok önemli. Bu işi ilk önce hazır driver ile yaptım, fakat sonra sistemde kopmalar olunca ve sorunun sebebini bulmanın zorluğu karşısında yaptığım şey üzerinde ki hakimiyetimi kendi içimde tartıştım ve kolları sıvadım, bu sayede daha sağlıklı işler çıkardım. Tek bir konuda uzmanlaşmayı ve enerjiyi buna harcamayı %100 destekliyorum.
frederic
Elde bir iş var. Bu işi yüzlerce binlerce farklı özelliği olan bir alet ile yapmak gerekiyor. Hadi diyelim basit olarak isviçre çakısı ile yapacağız. Bu aletin nasıl kullanılacağını bilmek temel şarttır değilmi ?
Projeye atıp derleyip hexi alıp mcuya yüklemek sonrasında bu işi biliyorum demek marifet değil elbette. Sorun çıkacak sorunun kaynağını araştıracaksınız. Aletin nasıl kullanılacağını ögreneceksiniz. Normal olan bu. Bunu yapamayana yazılımcı demezler herhalde.
Burada mesele farklı bir noktaya gidiyor. Z nin hedefleri farklı ve bu hedefler konusunda "Başarılar"da diledim.
Znin önünde bir iş var yapılacak. O iş için gereken isviçre çakısını ben yapacağım diyor. Ama bununla da yetinmiyor. Bu aleti yaparken en eski yöntemlerle taş sopa vs elde işleyerek bu aleti yapacağım diyor. Önce bu eski yöntemlerle yapacak aleti. Sonra o alet ile işi yapacak. Sonrada teslim edecek. Çıkacak olan sanat eseri olabilir kör topal bir şeyde olabilir. Bununla ilgilenmiyoruz.
3-5 ay sonra, birilerine sen bunu esp ile yap diyebilir.
O söylemesede 2-3 sene sonra wifi ve 433mhz rf in temel donanım olarak mcuların üzerinde standartlaşmaya başladığını göreceğiz.
Tamam hocam sensin =) Türkçe konuştuğumu düşünüyorum ama anlatamıyorum galiba derdimi, problem 1 tane ise eğer evet yazılımcı o hatayı arar bulur ve sistem kaldığı yerden işleyişine devam eder. Peki ya sorun genelse ve sistemin kararsızlığı sizin hiç öngöremediniz zamanlar da gerçekleşiyorsa ? Şimdi sorun çıkaran driver'ı ben sıfırdan yazmayı tercih ettiğimde ve yazdığımda yazılımcı olmuyormuyum yani ?
Önünüz de 2 seçenek var, ya bütün enerjinizi sorunu çözmek adına harcarsınız, yada aynı enerjiyi bütünü kendiniz yazarak harcarsınız. Ben ikincisini yapıyorum ve gayet mutluyum.
Ben sistemin kalbinden bahsediyorum, bu yüzden kendi işimden örnek verdim.
Müşteriye teslim edilecek işin IOT bacağı varsa şu an izlediğim yol saçmalığın daniskasıdır.
Aciliyetin durumuna göre yüksek seviyeli bir modül alıp kod yazılabileceği gibi parası bastırılıp doğrudan bir başka firmadan hizmet de satın alınabilir.
Fakat ileride sorun çıktığında meletirler sizi.
IOT projelerinde kullanılması için bir ürün geliştirilecekse Gerbayın önerdiği kütüphanelerle vs bir şeyler yapmak mantıklıdır. Fakat adı sanı belli olmayan bedava kütüphanelerde de sorun çıktığında melemek zorunda kalabilirsiniz.
Yetiştirilecek bir iş yoksa, olayları anlamak, pratik yapmak, çıkacak problemlere özgün çözümler getirmek gibi amaçlarınız varsa tek yol Z'nin yoludur.
Birileri metali talaşlı imalat teknikleri ile işler.
Birileri laserle işler.
Birileri elektroerozyonla metali işler.
Birileri kimyasal olarak işler.
Birileri nanoteknoloji ile metali atomik bazda inşa eder.
Talaşlı imalat yapanların nanoteknoloji ile uğraşanları kınamaya söz söylemeye hakkı varmı?
Herkes işine baksın.
Gereksiz alınıyorsunuz. İstediğiniz yoldan gidebilirsiniz, yardımcı olmak isteyenlerin (Buna dikkat çekmekte fayda var. YARDIMCI olmak isteyenlerin) derdi
size faydalı olmaktan öte bir niyet olmadığının farkına varmalısınız.
Alıntı yapılan: z - 18 Eylül 2016, 21:17:01
Anlaşıldı mimlenmişim.
Bunu siz yazdınız ne anlama geldiğini görmek istemediğiniz çok oluyor.
Frederic önüne gelen ethernet kütüphanesi yazamaz. Sizde ethernet kütüphanesi hazırlamış değilsiniz. Bunu yazamadığınız için kendinizi "yazılımcı olmamakla" tanımlıyorsanız keyif sizin. Benim tanımım "Eldeki toolun nasıl kullanacağını öğrenemeyene, beceremeyene yazılımcı denmez"dir.
Varolan ethernet stackini hiç kullanamayan bir sürü yazılımcı ilede karşılaştım. Kullanıp sorunlarını çözemeyenleride gördüm. Kullanıp sorunları zorla çözenleride gördüm. Tıkır tıkır yürütebilen bu konuda deneyimsiz yazılımcı hiç görmedim. Varsa böyle bir arkadaş iş arıyorsa hemen iş verebilirim.
Ufff ufff alınganlık, yardımcı olmak isteyenlerin yardımdan öte başka niyeti vs ne ya?
http://www.bilisimterimleri.com/bilgisayar_bilgisi/bilgi/55.html (http://www.bilisimterimleri.com/bilgisayar_bilgisi/bilgi/55.html)
http://www.tech-worm.com/3251-2/ (http://www.tech-worm.com/3251-2/)
https://www.amazon.com/Ethernet-Definitive-Guide-Charles-Spurgeon/dp/1565926609 (https://www.amazon.com/Ethernet-Definitive-Guide-Charles-Spurgeon/dp/1565926609)
Bana yukarıdaki gibi ıvır zıvır link, bulması getirtmesi okuması zaman alacak kitap ismi vs vermeyin demek istedikten sonra güzel bir doküman linki veren arkadaş, şaka yoldan bana kızacaksın ama bu dokümana bir bak dediğinde ben de mimlenmişim diye şaka yapamazmıyım?
Yapmayın niyet okumayın.
Alıntı yapılan: gerbay - 19 Eylül 2016, 13:31:03
bak hocam ekibe;
Dogan Yazar developed an HTTP/CoAP REST layer for Contiki.
https://www.linkedin.com/in/doganyazar (https://www.linkedin.com/in/doganyazar)
Research Engineer
Swedish Institute of Computer Science (SICS)
Ekim 2008 – Aralık 2010 (2 yıl 3 ay)Stockholm, İsveç
Actively conducted research in Embedded Networked Devices area. Worked on and contributed to Contiki OS and focused on integrating resource-limited embedded devices into the physical worlds towards the vision of Internet of Things. Developed power-efficient network applications with very small code print for tiny devices.
Daha fazla kalabalık yapmayacağım.
Gerbay adamlar bir araya gelmiş paralel processing yapıp hep beraber kod yazmışlar.
Ben de tek adam olarak tek process de yazacağım.
Ayrıca 4/4 bir şey yazmayacağım ki? Yarımyamalak araştırma ile zaten ne kadar mükemmel bir şey ortaya koyabilirim?
MCU'un sağdan soldan topladığı bir takım verileri bir internet sayfasında yayınlayabiliyor olması bu aşamada benim için çok yeterli.
Yapabilirsem internet sayfasından bazı verileri de MCU'a alabileyim.
Şimdi ethernet çipi ile mcu'yu gözüm kapalı haberleştiririm. Bu kısmı yazmak dert değilki. El atmışken bunun bir üst yazılımını da yazar bitiririm. Sonra da bir üst yazılımını.
Githubda Mini Cnc, 3D yazıcı projelerine bir bak. PC yazılımını, çipin firmware yazılımını ekip yazmış. Biri Amerika'da bir Alamanya'da. Sanki bana uzaya roket yolluyorlar.
Eee ben bunları tek başıma yazdım hata mı ettim? Hem de asm gibi ilkel bir dille.
Ürünleri yarıştırmak isteyen varsa getirsin yarıştıralım.
Bence konu dışına çıkıp muhabbeti dağıtmamak gerek, ben sıfırdan driver yazamadım, sadece kesip biçerek modifiye etmekle yetindim. Bu sebeple Bülent Hoca'nın çalışması heyecanlandırdı beni doğrusu. Umarım benim yapamadığımı o yapar, ve bu konuda önder olur. Motivasyonunu bozmayalım Hoca'nın.
An itibari ile gerbay geyiğin hayal gücünün sınırlarını zorlayarak, konuya ölümcül darbeyi indirmiştir. Z yaptıklarını anlatan yeni bir başlık açarsan iyi olur. Artık bu başlık iflah olmaz.
ASM ile karalanıp çöpe atılan şeyler yok. Bir takım fikirler, rutinler bir sonraki projelerde kullanılıyor.
7 sene önce yazdığım rutinleri hâla kullanıyorum mesela.
Kösteğe değil de desteğe ihtiyacım var. Destek derken poh poh değil.
Maalesef uğraşılar hep başarı ile sonuçlanmıyor. Fakat başarısız projelerden de çok tecrübe kazanılıyor.
Yarın ethernet kiti kargoyla gelir diye umutla bekliyorum. Gelirse bu kadar lak lak etmeye fırsatım olmayacak.
Alt seviyeye inerken nerde duracağımızı da bilmeliyiz.
Mesela silikon üzerine kendi analog çiplerimi işlemeyi çok isterim fakat bu işlere girişmeyi hiç denemiyorum.
Yazacağınız koda birde iperf server eklerseniz performansını test edersiniz.
Konu her nekadar dagilmis, onu yapma bunu yap durumuna gelmis olsada, @z bunu asm ile yapmak istiyorum ve yardima ihtiyacim var diyor. Eger ethernet tcp ip vb konularda yardimci olacaksaniz birseyler ogretip bir isik yakacaksaniz bizleride bu anlamda mutlu edersiniz.
Burada derli toplu paylaşım olmasını isterdim fakat biraz zor olacak.
Bu yüzden işin geyik kısmından arındırılmış teknik anlatıma http://www.cncdesigner.com/wordpress/?p=6149 (http://www.cncdesigner.com/wordpress/?p=6149) adresinden ulaşabilirsiniz.
Tabiki buradan tartışmaya devam edeceğiz.
Hocam beni yeterince tanıdığını sanıyordum. "STM32F103C8 olacak da yanında asmsi olmayacak."
ASM olmadan ben kod yazamam ki.
ZIOS ayakları üstünde durmaya başlamıştı ki çomak sokuldu. Köstek gördüm. Kim çomak sordu söylemiycem.
ZIOS public olsun diye yola çıkmıştım fakat birileri attı tuttu ben de C den arındırıp fonksiyonları sadeleştirdim ve kendi projelerimde aktif olarak kullanıyorum.
Şimdi düşünüyorum da o projeyi sürekli canlı tutup güncellemelerle vs hayatta tutmak çok fazla sabır ve fedakarlık ister.
İyiki de köstek olunmuş.
Alıntı Yapmadem z hocam vakit vs. yönünden uygun ve başta da belirttiği gibi IoT amaçlı olarak bu işlere girmek istiyor. Keşke doğru şekilde girip tecrübelerini forumda paylaşsa idi.
Ne tecrübesi yaaa. Dalgamı geçiyorsunuz. Ethernet ve internet bilgimi bir daha yazayım. http://www.cncdesigner.com/wordpress/?p=6149 (http://www.cncdesigner.com/wordpress/?p=6149)
Günlerdir neden yalvarıyorum sorular soruyorum sanıyorsunuz?
@gerbay hocam ben z kadar özgür değilim demişsin ya; sen özgür olamazsın. Çünkü C kullanıyorsun.
Kübişin bir lafı vardı. Ne diyordu? "Sizler okulda şartlanıyorsunuz olaylara şartlı bakıyorsunuz. Ben özgür bakıyorum."
Haa birde cahil cesareti denen bir şey var. Ethernet ve internet konusunda gerçekten cahilim. IOT cesaretimde burdan geliyor.
Kubiş üstadı anmak için herkesi bilgisayarlarının başında 1dk'lık saygı duruşuna davet ediyorum.
Yalvarmanıza gerek yok. Konuda 2-3 tane stack yazılımına ait bilgi verildi. Bunlar açık kaynak. Açıp c kodlarını okuyup, birde ilgili standartlara ait belgeleri indirirseniz yeterli olur. Standardın belgeleri ile açık kaynaklı c kodlarını incelersiniz rahatlıkla ne oluyor bitiyor anlarsınız.
Birde bazı konularda inat neden ? STM ile ENC yi standart liblerle çalıştırırsınız. Donanımın çalıştığını görürsünüz. Sonra oturup beğenmediğiniz kısımları atacağınız kısımları atıp kendi yazdığınız kodları eklemeye başlarsınız. Hiç bir yardımı yardım olarak görmüyorsunuzki hata burada.
Ayrıca sanki sizi sıkıştırıyormuşuz gibi bir havada var ve bu son derece saçma. Yardım etmek isteyen vardıda, buradaki birileri, bu yardım etmek isteyenlerin klavyesinin kablosunu mu kesiyor? Daha önce asm ile yazılmamış. Kimse böyle bir şeye gerek görmemiş, siz asm ile yazmak için özel bir yardıma neden ihtiyaç duyuyorsunuz. Açık kaynaklı stacklar olmasa birileri bir şeyler saklıyor diyeceğim.
Birde siteye yazmışsınız.
Alıntı yapılan: z
Ellerine geçsem linç edileceğim.
Çok güldüm.
Takıldığım yerlerde tabiki hazır kütüphanelerde adamlar ne yapmış diye bakıp sorularıma cevap bulamaya çalışırım.
Fakat protokol kurallarının açık açık anlatıldığı dokümanlardan mı bu iş rahat yürür yoksa C ile yazılmış fonksiyonlara bakarak mı?
Bana dokümanlar çok daha pratik geliyor. Öteki türlü programdan bakıp adamlar neden böyle yapmışlar soruları birikmeye başlar. İşin özünü anlayamazsın.
Daha önce de yazmıştım. Nasıl wav, bmp gibi dosyalar var ve bunların headerları dokümante edilmişse internet protokollerinde headerlar veri yapıları dokümante edilmiştir.
Bu dokümanlara eriştiğim anda sorun, eline iki tığ alıp binlerce ilmik atıp kazak örme sorununa dönüşecek.
Evet nerde bu dokümanlar?
www dan sonra ne yazarsam bu dokümanların olduğu sayfaya giderim?
Alıntı yapılan: gerbay - 19 Eylül 2016, 17:01:02
wiznet in network stack i üzerinde olan chipleri var. ben senin yerinde olsam öyle birşe yapıp bu stm32 leri 25 tl den satardım..
Arduinocular zaten shield olarak kullanıyorlar, farklı bir işlevi yoksa satılamaz. Z nin derdinin satış olmadığıda ortada. Satış derdi olunsaydı işin yapılış şekli farklı olurdu.
https://en.wikipedia.org/wiki/Ethernet (https://en.wikipedia.org/wiki/Ethernet)
https://en.wikipedia.org/wiki/IEEE_802.3 (https://en.wikipedia.org/wiki/IEEE_802.3)
https://en.wikipedia.org/wiki/Category:Ethernet_standards (https://en.wikipedia.org/wiki/Category:Ethernet_standards)
http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64882 (http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64882)
https://standards.ieee.org/about/get/802/802.3.html (https://standards.ieee.org/about/get/802/802.3.html)
https://www.google.com.tr/search?biw=1787&bih=860&q=ethernet+standards+pdf (https://www.google.com.tr/search?biw=1787&bih=860&q=ethernet+standards+pdf)
http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64882 (http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64882)
Yuh.... Dokümana 600 TL para istiyorlar.
Bunun ücretsiz özeti yokmudur?
Dosyanın tam adını biliyorsanız pdf olarak aratın nette, torrentte bir yerlerde vardır.
Alıntı yapılan: z - 19 Eylül 2016, 17:23:02
http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64882 (http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64882)
Yuh.... Dokümana 600 TL para istiyorlar.
Bunun ücretsiz özeti yokmudur?
Hocam galiba bu 2012 revizyonu, bir inceler misiniz? http://www.trincoll.edu/Academics/MajorsAndMinors/Engineering/Documents/IEEE%20Standard%20for%20Ethernet.pdf (http://www.trincoll.edu/Academics/MajorsAndMinors/Engineering/Documents/IEEE%20Standard%20for%20Ethernet.pdf)
Gerçi diğeri 3500 sayfa..
http://www.cs.bilkent.edu.tr/~tugrul/CS518/Papers/802.3-2000.pdf (http://www.cs.bilkent.edu.tr/~tugrul/CS518/Papers/802.3-2000.pdf)
Alıntı yapılan: gerbay - 19 Eylül 2016, 17:41:31
hocam senin bu doküman ile işin yok.. senin işin RFC ler ile..
Evet galiba soruların cevapları burda.
https://tr.wikipedia.org/wiki/Request_for_Comments
Yok bak o zaman yazdıkların üzerinden bayağı bir zaman geçti. Şimdilerde bazı terimler oturmaya başladı.
O zaman yazdığında RFC 3 harfli bir kısaltma idi ne olduğu bile belli olmayan x birşeydi. Şimdi tekrar yazdığında RFC yi google aratınca Request For Comments uzun açılımını görünce aha dedim.
Doktor örneği vermiştim ya aynı durum var.
Şimdi geriye dönüp tekrar yazılanları okuyacağım.
Hocam hak ver. Hiç bilgim olmadığı bir konuya giriş yapıyorum.
Her kafadan bbir ses bir öneri olunca ilk başlarda insanın kafası bulanıyor. Gözünün önündekileri görmüyor.
Bu aşama en sancılı aşama olur hep.
Gerbayın daha önce yazdığı mesaj.
https://www.picproje.org/index.php/topic,65601.msg510018.html#msg510018 (https://www.picproje.org/index.php/topic,65601.msg510018.html#msg510018)
Sayın hocalarım,
Müsaadenizle biraz konuyu değiştireyim. Biz bu STM32F103C8'e Ethernet falan bağlamayalım da -siz bağlayabilirsiniz- bu aleti programlamayı öğrenelim.Zamanında z hocam tavsiye etti 3 kit aldım. 407'ye benzeterek internetten bir şeyler bularak basitçe bir şey yapabildim ama yarım kaldı. Bir hocamız şunun kitabını yazsa da satın alıp şu işi öğrensek.Daha sonra belki Ethernet de bağlarız.Saygılar.
407 yi yapabildiyseniz 103 de yapabilmeniz gerekir.
MikroC kitabı sayesinde LCD ,kesmeler v.b bir şeyler yaptık ama kitap sadece 407'ye yönelik yazılmış. KEİL kurduk ama nasıl yapacağımız konusunda internette bulduğumuz bir kaç video var tam anlaşılamıyor. Sayın Orhan ALTINBAŞAK 16f84 ve 16f628A için kitaplar yazmıştı.Sayesinde bu pic.leri ve ASM'yi biraz öğrenmiştik. Bir kitap olsa fena mı olur ?
Hocam 2+2 her dilde 4 eder.
RTOS ihtiyacı çıkarsa çözeriz bir şekilde. İlk insanlar RTOS mu kullanıyordu?
Ejderhayı öldürmek için ucu sivriltilmiş bir değnek yeterlidir. Ama isteyen sniper da kullanabilir.
Alıntı yapılan: z - 20 Eylül 2016, 16:16:06
Hocam 2+2 her dilde 4 eder.
RTOS ihtiyacı çıkarsa çözeriz bir şekilde. İlk insanlar RTOS mu kullanıyordu?
Ejderhayı öldürmek için ucu sivriltilmiş bir değnek yeterlidir. Ama isteyen sniper da kullanabilir.
@z Hocam siparişin geldi mi, çalışmaya başladın mı? Yine güzel bir video serisi bekliyoruz :)
(http://www.cncdesigner.com/wordpress/wp-content/uploads/ENC28J60_koblalar.png)
Kodları yazmaya daha yeni başladım.
mesaj birleştirme:: 20 Eylül 2016, 19:10:50
(http://www.zwaga.com/info/net/netwerk/plaatjes/ethernet_frame_format.gif)
Ethernet Paketin ilk 6 byte'ı alıcının adresi.
Bir sonraki 6 byte gönderici adresi.
Bir sonraki 2 byte ise Paketin tipi ya da uzunluğu
Devam eden kısımlar ise data alanı.
Type alanı 2 byte. Eğer buradaki veri 46...1500 aralığında ise bu alan paketin uzunluğunu saklıyor.
Bunların dışında değer alıyorsa ethernet paketinin tipini mi saklıyor diyeceğiz?
Hocam yazdıklarını anlaşılan gecikmeli anlayacağım.
Şu soru kafama takıldı cevabını vermiş olsan bile görüp de anlayamıyorum.
Ethernet kablosunu taktım düzeneğimi çalıştırdım. Ethernetten bir paket geldi. Type/length alanını okudum.
Bu benim aldığım ilk paket olduğuna göre bu paket data paketi olamaz protokolu tanımlayan paket mi diyeceğim. Eğer öyle ise bu alanı type olarak değerlendireceğim.
Bir sonraki paket alınca ise bu data paketi çünkü biraz önce protokol paketini aldıydım o halde type/Length alanındaki veri data boyutunu gösteriyor mu diyeceğim.
Hocam ben Networking/Communication dersi almadım kafam karışık. Geçmişte cevap yazmış olsan bile hemen o an anlamıyorum.
Olaylar hayal ettiğimden çok farklıymış.
Peki bir paketinin boyu yaklaşık max 1500 byte.
İlk paketi aldım ve type değerini 0x806 olarak okudum.
Zaten sadece iki paket tipiyle ilgileneceğime göre if (type==0x806) diye hemencecik ARP rutinine girdim.
Data alanındaki veriler için ARP paketi muamelesi yapmaya başlayacağım.
Bu yaklaşık 1500 byte veri alanındaki veriler ARP rutininin ihtiyacı olan tüm verileri barındırıyor olacakmı?
Bir sonraki paket gelince bak biraz evelki ARP rutinininde datalar vardı ya onlar eksik kaldıydı aha bu veriler de onlar durumu olmayacak mı?
Her paket alışımda type kısmına bakıp 0x800 yada 0x806 değilse boş ver bunlarla işim yok mu diyeceğim.
Madem bu 2 byte alana Type denecek niçin bu adamlar Type/Length yazıpta kafamı karıştırıyorlar?
Tüm samimiyetimle çok teşekkürler. Kafam bu kadar karışıkken doküman izleyerek vs bu cevaplara ve bu kırmızı hapa kolay kolay ulaşamazdım.
Deveye hendek atlatmak bana bir şey anlatmaktan daha kolay değilmi.
Sormaya da korkuyorum ama;
Alıntı Yaphocam sen şimdi kendine bir MAC adres belirle, bir de networkünde bulunan cihazlar ile aynı subnet de boş bir IP adres belirle kendine.
Evdeki bütün cihazlar wireless çalışıyor ve modemin 4 tane boşta LAN çıkışı var.
Bu LAN çıkışından ECP28J60 kitime kablo yapmakla meşguldüm.
Subnet ve boş IP deyince kafam karıştı. Modem arayüzüne girince televizyonun ve IPOD'un MAC adresini ve IP değerini görüyorum.
Televizyonu kapamak evde sorun olur ama IPOD pek kullanılmıyor. Onun MAC adresini ve IP numarasını kullanabilirim.
Fakat Subnet demeyeydin iyiydi. Subnet ile ilgili bir bilgi yok.
Konunun gidişatından bağımsız olarak kartı PC'ye Ethernet üzerinden bağlamanın tek yolu TCP/UDP değil
@z hocam. Pcap library i PC uygulamanıza dahil ederek direkt L2 point to point de çalışabilirsiniz(Araya router sokmadan).
Hocam bu akşam son olarak şu konuya da açıklık getirelim bana yeter.
Bu akşam çipin paket almasını yada göndermesini deneyip gelen verileri en azından rama çekip görmek istiyorum. Bu aşamaya gelmek için bayağı bir şey yazmam gerekebilir.
Alıntı YapARP paketi ile IP si bilinen bir arayüzün MAC adresi "ARP request" paketi gönderilerek sorgulanır. ARP request paketi network e broadcast edilir. Yani bu şu anlama geliyor. 14 byte lık ethernet frame in başındaki header vardı ya; o header ın ilk 6 byte ı, 0xff değeri taşır. sonraki 6 byte ise paketi gönderenin MAC adresi.
Gerçi hemen hemen olayı anladım ama şu anlamı da çıkarabilir miyim?
ENC çipime network kablosunu takıp enerjisini verdiğimde ben hiç bir talepte bulunmasam dahi modem beni bir şekilde algılayacak ve MAC adresimi öğrenmek için ARP request yollayacak. Televizyona, telefonlara, şu an kullandığım bilgisayara bu istek gelecek.....
Çünkü ağa katılmak isteyen biri olarak ARP request gelmeden Power-On'dan hemen sonra bir şey yapıp yapmayacağımdan emin olmak istiyorum.
@AsHeS Hocam sağolasın ama şu anda Gerbay'ın hapını içeyim. İnternet/ethernet konularını hiç bilmediğim için L2 falan kafamı karıştırır şimdi. L2 nedir bilmiyorum kafam iyice karışmasın.
Benim en sonunda varmak istediğim nokta ENC kitini server olarak internete sokmak.
IP numaramı sizlere de verince sizlerde evinizden ENC kitime erişebileceksiniz. (İnşallah)
Tamamdır çok sağolun. Umarım yarın sabaha kadar çok yol katetmiş olurum.
Fonksiyonların yazımı, ENC28J60 dokümanını anlamaya çalışmak ve http://www.cncdesigner.com/wordpress/?p=6149 (http://www.cncdesigner.com/wordpress/?p=6149) günlük tarzı yazıyı hazırlamak bayağı zaman alıyor.
Çorabın ipini koparttık ve çorap hızla sökülmeye başlandı.
Eğer kullandığım çipi ve ethernet portu ile çip arasında ya da çip ile MCU arasında hangi olaylar cereyan ediyor gerçekten merak ediyorsanız blog sayfamdaki yazıyı 1 kere okuyup geçmeyin.
Çünkü yanlışları düzeltiyor, daha iyi anlam veren cümlelerle eski yazıdaki muallak ifadeleri editliyorum.
Alıntı yapılan: z - 21 Eylül 2016, 13:12:19
Fonksiyonların yazımı, ENC28J60 dokümanını anlamaya çalışmak ve http://www.cncdesigner.com/wordpress/?p=6149 (http://www.cncdesigner.com/wordpress/?p=6149) günlük tarzı yazıyı hazırlamak bayağı zaman alıyor.
Çorabın ipini koparttık ve çorap hızla sökülmeye başlandı.
Eğer kullandığım çipi ve ethernet portu ile çip arasında ya da çip ile MCU arasında hangi olaylar cereyan ediyor gerçekten merak ediyorsanız blog sayfamdaki yazıyı 1 kere okuyup geçmeyin.
Çünkü yanlışları düzeltiyor, daha iyi anlam veren cümlelerle eski yazıdaki muallak ifadeleri editliyorum.
Hocam küçük nüansları farketmek zor olacak sanırım. Renklendirme yada "ekleme" vs gibi etiketlerle yeni eklemeleri yaparsanız daha iyi olur sanıyorum.
Kolay gelsin.
Blog sayfamdaki yazıyı elimden geldiğince net anlaşılır yazmaya çalışıyorum bunun için de sorularımla forumdaki arkadaşları ve çip dokümanındaki satırları didik didik didikliyorum.
Gerçekten de merak ediyorsanız sizde didiklemelisiniz.
Maci sallamasyon girin simdilik. Elinizdeki cihazlardan bir tanesinin sonunu değiştirerek kullanabilirsiniz. Modemin arkasında kalacagından sorun olmayacaktır.
Şu soru kafamı kurcalıyor.
Bir paket aldık. Fakat işleri çok çok yavaştan aldık. Aheste aheste davranırken daha bufferda yeni mesaj için yer açılmamışken bir mesaj daha gelmeye başladı.
Çip eski verileri yer yok diye ezmiyormuş. Peki bu durumda ne olacak? Yeni paket reddedilecekmi?
Bazen bir internet sitesine yoğun talep olduğunda sayfa çok geç açılır. Bunun sebebi bu mudur?
Alıntı yapılan: z - 21 Eylül 2016, 14:26:30
Şu soru kafamı kurcalıyor.
Bir paket aldık. Fakat işleri çok çok yavaştan aldık. Aheste aheste davranırken daha bufferda yeni mesaj için yer açılmamışken bir mesaj daha gelmeye başladı.
Çip eski verileri yer yok diye ezmiyormuş. Peki bu durumda ne olacak? Yeni paket reddedilecekmi?
Bazen bir internet sitesine yoğun talep olduğunda sayfa çok geç açılır. Bunun sebebi bu mudur?
Bilenler daha iyi açıklayacaktır ama yanlış yorumlamıyorsam yeni gelen paket alınamayıp kaybolacaktır. Bu yüzden kullanılan protokole bağlı olarak (TCP) düşen paket tekrar istenebilir ya da önemsenmez saldım çayıra mantığıyla da (UDP gibi) çalışılabilir.
Alıntı yapılan: z - 21 Eylül 2016, 14:26:30
Şu soru kafamı kurcalıyor.
Bir paket aldık. Fakat işleri çok çok yavaştan aldık. Aheste aheste davranırken daha bufferda yeni mesaj için yer açılmamışken bir mesaj daha gelmeye başladı.
Çip eski verileri yer yok diye ezmiyormuş. Peki bu durumda ne olacak? Yeni paket reddedilecekmi?
Bazen bir internet sitesine yoğun talep olduğunda sayfa çok geç açılır. Bunun sebebi bu mudur?
Hocam sanırım datasheet bu durumu açıklıyor. Ama emin de değilim. Siz de bir bakar mısınız?
Additionally, if the EPKTCNT register ever maximizes
at 255, all new packets which are received will be
aborted, even if buffer space is available. To indicate
the error, the EIR.RXERIF will be set and an interrupt
will be generated (if enabled). To prevent this condition,
the host controller must properly decrement the
counter whenever a packet is processed.
Ekleme: Alıntı 7.2.4 FREEING RECEIVE BUFFER SPACE bölümü, sayfa 47'den yapılmıştır.
http://ww1.microchip.com/downloads/en/devicedoc/39662a.pdf (http://ww1.microchip.com/downloads/en/devicedoc/39662a.pdf)
@cemre Evet sorumun cevabı açıklanmış. Sağol.
------------------
Cemre gibi dokümandan bu tip referanslar verirken mesajlarınıza sayfa numarası da ekleyebilirmiyiz.
Canlı yayın video / ses dosyaları hariç diğer paketler askeri usül iletişim kuruyor. Anlaşıldı mı? Emredersiniz komutanım. Ama paketi aldığını çip mi söylüyor yoksa sizin mi söylemeniz gerekiyor bilemiyorum.
Alıntı yapılan: z - 21 Eylül 2016, 14:51:40
@cemre
Evet sorumun cevabı açıklanmış. Sağol.
------------------
Cemre gibi dokümandan bu tip referanslar verirken mesajlarınıza sayfa numarası da ekleyebilirmiyiz.
Hocam altınkaya'dan kargo beklerken ben de sizinle birlikte datasheet'i inceliyorum. Bazı kafama takılan noktalar var ama şimdi sormayacağım, muhtemelen siz cevaplarını sayfanızda paylaşacaksınız zaten. Mesajınızı görmemiştim ama sayfa no vs ekledim hatamı farkedip.
Kolay gelsin tekrar.
Çipimiz çok genel amaçlı. Registerlerde bir sürü seçenek var.
Benim amacım basit bir server yapmak (internet sayfası yayınlamak) olduğuna göre ethernet portudan Fulldublex ve Halfdublex haberleşmeden hangisinin yapılacağı ile ilgili katı bir kural varmı?
@cemre sen de sorularını sor.
Alıntı yapılan: z - 21 Eylül 2016, 15:39:06
Çipimiz çok genel amaçlı. Registerlerde bir sürü seçenek var.
Benim amacım basit bir server yapmak (internet sayfası yayınlamak) olduğuna göre Fulldublex ve Halfdublex haberleşmeden hangisinin yapılacağı ile ilgili katı bir kural varmı?
@cemre sen de sorularını sor.
Hocam ben de full-half duplex olayını soracaktım. Bir de bu ethernet tarafının full yada half olması SPI tarafının full yada half olmasını etkiliyor mu? SPI tarafı hep full duplex mi çalışmak zorunda?
Bir de hatırlatma yapayım, gerçi siz de farketmişsinizdir ama, LED'ler konfigure edilebiliyormuş. Bu debug aşamasında faydalı olabilir. Her iki LED için de Link durumu veya tx rx durumları için ayarlanabiliyormuş. Bi sorum daha vardı ama şuan aklıma gelmiyor. Geldikçe şeyyaparım.
Kolay gelsin hocam, datasheet register isimleri verdikçe benim kafam daha çok karıştı açıkçası.
Ek. İkinci sorum da DMA ile alakalıydı, DMA'yı daha önce kullanma fırsatım olmadığından çok aşina değilim. Gelen ve giden veriler Buffer'a yazıldıktan sonra mı DMA'ya aktarılıyor, nasıl oluyor bu iş?
B ledinin anodu +Vdd, katodu çipe gidiyorsa çip açılışta ethernet Fullduplex
B ledinin katodu Gnd, anodu çipe gidiyorsa çip açılışta ethernet Halfduplex
olarak default seçim yapıyormuş.
Çipi init ederken zaten HalfDublex/FullDublex durumunu belirleyebiliyoruz.
O halde kartı tasarlayan adamın ledi nereye bağlayacağı neden bu kadar önemli?
After a Power-on Reset, or the ENC28J60
is removed from Power-Down mode, the
CLKRDY bit must be polled before
transmitting packets, enabling packet
reception or accessing any MAC, MII or
PHY registers.
Hocam merhaba, sayfa 7, bölüm 2.2 Oscillator Start-up Timer kısmını boş geçmemek gerekiyor. Sitenizdeki yazıda bununla ilgili birşey göremeyince hatırlatmak istedim.
Power on aşamasında STM'de kendi init rutinleri ile zaman geçiriyor. Bu esnada çip zaten hazır duruma geliyor.
Bir de çipi init ederken çipi ilk başta resetleyip bekliyorum. Dolayısıyle yeterince zaman geçmiş oluyor.
Hala init rutinlerini yazıyorum. PHY registerlerini okumak/yazmak bayağı dolambaçlı bir işlem gerektiriyor.
1 saat önce elektrikler gitti sonra geldi fakat bir daha benim blog sayfasına erişemez oldum. Şu anda siz erişebiliyormusunuz?
Alıntı yapılan: z - 21 Eylül 2016, 18:59:03
Power on aşamasında STM'de kendi init rutinleri ile zaman geçiriyor. Bu esnada çip zaten hazır duruma geliyor.
Bir de çipi init ederken çipi ilk başta resetleyip bekliyorum. Dolayısıyle yeterince zaman geçmiş oluyor.
Hala init rutinlerini yazıyorum. PHY registerlerini okumak/yazmak bayağı dolambaçlı bir işlem gerektiriyor.
1 saat önce elektrikler gitti sonra geldi fakat bir daha benim blog sayfasına erişemez oldum. Şu anda siz erişebiliyormusunuz?
Bende sorun yok hocam, bir de tarayıcınızın "gizli sekme" özelliğiyle dener misiniz? Bazen böyle çözülebiliyor.
MACADR0..5 registerlerinde bir anormallik var.
İnternete baktığımda aynı sorun başkalarının da başına gelmiş. Registerlara yazma okuma rutinim düzgün çalışıyor fakat MACADR registerlerinde bir saçmalık var.
MACADR0 ı okursam MACADR5'e yazdığım data geliyor.
Tüm MACADR registerleri 1 byte ötelenmiş.
Hocam tamam MAC ADRler 3. bankta 0,1,2,3,4,5'e dizilmişler.
Bunlara ne yazdıysam aynını okuyabilmem lazım. Ama kayık vaziyette okuyorum.
Birisi de şöyle demiş.
http://www.microchip.com/forums/m414875.aspx (http://www.microchip.com/forums/m414875.aspx)
Alıntı YapHi,
I have a similar issue perhaps. I have functions that read and write any ENC28J60 register (via SPI). It seems to work for almost any register. However, I see strange things when I write, then read any of the MAADDR regs.
For example, here is a sequence I using while debugging this:
Write 0x03 to ECON1. This sets bank 3.
Write 0x12 to MAADR1 (offset 0x04)
Write 0x34 to MAADR2 (offset 0x05)
Write 0x56 to MAADR3 (offset 0x02)
Write 0x78 to MAADR4 (offset 0x03)
Write 0x90 to MAADR5 (offset 0x00)
Write 0xAB to MAADR6 (offset 0x01)
Then I read back MAADR1 and I read 0xAB instead of 0x12. I read it again and its correct. I experience this anomoly only with the MAADR regs.
I have Rev 4 silicon at the moment. We are getting rev 6 or 7 shortly. I'm just trying to debug my code on the hardware we have till we get in the new hardware soon.
Is there a known issue here or am I missing something?
thanks,
Steve
mesaj birleştirme:: 21 Eylül 2016, 21:19:07
Cevap gözümün önündeymiş.Sayfa 27.
MAC ve MII registerlerinin okunması diğerlerinden farklıymış. Niye ise.
Diğer registerler 16 clk ile okunurken MAC ve MII registerleri 24 clk ile okunuyor.
Çipin init rutinlerini tamamladım. Modeme de bağladım ve ana program içinde interupt flağını döngü içinde sürekli olarak kontrol ediyorum.
Gelen paket olsa bile ilgilenecek rutinlerim yok.
Hiç bir şekilde int flaglar set olmuyor. Kabloyu söküp takıyorum gene bir şey yok.
Led ayarlarını default değerinde bıraktım.
Ethernet konnektörü üzerindeki yeşil ışık sürekli yanıyor. Sarı ışık ise kırpışıyor.
En azından şu ana kadar yaptığım işlerin doğru yada yanlış olduğunu nasıl test edebilirim?
Modem arayüzünden baktığımda Kabloyu taktığım LAN portuna yüzlerce KB data gitmiş görünüyor. Alınan 0.
mesaj birleştirme:: 22 Eylül 2016, 01:24:07
Sorun halloldu.
PHY Read/Write rutinimi hatalı yazmışım.
Paket alındığına dair int geldi.
Hocam MAC buloğu üzerinde olan bir MCU kullanalım. Bir de Phyter takalım öyle saldıralım.
Benimkisi de saldırır ama SPI trafiği çok yüksek. Bu sorun oluşturur mu?
Alıntı yapılan: z - 21 Eylül 2016, 20:03:50
MACADR0..5 registerlerinde bir anormallik var.
İnternete baktığımda aynı sorun başkalarının da başına gelmiş. Registerlara yazma okuma rutinim düzgün çalışıyor fakat MACADR registerlerinde bir saçmalık var.
MACADR0 ı okursam MACADR5'e yazdığım data geliyor.
Tüm MACADR registerleri 1 byte ötelenmiş.
Hocam bu problem gerbay hocamın big endian uyarısı ile ilgili olabilir mi?
@gerbay hocam
Paket alındı interruptı üzerine, incelemek üzere RXBufferdan 256 byte veri çektim ve aşağıya ekledim.
Bu paket üzerine konuşabilirmiyiz?
Çip dokümanının 31. sayfasında Ethernet Packet Format var.
43. sayfada ise Sample Receive Packet Layout var.
Çip, gelen paketi aldıktan sonra gönderici ve alıcı adresleri ile type kısmını vs ayıklıyor bana sadece Data kısmını seçip buffera yazıyor. Doğrumudur?
Aşağıdaki ilk 70 byte'ı açıklayabilirmisin? (xx olarak yazdığım alanda modemin MAC adresi olduğunu farkedip yayınlamak istemedim.)
46 00 40 00 C0 03 FF FF FF FF FF FF xx xx xx xx
xx xx 08 06 00 01 08 00 06 04 00 01 xx xx xx xx
xx xx C0 A8 01 01 00 00 00 00 00 00 C0 A8 01 17
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 11 8B 32 C5 8C 00 40 00 C0 03 FF FF FF FF
FF FF xx xx xx xx xx xx 08 06 00 01 08 00 06 04
00 01 xx xx xx xx xx xx C0 A8 01 01 00 00 00 00
00 00 C0 A8 01 16 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 49 0B D0 12 D2 00 40 00
C0 03 FF FF FF FF FF FF xx xx xx xx xx xx 08 06
00 01 08 00 06 04 00 01 xx xx xx xx xx xx C0 A8
01 01 00 00 00 00 00 00 C0 A8 01 01 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 BB
AC 4B 18 01 40 00 C0 03 FF FF FF FF FF FF xx xx
xx xx xx xx 08 06 00 01 08 00 06 04 00 01 xx xx
xx xx xx xx C0 A8 01 01 00 00 00 00 00 00 C0 A8
---------------------------------------------------------------
@kralsamO problem çözüldü.
ETH registerlerini okumak için ayrı bir fonksiyon
MAC-MII registerlerini okumak için ayrı bir fonksiyon yazmanız gerekiyor.
MAC-MII registerlerini ETH registeri okur gibi okumuşum o yüzden o problemle karşılaştım.
http://sadjad.me/phd/ (http://sadjad.me/phd/)
@z Hocam, şurdaki forma yapıştırıp bi bakarmısınız? Sanırım böyle biraz anlam kazanıyor veriler. Ben xx'leri 00 yaptım Enter'ları da Space'e dönüştürdüm, okudu veriyi. Ama tabii ben anlamadım sonuçlarını. Belki işinize yarar.
Tam lazım olduğunda Gerbay ortalıkta yok
Sanırım birazını yorumlayabilirim.
İlk 2 byte 0x0046 bir sonraki paketin hangi adrese yazılacağını söylüyor. Yani bu paket 70 byte diyebiliriz. 0x46 - 0x00 = 0x46 = 70 Decimal
Sonraki 2 byte 0x0040
Sonraki 2 byte 0x03C0
2'nci 16.bıt veri ise dataların uzunluğu yani 64 Byte data varmış.
3'üncü 16 bit veri yani 0x03C0 bir flag ve sayfa 44 de açıklanmış.
Baştaki bu 6 Byte'a ilave olarak 64 byte da data varmış Yani toplamı 70 Byte.
64 Byte verinin 4 byte'ı da CRC olduğuna göre aslında benim 60 byte verim var.
0x03C0 flağı hoşuma gitmedi. Bu bitlere göre
Alınan paket Broadcast ve Multicast adrese sahip
Received Ok
Length Out of Range var !!!!! Niyeki?
Daha sonra data kısmında Alıcı Adres 0xFFFFFFFF (Broadcast yayın)
Gönderici adres (xx olarak değiştirdiğim modemimin MAC adresi)
Sonraki 0806 Gerbayın bahsettiği meşhur 806 olabilir. (0x0806 ARP) ve (0x0800 IP protokolü) demişti.
Evet evet bu kesinlikle Gerbay'ın bahsettiği ARP paketi
Address Resolution Protocol (Adres çözümleme protokolü)
08 06 00 01 08 00 06 04 00 01 xx xx xx xx xx xx C0 A8 01 01 00 00 00 00 00 00 C0 A8 01 17
Bu kısmı ARP için yorumlayalım (https://tr.wikipedia.org/wiki/Adres_ (https://tr.wikipedia.org/wiki/Adres_)Çözümleme_Protokolü)
0806 ARP
Hardware Tipimiz 0x0001 yani Ethernet
Protokol Adres Tipimiz 0x0800 yani IP adesleme
Donanım Adres Uzunluğumuz 0x06 yani 6 byte
Protokol Adres Uzunluğu 0x04 IPV4 4 Byte adres kullanır diyor
Operasyon 0x0001 (istek için 1, cevap için 2, RARP isteği için 3 ve RARP cevap için 4) ARP Response isteniyor diyebilirmiyiz?
Gönderen Donanım Adresi: Benim modemin adresi xx diye değiştirmiştim. (SHA) Sender Hardware Address
Gönderen Protokol Adresi: 0xC0A80101 (SPA) Sender Protocol Address
Hedef Donanım Adresi: 0x0000000000 (THA) Target Hardware Address
Hedef Protokol Adresi: 0xC0A80117 (TPA) Target Protocol Address
Daha sonra data boyunu 60 byte'a tamamlamak için eklenmiş boş sıfırlar
Enson da CRC: 11 8B 32 C5
Sonra alınan 2. Paket geliyor. Onu şimdi incelemeyeceğim. Çünkü yukarıdaki paketi alır almaz gereğini yerine getirmem gerekecek. Sonra sı Allah kerim.
46 00 40 00 C0 03 FF FF FF FF FF FF xx xx xx xx
xx xx 08 06 00 01 08 00 06 04 00 01 xx xx xx xx
xx xx C0 A8 01 01 00 00 00 00 00 00 C0 A8 01 17
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 11 8B 32 C5 8C 00 40 00 C0 03 FF FF FF FF
FF FF xx xx xx xx xx xx 08 06 00 01 08 00 06 04
00 01 xx xx xx xx xx xx C0 A8 01 01 00 00 00 00
00 00 C0 A8 01 16 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 49 0B D0 12 D2 00 40 00
C0 03 FF FF FF FF FF FF xx xx xx xx xx xx 08 06
00 01 08 00 06 04 00 01 xx xx xx xx xx xx C0 A8
01 01 00 00 00 00 00 00 C0 A8 01 01 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 BB
AC 4B 18 01 40 00 C0 03 FF FF FF FF FF FF xx xx
xx xx xx xx 08 06 00 01 08 00 06 04 00 01 xx xx
xx xx xx xx C0 A8 01 01 00 00 00 00 00 00 C0 A8
http://www-sop.inria.fr/members/Vincenzo.Mancuso/ReteInternet/09_arp.pdf (http://www-sop.inria.fr/members/Vincenzo.Mancuso/ReteInternet/09_arp.pdf)
hocam bunları toplayacaksın değil mi bir yerde ?
Blog sitemde topluyorum pdf de yapacağım.
Vay be, ben bayağı heyecan yaptım. Olacak bu iş. Sizin gibi çılgın arkadaşlar da varmış.
http://www.microchip.com/forums/FindPost/420396 (http://www.microchip.com/forums/FindPost/420396)
Siz bu işten sonra
@gerbay hocamın önerdiği gibi RTOS'a da girer onu da full asm ile yazarsınız. Belki de dünyanın en optimize RTOS'u sizden çıkar.
Hocam veriyi siz özel olarak mı gönderdiniz? Yoksa hattaki herhangi bir cihazın rastgele bir zamandaki broadcast yayınını mı okudunuz?
Kabloyu modeme bağladım.
STM32'yi resetledim ve ilk gelen paketi daha doğrusu bufferdaki ilk 256 byt'ı okudum.
Bu arada STM'nin init rutinleri dahil tüm kodlar şu an 2040 Byte.
mesaj birleştirme:: 22 Eylül 2016, 18:10:03
MAC adresini 3. şahıslardan saklamalımıyız?
Mesela burda yayınlarsam kötü niyet olursa ne yapılabilir?
Alıntı yapılan: z - 22 Eylül 2016, 16:41:20
Kabloyu modeme bağladım.
STM32'yi resetledim ve ilk gelen paketi daha doğrusu bufferdaki ilk 256 byt'ı okudum.
Bu arada STM'nin init rutinleri dahil tüm kodlar şu an 2040 Byte.
mesaj birleştirme:: 22 Eylül 2016, 18:10:03
MAC adresini 3. şahıslardan saklamalımıyız?
Mesela burda yayınlarsam kötü niyet olursa ne yapılabilir?
http://security.stackexchange.com/questions/67893/is-it-dangerous-to-post-my-mac-address-publicly (http://security.stackexchange.com/questions/67893/is-it-dangerous-to-post-my-mac-address-publicly)
Hocam burada enine boyuna konuşulmuş. Bazı anektotlardan bahsedilmiş, ama genel kanı çokta problem olmayacağı yönünde. Bir de şu teknik bilgi var, sizin ağınızdaki cihazların MACleri sizin ağınızda kalır. Peki bizim modem'in MAC'i nerde kalır? Onu ben de bulamadım. Mesela benim komşu benim modemin MAC'ini bir şekilde kendi modemine gömüp internete çıkmaya kalksa Superonline bize küser mi?
Alıntı yapılan: z - 22 Eylül 2016, 16:41:20
Kabloyu modeme bağladım.
STM32'yi resetledim ve ilk gelen paketi daha doğrusu bufferdaki ilk 256 byt'ı okudum.
Bu arada STM'nin init rutinleri dahil tüm kodlar şu an 2040 Byte.
mesaj birleştirme:: 22 Eylül 2016, 18:10:03
MAC adresini 3. şahıslardan saklamalımıyız?
Mesela burda yayınlarsam kötü niyet olursa ne yapılabilir?
Denemelerinizde MAC adresini 01:02:03:04:05 olarak kullanabilirsiniz. Ağınızda aynı MAC adresli kimse olmadığı sürece sıkıntı yok. Eğer IEEE den kendiniz alacaksanız adamlar firmaya tescilleyerek satıyor( min satış adeti 4096 ) dolayısı ile sizin MAC adresini biri kullanırsa davalık olursunuz.
Fakat eninde sonunda web server yapacağım. O zaman da mı sorun olmayacak?
Modemin arkasına gizlenirsem sorun yokmu yani?
Mac adresini kullanarak modeminize sadece istediğiniz cihazların bağlanmasını sağlayabilirsiniz
LG-D802 cihazımdan Tapatalk kullanılarak gönderildi
Alıntı yapılan: z - 22 Eylül 2016, 19:00:45
Fakat eninde sonunda web server yapacağım. O zaman da mı sorun olmayacak?
Modemin arkasına gizlenirsem sorun yokmu yani?
Evet aynen öyle
ARP paketi yakaladığımı söylemiş ve paketi kendimce açıklamıştım. Gerbay hala ortalıkta yok.
Açıklamamda hata varmı? Bu konuya açıklık getirebilecek varmı?
Neden Flagda Length Out of Range hatası alıyorum?
https://www.picproje.org/index.php/topic,65601.msg510471.html#msg510471 (https://www.picproje.org/index.php/topic,65601.msg510471.html#msg510471)
----------------------
ARP sorgusuna vereceğim cevap basit görünüyor. Fakat bana gelen paketteki
Gönderen Protokol Adresi: 0xC0A80101 (SPA) Sender Protocol Address
Hedef Donanım Adresi: 0x0000000000 (THA) Target Hardware Address
Hedef Protokol Adresi: 0xC0A80117 (TPA) Target Protocol Address
Prorokol adresleri ne anlama geliyor bilmek istiyorum.
ARP sorgusuna verilecek cevap için https://tr.wikipedia.org/wiki/Adres_ (https://tr.wikipedia.org/wiki/Adres_)Çözümleme_Protokolü
ARP Mesajının İşlenmesi
Bir IP paketi gönderilmeden önce Ethernet ağlarında iki paket daha aktarılır ve paketin gönderileceği düğümün fiziksel adresi bulunur. Bu işlemi aynı varış düğümüne gidecek paketler için tekrar tekrar yapmak anlamsızdır. Bu nedenle bir IP_adresi-Donanım_adresi eşlemesi yapıldığında bu bilgi bir süre ARP cep belleğinde tutulur. Belli bir süre kullanılmamış adresler, bellekte yer sorunu varsa silinir.
Bir ARP mesajı alan düğüm aşağıdaki işlemleri gerçekleştirir
1)Mesajın geldiği düğümün IP adresi ve MAC adresilerinin ARP cep belleğinde olup olmadığının testi yapılır. Varsa eski donanım adresinin yerine, gelen mesajdaki donanım adresi yazılır.
2)Mesajın operasyon bölümüne bakılır.
Bu bölüm istek mesajı ise bir cevap mesajı hazırlanır. Cevap mesajında, gelen mesajdaki gönderen ve varış adreslerinin yerleri değiştirilir. Gönderen donanım adresi bölümüne mesajı hazırlayan bilgisayarın donanım adresi yazılır. Operasyon alanına, 2 değeri verilir.
Bu bölüm cevap mesajı ise daha önce istek gönderilmiş olup gelen bilgiler cep belleğe eklenir.
Yayınlanan tüm ARP mesajlarındaki verilerin ARP cep belleğine konması, cep belleğin kısa sürede dolmasına neden olur. Bu nedenle, bilgisayarlar sadece kendilerini hedef alan ARP mesajları ile ilgilenirler.
@gerbay hocam çok çok sağolasın.
Alıntı Yapşimdi sen bu paketi aldığında sorulan IP senin IP adresin ise ARP response paketi hazırlayıp göndermelisin.
Broadcast yayın ile sorulan ARP sorgusunu alınca, hedef IP alanına bakıp aaaaaa bu benim IP o zaman cevap vereyim diyeceğim ama
ben daha yeni Power On oldum. Kendi IP'mi bile bilmiyorum. Bu durumda ARP sorgusuna cevap veremem ki.
Gene kaçırdığım bir şey mi var?
Kendi IP'mi bilmediğim için BU ARP pakete cevap vermeyip bir sonraki pakete mi bakayım?
Fakat en azından bu bilgilerle ARP sorgusunu cevaplayan fonksiyonu yazabilirim.
Modemde HDHCP sunucuda başlanıç ve Bitiş IP aralığı editlenebilir şekilde.
Ok. Şimdilik kendime statik bir IP seçeyim. (Asıl hata bende. Web server yapacağıma göre benim IP zaten statik olmak zorunda)
ARP içinde gelen 192.168.1.23 zaten daha önce bahsettiğim ve MAC adresini kullandığım IPOD'a ait IP imiş. Bu bir rastlantı mı?
Yani çipimin MAC adres registerlerine IPOD'un MAC adesini gömmüştüm.
-------------------------------------
Serveri (modemi) peş peşe sorgularla acaip yoran, diğer cihazların yerine de cevap vermeye kalkan ve networkün canına okuyan kötü niyetli pis bir cihaz
yapmak bayağı kolay gibi hisse kapıldım.
Zira gelen paketleri filitreleme için ENC çip bana biraz esneklik kazandırıyor.
Neyse işin puştluğuna gitmeye gerek yok. Belkide sandığım kadar kolay değildir.
Terorizm illa silahla yapılacak diye bir şart yok o zaman.
DDOS hocam senin o dedigin. Devamli sorgulamak veri istemek boylelikle sunucuyu devre disina cikarmak (eger guvenlikle alakali bir sunucuysa sonrasini siz dusunun) icten bile değil. Tabi guvenligi alinmamissa..
Neyse terörizm bir kenara.
Bu konuya merak saldığım günden itibaren daha 1 hafta bile geçmedi ve daha önce hiç merak salmadığım internet ve ethernet üzerine yüzeysel de olsa çok şey öğrendim.
Şu anda ENC28J60 çipimle de kanka oldum.
C ile uğraşıp led yak söndür projelerinin ötesine geçmek isteyen arkadaşlara şiddetle bu projeyi öneriyorum.
ENC28J60 driver kısmını yazamıyorsanız boşverin kütüphane kullanın.
Driver üzerine yazacağınız kodlar için kütüphane falan kullanmayı bırakın C ile bizzat siz kod yazarak gelen paketleri yakalayın ve paketlere cevap hazırlayıp yollayan kodları yazın.
Çok tatlı bir proje. Pratik yapmak için ne yapayım diye falan hiç arayışa girmeyin.
Bundan güzel pratik yapma projesi olmaz. C bilginizi de acaip ilerletirsiniz.
Abartmadan söylüyorum picproje sitesinde bu güne kadar uğraştığım en zevkli proje bu oldu.
Keşke TCP/IP Stack kodu yazıpta ne yapacan al hazırını kullan diyenlerin bu sözleri hiç kulağımda yer etmeseymiş.
Hatta bundan böyle aralarında uzak mesafe olan iki işlemcim arasında veri transferi yaparken ENJ28J60 çipini kullanmayı bile düşünmeye başladım.
Kendime kendi kurallarını koyduğum basit bir katman yazarım.
Hocam Stm32 yi tarayıcı üzerinden mi Delphi programı ile mi haberlestiriyorsunuz.İki taraflı veri gönderimi olacakmı..
Alıntı yapılan: gerbay - 23 Eylül 2016, 13:11:39
hocam hayırdır ASM dememişsin.. kırmızı hap yaramaya başlamış..
ben dedim network stack yazmaya uğraşmayın, alın lwip yi kullanın diye.. halen de aynı şeyi söylüyorum...
hocam sen daha bir şey görmedin network ve ethernet ile ilgili.. bu yaptıklarında kayda değer bir şey yok henüz..
şu an elektronik devrende seri port ihtiyacın olduğunda ne yapıyorsun hocam? TTL entegrelerle shift register lar ile UART devresi mi tasarlıyorsun yoksa MCU nun içindeki hazır UART donanımını mı kullanıyorsun..
olay bunun gibi.. eğer TTL entegreler ile UART devresi yapıp bağlıyorsan network stack de yaz.. yok eğer MCU nun içindeki hazır UART ı kullanıyorsan network stack için de lwip yi kullan geç..
zaten ASM ile web server a kadar ilerleyemezsin hocam.. C ye geçmen gerekir.. gerçi web server dan ne kast edildiğine de bağlı bir durum bu..
hocam bir beyin fırtınası yapalım, senaryo şu;
server ı boğuyorduk ya... neden kendi MAC adresimiz ile yapalım ki bunu.. diyelim ki internet de bazı yerlerin IP ve MAC adreslerini topladık (ki bu çok kolay). bir liste oluşturduk, kendi MAC ve IP adresi alanlarımıza sırası ile o listedeki bize ait olmayan bilgileri doldurup doldurup hedef server ı bombardıman ediyoruz..
bu durumda bombardıman eden nasıl bulunur? var mı bir öneriniz?
Hocam konu başladığı günden beri sıkı bir takipçisiyim,
@z hocama da elimden geldiğince destek olmaya çalıştım çünkü basit de olsa komplex de olsa ortaya bir döküman-rehber çıkacağını düşünüyordum. Siz lwIP dediğiniz zaman da ST'nin Cube paketlerindeki lwIP örneklerini incelemeye başladım. Etherneti olan olmayan işlemcilerde ne gibi farklılıklar olacak bunları anlamaya çalıştım. Şimdi elimdeki işleri bitirip yavaştan ben de bu ethernet işine girmek istiyorum. ESP ile yaşadığım hüsranı (esp-01 ilk sürümünü almıştım ve çok sorunluydu) ve hiç bir şey öğrenememiş olmamı da bu konuyla ve ENC ile kırmayı hedefliyorum.
lwIP de bana çok karmaşık geliyordu, hala daha öyle, ama iyi gidiyorsunuz. Lütfen devam edin. Teşekkürler.
Zombi pc lerden bahis mi hocam ? Ama zombiyi kim kullaniyor bu bilgimle bulamam.
Alıntı yapılan: gerbay - 23 Eylül 2016, 13:11:39
server ı boğuyorduk ya... neden kendi MAC adresimiz ile yapalım ki bunu.. diyelim ki internet de bazı yerlerin IP ve MAC adreslerini topladık (ki bu çok kolay). bir liste oluşturduk, kendi MAC ve IP adresi alanlarımıza sırası ile o listedeki bize ait olmayan bilgileri doldurup doldurup hedef server ı bombardıman ediyoruz..
bu durumda bombardıman eden nasıl bulunur? var mı bir öneriniz?
Hocam mac adresi gizlenirse bi problem olmaz ama IP sahte bir ip ile değiştirilirse etki alanımız çok daralır.Çünkü TCP protokollerinden hiç birini kullanamayız three way handshake den dolayı.Yani IP yi gizleyerek saldırma ancak bi yerel ağda olabilir kanımca.Yanılıyor da olabilirim hocam.Yerel ağda da şu şekilde tespit edilebilir:
Ağ trafiğini izleriz hangi client a SYN paketleri gitmiyosa saldırıyı yapan muhtemelen odur.
Konu Dagılacak Ama,
@gerbay hocam okumuş ama anlamamışım, siz toplanmış mac ve ip lerin değişiminden bahsediyormussunuz ? yine bulamazdım :)
MAC nasıl olacak ?
serial ethernet çevirici yapıp satmak için eth stackmi yazmak gerekiyor ?
@gerbay hocam
ENC çipli Web server ile mesela şunları yapmayı hedefliyorum.
İnternete girip evdeki ENC çipli serverime ulaşayım ve STMnin hazırladığı bir HTML sayfayı göreyim.
HTML sayfada yeralan veriler ENC'ye hükmeden STM işlemci ile an ve an değişsin. Mesela ADC değeri bu GPIO pinindeki değer bu gibi.
Çıtam çok mu yüksek.
ASM ile olmaz mı bu işler? Bence olur.
mesaj birleştirme:: 23 Eylül 2016, 14:28:37
Alıntı yapılan: crazy - 23 Eylül 2016, 13:10:16
Hocam Stm32 yi tarayıcı üzerinden mi Delphi programı ile mi haberlestiriyorsunuz.İki taraflı veri gönderimi olacakmı..
Hangi açıklamama karşılık sordun bunu tam anlamadım.
2 MCU'yu birbirine bağlamakla ilgili yazımdan bahsediyorsan mesela 2 STM yi haberleştirmekten bahsettim.
İşin içine PC girerse PC'nin ethernet portunu kullanan yazılımına müdahale edemem.
Delphi programı ledi yak söndürmek, Stm32 üzerinden analog veriyi veya buton durumunu Delphi veya benzeri programla pc üzerinden gözlemlemek gibi.
mesaj birleştirme:: 23 Eylül 2016, 14:28:37
Hangi açıklamama karşılık sordun bunu tam anlamadım.
2 MCU'yu birbirine bağlamakla ilgili yazımdan bahsediyorsan mesela 2 STM yi haberleştirmekten bahsettim.
İşin içine PC girerse PC'nin ethernet portunu kullanan yazılımına müdahale edemem.
[/quote]
Linked Liste aşina olmadığımı nerden çıkardın. Gerçi şimdilik kullanmayacağım ama gerekirse kullanırım.
Linked List lie ilk kez nerde karşılaştım yazayım.
PC için bir editor yazmıştım. Metni başlıyorum yazmaya diyelimki metnin ortasından bir harf sileceğim harfi silip harften sonra ne kadar veri varsa 1 byte kaydırıyordum.
Yada araya bir karaker ekleyeceksem eklemek istediğim noktadan en sona kadar ne kadar karakter varsa bir kaydırıp daha sonra da insert edeceğim karakteri yazıyordum.
Kısa metinlerde sorun yoktu ama metin boyu fazla oldumu karakter silmek yada araya karakter eklemek belirgin bir yavaşlığa neden oluyordu.
Bilgisayar Mühendisi bir arkadaşıma bu word falan bunu nasıl hızlı yapıyor üstelik asm ile kodluyorum diye sormuştum.
Arkadaşım Linked List yapman gerekir demişti ve mantığını anlatmıştı.
Basit bir çapraz adres tablosu yapıyordum. Dosyayı diske yazarken bu tabloya göre silinen eklenen ne varsa yerli yerine giriyordu.
Sanırım bahsettiğin linked list bu. Gerekirse gene kodlarım.
-----------------
DOS ve Win98 zamanındaki command prompta çalışan PC uygulamalarımın tamamını ASM ile yazdım ve bu uygulamalar yıllarca devletimize hizmet etti. Programların yapacağı hatada kellem bile gidebilirdi. Ama çok şükür hayattayım ve hapislerde değilim.
Bir kaç KB küçük uygulamalar değil. Kimi zaman com uzantısı yerine exe uzantılı kod bile yazmam gerekiyordu. Anla işte uzunlukları. Ama ne olduklarını da yazmak istemiyorum.
RTOS gerekirse araya virgül koyar işimi görecek kadarını yazarım hocam.
Sonuçta kullandığım dili boşver.
Alıntı yapılan: gerbay - 23 Eylül 2016, 13:11:39
hocam hayırdır ASM dememişsin.. kırmızı hap yaramaya başlamış..
ben dedim network stack yazmaya uğraşmayın, alın lwip yi kullanın diye.. halen de aynı şeyi söylüyorum...
hocam sen daha bir şey görmedin network ve ethernet ile ilgili.. bu yaptıklarında kayda değer bir şey yok henüz..
şu an elektronik devrende seri port ihtiyacın olduğunda ne yapıyorsun hocam? TTL entegrelerle shift register lar ile UART devresi mi tasarlıyorsun yoksa MCU nun içindeki hazır UART donanımını mı kullanıyorsun..
olay bunun gibi.. eğer TTL entegreler ile UART devresi yapıp bağlıyorsan network stack de yaz.. yok eğer MCU nun içindeki hazır UART ı kullanıyorsan network stack için de lwip yi kullan geç..
zaten ASM ile web server a kadar ilerleyemezsin hocam.. C ye geçmen gerekir.. gerçi web server dan ne kast edildiğine de bağlı bir durum bu..
hocam bir beyin fırtınası yapalım, senaryo şu;
server ı boğuyorduk ya... neden kendi MAC adresimiz ile yapalım ki bunu.. diyelim ki internet de bazı yerlerin IP ve MAC adreslerini topladık (ki bu çok kolay). bir liste oluşturduk, kendi MAC ve IP adresi alanlarımıza sırası ile o listedeki bize ait olmayan bilgileri doldurup doldurup hedef server ı bombardıman ediyoruz..
bu durumda bombardıman eden nasıl bulunur? var mı bir öneriniz?
Bu ancak switch tarafından bilinebilir gibi geliyor. Başka türlü kaynağa ulaşılamaz sanki.
Alıntı yapılan: gerbay - 23 Eylül 2016, 14:16:17
boğmak için ille de tcp/ip gerekmiyor ki. udp yi ya da video streaming protokollerinden birini dayarız..
şimdi aklıma fikir geldi..
şimdi @z hocamın projeyi alsak, "serial to ethernet converter" diye pazarlasak 50-100 tl den satsak iş yapar mı?
Hocam ISP ile anlaşıp router'lar incelenip yukarı da bahsettiğim yöntem ile bulunamaz mı?Saldırıların yapıldığı adreslerde hiç SYN paketi almayan kullanıcılar incelenebilir.
Sonuçta Uç Nokta MAC ve IP değişse bile Aynı anahtardan geçecek ? onu bulamazmıyız ?
Alıntı yapılan: muhittin_kaplan - 23 Eylül 2016, 16:44:54
Sonuçta Uç Nokta MAC ve IP değişse bile Aynı anahtardan geçecek ? onu bulamazmıyız ?
Hocam local ağ için konuşursak dediğiniz doğru.Ama paket internete çıktığında bir sonraki local ağa kadar routerlar üzerinden geçer.
@gerbayHocam şimdi bu serveri yaptığımda sadece ben bağlanıp browserden izleyeceğim diye düşünüyordum.
Halbuki bu bir sayfa olacaksa birden fazla kişi aynı zaman aralığında girmek isteyecektir. Bu nedenle mi linked list ve rtos lazım diyorsun.
Birden fazla kullanıcı olayını düşününce evet ileride kod yazmak gitgide zorlaşacak. Bu konuya açıklık getirebilirmiyiz?
Ben şu ana kadar, gelen paketi al, cevabını oluştur yolla şeklinde yazmayı düşünüyordum.
Birden fazla kişi servere bağlanmak isterse bu yazma sitilim beni yarı yolda bırakacak kadar işleri karmaşıklaştırırmı?
Alıntı yapılan: gerbay - 23 Eylül 2016, 17:03:53
syn paketi tcp de var, biz "connectionless" protokollerden birini dayadığımızda geriye doğru gelebilmek için switch ler üzerinden geriye doğru gelip bölge daraltarak bulabilirler ancak..
Haklısınız hocam UDP yi bi an unutmuşum.
Normalde ddos saldirilari server cökmediyse ssh üzerinden saldiranin ip si ögrenelinebilir.
40 bin tane android cihazı tor üzerinden proxyleyip DDoS yapıyorsa ne yapacaksınız ?
@z izlediğiniz yol derinlemesine network haberleşmesi öğrenmek için iyi bir yol. Ancak bir ürün ortaya koymak için uygulanabilecek en kötü yol.
@gerbay size yardım ediyor. Çünkü böyle kompleks bir işte ASM kullanmanın neden bu kadar gereksiz olduğunu anlamanızı istiyor. Daha önce yazdığım 3 maddeyi bitirseniz bile sonucun bir lwIP v.b. kullanmaktan daha hızlı olmayacağını göreceksiniz. Diğer yandan deneyimleriniz buradaki pek çok kişiye ders niteliğinde olacak.
Araya tor girdimi dedigim gecerli degil.
@Burak BAmaç web server yapmak değil. Amaç web server projesimi sıfırdan kodlamak. Oldu oldu olmadı bırakırım. Ürün falan yapma amacım yok. (Proje biterse bitmiş projeyi belki ürün yaparım)
Elimden asm alınsa MCU'lara program yazmayı da bırakırım. İliklerime işlemiş, hastasıyım, tiryakisiyim, fanatiğim. O derece yani.
Ha bu arada projelerimi C ile de yazacak kadar C biliyorum.
@z hocam bu yapmaya çalıştığım işi piç ile yapmışlardı sanırım aynı eth cipi ile , gözüme bir yerde çarpmıştı, bu proje daha önce yapilmista siz asm ile mi yapmaya çalışıyorsunuz yoksa o projelerde hazır lib kullanıldığı için mi tercih etmiyorsunuz.
@gerbay Hocam
Elbette iyi kod yazma sanat işidir. ASM de bu sanatı yaptığımı düşünüyorum.
C ile kötü kod yazmam ama sanat da yapamam. Sanat yapabilmek için yılarını vermek çok emek harcamak lazım.
Sevmeyen ne şiir yazar ne şarkı sözü. Sen hiç işini sevmeyen şair, heykeltraş, ressam gördün mü?
Ama işini sevmeyen branşını sevmeyen çok teknik adam tanırım.
@digimanMCU işlerinde kütüphane sevmiyorum. Yaptığım işi gerçekten anlayarak yapmak istiyorum. Kütüphanenin açık olması bana hiç bir şey ifade etmiyor. Açık kütüphanelere üstün körü bakıyor geçiyorsun. Ama kendin yazınca üstün körü olmuyor gerçekten anlıyorsun. Çünkü anlamadığın şeyi koda dökemezsin.
@gerbay hocam
Bugün iş yerindeyim. ENC çipimi evde modeme bağlıyordum iş yerinde çapraz kablo ile PC'ye bağladım.
Gelen ilk paket gene 806 paketi oldu.
Tamamını yazmadım ve içeriği şu şekilde
4C C3
57 1C 8C 00
FF FF FF FF FF FF
xx xx xx xx xx xx
08 06
00 01
08 00
06
04
...............Paketler max 1500 Byte olur diyorduk fakat burada çok büyük geldi.
Bu ne anlama geliyor?
Ederim fakat buffer ile ilgili registerlerden kastını anlamadım. (RX Buffer için 4K ayırmıştım)
Bu bizim ARP paketimizin aynısı. Tüm veriler daha önce yazdığın ARP açıklamandaki paketteki formata uyuyor. Fakat başlangıçtan 4 byte çok fazla büyük.
2 gündür zaten çip bugları ile sorun yaşadığımı sanıyorum.
Erretalara baktım RX Bufferı okuyan pointerla ilgili bir bug var. Dokümanda çözüm olarak önerilen şekilde düzelttim fakat 2 gündür hâla aynı noktadayım.
Bir şekilde gelen paketlerde veriler kayık kuyuk olursa kontrolu tekrar ele geçirmek çok zor oluyor.
-----------------------------
Daha şimdi farkettim. 2008 dokümanını kullanıyorum. 2004 dokümanlarında var olan bazı registerleri 2008 de kaldırmışlar.
Paketi alıp headerdan data boyutunu tespit edip o kadar veri okuyordum. Fakat böyle yapınca CRC bilgisi bufferda kalıyordu.
Circular buffer okuma pointerini (ERXRDPT) CRC üzerine konumlayarak yeni datalara yer açıyordum fakat circular bufferdaki dataları MCU içindeki lineer buffere çekerken CRC hariç çekiyoum.
Haliyle 1 sonraki paketin headerını çekerken en başa bir önceki pakete ait CRC bilgisi alınıyormuş. İlave olarak çipin circular buffer pointerindaki erreta sorunu işin içine girince bayağı tırmaladım.
SPI ile gelen dataları 4 byte CRC yi de okuyacak şekilde çekince sorun bitti. Böyle yapmak yerine buna ait pointeri de (ERDPNT) ilerletseydim sorun çıkmayacaktı.
Mikrochipin dokümanlarını hep beğenirdim fakat bu doküman çok çok kötü hazırlanmış.
Alıntı yapılan: z - 24 Eylül 2016, 16:57:10
Mikrochipin dokümanlarını hep beğenirdim fakat bu doküman çok çok kötü hazırlanmış.
Bu çipi kullanmayı bıraktığınıda okuyacağız.
Malum mu oldu?
Dün arkadaşım bahsettiğiniz wireless çipten almış.
Demoları tık tık tık derledi web server yaptı. Authentication falan da vardı. Arm tabanlı bir şeymiş.
Güzelmiş. Bu çiple sonuca varırım artık.
Ondan dolayı değil. ESP ile alakalı değil mesele temelde.
2-3 sebebi var. 1 tanesi sizin yazdığınız tespitin daha ileri versiyonu. Bu sebepleri yazmaya gerek duymuyorum. Söyleneni çoğunlukla dikkate almıyorsunuz zaten. Öğrenme yönteminiz aynı yollardan kendinizinde geçmesi şeklinde.
Hazır modül ve kod kullanıp geçmek yerine işin temelinde neler döndüğünü öğrenmek isteyebilecekler için faydalı bir başlık oluyor.
Yüksek standartlara sahip ciddi bir iş yapmak gerekirse tasarımcı esp'yi ya da benzer bir modülü takar geçerim, içinde ne dönüyor beni ilgilendirmez diyemez herhalde. İşleyişin temelini bileceksin ki çıkabilecek sorunlara çözüm üretebilip, güvenilir bir iş ortaya koyabilesin.
Alıntı yapılan: HexfeT - 24 Eylül 2016, 18:23:15
Hazır modül ve kod kullanıp geçmek yerine işin temelinde neler döndüğünü öğrenmek isteyebilecekler için faydalı bir başlık oluyor.
Yüksek standartlara sahip ciddi bir iş yapmak gerekirse tasarımcı esp'yi ya da benzer bir modülü takar geçerim, içinde ne dönüyor beni ilgilendirmez diyemez herhalde. İşleyişin temelini bileceksin ki çıkabilecek sorunlara çözüm üretebilip, güvenilir bir iş ortaya koyabilesin.
Çok doğru.
Alıntı yapılan: z - 24 Eylül 2016, 11:36:19
2 gündür zaten çip bugları ile sorun yaşadığımı sanıyorum.
Erretalara baktım RX Bufferı okuyan pointerla ilgili bir bug var. Dokümanda çözüm olarak önerilen şekilde düzelttim fakat 2 gündür hâla aynı noktadayım.
Bir şekilde gelen paketlerde veriler kayık kuyuk olursa kontrolu tekrar ele geçirmek çok zor oluyor.
-----------------------------
Daha şimdi farkettim. 2008 dokümanını kullanıyorum. 2004 dokümanlarında var olan bazı registerleri 2008 de kaldırmışlar.
Anlaşılan durumunuz bu:
(http://2new3.fjcdn.com/funny_gifs/Fixing+a+bug+in+production+fixing+a+bug+in+production_52192f_5885582.gif)
Alıntı yapılan: gerbay - 17 Eylül 2016, 21:47:57
@z hocam, ben senin yerinde olsam üzerinde MAC bloğu bulunan bir MCU ya geçerdim. endüstriyel açıdan bu daha standartlaşmış bir çözümdür. Bu çözümde ethernet bloğuna dışardan harici olarak PHYTER (physical transceiver) entegresi bağlanır. nasıl ki uart ın önüne rs232 ya da rs422 transceiver takıyorsunuz bu da öyle bir durum.
MCU üzerinde ki MAC bloğu MII/RMII arayüzü ile dışardaki PHYTER e bağlanır. Gigabit desteği olan MAC larda GMII / RGMII / SGMII arayüzleri bulunur. R harfi reduced ı ifade ediyor. daha az hat bağlamak gerekiyor. S harfi ise seri yi ifade ediyor örneğin SGMII seri arayüzdür. gigabit gaberleşme yapabilir.
Phyter entegre sağlayıcı bir çok firma vardır.
örneğin;
http://www.ti.com/product/DP83848-EP (http://www.ti.com/product/DP83848-EP)
http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PFid=13&Level=5&Conn=4& (http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PFid=13&Level=5&Conn=4&)
KS8721BL
DM9161
AM79C875
hocam bu da standartlaşmış birşey.. ciddi birşeyler yapacak arkadaşlar enc28j60 vs spi bağlı çözümlerden uzak dursunlar bence..
Katılıyorum..
STM32F407VG + dp83848cvv phy (http://www.waveshare.com/dp83848-ethernet-board.htm (http://www.waveshare.com/dp83848-ethernet-board.htm)) daha profesyonal bir çözüm olabilir. Hatta frimware deki uygulamalar ile web server tcp/ip örnekleri incelenerek daha rahat uygulanabilir. En azından programı ilk defa çalıştırırken frimware ile geliştirme sürecinde ne nedir diye bakılabilir. Bu arada eval kartlar için var eth örnekleri. eval için pin ataması 407vg ye göre değiştirilmeli RMII MII display ayarlarının Keil de yapılıp 407vg de calıştırılması gerek. Daha hızlı, daha fazla kod alanı, daha fazla GPIO.
@gerbay hocam
Benim IP adresim 192.168.1.22 ise.
Mesajımın en sonundaki paketi aldığımda buna yazacağım cevap şu şekilde mi olacak?
Göndereceğim ARP cevap paketixx xx xx xx xx xx (6 Byte)
My MAC (6 Byte)
08 06
00 01
08 00
06
04
00 02
My MAC .......... (6 Byte)
192 168 1 22
xx xx xx xx xx xx (6 Byte)
192 168 1 1
60 byte'a tamamla CRC enable yap yolla
Bize gelen ARP istek paketiAlıntı Yap8C 00 = sonraki paketin offset i
40 00 C0 03 = status
FF FF FF FF FF FF = dest mac address, broadcast packet
xx xx xx xx xx xx = src mac address
08 06 = network layer protocol = ARP
--- buradan aşağıda ARP header başlıyor ---
00 01 = hardware address space = Ethernet
08 00 = 0x0800, protocol address space = IP
06 = hardware address length = 6 = mac
04 = protocol address length = 4 = IP v4
00 01 = opcode, 1 = request, 2 = reply
xx xx xx xx xx xx = sender's hardware address
C0 A8 01 01 = 192.168.1.1, sender's protocol address
00 00 00 00 00 00 = target's hardware address
C0 A8 01 16 = 192.168.1.22, target's protocol address
00 00 00 00 00 00 = dolgu malzemesi
00 00 00 00 00 00 = dolgu malzemesi
00 00 00 00 00 00 = dolgu malzemesi
-- ARP paketi bitti --
49 0B D0 12 = checksum
Hocam ARP isteğinde bulunan adrese hazırladığım ARP cevabı gönderiyorum.
Diyelimki cevap formatını yanlış hazırladım ve böyle yolladım.
Böyle bir durum varsa bunu nasıl ortaya çıkartırım?
ARP sorgusuna cevap yolluyorum ardından ard arda 0x800 tipinde sorgular geliyor. Çok nadir 0x806 sorgusu geliyor.
800 sorgusuna cevap vermeyince artık paket falan gelmemeye başlıyor. Bu durumda adresime ping atıyorum tekrardan paket gelmeye başlıyor.
IP sorgusuna daha yeni başladım. En büyük sıkıntım güzel dokümanımın olmayışı.
ARP için wikideki açıklamalar çok güzeldi. https://tr.wikipedia.org/wiki/Adres_Çözümleme_Protokolü
IP sorgusu ve verilecek için de bir doküman önerin varmı?
ARP paket için verdiğim cevap doğru demiştin.
Acaba gözden kaçırmış olabilir misin? Verdiğim cevapta Protokol adres boyu, hardware adres boyu gibi değerler yer almamakta.
Haklısın. Ben yatayım kafam durmuş.
ENC28J60 çipini init etmek hakkında hazırladığım yazı. (http://www.cncdesigner.com/wordpress/?p=6149)
Z yi ilgilendiren Internet protokolleri hakkında hazırladığım yazı. (http://www.cncdesigner.com/wordpress/?p=6252)
Bana paket yollaması için iş yerinde ise crosslu kablo ile PC'yi kullanıyorum.
Evde crosslu kablom yok. Bu nedenle internete bağlandığım modemi kullanıyorum. Arada bir modemi resetlersem internete de bir kaç dakikalığına giremiyorum evde sorun oluyor.
Yıllar önce kullandığım Airties ADSL modem boşta. Ancak bunu ECP çipime bağlarsam modem sağlam olduğu halde hiç paket göndermiyor.
Sebebini biliyormusunuz? Modemin muhakkak çalışır bir ADSL hatta mı bağlı olması lazım.
Wireshark programını kurdum fakat nasıl kullanılacağını anlamadım.
PC ile ECP kitim birbirine bağlı.
Aradaki trafiği nasıl izleyeceğim?
ECP kitine giden ve gelen verileri byte byte görmek istiyorum.
"interface list" bölümünden; izleyeceğiniz ağ donanımı seçip "start capture" ile başlatacaksınız.
Ekranın üzt kısmında gelen giden paketleri ve ilgili ip adreslerini vs.. olan liste göreceksiniz.
Listeden bir paket seçtiğinizde , alttaki pencerede paketin verisini göreceksiniz.
en üstte filtre kutusu var. Oradan kaynak ip , hedef ip , protoko vs.. gibi filtrelemeler yapabilirsiniz.
ARP cevabını hazırlayıp gönderdiğimde paket gitti flagı set oluyordu ancak karşı tarafın bu cevabı almadığını düşünüyordum.
Haklıymışımda. Wireshark sayesinde ARP ye cevap gitmediğini gördüm.
Çipin PHCON2 registerindeki TXDIS bitini yanlış yazdığım bir fonskiyon yüzünden set ediyormuşum ve çip verileri lojik anlamda gönderiyor olsa da kabloya basmıyormuş.
Bu sorunu çözünce artık ethernetten datalar gitmeye başladı ve Wireshark ARP sorgusunun hemen ardından ARP cevabını doğru şekilde alıp IP ve MAC değerlerimi çözdü.
Artık paket alıp gönderebildiğime göre umarım bundan sonrası çok hızlı gelişir.
Artık tüm olay al gülüm ver gülüme dönecek.
PC'den ping atınca Type=8 Code=0 olarak ping isteği geldi.
Link1: https://en.wikipedia.org/wiki/IPv4 0x800 nolu IP Sorgusu
Link2: https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers IP protokol numaraları
Link3: https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol ICMP paket yapısı
Link4: https://tools.ietf.org/html/rfc1071 Paketlerde Check Sum hesaplama
@gerbay hocam
Başım dertte.
Check sum hesabı yaparken hangi verilerin hesabını yapacağım anlamadım.
Örneğin IP PAket içinde ICMP paket geldi.
Bu iki paketin de kendilerine ait Check Sum alanı var.
ICMP paket Check Sum değerini hesaplarken Nerden başlayacağım nereye kadar hesaplayacağım?
IP paket Check Sum değerini hesaplarken Nerden başlayacağım nereye kadar hesaplayacağım?
Alıntı yapılan: z - 27 Eylül 2016, 15:44:30
@gerbay hocam
Başım dertte.
ICMP paket Check Sum değerini hesaplarken Nerden başlayacağım nereye kadar hesaplayacağım?
IP paket Check Sum değerini hesaplarken Nerden başlayacağım nereye kadar hesaplayacağım?
https://ask.wireshark.org/questions/11061/icmp-checksum
https://tools.ietf.org/html/rfc792
@gerbay hocam
Şu anda çok sevindiriğim çünkü ping atıldığında cevap verebiliyorum.
Peki bundan sonraki aşamam ne olacak?
http://youtu.be/Y7DX8yEP0gg (http://youtu.be/Y7DX8yEP0gg)
Hep tek pakete muhatap olacağımı sanıyordum. 0x800 paketi yüzünden tüm kodlamayı yeni baştan yapmak zorunda kaldım. Paket içinde paket geleceği hiç aklıma gelmemişti.
Aşağıdaki resmi daha yeni anlayabildim.
(http://flylib.com/books/3/223/1/html/2/files/01fig07.gif)
Olay aynen böyleymiş.
(http://www.matryoshka.biz/images/7/rglv__1.jpg)
Kırmızı hapın devamı olmayacak mı?
(http://www.f2r.net/wp-content/uploads/2010/06/red-pill-300x225.jpg)
Bundan sonraki aşama da TCP Protokolmü kodlanacak bilen varmı?
Aşağıdaki linkte verdiğim uygulamayı yükleyin ve öğrenmeye anlamaya çalışın size çok faydası olacaktır bu noktadan sonra.
http://ostinato.org/downloads (http://ostinato.org/downloads)
Şu anda önümü göremiyorum ve şu soru kafamı kurcalıyor.
Birden fazla kişi web serverdaki sayfama girerse bana gelen TCP paketleri
tek tek işleyip cevap yazmam yetecek mi?
Her sayfaya girene ayrı bir array vs acmam gerekecekmi?
https://en.wikipedia.org/wiki/User_Datagram_Protocol UDP protokolü için doküman
https://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP protokolü için doküman
1 - Aynı anda kaç kişi aynı porta bağlanabilir(mi)ki acaba ?
2 - Bağlansa bile ne kadar süre bu portu işgal edebilir ?
3 - Uzun süre işgal ederse diğer bağlantı nasıl bir muamele görür ?
4 - 65535 adet port bize tahsisli mi ? Hepsini kullanabilir miyiz ?
bunların bir hilesi olmalı değil mi
@gerbay :)
Alıntı yapılan: gerbay - 27 Eylül 2016, 22:32:48
TCP için erken, önce UDP yi yap hocam.. network de ayrı ayrı pc ler aynı anda sana ping atarsa ne yapıyorsun?
Pinglerde sorun yok gibi. İşin içine 1500 byte'dan fazla datalar girince işler karışacak mı o yüzden soruyorum.
Aynı andan kastım t=0 da 10 kişinin benden istekte bulunması değil tabiki.
Birisi 3000 byte html sayfası cekecek diğeri 3000 byte data çekecek. Tek pakette 1500 byte yollayabiliyorum. Bundan dolayı ne olacak kestiremiyorum.
@Burak BAlıntı Yap
1 - Aynı anda kaç kişi aynı porta bağlanabilir(mi)ki acaba ?
2 - Bağlansa bile ne kadar süre bu portu işgal edebilir ?
3 - Uzun süre işgal ederse diğer bağlantı nasıl bir muamele görür ?
4 - 65535 adet port bize tahsisli mi ? Hepsini kullanabilir miyiz ?
Hiç bir şey anlamadım. Mevcut sorunu söyleyin ki programı nasıl yazacağız nasıl bir strateji uygulayacağız baştan bilelim.
@gerbay hocam
Ne olur bırak şu dil meselesini. Farz et ASM değil de C kullanıyorum.
Fakat Kütüphane yok, RTOS yok olmaz mı?
İşlemci zamanını etkin bir biçimde parçalara bölersek olur herhalde. Hafızayıda baya iyi idare etmek lazım. Birde zaman aşımı kullanmak gerekebilir. Yoksa sürekli loop larda beklemek gelen paketlerin çöpe gitmesine neden olabilir mi bilemedim ?
Alıntı yapılan: z - 27 Eylül 2016, 23:16:17
@Burak B
Hiç bir şey anlamadım. Mevcut sorunu söyleyeyin ki programı nasıl yazacağız nasıl bir strateji uygulayacağız baştan bilelim.
Alıntı yapılan: Burak B - 27 Eylül 2016, 21:25:16
Aşağıdaki linkte verdiğim uygulamayı yükleyin ve öğrenmeye anlamaya çalışın size çok faydası olacaktır bu noktadan sonra.
http://ostinato.org/downloads (http://ostinato.org/downloads)
O soruların hepsine yanıt aramanız gerekecek. Ama
@gerbay' ın da dediği gibi şimdi değil UDP' yi deneyin önce. Bu iş RTOS olmadan da olur tabii; neden olmasın ? Oluyor da zaten. lwip bunu yapıyor.
1 dakika şimdi. Neden işlemci zamanını parçalara bölmem gerekiyor?
Ben şöyle yapmayı düşünüyordum. Bu yapıda sorun varmı?
IP paket geldi. İçine baktım benden ne isteniyorsa ilgili rutin cevap yazacak ve yolllayacak.
Bu işlemi mili saniyeler içinde işlemci yerine getirecek. Ardından gene paket bekleyeceğim.
Ping atarken 1<ms ve TTL değerleri gözünüze ilişmiştir. Bir timer mekanızması oluşturmanız gerekiyor ve tüm modüller buna bağlı olmalı. Öyle ki bir loop tüm sistemi durduruyor olsa bile bu timer etkilenmesin ve verileri alıp pompalamaya devam etsin. Etsinki işleyemediğiniz veriler çöpe gitmesin. Web server kısmına kadar geldiğinizde çok daha büyük verileri işleyebiliyor olmanız gerekecek.
Ayrıca fragmente olmuş paketlerin her zaman düzenli sırada geleceği gibi bir fikrede kapılmamak lazım. Her an herşey olabilir. Şunuda unutmayın handshake yapmıyorsunuz. Mesela UDP protokolünde gönderici belli bir miktar veriyi ağa bırakır ve unutur. Siz bu veriyi işleyebilecek kadar hızlımısınız ? Bu veri 10Mbayt bile olabilir ! Mesela Video verisi olabilir. MTU 1500 olduğuna göre. Bu iş nasıl olacak.
1ms ve TTL değeri gözüme ilişti de bunlarla hiç işim olmadıki.
Bu değerler ping atan tarafın sorunu değil mi?
Muhakkak işin içinde pislik var. Ama inanın uyarmaya çalıştığınız sorunu göremedim henüz.
Ben olaya şöyle bakıyorum.
Bana birileri bir paketler yolluyor. Paketi açıyorum içinden isteklerini belirten bir not çıkıyor.
İstediklerini pakete doldurup yolluyorum. Sonra gelen diğer paketi açıyorum.....
Bu paketler zaten ENC çipindeki bufferda kuyruğa girmiş durumda. Bunları tek tek alıp
herbirini açip işlemiyorum.
Mesela paketleri açtım, her biri kırmızı kalem istemiş. Gidip dolaptan kırmızı kalemleri getirip
her birine 1'er tane koymuyorum.
1. paketi açıyorum 1 kırmızı kalem 1 dola kalem istemiş. Pakete koyuyor yolluyorum. 2. paketi açıyorum.
Yanlış yolda mıyım?
Tabiki bir değil birçok pislik var. Aslında başından beri
@gerbay' ında anlamanızı istediği şey bu. Ama bunu öğrenerek göreceksiniz. Amacım sizi yıldırmak yada gözünüzü korkutmak v.s. değil bu arada. Biraz ışık tutmaya çalışıyorum sadece.
Alıntı YapTabiki bir değil birçok pislik var. Aslında başından beri @gerbay' ında anlamanızı istediği şey bu. Ama bunu öğrenerek göreceksiniz. Amacım sizi yıldırmak yada gözünüzü korkutmak v.s. değil bu arada. Biraz ışık tutmaya çalışıyorum sadece.
Gerbay kusura bakmasın.
Sorun varsa açık açık sorun anlatılır.
Gerbayın bana başından beri dediği şu.
ASM kullanma.
RTOS kullan.
List link kullanman lazım.
Ben de ister istemez neden asm ile olmasın diyorum. Çünkü elle tutulur somut bir neden göstermiyor. (ASM yı unutun saf C diyelim )
Karşımda bir canavar var diyorsunuz ben bu canavarı daha görmedim ve canavarın zırhını nasıl bir sopa ile delebilirim bilmek istiyorum.
Canavarı 1 cm kalınlığındaki sopayla mı öldürebilirim 10 cm kalınlığındaki sopa ile mi?
Gerbay sopa kullanma tüfek kullan diyor sadece. İyi ama ben sopa ile öldüreceğim.
Kod yazıp yazıp aaa bu böyle olamalıydı diyip sil baştan kod yazmak istemiyorum.
Bunu 2 kez yaptım ve artık işler zorlaşacak. O yüzden şu anki sorunları daha açık tarif etmenizi istiyorum.
mesaj birleştirme:: 28 Eylül 2016, 00:00:22
Alıntı yapılan: gerbay - 27 Eylül 2016, 23:47:23
hocam UDP protokolü "connectionless" dır, TCP ise "connection orinted" bir protokoldür. yani işin özeti TCP de bağlantıların hepsini yönetmeniz lazım. hem de bir sürü açıdan yönetmeniz lazım.
Ah bir anlasam dediklerini.
Dediklerinden bir şey anlamadım, yaşayacak mıyım doktor sen onu söyle.
Z hocam gerbayin C kullan demesinin sebebi sanirim C ile yaz da forumdakilerde faydalansin diye, ASM yi iyi derecede bilen belki forumda bir elin parmaklarini gecmez. Aksi durumda belki sadece nefsinizi korluyor olabileceksiniz :). projenin geldigi noktayi paylastiniz mi blogunuz da yoksa bitince mi?
Olay kod yazıp yayınlamak değil. Internette bir ton kod var zaten.
Bu başlık biraz dağınık olsa bile benim gibi bu işlerden hiç anlamayanlara bir ton bilgi sunuyor.
Blog sayfamda olayların sözel anlatımını yapıyorum. Asıl lazım olan da bu.
Ne yapacağını biliyorsan programını da yazabilirsin. Bu başlıkta internette giden gelen paketler nasıl işleniyor onu tartışıyoruz.
Şu anda sorunum ne yapacağımı biliyor olamamak. Bu eksikliği de bu başlıktaki sorularıma gelen cevaplarla gideriyorum.
Mesela ethernet çipi ile modem buluştuğunda modem benim haberim bile olmadan çipimle konuşup MAC adresini öğrenebiliyormuş.
Modem benim IP numaramı ARP sorgusu ile öğreniyormuş.
ARP sorgusunu yapan paket nasıl bir şeymiş. Buna nasıl cevap veriliyormuş. Ping atılınca çipime nasıl bir paket geliyormuş vs vs.
Burda hep anlatıldı. Blog sayfamda da geriden yavaş yavaş sözel olarak öğrendiklerimi yazıya döküyorum.
Ethernet paketi nedir, internet paketleri nedir, ARP nedir ICMP nedir hiç bir şey bilmiyordum. Burda yavaş yavaş bir şeyler öğrenmeye başladım.
Şimdi mesela TCP de port telefuz edilmeye başlandı. İşyerindeki ağ işlerine bakan arkadaşlar aman şu şu portları kapayalım diye konuşurlarken duyuyordum. Şimdi bunun da ne anlama geldiğini yeni öğreneceğim.
Projeyi olur da bitirirsem kütüphane yapar paylaşırım.
@gerbay Alıntı yapılan: gerbay - 27 Eylül 2016, 22:32:48
TCP için erken, önce UDP yi yap hocam.. network de ayrı ayrı pc ler aynı anda sana ping atarsa ne yapıyorsun?
Hocam UDP protokolünü önce yapmak, TCP ye geçince ihtiyacımız olacağından ötürü mü böyle yazdınız ? Yoksa UDP daha Basit onu hallet sonra Zor Olan a mı geç diyorsunuz ?
UDP'yi öğrenince neden TCP' ye ihtiyaç olduğunu daha iyi anlarsınız. TCP' yi öğrenince de UDP' nin neden hala gerekli olduğunu. Ama bunu bir basamak olarak düşününce UDP' yi öğrenmek önce gelir. Çünkü TCP' ye göre daha kuralsızdır.
Tamam küçük udp yi yazmaya çalışayım.
UDP yazılımımı test edebilmek için PC'de hiç program yüklemeden windowsun ping komutu vs gibi basitçe bir utility varmı?
MAC vardı Ip vardı tamam bunları anladık şimdi UDP ve TCP headerda port diye bir kavram çıktı.
Bundan bahsedermisin? Port adresini nerde kullanıyoruz?
Mesela Ip adresime internet tarayıcı ile girdiğimde Merhaba Dünya yazan basit bir web uygulamasıyla portun ne alakası var port ne değer alacak?
Sanırım Yazılımsal Portlardan Bahsediyorlar hocam, örneğin 80 gibi yada 22 (ssh)
https://tr.wikipedia.org/wiki/TCP_ve_UDP_port_numaralar%C4%B1_listesi (https://tr.wikipedia.org/wiki/TCP_ve_UDP_port_numaralar%C4%B1_listesi)
ping
http://bilsimteknolojilerii.blogspot.com.tr/2013/01/cmd-ile-ping-atma.html (http://bilsimteknolojilerii.blogspot.com.tr/2013/01/cmd-ile-ping-atma.html)
Alıntı YapAlıntı yapılan: Burak B - 28 Eylül 2016, 21:25:16
Aşağıdaki linkte verdiğim uygulamayı yükleyin ve öğrenmeye anlamaya çalışın size çok faydası olacaktır bu noktadan sonra.
http://ostinato.org/downloads (http://ostinato.org/downloads)
Hocam bahsettiğiniz programı indirdirken MAC'ında virüs sileyim vs sayfalar açınca tırstım. Gene de indirdim ama henüz kurmadım.
Bir de Packet Sender diye bir uygulama bulup onu da indirdim fakat onu da kurmadım.
Eğer windowsun hazırda basit bir uyguması varsa onu çalıştırayım istemiştim.
UDP'yi test etmek için tamam ilave bir yazılım gerekiyor.
Mesela TCP için web gezgininde kendi IP numaramı yazıp enterleyince MCU küt diye içi boş TCP paket fonksiyonuma düştü.
Şu port meselesine cevap yazmayacakmısınız?
Alıntı YapMAC vardı Ip vardı tamam bunları anladık şimdi UDP ve TCP headerda port diye bir kavram çıktı.
Bundan bahsedermisin? Port adresini nerde kullanıyoruz?
Mesela Ip adresime internet tarayıcı ile girdiğimde Merhaba Dünya yazan basit bir web uygulamasıyla portun ne alakası var port ne değer alacak?
Port kavramı ile USB'deki End Point kavramı benzer şeyler mi?
Web uygulamasında 80 port numarasını alacak. Port adresi içeride o paketi hangi programın kullanacağını yada kullandığını belirtmek için kullanılır. Bu SSH için farklıdır, WEB için ayrıdır SMTP için ayrıdır. Özel portlarda vardır atıyorum 25000 gibi, isimsizdir istediğin amaçla da kullanabilirsin. Ama 80 portunu web dışında kolay kolay kullanamazsın karmaşaya sebep olur.
http://www.hw-group.com/products/hercules/index_en.html (http://www.hw-group.com/products/hercules/index_en.html)
Peki biz PC'de 80 portunu internet için kullanıyoruz. Server tarafında da mı 80 portu kullanılıyor?
Sırf explorer'da IP numaramı yazabiliyorum ve bana TCP paket geliyor diye UDP yi boşveriyorum. Doğrudan TCP'ye geçeceğim.
Sağolasın Hercules'ı indirdim ve kurdum.
Şu soruma ne olur bir cevap.
Ben minik bir serverim ve benim port adresim ne olacak?
@gerbayÖnerin için sağol. UDP tamam oldu dediğimde bu siteye bağlanmayı deneyeceğim.
Tamam Hercules olunca iş kolaylaştı. UDP'yi yazarım.
Ping sorgusuna yaptıklarımın çok benzeri buna da yapılacak görünüyor.
Çocuk oyuncağı.
Hocam daha önce de yazmıştım ama görmediniz galiba.Cisco nun packet tracer diye bi programı var.Merak ettiğiniz şeyleri simüle edebilirsiniz.
80 web portu, hem istemcide hem sunucuda.
Advanced ip scanner diye bir program var, eğer kartınız ip'sini almışsa bu program ip'sini gösterebilir açık portları listeleyebilir.
Alıntı yapılan: muhendisbey - 28 Eylül 2016, 10:33:23
80 web portu, hem istemcide hem sunucuda.
Advanced ip scanner diye bir program var, eğer kartınız ip'sini almışsa bu program ip'sini gösterebilir açık portları listeleyebilir.
Hocam source port 80 olmak zorunda değil.Zaten NAT kullanan sistemlerde source port a direkt müdahale edilemez, modem tarafından belirlenir.
UTP protokolünde gelen paketi çözümleyen ve UDP ile data yollayan fonksiyonumu yazdım.
Şimdilik demo olarak UDP mesaj alırsam gönderene udp ile cevap yazıyorum.
Anladığım kadarıyla UDP mesaja cevap vermek zorunda değilim. (Doğrumudur?)
Fakat asıl sorun, IP paket boyu 1500 byte civarlarında. Bu da tek pakette gönderilecek data uzunluğuna sınır getiriyor.
UTP ile 3Kb data nasıl yollanır?
IP Headerda yer alan Flag, Fragment Offset ve TTL alanları ile ilgilenmemiştim.
Alıntı YapBayraklar
Üç bitlik bu alan paket parçalarının kontrol edilmesi ve tanımlanabilmesi amacıyla kullanılmaktadır. Yüksek basamaktan düşüğe doğru sıralı olmak üzere bayrak bitleri su şekildedir:
bit 0: Ayrılmış; sıfır olmalıdır.[not 1]
bit 1: Parçalandırmama işareti (DF, Don't Fragment)
bit 2: Daha Parça Var işareti (MF, More Fragments)
Eğer DF bayrağı ayarlanmışsa ama paketin aktarımı esnasında yönlendirilebilmesi için parçalandırılması gerekiyorsa, paket düşürülür ve hata iletisi gönderilir. Bu ayar parçalandırma işlemleriyle ilgilenecek miktarda kaynağı bulunmayan bir hosta paket gönderirken kullanılabilir. Bir diğer kullanım alanı da paketin aktarım yolunun desteklediği maksimum paket boyutunu ölçmektir. Bu ölçme IP yazılımı tarafından kendiliğinden veya ping veya traceroute gibi bazı ağ tanılama araçlarıyla kullanıcı tarafından gerçekleştirilebilir. MF biti, kendisinden sonra gelecek başka parçaların olduğu paketlerde 1 olarak, son paketlerde ise 0 olarak işaretlidir. Parçalandırılmamış paketler de kendilerinin ilk ve son parçası olarak düşünülebileceğinden bu paketlerde MF biti 0'dır. Parçalandırılmış paketlerin de son parçaları hariç tüm parçalarında bu bit 1 olarak ayarlıdır. MF biti 0 olan bir paketin tek başına bir paket mi yoksa bir paketin parçası mı olduğu Parçanın Başlangıç Konumu alanından anlaşılır. Zira o alan tek parçadan oluşan paketlerde 0 olacaktır.
Parçanın Bağıl Konumu (Fragment Offset)
Orijinal paketin başlangıcına göre parçanın bağıl konumunu belirten bu alandaki 13 bit uzunluğunda olan sayının birimi sekiz bayttır (64 bit). Yani parçanın, orijinal paketin kaçıncı 64 bitlik kısmından itibaren olan kısmını içerdiğini belirtir. Bu alanla en fazla (213 – 1) × 8 = 65.528 bayt uzunluğunda konum belirtilebilir ancak bu başlık da dahil edildiğinde maksimum IP paket boyutunu (65.535) aşmaktadır (65.528 + 20 = 65.548 bayt).
Yaşam süresi (Time To Live) (TTL)
Sekiz bitten oluşan yaşam süresi paketlerin internet üzerinde döngülere takılarak sonsuza kadar kalmasını engeller. Teorik olarak bu alan paketin kalan ömrünü saniye türünden belirtir ve yol üzerinde paketin üzerinden geçtiği her düğüm yaşam süresi alanından paketin işlenmesi sırasında geçen süreyi düşer. 1 saniyeden kısa geçen süreler 1 saniyeye yuvarlanır. Günümüzde paketler yönlendiriciler üzerinden 1 saniyeden çok daha küçük sürelerde aktarıldığından uygulamada bu alan atlama sayısının ölçüsü olarak kullanılır. Yönlendiriciler paketi teslim aldığında TTL alanını bir azaltır. Sayı sıfır olduğunda paket düşer ve göndericiye ICMP Zaman Aşımı (ICMP Time Exceeded) iletisi gönderilir.
Traceroute yazılımı da paketin kaynaktan hedefe giderken üzerinden geçtiği yönlendiricilerin listesini oluştururken yönlendiricilerden gelen ICMP Zaman Aşımı iletilerini kullanır.
http://youtu.be/Qe2jWNQFXXQ (http://youtu.be/Qe2jWNQFXXQ)
Şimdi yavaş yavaş karşılaşacağım zorlukları hissetmeye başladım. Eğer ENC çipimin ethernet kablosuna bir PC bağlı olsaydı, PC'de de sadece internet gezgini olsaydı işler çok kolaydı.
Fakat internetten web sayfama gireceklerin sayısı çok fazla olabilir. Gönderdiğim paketler yolda kaybolabilir. Bir şeyleri kayıt altına almam gerekecek gibi görünüyor.
Fakat ana felsefeyi (canavarın zırhını) bilmediğim için kodlamanın geri kalanı için bu aşamada
yanlış işler yaparsam günlerce özene bözene ucunu sivrilttiğim değneği canavara saplamaya kalktığımda değneğin ucu kırılabilir.
Bu durumda yeni bir değnek bulup ucunu sivriltmem gerekecek. Bu da kod yazımında zaman kaybı demek.
Zaman kaybetmemi mi istiyorsunuz?
Bana paket yollayıp cevap olarak benden paket bekleyen bir cihaza, ethernet portumdan dışarı saldığım paket ulaşmazsa bundan sonra nasıl diyaloglar olur?
Alıntı yapılan: z - 28 Eylül 2016, 15:27:11
Fakat asıl sorun, IP paket boyu 1500 byte civarlarında. Bu da tek pakette gönderilecek data uzunluğuna sınır getiriyor.
UTP ile 3Kb data nasıl yollanır?
IP Headerda yer alan Flag, Fragment Offset ve TTL alanları ile ilgilenmemiştim.
Hocam 1500 byte'tan fazla gönderilme durumu network katmanında yani ip protokolünde halledilemesi gerekiyor.Bir paketin parçalarının hepsinin identification a aynı olmalı ve flags bitlerinden MF bitinin değeri son parça haricindekiler 1 olmalıki karşı taraf parçanın devamının geldiği bilebilsin.Parçanın hangi sırada olduğu da fragment offset kısmında bildirilmeli.Böylece karşı taraf parçaları birleştirebilir.
Alıntı Yap
Bana paket yollayıp cevap olarak benden paket bekleyen bir cihaza, ethernet portumdan dışarı saldığım paket ulaşmazsa bundan sonra nasıl diyaloglar olur?
Hocam bu da tcp protokolünde hallediliyor.TCP protokolünde ack alınamayan,ya da nack alınan paketler karşı tarafa tekrar gönderilir.Tabi web server için tcp de yeterli değil tcp nin üzerine bir de http yazmanız gerekecek.
Bu durumda
@gerbayın büyük datalar yollayan UDP fonksiyon yaz demesinin nedeni anlaşıldı.
En azından UDP demo fonksiyonumda 30 bye değilde 4..5K veri yollamayı deneyeyim.
uzun data yollama mantığını anladım. IP headerda flag ve ofset ile bu sorunu kolayca çözerim.
Fakat şu soru kafamı kurcalıyor.
Ben ramı az minik bir işlemciyim. Üstelik küçük bir HTML sayfası yayınlamak gibi de basit bir görevim var.UDP ile işim yok ama hadi var diyelim;
UDP ile uzunca bir data bloğu göndermem gerekiyor ve bunu mecburen paketlere bölüp parça parça yollayacağım.
Ben bu işlerle uğraşırken bir yandan da yeni paketler ENC çipine giriyor.
Bu durumda en az iki seçenekten birini seçmem lazım.
Seçenek 1: UDP ile 1. paketi yolladıktan sonra gelen paketlerle hiç ilgilenmeyip 2. UDP paketi yollayıp o bitince 3. UDP paleti yollayıp en nihayetinde UDP ile gönderilecek veriler bittikten sonra ENC bufferda birikmiş yeni paketlerle ilgilenmeyi düşünüyorum.
Seçenek 2: Böyle yapmayıp 1. UDP yi yolla. İşim bitmedi diye bir yere not yaz. Bu nota Target MAC, IP, Port adreslerini ve data alanından gönderdiğin en son verinin adresini de yaz, sonra gelen paketlerle ilgilen, fırsatını bulunca ya da bir süre geçince bir ara notlar bölümünde yarım kalmış iş varmı diye bak, varsa onlarla ilgilen .... tarzında bir yazılıma mı yönelmeliyim?
Basit bir html sayfa yayınlamak gibi amacım var ve kodlaması daha basit olan 1. tercihi yapmak istiyorum. 2. tercih ise kelimenin tam anlamı ile PClere 4x4 web server yazılımı kodlarken gerekli gibi duruyor.
Fakat TCP'yi kodlamaya başladığımda mecburen 2. seçenek mi işin içine girecek?Gerçekten de bu belirsizliğin aşılması yeni yazılacak kodlar için hayati derecede önemli.
Önümde bir tuzak var gibi hissediyorum.
1. seçenek kolay yazılır ve web gezgininin ağzına istediği kadar bal doldurulur. Bu esnada ağzını açıp beklemekten sıkılanlar web gezginleri olacak.
2. seçenek yazması daha zor (RTOS ve Linked List işin içine sokulup kod yazımı kolaylaştırılabilir) fakat bu durumda her web gezginin ağzına bir parmak bal çalıp ve biraz daha bekle deme şansımız var.
20k az degil aslında.
sizin web sayfası kac kb ?
O anlamda söylemedim. Paketler ramdaki buffer alanına okunup/yazıldığı için web sayfasını flashda tutarım ve parça parça rama yazıp yollarım. Dolayısı ile web sayfamın boyu ramdan ziyade flash boyuna bağlı.
Ben ramı az minik bir işlemciyim derken PC ile göreceli olarak kendimi acındırdım.
Hocam fonksiyonlara parametre gönderme ve alma konusunda standartımın olmayışı konusunda tamamen haklısın. Bu konuda hiç bir standartım yok.
Ama neden yok?
Hep diyorum ya C sizin kodlarınızı kalıplara sokuyor kodlarınız derlendiğinde belli bir formda
kodlar üretiliyor.
Ve hemen ardından da diyorum ki asm ile yazdığım kod en baba C kodundan daha kısa ve daha hızlı olur.
İşte bu iddiamın 1. dayanağı parametre paslaşmada standarta gitmemem.
Bunun acaip faydaları var. Fakat çok fazla kafa yormak ve eldeki sınırlı registeri çok iyi kullanmak gerekiyor. (İşte burda insan zekası ile kalıplara sokulmuş C derleyicisinin savaşı var.)
Sonuçta bir fonksiyonu R0, R1 ile çağırıyorum bir başka fonksiyon R7, R8 ile.
Bir fonksiyondan R0 ile dönüyorum bir diğerinden R5 ile.
Bu bana göre kısa kodlama için avantaj fakat yazılan kodu anlama kolaylığı açısından dezavantaj.
Bu dezavantajı da her fonksiyonun başına detaylı register kullanım açıklaması ile gideriyorum.
Benim için 1 byte 1 byte'dır. Şu ana kadarki kodlamada sadece 3 tane global değişken kullandım. Local değişken sayısı ise 0.
Alıntı yapılan: yamak - 28 Eylül 2016, 10:47:26
Hocam source port 80 olmak zorunda değil.Zaten NAT kullanan sistemlerde source port a direkt müdahale edilemez, modem tarafından belirlenir.
O kısmını bilemiyorum hocam ancak apache server kurduğumda bu şekilde bir haberleşme kurmuştum. Modemden 80 portunu açarak dışarıdan web erişimi sağlayabiliyordum.
UDP yada TCP ye varana kadar içerisine de girmedim. Sadece UDP'nin hızlı ve güvensiz, TCP'nin güvenli yavaş olduğunu biliyorum. En azından derslerde öyle anlattılar.
Hocam source port isletim sistemi tarafindan belirleniyor. Hangi port boşsa onu kullaniyor. Tabi programci mudahale etmez direkt sistem cagrilarini kullanarak yazarsa. Daha sonra modem NAT protokolu geregi bu source porta gore bi look up table tutar. Bu source portu look up table a client in local ip si ile birlikte kaydeder ve source ip ile kendi ip sini yani agin internete ciktigi gercek ip ile degistirir portu da herhangi bir port numarasi ile. Daha sonra bu port gelen paketlerin port ve local ip lerini look up tabledan bakarak client inkilerle degistirir. Boylece internete cikan her client in gercek ipsi olmak zorunda olmaz. Bu NAT sayesinde ipv4 bizi bu zamana kadar idare etti. Ama artik yetmiyor mecburenv6 ya geciyoruz
(Konu kısmen burayla alakalı olduğu için yazma gereği duydum.)
Sanırım bu konuda
@z" internetim bazen çok geç cevap veriyor" demişti. Aynı durum bende de var ve aşırı. tracert komutu var. Ping atarak ben ile
tracert www.google.com (http://www.google.com) arasında bağlantıyı sağlayan IP adresleri yer alıyor. Arada 212.156.201.169.static.turktelekom.com.tr gibi adreslerde geçiyor. Yalnız listede 3-5 saniye yanıt vermeyen 5 bağlantı var ve bunlar zaman aşımına uğruyor. Anladığım kadarıyla yavaşlığın sebebi bu. Bir ara bir program denemiştim ve o zaman fark var mı görmemiştim. Programın iddiası siz ve bağlatınız arasında en kısa ve sorunsuz yolu bularak size en hızlı bağlantıyı sunması. DNS mi değiştiriyordu yoksa farklı bir yol mu hatırlamıyorum. Zaten şu an programı bulamadım.
@z gerekli kodlamaları yaparak istediği adrese istediği yönlendirmelerle bağlanabilir mi?
Hocam diğer dillerin çağırması için dönüşüm acaip kolay. Library hazırlarken export edilecek fonksiyonları kolayca C fonksiyon tipine dönüştürürüm.
İş, bir kaç push pop eklentisi ve register atamasına bakar sadece.
Library yaparken sadece ana arterleri dışa açmam yeterli. İçerideki minik minik fonksiyonları export etmeme gerek yok.
Kütüphane olarak yayınladığımda zaten bu push pull ıvır zıvıralarını zaten ben yapmış olacağım.
Kullanıcıya sadece kütüphaneden external fonksiyon çağırma işi kalacak.
En baştan C uyumlu yazarsam asm kodlarımda alengirli işler yapamamki klasik C çıktısına benzer asm kod üretirim. Fakat asm kodlamayı özgür şekilde seviyorum.
Hocam bir keyfim 16 daha doğrusu 13 registerla oynamak bırakın onlarla da istediğim gibi oynayayım.
C uyumluluğu en son aşama. Hele bir server çalışsın da o kısmı kolay.
Benim biliğim z kod yayınlamaz. :)
Ne öğrenecekseniz burada ögrenirsiniz ve blog yazısında. Ama kod görmeniz zor.
İşin felsefesi işin kodundan çok daha değerli. Herkes kod yayınlıyor ama felsefeyi anlatmıyor.
Ne diyorduk? Balık verme balık tutmayı öğret.
@gerbay hocam
Aşağıdaki mesaj için yorum yapmayacak mısınız?
https://www.picproje.org/index.php/topic,65601.msg511248.html#msg511248 (https://www.picproje.org/index.php/topic,65601.msg511248.html#msg511248)
Alıntı YapBir de hocam senin library de chip ile net stack arasında coupling ne durumda? sadece senin net stack alınıp MAC ı olan bir ARM MCU da kullanılabilir mi? enc28j60 a bulaşmadan?
Aşağıdaki 3 fonksiyon herhangi bir çip için yeniden yazılırsa CM3 ve üstünde sorunsuz koşar.
1. Paket gelmişmi
2. Paketi oku
3. Paketi yolla
Fifo olayı kafamdaki pek çok sorunu aldı götürdü.
Eğer TCP kodlamayı becerirsem bu işe oldu gözüyle bakabiliriz.
Kafamı kurcalayan bir konu daha var.
Mesela gelen 800'lü paketlerdeki CRC kontrolunu yapmıyorum. Ethernet çipi CRC kontrolü yapıyor ama aksilik bu ya SPI data aktarımı esnasında veri bozulabilir.
Fakat daha önemlisi sanki kötü niyeli birisi 0x800 paketlerinde bazı verileri özellikle değiştirip gönderirse (Headerlarda data boyları ve header boyları vs saklayan değişkenlere abartılı değerler yazarsa) MCU'yu ramın dışından veri okumaya zorlayabilir ve hardfaulta düşürebilir gibime geliyor.
Şu anda kodlamayı uzatacağı için bu tip kotroller yapmıyorum.
Ethernet çipi zaten CRC hesabı yapıyor. Fakat gelen IP paketlerdeki Check Sum değeri ile gelen paket için kendi hesaplayacağım Check Sum değerini eşit oluyor diye bakmıyorum. Daha doğrusu aldığım datalar için Check Sum hesaplamıyorum, sadece gönderdiğim datalar için Ceheck Sum hesabı yapıyorum.
Neyse acelesi yok bunun.
Aslında FPGA ile ilgilenenlere de güzel bir proje bu.
Gelen paketleri paralel olarak işleyin işte.
Paketler sıralı geliyor fakat bir yerlerde (Çipte yada MCU bufferda) kuyruğa giriyor.
------------------
Hocam ne kadar rezil bir programcı olduğuma tanıklık edilmesini istemem.
Gene de UDP protokolünü bitirince o kısmı full yayınlayım.
Alıntı yapılan: z - 29 Eylül 2016, 01:21:52
Ethernet çipi zaten CRC hesabı yapıyor. Fakat gelen IP paketlerdeki Check Sum değeri ile gelen paket için kendi hesaplayacağım Check Sum değerini eşit oluyor diye bakmıyorum. Daha doğrusu aldığım datalar için Check Sum hesaplamıyorum, sadece gönderdiğim datalar için Ceheck Sum hesabı yapıyorum.
Neyse acelesi yok bunun.
Aslında FPGA ile ilgilenenlere de güzel bir proje bu.
Gelen paketleri paralel olarak işleyin işte.
Çok da eğlenceli değil aslında :P :D, daha önce UDP için yapmıştım. İşimizi görünce üst katmanlara çıkmadık. Bu projeden sonra şuna karar vermiştim. Bu tarz protokol gerektiren haberleşme işlemlerim varsa basit softcore cpu kullanıp c/c++ ile haberleşme ve protokol olaylarını doğrudan oraya yıkmak olurdu. Hardware olarak kodlamak çok mantıklı değil eğer yapılacak iş projenin bir parçası olan haberleşme amaçlı ise. Yok zaten bir ağ donanımı olarak çalışacaksam o zaman daha farklı yaklaşılabilir.
Alıntı yapılan: z - 29 Eylül 2016, 01:21:52
Ethernet çipi zaten CRC hesabı yapıyor. Fakat gelen IP paketlerdeki Check Sum değeri ile gelen paket için kendi hesaplayacağım Check Sum değerini eşit oluyor diye bakmıyorum. Daha doğrusu aldığım datalar için Check Sum hesaplamıyorum, sadece gönderdiğim datalar için Ceheck Sum hesabı yapıyorum.
Neyse acelesi yok bunun.
Aslında FPGA ile ilgilenenlere de güzel bir proje bu.
Gelen paketleri paralel olarak işleyin işte.
Hocam bir ara sıfırdan FPGA ile yapmayı düşünmüştüm. Ama benim düşüncem UDP idi. Sonra Ethernet katmanı ve diğer katmanları yeterli bilmediğim için bu hoby fikri ertelemiştim. Gerbay hocam ve sizin sayenizde yeterli alt seviye bilgim olmuş oluyor. Merakla takip ediyorum. Ben biraz daha alt seviye yapacağım yani :)
IP paketin header bölümünde optinal bir bölüm var. Eğer IP header boyu 20 bytetan büyükse bu alan devreye giriyor.
Ancak incelediğim paketlerde IP header boyu hep 20 byte. Option alanı ne zaman hangi durumlarda devreye giriyor?
mesaj birleştirme:: 29 Eylül 2016, 17:02:02
Bu alanın var olması daha kısa kod yazmamı engelliyor. Baktığım paketlerde bu alan hep 0 uzunlukta.
Gelen pakette bu alanın boyuna baksam eğer 0 değilse ben bu paketten anlamam diyip reddetsem acama Basit Web Server projemin işleyişi tehlikeye girer mi?
Bahsi geçen Optional alan, altı üstü IP paket header ile IP paket dataları arasındaki bir tampon bölge. Programcılık açısından dert edilecek bir şey değil fakat ben dert ettim.
@z hocam siz çok yanlış bir konuya yöneldiniz. Network haberleşmesinden ziyade kripto fonksiyonlarının ASM versiyonlarını yazsanız baya bir işe yarar. Birde onları şöyle -side channel attack proof- yaparsanız dadından yenmez. :)
Yazmadığımı kim söyledi?
Algoritmayı gönder sadece.
Hangilerini yazdınız ?
herkesin bildiği kripto, kripto değildir. ;)
Alıntı yapılan: Burak B - 29 Eylül 2016, 20:44:22
Hangilerini yazdınız ?
Ben asm kodlayıcıyım. Matematikçi algoritmayı verir ben de koda dökerim. Ne yazdığımı bilmem gerekmiyor.
Sen asm biliyorsun. Hamallığını neden ben çekeyim?
Hocam sen hiç matematikçi ile birlikte oturup kod yazmadın mı?
Mamatiksel bir ifadeyi kodlamak ayrı bir şey, matematikçinin algoritmik hale getirdiği getirdiğini yazmak ayrı bir şey.
Ben kayıt kuyut yazılımlarına hiç girmem. İşyerindeki yazılımcı arkadaşlarım yeni yazılım projesine başlıyacakları zaman amirler, birlikte çalışmaları için yanına memurluk işini yapan ve kafası çalışan adamlardan birisini bu işle görevlendirler.
Yazılımcı sorar memur anlatır sonra başlar kodlamaya. Test aşamasında memur devreye girer. Bu iş aylarca sürer.
Bir süre sonra yazılımdan hiç anlamayan memur arkadaş yazılımcıya şuraya şunu yazmayacak mıydın diye karışmaya bile başlar.
Benim bildiğim programcı bir sorunu öğrenir ve kod yazar.
Şimdi bana cart curt yazılımı yaz derseniz o cart curtu öğrenmem lazım değil mi? Programcı adam her şeyi bilmez.
Şu anda TCPIP falan öğreniyorum neden? Programa dökmek için.
Öğrenince ister C ile yazarım ister ASM ile. O kısmı artık beni bağlar.
Olmadı simdi. Ethernet ögrenmenizin nedenini, kod yazmanız gerektiğine bağladınız. Mutlaka kod yazılması gerekiyorsa ethernet öğrenmeden bu işin çözümü var. Uart üzerinden bile halloluyor.
Bu işe girme sebebiniz etherneti öğrenme isteği idi ???
Yazımda kurduğum hangi cümleye istinaden bu karar vardın?
Alıntı YapBenim bildiğim programcı bir sorunu öğrenir ve kod yazar.
Buna mı?
Açık yazayım. Bilmediğin şeyin kodunu yazamazsın.
Kod yazmak 3 şekilde olur.
1) Çözümünü bildiğin bir probleme ait uygulama kodu yazarsın.
2) Algoritma verildi ise bunun kodunu yazarsın.
3) Bilmediğin bir şeyi önce öğrenir sonra kodunu yazarsın.
Şimdi Ethernet vs biliyormuyum? Bilmiyorum ne yapıyoruz?
Forumda bol bol soru soruyoruz. İnternete bakıyoruz. Öğrendiğimiz kadarını koda döküyoruz.
Yani 3. maddeyi uyguluyoruz.
Yeterince kodlama pratiği yaptığımı bilmen lazım.
Alçak gönüllülük yapmayım o zaman. Benim asm ile kodlama ile sorunum yok. Pratiğe de ihtiyacım yok.
Yeterki isteyeyim ihtiyacım olan her şeyi yazarım.
------------------------------------
Ulen bi bitmediniz ya.
Alıntı yapılan: z - 30 Eylül 2016, 00:09:32
Yazımda kurduğum hangi cümleye istinaden bu karar vardın?
Alıntı yapılan: z - 29 Eylül 2016, 23:01:01
Şu anda TCPIP falan öğreniyorum neden? Programa dökmek için.
Alıntı yapılan: z - 30 Eylül 2016, 00:09:32
Ulen bi bitmediniz ya.
Gerbayın aklı varsa size yardım etmez.
Açtığım koca başlığın en başına bakarsan bir kit aradığımı, daha sonra önerilen kitlerden birisini aldığımı, daha sonra da minik bir web server yapacağımı, bu amaçla herhangi bir kütüphane kullanmayacağımı, kodlamayı ASM ile yapacağımı söylediğimi görmemezlikten gel "TCPIP öğreniyorum çünkü koda dökeceğim" cümlemi yanlış anla.
Amacınız nedir anlamıyorum ki? Bırakın bu başlık bakire kalsın. Gerçi başlığın kodulmadık deliği kalmadı ama neyseki blog sayfası var.
Alıntı yapılan: gerbay - 30 Eylül 2016, 00:28:09
ben de z yi biraz asabileşmiş gördüm..
sanırım TCP işleri kötü gidiyor.. daha üstüne http yapacaktı bi de..
Asabiyim çünkü ethernet çipinin bir Bug'ı ile daha karşılaştım. Lanet bir çipmiş ama canına okuyacağım.
Her paketin sonunda 1 byte çöp gidiyor gıcık oldum. Yeni düzeltebildim.
Tüm kodu bir daha elden geçirdim. Şimdi iskelet çok sağlam oldu.
Alıntı YapNasrettin hoca ilk kez şehire gitmiş. Eşeğine yüklediği ıvır zıvırı akşama doğru anca satabilmiş.
Hep şehirde satılan köfte ekmeği merak eder dururmuş. Kazandığı parayla gidip ekmek arası köfte almış. Köye giderken yolda yerim diyerekten heybeye koymuş ve köyün yoluna düşmüş.
Gece olmuş hoca hala yolda. Karnı acıkmış heybeden köfte ekmeği çıkartmışki eşek irkilmiş ve ekmeğin arasındaki köfte yere düşmüş.
Sinirle inmiş eşekten zifiri karanlıkta elleriyle yeri yoklarken yumuşak bir şeye dokunmuş hah buldum deyip ekmeğin arasına koymuş.
Ekmeği ısırmış ki ekmeğin arasına köfte diye koyduğu kurbağa vıraklamış.
Boş yere bağırma sana para verdim yiyeceğim demiş.
Kıssadan hisse bu çipe para verdim ve hırs yaptım. Yiyeceğim bu çipi ve TCPIP zımbırtısını.
Amatörsünüz, ama bunu kabul etmiyorsunuz. Size yardım edenlerin bilgilerinede hiç değer vermiyorsunuz. Fazlası ile ego sahibisiniz. Son zamanlarda iyice yaşlılık belirtileri başlamış. 2 satır yazıyı kaldıramaycak duruma gelmişsiniz. Dahada yazarımda, çok kızarsınız. Hele sizin z mutirleri daha çok kızar.
Bir kişi çıkıp demedi size, bu uğraştığın enc çöptür diye yazmadı. Bana sen neden söylemedin diyede soru sorma hakkınız yok. Sizin şu ugrastıgınız 103c8i size ben önermiştim. (Matah diye söylemiyorum.) Az buçuk biraz dananım tasarlıyorum. Siz başlığın en başında size bir yazılımcının önerisine balıklamasına atladınız. Benim önerime değer vermeyen birine ben neden boşuna kürek çektiğini anlatmaya uğraşmayacağım.
Sizinle en çok uğraşan gerbay, ama size en çok yardım edende gerbay. Siz ondan daha iyi kod yazdığınızı düşünerek daha yukarıdan bakmaktanda geri durmamaya devam ediyorsunuz. Neyse gerbay ile olan meselenize de ben maydanoz olmıyayım. Anlaşırsınız eninde sonunda.
Alıntı yapılan: hgs - 30 Eylül 2016, 00:54:03
Amatörsünüz, ama bunu kabul etmiyorsunuz. Size yardım edenlerin bilgilerinede hiç değer vermiyorsunuz. Fazlası ile ego sahibisiniz. Son zamanlarda iyice yaşlılık belirtileri başlamış. 2 satır yazıyı kaldıramaycak duruma gelmişsiniz. Dahada yazarımda, çok kızarsınız. Hele sizin z mutirleri daha çok kızar.
Bir kişi çıkıp demedi size, bu uğraştığın enc çöptür diye yazmadı. Bana sen neden söylemedin diyede soru sorma hakkınız yok. Sizin şu ugrastıgınız 103c8i size ben önermiştim. (Matah diye söylemiyorum.) Az buçuk biraz dananım tasarlıyorum. Siz başlığın en başında size bir yazılımcının önerisine balıklamasına atladınız. Benim önerime değer vermeyen birine ben neden boşuna kürek çektiğini anlatmaya uğraşmayacağım.
Sizinle en çok uğraşan gerbay, ama size en çok yardım edende gerbay. Siz ondan daha iyi kod yazdığınızı düşünerek daha yukarıdan bakmaktanda geri durmamaya devam ediyorsunuz. Neyse gerbay ile olan meselenize de ben maydanoz olmıyayım. Anlaşırsınız eninde sonunda.
Anlaşılan sizin gibi donanım uzmanının önerdiğiniz çipi değil de Gerbay ve Makdenizin gibi yazılıcıların önerdiği çipi seçmeme alınmışsın.
Seni mi kıracağım. İlk fırsatta senin önerdiğin çipe de uyarlarım yazacağım programı.
Fakat acelesi yok. Şu ENC28J60'a bir öğreteyim webe girmeyi senin çipe öğretiriz sonrasında.
Haaaaa bu arada, elektronik ve yazılım amatörüyüm.
Tamam ENC28J60 kötü bir çip.
1) En başta çipin içindeki tasarım hataları yüzünden taklalar atmak gerekiyor. Üstelik dokümanı da çok kötü hazırlanmış. Register tablosundaki registerleri sıra ile takip etmek istediğinizde bir dokumanın başına bir sonuna ha bire gezinmeniz gerekiyor.
2) Ethernet ortamından çok yüksek hızda gelen paketleri SPI gibi bir donanımla görece olarak yavaş çekiyorsunuz. Eğer yazılımınız da hızlı çalışmazsa paketler kısa zamanda çip bufferını doldurup yeni gelecek paketlerin reddedilmesine neden olur.
Bu iki sorundan dolayı ENC28J60 ile ciddi web uygulamaları yapmak yanlış.
İçinizden birisi çıkıp ta en başta bu nedenle sana bu çipi önermiyoruz deseydi çok anlayışla karşılar daha başka bir çip seçerdim. Öte yandan başlıkta ethernet çipi önerisi istediğim için aslında hata belki de benim. Web server uygulaması için ethernet çipi arıyorsum deseydim belki daha iyi olurdu. (ENC28J60 network için değil de sadece direk birbirine bağlı iki nokta arasında seri haberleşme işi için harika bir çip)
Arkadaşlar onu seçme şu çipi seç çünkü şu tip sorunlar olur denirse hem bilgi hem de öneri vermiş olursunuz.
Bana ne yahu çip ile mcu arasındaki haberleşmenin usart haberleşmesinden.
Evet yanlış bir çiple yola çıkmışım. Fakat bu seçim TCPIP kodlamama engel değil. Hatta çok efektif kod yazmak için ENC28J60 ideal bir seçim.
Tabiki son cümlemi yanlış anlayacaklar için açayım.
Kodları arasında delay(1) gibi komutlar barındıranlar bu çipe hiç bulaşmasın. Bu çiple sorunsuz web uygulamaları yapabilmek için kodlarınızın gelen paketleri hızlıca işleyebilmesi lazım. Kısacası iyi kod yazabiliyor olmanız lazım.
Alıntı yapılan: gerbay - 30 Eylül 2016, 01:40:09
enc28j60 ı ben önermedim.
Gerbay aşağıdaki mesaj konunun 2. mesajı.
Alıntı yapılan: gerbay - 17 Eylül 2016, 18:44:22
Enc28j60, enc624j600, lan9250
Z bu alttaki mesajda konunun 4. mesajı idi.
Alıntı yapılan: z - 17 Eylül 2016, 18:49:15
Süpermiş fiyatı da ucuz.
6. mesaj
Alıntı yapılan: hgs - 17 Eylül 2016, 19:41:45
ESP-01 kullanın. Uart üzerinden halledersiniz.
8. mesaj
Alıntı yapılan: z - 17 Eylül 2016, 19:50:43
Neyse ENC28J60 siparişi verdim.
Benim önerime bir tane "Neden?" diye sormayan birisine, beni geçin neredeyse kimseye sormamış birisine, 1-2 saaatte kararını vermiş birisine, neden bu iş ile alakalı seçeneklerle ilgili ayrıntılı yanıt vereceğim?? Buna rağmen ben ara ara uyarıda bulundum ama siz sandınızki ben sizi aşağılıyorum, beceremeyeceğinizi iddia ediyorum....
Bir kısım işleri hala yapamayacağınıza eminim ama temel bir takım işleri yapabileceğinizi göremeyecek kadar kör biri değilim. 2 çipi bir ethernet kablosu üzerinden haberleştirebilmeniz benim kriterlerime göre başarı değildir. Bir kısım uyarılarım bu meselelerden farklı olarak alet edevat ile alakalı uyarı içeriyordu, ama kaynadı... mesele değil.
Alıntı yapılan: z - 30 Eylül 2016, 02:22:49
Tamam ENC28J60 kötü bir çip.
Bu iki sorundan dolayı ENC28J60 ile ciddi web uygulamaları yapmak yanlış.
Evet yanlış bir çiple yola çıkmışım.
15 gün sonra siz yukarıdaki yorumları yapıyorsunuz. 15 gün daha geçsin. 1 ay geçsin 2 ay geçsin, sonra birde gerçekten çalışacak bir takım işler için gerçek stack içerisinde olması gerekenleri eklemeye başlayın bakalım neler yazacaksınız.....
Alıntı yapılan: z - 30 Eylül 2016, 01:16:39
Anlaşılan sizin gibi donanım uzmanının önerdiğiniz çipi değil de Gerbay ve Makdenizin gibi yazılıcıların önerdiği çipi seçmeme alınmışsın.
O kadar çok üzüldümki, kahroldum, hiç sorma durumumu...
Zaman neler gösterir bekleyip göreceğiz.
Yeter ki protokol odaklı sorularım cevapsız kalmasın.
@hgs Bu yazdıklarından sonra hgs istese de bu çipi webe sokup web server yapamaz diye anlıyorum.
Enc li bir sürü kart var. Bende ürettim. Bunları ilginç bir takım yerlerede sattım. Hala stokta encli bir takım pcbler var. Bir zaman sonra bu çipi kullanmayı bıraktım. Farklı çözümlere gittim. Enc ile olmaz demiyorum yaptım sattım, stokta hala bu entegreli ürün var. Ama 2016 ekimine geldik. Bugün doğru bir yönlendirme arıyor olsaydınız cevap enc olmazdı. Siz bunu, doğruları, aramıyorsunuz, meşgale arıyorsunuz.
Ben sonuçta elde edilecek bilginin hiç bir işe yaramayacağına eminim.
IOT var değilmi ? Birde IIOT geliyor.
Bir kaç sene içerisinde mcunun uartından farklı olmayacak bir donanım için 10000 sayfa bilginiz olmasının, hiç bir anlamı yok. Anlamı olsaydı, siz 20 sene önceki mcularla kod yazardınız. Yada bir zamanlar kullandıgınız ti çiplerini kullanırdınız. Bu örnekler uzatılabilir. Siz meseleyi, durduğum yeri görmek isterseniz görürsünüz. Görmek istemezseniz görmezsiniz...
Demekki hgs bu çipi kullanıp web server uygulaması yaptı ise (?) Z de hayli hayli yapar.
Alıntı yapılan: z - 30 Eylül 2016, 03:10:18
Demekki hgs bu çipi kullanıp web server uygulaması yaptı ise (?) Z de hayli hayli yapar.
:))))
Alıntı yapılan: gerbay - 30 Eylül 2016, 08:35:13
z nin kullandığı işlemci de senin önerdiğin işlemci, ben de seni suçlayayım o zaman;
"sen ne biçim donanımcısın, yıl olmuş 2016 adama MAC bloğu bulunmayan MCU önermişsin" mi diyeyim...
çok abes olurdu de mi..
2-3 sene geçmiş bir konu için çok abes bir niteleme olur. Neden abes olacağını açıklamaya tenüzzül bile etmiyorum.
Alıntı yapılan: z - 30 Eylül 2016, 02:22:49
Tamam ENC28J60 kötü bir çip.
Hocam ben enc28j60 kullandım, Microchip'in kendi TCP/IP Stack library si ile.
8-bit bir 18f26k22(64Mhz) de Mcu uygulaması olarak gayet güzel performansı vardı.
SPI bus hızı düşük olursa problem yaşanıyor(asgari 10Mb miydi 1Mb miydi hatırlayamadım.). Bildiğim tek problemi bu.
Belki dışarıdan library yazılması açısından pek efektif olmayabilir, ama performansı fena sayılmaz.
En azından ben problem yaşamadım.
Alıntı yapılan: gerbay - 30 Eylül 2016, 11:06:34
peki z bizi dinlediği için mi seçti o çipi? bizi o şekilde itham ediyorsun. bu konudaki görüşün nedir?
Ben ne itham edeceğim ortada her sey. Ben önermedim yazdın. Konunun 2. mesajında senin önerin enc.
Başka bir sürü zor şey önerdiğinde dikkate almıyor z orasını zaten biliyoruz. Kafasında var olanın peşinde. Ona uygun öneri gelince kabul ediyor atlıyor hemen ugrasıyor. Uzak bir öneri gelse kabul etmez.
Macli bir mcu kullan denemez. Denemez çünkü, bu 103c8 için bir sürü kod yazmış. Başka bir mcuya geçse o eski yazdıklarının çoğunu tekrar yazması gerekecek. En azından elden geçirmesi gerekecektir.
Alıntı yapılan: hgs - 30 Eylül 2016, 11:56:07
Macli bir mcu kullan denemez. Denemez çünkü, bu 103c8 için bir sürü kod yazmış. Başka bir mcuya geçse o eski yazdıklarının çoğunu tekrar yazması gerekecek. En azından elden geçirmesi gerekecektir.
Yazılım Mühendisliğinin "Yazılım Kalitesi" konusundaki "Kalite Ölçüm" konuları nelerdir bakalım;
(https://upload.wikimedia.org/wikipedia/en/thumb/5/54/SoftwareQualityCharacteristicAttributeRelationship.png/450px-SoftwareQualityCharacteristicAttributeRelationship.png)
Dikkat ederseniz "Portability" çok yanlız bir arkadaş ve çok önemlidir. Portability olmazsa -maintanable- bir kod yazdım demek yanlış olur. ASM ile bile yazsanız bunu bir interface ile portable hale getirmeniz önemlidir. Böylece gerektiğinde farklı MCU' lar için bu fonksiyonlar yenilenebilir.
Arkadaşlar nerden başlayım bilemiyorum.
Amatör biri olarak ST'den çip önerisinde bulunmuştum ve kriterlerim Timer/PWM/ADC/sayısı, fiyat ve düşük pin sayısına göre zaten belirlemiştim.
STM32F103C8 önerisi hoşuma gitti. Kriterlerimin hepsine uyuyordu. Şimdi F103C8 in bir büyüğüne bile geçmem. Her işimi görüyorum.
STM32F103C8 konforundan şimdilik çok çok memnunum.
Ethernet çipi için istediğim öneride ilk isimlerden birisi ENC28J60 idi.
Kit resmi de verilmişti. Aurdunio için üretilen SD kart okuyucuyu sorunsuz ST kitimle de kullandığım için resmi verilen ENC28J60 kitine hemen kanım kaynadı. Aurdunio ile web server uygulaması falan yapanların projeleri internette görmüştüm tamam Aurdunio kütüphanesi ile bu iş oluyorsa ben de hayli hayli yaparım dedim.
@hgs'inin önerisini sırf seri iletişim yapıyor diye direk eledim. Hatta bazı şeylerin hazır olduğunu bu yüzden daha yüzeysel kod yazmam gerektiği zannına kapıldım (öylemi bilmiyorum).
wireless önerilere doğrudan kulağımı tıkadım (laptoptaki wireles şifreleri aklıma geldi) Ulan bu şifreleme algoritmalarını nerde bulacağım da kodlayacağım çok uzun iş diye aklımdan geçirdim.
Gittigidiyor'da çok makul fiyattan satıldığını da görünce balıklama atladım.
Neyse
@gerbayDeneme amaçlı olarak uzun dataları 256 byte parçalara bölen UDP kodumu yazdım. Bunu 512 B paketlere çevireceğim.
Wireshark ile izleyerek parçalanmış paketlerin MF biti eşliğinde çıktığını görüyorum fakat bir süre sonra birleştirme için zaman aşımı oldu mesajı görüyorum.
Alıntı YapÖrneğin 512 byte dataları UDP ile 2 paket halinde yollamak istersem
1. IP paket headerda Fragment Offset=0x0000 ve MF=1
2. IP paket headerda Fragment Offset=0x0020 ve MF=0 yapmayacak mıyım?
İlk 256 byte gitti.
İkinci 256 byte için sonraki indexim 256/8=32 yani 0x20 olmalı diye düşündüm.
------------------
Gerbay sabah sana kızmış olarak uyandım.Rüyamda Müteahhit imişim. Bina yapıyorum senle de ortakmışım sen satış işleri ile ilgileniyorsun. Müşteri geliyor ve apartman dairesi almak istiyor, hemen seni telefonla arıyorum şu numaralı daireyi ayır onu satıyorum diyorum.
Sende ya ben
IP blokların hepsini sattıydım, bahsettiğin daire de o bloklarda diyorsun.
Ulen hesabıma bu dairelerin parasını da yatırmadı paraları hiç ediyor bu nasıl ortak diye yataktan kızgın şekilde fırladım.
Eeee? Sorumun cevabı nerde?
Alıntı YapDeneme amaçlı olarak uzun dataları 256 byte parçalara bölen UDP kodumu yazdım. Bunu 512 B paketlere çevireceğim.
Wireshark ile izleyerek parçalanmış paketlerin MF biti eşliğinde çıktığını görüyorum fakat bir süre sonra birleştirme için zaman aşımı oldu mesajı görüyorum.
Alıntı
Örneğin 512 byte dataları UDP ile 2 paket halinde yollamak istersem
1. IP paket headerda Fragment Offset=0x0000 ve MF=1
2. IP paket headerda Fragment Offset=0x0020 ve MF=0 yapmayacak mıyım?
İlk 256 byte gitti.
İkinci 256 byte için sonraki indexim 256/8=32 yani 0x20 olmalı diye düşündüm.
Hocam sanki bazı şeyler esnetilmiş.
Mesela 60 Bytedan daha kısa paket olmaz deniyor bu yüzden çipin küçük paketleri 60 byte tamamla bitini aktif ettim.
Daha sonra wireshark da baktım kısa paketler dolaşıyor bahsettiğim biti kaldırdım bende 60 bytten dan kısa paketler yollamaya başladım ve sorun yok.
IP bloklarından güneye bakan 73 cü kat da daireniz var mı ? :)
Hepsini satmış paraların da üstüne konmuş.
Helal olsun. Gunun birinde Pestil gonderir.
Hercules programı ile fragmentation yapılmamış data transferi yapabiliyorum. Çok büyük dataları parçalara bölüm yolladığımda Wireshackdan paketlerin usulune uygun gittiğini görüyorum fakat Hercules yakalamıyor.
Herkules ile 1024 Byte'dan daha uzun data yollamaya kalktığımda sadece ilk 1024'ü yolluyor.
Acaba Hercules 1024 byte'dan fazla data mı yollayamıyor yoksa 1024 paketi aldığımda karşıdan aldım sonrakini yolla türünce bir cevap mı bekliyor?
Osinato' yu kullanın. Hercules' e çok güvenmeyin. Hatta kendi socket kodunuzu yazmanız daha iyidir.
Alıntı YapHatta kendi socket kodunuzu yazmanız daha iyidir.
Güzel fikir.
mesaj birleştirme:: 01 Ekim 2016, 14:52:13
Delphi ile UDP den 4096 tane A harfi yollayıp ne olup bittiğini Wireshack ile izleyebilirsiniz.
Form üzerine bir buton ve UDP eklemeniz yeterli.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, StdCtrls;
type
TForm1 = class(TForm)
UDP: TIdUDPClient;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Buffer: array [0..4095] of byte;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to 4095 do Buffer[i]:=$41;
udp.Host := '95.0.177.1';
udp.Port := $0001;
udp.SendBuffer(Buffer,4096);
end;
end.
mesaj birleştirme:: 01 Ekim 2016, 15:14:54
İyiki de sormuşum.
UDP ile büyük data yollarken her defasında IP Paket içinde UDP paket hazırlayıp fragment ofset ve boylarını ve dataları yerleştiriyordum.
Meğersem alakası yokmuş.
İlk pakette IP paket + UDP paket
Diğerlerinde sadece Ip paket ve Data
mesaj birleştirme:: 01 Ekim 2016, 15:44:11
UDP ile 4096 Byte veri yollandığında
---------------------------------------
1. Paket IP + UDP
IP len=1500
IP flag=0x2000 (Fragment dahil=0)
UDP Len=4104
UDP Data=1500-28=1472 Byte (IP Header (20)+ UDP Headr(8) 28 byte)
Total UDP Data = 2104 - 8 = 4096
---------------------------------------
2. Paket IP + Data
IP len=1500
IP flag=0x20B9 (Fragment=185)
Data=1500-20=1480 Byte
---------------------------------------
3. Paket IP + UDP
IP len=1164
IP flag=0x0179 (Fragment=377)
Data=1164-20=1144 Byte
Şimdi bakalım. 1472 + 1480 + 1144 = 4096
Bu kadar anlaşılır örneği google'da bulamadım. Varsa da iyi aramak lazım.
Yalnız rama yazılacağı adresler biraz sıkıntılı. Yada burdaki hesabı ben beceremedim.Adreslerin lineer arada boşluk olmamasını beklerdim.
1. paket alındığında 0000...1471 adreslerine yazılacak.
2. paketin başlangıç adresi 185*8=1480
3. paketin başlangıç adresi 377*8 = 3016
TCPde veri iletimi aşamalarının hikayesini kim anlatır?
Kabaca wiki, veri iletimini başlatma, veri iletimi ve sonlandırma aşamalarına değinmiş ama Sequence ve Ackowledgment numaraları ile biraz kafam karışık.
mesaj birleştirme:: 02 Ekim 2016, 14:27:42
Şu anki varsayımımda ENC çipli servere sadece 1 client bağlanıyor kabulünü yapacağım.
Bu şartlarda kodu yazabilmem lazım.
Fakat bunun için Seq ve Ack numaralarını iyi anlamak gerekiyor.
Yokmu yardımcı olacak?
Explorerdan kendi IP mi yazıp yollayınca
Bana SYN , Sequence Num ve ACK Num geliyor.
Gelen Seq. Num değerini 1 artırıp gidecek ACK olarak, Kendi Seq numaramı da gidecek Seq No olarak SYN/ACK flagları ile yolluyorum.
Bana ACK gelmesi lazım fakat bir süre sonra tekrar SYN geliyor.
TCP header, IP header boylarını doğru set ediyorum, Check sumları doğru hesaplıyorum Winshark bunlarda sorun da bildirmiyor?
Sorun hakkında fikriniz varmı?
-------------------------------------------
Explorer 49282 nolu porttan benim 80 nolu portuma TCP istekde bulunuyor ancak yukarıdaki sorun oluyor.
MCU'ma 80 nolu porttan gönderilmeyen TCP isteklerine cevap verme dersem hiç 80 nolu portdan bana istek gelmiyor.
Bu arada IP mask vs ile hiç ilgim olmadı. Yanlış yoldamıyım?
Http yi 80 den istersin sma web server sana, ayrılmış herhangi bir porttan geri dönüş yapar
IP: port şeklinde denedin mi? Örneğin 192.168.0.29:80
Normalde
80:http
49282:TCP/UDP
@engerexExplorerda istediğim portu nasıl kullandırtırım diye soracaktım cevabı yazmışsın bile.
mesaj birleştirme:: 02 Ekim 2016, 17:53:24
Yok bunu da yemedi. En iyisi iki PC Hercules yüklüyüp birini server diğerini client çalıştırıp TCP ile ne gönderiyorlar wiresharkdan izleyeyim.
Belki tek pcde de yapabilirsin. IP adresi 127.0.0.1 veya pc nin kendi ip adresi.
Yemedi onu.
Hocam
Client benle haberleşmek için önce SYN yolluyor
Ben de on a SYN/ACN yolluyorum.
Eğer SYN/ACN cevabımı kabul etseydi bana ACK yollaması gerekiyordu. Fakat yollamıyor.
Bağlantı kurulma aşaması bitmediği için devamı gelmiyor. Explorer tekrar SYN yolluyor.
İlk talep client'dan (explorer programından) ENC'ye gelmeyecek mi?
Kusura bakmayın Check sum hesabında hatam varmış.
TCP "Check Sum"ı yanlış hesaplıyormuşum. Aslında Wireshark da hata veriyormuş. Gözümden kaçmış.
Şu anda SYN isteğine karşılık ACK/SYN gönderdiğimde ACK geliyor.
Client beklediğim ACK ile birlikte GET / HTTP/1.1 şeklinde benden talepte bulunuyor.
Henuz TCP protokolün kodlamasını bitirmedim ama HTTP paket geldi bile.
Şimdi benden web sayfama ait HTML kodları göndermemi istiyor.
Bana olabilecek en kısa HTML sayfa örneği verebilirmisiniz? HTML hiç bilmiyorum.
Mesela explorer ile IP numaramı yazıp enterlediğimde ekranda Merhaba yazısı çıkartacak
HTML kodlar nasıl yazılır?
Hocam bakacak o kadar çok şey varki.
Bir an önce şu başıma dert olacak kısma gelmek istiyorum. Karşılaşmayı beklediğim sorunun kokusunu almaya başladım.
HTML dipsiz kuyudur detaya girmek istemiyorum. HTML'de neye bakmam lazım?
Yapmak istediğim web sayfalarında tablolar renkli cicili bicili şeyler olmayacak.
önemli parçalar koyu kısımlar hocam
http request
Alıntı Yap
GET /index.php HTTP/1.1
Host: www.picproje.org (https://www.picproje.org)
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Cookie:
http response
Alıntı YapHTTP/1.1 200 OK
Server: nginx admin
Date: Sun, 02 Oct 2016 19:33:59 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Pragma: no-cache
Cache-Control: private
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Sun, 02 Oct 2016 19:33:59 GMT
<HTML><TITLE></TITLE><BODY><H1>Hi!</H1></BODY></HTML>
aşağıdaki linking GET Method ve sondaki HTTP - Message Examples kısmı
https://www.tutorialspoint.com/http/http_quick_guide.htm (https://www.tutorialspoint.com/http/http_quick_guide.htm)
Hocam yedim TCP/IPyi.
Explorerdan IP numaram ile mini web servere bağlanınca MERHABA mesajını aldım.
Verdiğin HTML kod yeterli oldu.
ENC kit şu anda kablo ile proje makineme bağlı ve PC'nin varsayılan Ağ gecidine ait IP nosunu ENC kite IP no olarak verdim.
ENC kiti modeme bağlarsam kodlarda hiç bir değişiklik yapmadan modeme bağlı evdeki herhangi bir bilgisayardan kendi IP'me bağlanabilecekmiyim?
Evin dışındaki bir bilgisardan yada 3G Cep telefonundan ENC çipli servere bağlanmak için IP noyu ne yapacağım?
Tebrikler hocam gözün aydın.
Soğolun.
Mutlu olmazmıyım hocam. En başta ethernetin E'sinden bir haberdardım. Şu anda serverim var.
Bahsettiğin HTML dokümanına bir bakayım.
Ama aşağıdaki sorumun cevabı da çok önemli.
Alıntı YapENC kit şu anda kablo ile proje makineme bağlı ve PC'nin varsayılan Ağ gecidine ait IP nosunu ENC kite IP no olarak verdim.
ENC kiti modeme bağlarsam kodlarda hiç bir değişiklik yapmadan modeme bağlı evdeki herhangi bir bilgisayardan kendi IP'me bağlanabilecekmiyim? (Bunu denerim gerçi.)
Evin dışındaki bir bilgisardan yada 3G Cep telefonundan ENC çipli servere bağlanmak için IP noyu ne yapacağım?
Hocam modeme bağladığınızda browser'a server ip numarasını yazdığınızda yüklü html sayfayı görebilirsiniz. Dışarıdakilerin bağlanması için ise server ip nosunu modem ayarlarından port açarak tanımlamanız gerekmektedir.
@fredericModemin ethernet çıkışlarından birisine ENC kiti bağlayacağım. Modeme bağlanacak cihazlar için bir IP aralığı vardı. Onu ben daraltıp genişletebiliyordum.
Ordan ENC çipe bir IP seçerim ve bir PC'den bu IP noya explorer ile bağlanır denerim.
Fakat dışarıdan bağlanma için bahsettiğin modemde port açma olayından hiç bir şey anlamadım.
Yani şöyle bir şey.
Senin internet IP adresin 216.0.0.29 olsun. mini serverin IPsi ise 192.168.0.29 Bağlanacağımız portda 80. Internet üzerinden 216.0.0.29:80 yaparak ağındaki bir cihaza bağlanmak istediğimizde modemde şu tanımı yapıyorsun: Eğer 80 numaralı porta bağlanmak isteyen olursa onu 216.0.0.29 nolu IP'ye yönlendir. 216.0.0.29:80 >> 192.168.0.29:80
@zhttp://www.uzmantv.com/modemde-port-nasil-acilir (http://www.uzmantv.com/modemde-port-nasil-acilir)
Kafam almadı.
Modemimin IP nosu 216.29.29.29 yani Turkcellin verdiği bir IP demek değilmi.
Ben 216.29.29.29 a para verip aldım.
216.0.0.29 bir başka müşterinin IP nosu değilmi?
Hocam bir önceki mesajımdaki videoyu izleyin
Sizin bir Internet IP niz var modemi resetlediğiniz zaman bu değişir.(Eğer statik IP satın aldıysan bunuda kullanabılırsın)
ENC'nin IP sini Modem ayarlarına girip kaydedeceksin tabi birde port kaydedeceksin.(Port Yönlendirme)
Daha sonra başka uzak bir yerden tarayıcıya senin Internet IP ve Portunu yazacaksın. (IP:PORT)
Enter dediğin anda senin Internet IP ne bağlanacak sonra Portuna bakacak ve diyecek ki bu adam bu portu ENC'nin IP sine kaydetmiş diyecek
hop seni ENC ye yönlendiricek :)
Artık yaptığın yayına göre tarayıcıda yaydıklarını göreceksin
Bu port açma işlemi modeme girerek "Port Yönlendirme" yada yanlış hatırlamıyorsam NAT denen bir bölümden yapılıyordu.
Eskiden yapmıştım hazır LIB ile ama modemim şuan farklı.
Yanlış hatırlamıyorsam muhabbeti buydu.
IP yi farklı yazmışım. Örnekte sadece bunu say: 216.0.0.29
Alıntı yapılan: frederic - 02 Ekim 2016, 23:27:03
@z
http://www.uzmantv.com/modemde-port-nasil-acilir (http://www.uzmantv.com/modemde-port-nasil-acilir)
Buradan yapamadıysan modem marka model verirsen yardımcı olalım. (Ben göremedim videoyu.)
Sayfa açılıyor ama video çıkacak bölge bomboş sadece minik bir cep telefonu resmi var.
Neyse yarım bakayım.
Herkese teşekkürler.
Şu ana kadar yaptıklarımı kısaca özetleyeyim.
1) MCU init rutinleri yazıldı.
2) MCU-ENC28J60 iletişimi için SPI rutinleri yazıldı.
3) ENC28J60 registerlerine yazma/okuma rutinleri yazıldı.
4) ENC28J60'ın Internet ortamına uyumlu çalışması için initialize rutinleri yazıldı.
5) Ethernetten paket alan ve paket yollayan rutinler yazıldı.
6) Gelen paketin OP kodundan paketin ARP paketimi yoksa IP paketimi olduğunu anlayan rutin yazıldı.
7) ARP pakete cevap veren rutin sayesinde IP numaramı merak eden cihazlara kendimi tanıttım.
8) IP paketin Protocol numarasından gelen IP paketin ICMP paket mi TCPIP olduğunu içerdiğini anlayan rutin yazıldı.
9) ICMP ise ve Echo Request istiyor ise buna EchoReplay (Ping cevabı) yapan rutin yazıldı.
10) Ip paket içinde TCPIP paket varsa Flag değerleri ve Data boyutuna göre Sequence ve Acknowledgement numaralarını ilerleten rutin yazıldı.
11) TCPIP paket içine HTML yerleştiren rutin yazıldı ve nihayetinde mini server çalıştı.
Bu kadar çok madde olduğuna bakmayın kısa kısa kod parçaları.
Şu haliyle flashda 3444 byte yer kaplıyor ve 1548 byte ram kullanıyor.
Şu ana kadar yapılması gereken bunlardı.
Asıl curcuna yakında çıkacak ve bu curcunanın artık donanım, Ethernet/TCPIP/HTML ile hiç alakası yok.
Bu curcunanın ne olacağını tahmin ettiniz mi?
ASM den C ye dönüştürülmesi mi ? :D
Keşke sorun c yada asm sorunu olsa.
Gerçi TCPIP yazılımı yapmadan bu sorunu görmeniz çok zor.
Şimdi neden TCP/IP yazılımı değil de TCP/IP Stack diye bir tabir kullanılıyor ve bu tabirde neden STACK kelimesi geçiyor çok iyi anladım.
Ben hala senin STM32F103 ile yaptığın minik server'ına aynı anda 10 kişi bağlanmak isterse ne yapacak onu merak ediyorum. Konuyu en başından beri takip ediyorum. Bende çok şey öğrendim. Galiba senin gözünün korkutan nokta da burası.
(https://s14.postimg.cc/r874i1yx9/port_forwarding.jpg) (https://postimg.cc/image/r874i1yx9/)
Evet şu an itibariyle konun en başındaki amacıma ulaştım. Projeyi burda bırakabilirim. Server çalıştımı çalıştı sayfa ekranda karşıma geliyor mu geliyor.
Fakat projeyi burda bırakmayacağım. Mevcut yazılımımın sayfa yayınlayabilmesi için servere girecek yüzlerce kişinin atıyorum çok kısa aralıklarla ENC çipime ulaşmamaları gerekiyor. Bu kabul edilir bir şey değil.
Alıntı yapılan: Mucit23 - 03 Ekim 2016, 00:03:55
Ben hala senin STM32F103 ile yaptığın minik server'ına aynı anda 10 kişi bağlanmak isterse ne yapacak onu merak ediyorum. Konuyu en başından beri takip ediyorum. Bende çok şey öğrendim. Galiba senin gözünün korkutan nokta da burası.
Aynı zaman diliminde (mesela saat 10:00:00 ....10:00:05 aralığında) farklı internet hızlarında farklı serverlerden çokça kişi ENC çipimdeki web sayfasına girmek isteseler ne yapacağım?
Aslında bu kısımdan korkmuyorum.
Bundan sonraki en büyük sorun stack yönetimi. Bir de hiç ele almadığım yaşam süresi değeri.
Kodlamayı bilen bu kısmı da halleder. Zaten sorun artık tamamen kodlama sorununa dönüştü.
@gerbay hocam rtos'a rtos adını veren bu adam mı acaba?Adamların web sitesini adı www.rtos.com (http://www.rtos.com) :).
Bencede harcanıyorsun hocam, ilk mesaja baktımda 2 haftada ethernetin e'sini bilmezken web server kodu yazdın helal olsun
@z den beklentimiz uart- tcp/ıp cevirici :D direk cip halinde satışta
Sagolun, Şimdi düşünüyorum da Gerbay'ın kırmızı hapı olmasaydı işim gerçekten çok zormuş.
TCP/IP Usart dönüştürücü çipi ile dünyanın neresinde olursak olalım iki MCU'u arasında data transferi yapma fikri güzel.
@gerbay hocam
Başından beri bir zorluğa işaret ediyordun. Bu zorluk tam olarak şu mu?
TCP protokolünde Clientle paket alış verişi yaparken bir sonraki paket transferinde, şu anki paketteki/elimizdeki Seq. No ve Ack No değerlerini kullanıyoruz.
SeqNo ve AckNo değerleri(miz), SeqNo, AckNo, gelen ve giden data miktarına göre ilerletiliyor.
Eğer sadece bu clientla haberleşecek olsaydık sorun yoktu.
Fakat birden fazla client işin içine girince bunların her birisi için en azından SeqNo, AckNo, MAC Adr, son iletişim zamanı gibi 4 bilgiyi büyükçe bir bufferda (özel bir stack alanında) saklamam lazım.
Yeni bir paket aldığımda yada bu adama paket yollayacağımda hemen karşıdaki adamın MAC adresini okuyup bufferda bu adamla yaptığım en son bilgilere ulaşıp adamın istediği bilgileri yollayıp bufferdaki SeqNo ve AckNo ve iletişim zamanı bilgilerini update etmeliyim.
Bufferım web sayfama olan ilgiden dolayı pek çok kişinin bilgileri ile dolmaya başlayacaktır.
Sayfamla işi bitenlerin bilgilerini bufferdan silmezsem bir süre sonra buffer dolacak ve artık kimseye hizmet veremez hale geleceğim.
Öte yandan bir kişi ile tanışma, web sayfa bilgilerimi yollama, ardından tamam ayrılalım deme işinini yapmak adına diğer kişilerden gelen istekleri çöpe atma startejisi de çözüm olabilir fakat bu çok yavaş bir çözüm olur. Üstelik diğer kullanıcılar sayfa bulunamadı mesajı ile karşılaşabilirler.
Belli bir zaman diliminde başarılı olunamamışsa yada adama web sayfanın html kodlarını yollamışsam iletişimi koparıyorum dediysem o da tamam bitirelim dedi ise o kişiye ait bilgileri de bufferdan silip yer açmam gerekir.
Öte yandan benim birincil amacım ENC çipinin Receive bufferında gelen paketleri en kısa zamanda işleyip bufferı boşaltmak olmalıdır.
Bu sorunu çözersek tamam bu proje artık sorunsuz olarak mini webserver olarak iş görür diyebilirmiyiz yoksa göremediğim başka sorunlar da varmı?Projede yararlandığım sayfalar
ENC28J60 Rehber (http://ww1.microchip.com/downloads/en/DeviceDoc/39662e.pdf)
Çipin kahrolası tasarım hataları ve çözümleri (http://ww1.microchip.com/downloads/en/DeviceDoc/80349c.pdf)
Hazırladığınız pakette Check sum vs hatası varsa olması gereken check sum değerini söyler (http://sadjad.me/phd/)
TCPden once prova yapmak için UDP paket rutinlerinizi test etmeye yarar (http://www.hw-group.com/products/hercules/index_en.html)
Ethernet portuna gelip giden paketleri ve içeriğini gösterir (https://www.wireshark.org)
IPV4 Header (https://en.wikipedia.org/wiki/IPv4)
ARP Header (https://en.wikipedia.org/wiki/Address_Resolution_Protocol)
UDP Header (https://en.wikipedia.org/wiki/User_Datagram_Protocol)
TCP Header (https://en.wikipedia.org/wiki/Transmission_Control_Protocol)
IP protokol numaraları (https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers)
ICMP Header (https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol)
KIRMIZI HAP (https://www.picproje.org/index.php/topic,65601.msg510282.html#msg510282)
Port numaraları (https://en.m.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers)
Tabiki bu (http://google.com)
@z hocam HTTP protokolünü yazdınız mı?Bu bahsettiklerinizin bir çoğu http protokolünde hallediliyor zaten.Ama birden fazla kişiye hizmet verme durumunu sizin halletmeniz gerekiyor.Dediğiniz gibi bu iş için de dediğiniz gibi open file table gibi tablo tutmanız gerekiyor.Ama hizmet veremez hale gelmeniz normal bir şey.Apache server bile bir çok bağlantı olduğunda hizmet veremez hale gelebilr.
Örneğin:
https://en.wikipedia.org/wiki/C10k_problem (https://en.wikipedia.org/wiki/C10k_problem)
Hocam HTTP kısmını yazmadım yazmayacağım da.
Basit web server çalışmasında tek bir paket içine küçücük bir web sayfasına ait HTML kodları doldurup yollayacağım ve tamam bitti diyip iletişimi sonlandıracağım. Bahsettiğim stack işini TCP protokol için çözmem yeterli bence.
Tamam allı güllü görsel bir sayfa olmaz ama tek bir TCP data paketi içinde dünya kadar bilgi sunabilirim.
PC ile ikili konuşurken PC benim MAC adresime ARP sorgusu yapıyordu.
Fakat ENC kiti modeme taktığımda ARP requestler geliyor olsa da benim MAC adresime sorgu yapmıyor.
Modem neden benim IP numaramı sormuyor?
-------------------
Aslında en baslarda sormustum ama power on asamasında bir şey yapmana gerek yok denmişti.
Power on aşamasından sonra hey millet bana şu IP numalarınızı bir yollayın demem gerekmez mi?
Bu durumda aramıza biri daha katılmış demeleri kolay olmazmı?
Hocam şimdi elimde Türkcell'in wireles modemi var. Diğer cihazların hepsi wireless bağlı.
Sadece ENC kiti kablo ile bağladım.
Kendime modemdeki IP aralığından kullanılmayan birisini atatım.
MCUyu resetlediğim anda Modemin MCUsu benim varlığımdan nasıl haberdar olacak.
Modeme bağlı bilgisayarlardan ENC kitime Ping atamıyorum.
Modeme değil de doğrudan PC'ye bağlı iken her şey tıkır tıkır işliyordu.
ENC kite 77:77:77:77:77:77 mac adresi vermiştim. Modem yönetim sayfasında hala bu mac adresinde bir cihaz görülmüyor.
Hocam enc nin ip adresi ile modem networkunun ip adresi aynı subnettemi.
Örneğin modem 192.168.2.1 255.255.255.0
Enc 192.168.2.2 255.255.255.0
Pc 192.168.2.3 255.255.255.0
Şeklinde ise aynı subnettesin ve bu 3 ü birbirleri ile haberlesir.
mesaj birleştirme:: 04 Ekim 2016, 21:15:02
Hocam pardon son mesajınızı gözden kacirmisim. Bu aşamayı halletmissiniz
Tamam gerbay MCU çalışır çalışmaz Modeme ping atayım. 192.168.1.1 herhalde modemdir.
@SercanTEKyazılımda subnet falan bir şey yok bende.
Networkle alakası olmayan PC ile çalışirken PC'de IPconfig dedim ve en alt satırda varsayılan ağ geçidi için IP no yazıyordu. O IP noyu ENC'ye vermiştim ve bu vaziyette kodları yazdım.
Şimdi kabloyu PC'den söktüm modeme bağladım.
Modem yönetim listesinde DHCP sunucuda 192.168.1.1 ...... 192.168.1.40 aralığı var.
Listeye baktım 192.168.1.30 kimse kullanmamış ENC kite bu IP'yi verdim.
Ama Modemde Ağ'a katılmış cihazlar listesinde ENC kitim yok.
Ne 192.168.1.30 nolu IP ne de 77:77:77:77:77:77 MAC görünüyor.
Modeme bağlarken cross kablo mu kullanıyorsunuz?
Eliniz değmişken birde dhcp client ekleyin. Statik ip kullanırsanız inform paketi yollarsınız.
1) Kabloyu PC'ye bağladığımda ENC kit PC'ye ping atıyor. PC nin pinge cevap verdiğini Wiresharkdan görebiliyorum.
2) PC'den ENC karta ping atabiliyorum. Cevap geliyor.
ENC kitin kablosunu PC'den söküp modeme bağlarsam (PC kablom cross, Modem kablom düz)
3) ENC kit modeme ping atıyor fakat cevaplanıp cevaplanmadığını kontrol edemiyorum. (Zaten bunla ilgili kod da yazmadım)
4) Modeme bağlı bir bilgisayardan ENC kite ping atarsam cevap gelmiyor.
ENC kit yazılımını debug edersem hiç ICMP gelmiyor.
Fakat ENC kitime sık sık modeme wireless bağlı cihazlardan birinden broadcast edilen UDP paket geliyor. (Bu cihaz ya laptop ya da ipad)
Gelen paketin;
Ethernet paketteki Dest MAC FF:FF:FF:FF:FF:FF
IP Headerdaki Src IP: 192.168.1.20
IP Headerdaki Dest IP: 192.168.1.255 (Halbuki modem tanımlı IP aralığı 192.168.1.20 ....192.168.1.40)
Modemde LAN Host ayarları bölümü var.
IP adresi:192.168.1.1
Ağ Maskesi:255.255.255.0
İkincil LAN: Etkin
İkincil IP adresi: 192.168.2.1
İkincil Ağ Maskesi:255.255.255.0
Birde DHCP Sunucu var.
DHCP Sunucu: etkin
İlk IP adresi: 192.168.1.20
Son IP adresi: 192.168.1.40
Kendime seçtiğim IP: 192.168.1.29
Hocam port numarasi 137 ise microsoft netbios paketleri olabilir gelenler
Alıntı yapılan: z - 04 Ekim 2016, 02:29:38
Ethernet paketteki Dest MAC FF:FF:FF:FF:FF:FF
IP Headerdaki Dest IP: 192.168.1.255 (Halbuki modem tanımlı IP aralığı 192.168.1.20 ....192.168.1.40)
@z hocam 255 olması normal. 255 ile biten adresin broadcast adresi olması lazım. Yani gönderilen paket herkese gönderiliyor demek. Destination mac adresinde bu yüzden FF:FF:FF:FF:FF:FF. Bu da broadcast mac adresi.
Modeme ping atamamamı ve benim IP'me ICMP gelmemesini IP numarasını kafam göre kimseye danışmadan almama bağlıyorum.
Olabilirmi? DHCP sunucu IP dağıtımı yapıyormuş.
https://tr.wikipedia.org/wiki/DHCP
Zaten modeme danışmadan kendime IP noyu 192.168.1.29 olarak almış olmam yanlış bir hareket değilmi?
Modemin, ENC kartıma hele bir yavaş ol kendi kafana göre IP almışsın, şifre nedir diye sorması gerekmezmi?
Alıntı yapılan: muuzoo - 04 Ekim 2016, 10:44:43
@z hocam 255 olması normal. 255 ile biten adresin broadcast adresi olması lazım. Yani gönderilen paket herkese gönderiliyor demek. Destination mac adresinde bu yüzden FF:FF:FF:FF:FF:FF. Bu da broadcast mac adresi.
Bu ilginç bir bilgi oldu benim için. MAC adresi alanına FF:FF:FF:FF:FF:FF yazdıktan sonra IP alanındaki adresin önemi yok sanıyordum.
Alıntı yapılan: z - 04 Ekim 2016, 11:13:43
Modeme ping atamamamı ve benim IP'me ICMP gelmemesini IP numarasını kafam göre kimseye danışmadan almama bağlıyorum.
Olabilirmi? DHCP sunucu IP dağıtımı yapıyormuş.
https://tr.wikipedia.org/wiki/DHCP (https://tr.wikipedia.org/wiki/DHCP)
Bu ilginç bir bilgi oldu benim için. MAC adresi alanına FF:FF:FF:FF:FF:FF yazdıktan sonra IP alanındaki adresin önemi yok sanıyordum.
Şu sayfa faydalı olabilir: http://steve-parker.org/networking/broadcast.shtml (http://steve-parker.org/networking/broadcast.shtml)
Alıntı yapılan: z - 04 Ekim 2016, 11:13:43
Modeme ping atamamamı ve benim IP'me ICMP gelmemesini IP numarasını kafam göre kimseye danışmadan almama bağlıyorum.
Modemin güvenlik duvarı sorun çıkartıyor olabilir mi?
ENC kit power on olur olmaz DHPC ile kendime IP almayı deneyeceğim.
Bunu en başlarda konuşmuşuz.
https://www.picproje.org/index.php/topic,65601.msg510533.html#msg510533 (https://www.picproje.org/index.php/topic,65601.msg510533.html#msg510533)
Aslında modemin DHPC sunucusunu devre dışı bırakmak en kolay çözüm ama anladığım kadarıyla bu kez evdeki tüm aletlerin internete girmesi için elle ayar yapmak gerekecek.
İş yerimizdeki makineler ağa hep sabit IP ile giriyor.
Bir zamanlar misafirlerin wireles şifresi istemesi sorunu konuşmuştuk. Bu sorun aslında bu şekilde çözülebilir.
Gönülsüzce verdiğiniz wireles şifresi ellerinde olsa bile önce telefon yada tablete IP değerini elle yazmaları gerekecek.
https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol (https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol)
Modemin 1 adet TurkCell portu var
4 adet de LAN portu var.
Bu durumda modemin 2 adet MAC adresi olma ihtimali varmı?
Aptal sorun ping atttığım yada internet gezginine IP yazarak girmeye çalıştığım makinenin wireless oluşundan kaynaklanıyormuş.
Modeme kablo ile Note Pad bağladım ve ENC kitime ping de atabiliyorum üstelik ENC kitteki web sayfama a girebiliyorum.
Tüm günüm bu soruna gitti.
Wireles çalışan hiç bir makineden ENC kitime ulaşamıyorum.
Neden acaba?
Alıntı yapılan: z - 04 Ekim 2016, 21:16:38
Aptal sorun ping atttığım yada internet gezginine IP yazarak girmeye çalıştığım makinenin wireless oluşundan kaynaklanıyormuş.
Modeme kablo ile Note Pad bağladım ve ENC kitime ping de atabiliyorum üstelik ENC kitteki web sayfama a girebiliyorum.
Tüm günüm bu soruna gitti.
Wireles çalışan hiç bir makineden ENC kitime ulaşamıyorum.
Neden acaba?
hocam servislerden dnscache restart edip dener misin?
Buna windows 8 ve üstünde Ctrl+Alt+delete ile ulaşabilirsin.
TurkCell Huvaei HG245s modem WAN dan gelen kablo sayesinde internete bağlı.
Wireles olarak PC1, Laptop vs ye yayın yapıyor.
Modemin 4 Lan çıkışından birisini PC2'e diğerini ENC kite bağladım.
(http://i.hizliresim.com/VEG2VP.png) (http://hizliresim.com/VEG2VP)
PC2 ile ENC kite pin atabiliyorum, explorer ile ENC kitteki web sayfasına ulaşabiliyorum.
PC1'den yada laptoptan ENC kite ulaşamıyorum.
Modemde 7777 portunu ENC kitin IP nosuna yönlendirdim. Dışarından da ENC kite ulaşamıyorum.
PC1 yada laptoptan ENC kite ping attığımda ENC kit ping isteğini alıyor ve cevap veriyor fakat cevap ping atan makineye ulaşmıyor
Port yönlendirmesi yaptığımda dış ipden ENC kitteki web sayfasına girmek istersem ENC kitin hiç birşeyden haberi olmuyor.
Alıntı yapılan: z - 05 Ekim 2016, 00:06:21
(http://i.hizliresim.com/VEG2VP.png) (http://hizliresim.com/VEG2VP)
PC2 ile ENC kite pin atabiliyorum, explorer ile ENC kitteki web sayfasına ulaşabiliyorum.
PC1'den yada laptoptan ENC kite ulaşamıyorum.
Modemde 7777 portunu ENC kitin IP nosuna yönlendirdim. Dışarından da ENC kite ulaşamıyorum.
PC1 yada laptoptan ENC kite ping attığımda ENC kit ping isteğini alıyor ve cevap veriyor fakat cevap ping atan makineye ulaşmıyor
Port yönlendirmesi yaptığımda dış ipden ENC kitteki web sayfasına girmek istersem ENC kitin hiç birşeyden haberi olmuyor.
hocam önce modem dış ip sini öğrenmeniz gerekiyor.
http://www.ipsorgu.com/ (http://www.ipsorgu.com/)
sonra evde bağlı olmayan bir internet ile örneğin 3G bağlantı yapmayı deneyin.
mesaj birleştirme:: 05 Ekim 2016, 00:16:42
Port girmeyi unutmayın :7777
Anladım deneyeyim hemen.
Kralsam özel mesaj attım.
Modemde port yönlendirme bilgilerim.
(http://i.hizliresim.com/pEavaJ.png) (http://hizliresim.com/pEavaJ)
Hocam 20. portu kullanıyosanız ondan kaynaklanıyo olabilir probleminiz.20. port normalde ftp için kullanılıyo.Bir de aslında source port a müdahale etmemeniz gerekir.Çünkü source port işletim sistemi tarafından belirlenir normalde.
Hocam birde şu port listesin bir kenarda dursun
https://en.m.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
Neyse port yönlendirme işini bir başka başlıkta sordum ve sistem sağlayıcı firma ile çözmem gerekiyormuş.
Şimdi projenin eksikliklerini gidereceğim.
Bir ton kod yazmıştım onları tekrardan geri düzelteceğim zira program boyutunu çok artırdı.
Bunlar;
1) Herhangi bir IP'ye adrese ping atma rutini
2) Networkteki cihazlara ARP sorgusu yapma rutini.
Öncelikle TCP rutinimi elden geçirmem gerekecek. TCP rutininde flaglara göre davranış belirleyen rutinler de hemen hemen birbirinin aynı program parçalarından oluştu. Bunları tek bir fonksiyona çevirirsem program boyu bir hayli düşecek.
TCP de paket kayıp olursa, yada bir şeyler ters giderse mevcut rutinler işin üstesinden tam gelemiyor. TCP iletişimle ilgili çok iyi bir kaynak lazım.
TCP tam olarak oturaklı hale gelince stack işine başlayacağım.
--------------------------------
TCP'de port olayını da tam anlamadım. TCP rutinim TCP paketi açıyor ........ ardından portları swap edip devamında gerekli cevabı hazılıyor.
Dolayısı ile bana istekte bulunulan source ve dest portlar ne ise o portlarla devam ediyorum.
Hey bu portu kullanamayız gibi bir eleme yapmıyorum.
Böyle bir elemeyi yapmak TCP'nin mi yoksa başka birinin mi işi ?
TCP için güzel bir dokuman linki verebilecek var mı?
IBM'in redbook'ları fena değil:
https://www.redbooks.ibm.com/redbooks/pdfs/gg243376.pdf (https://www.redbooks.ibm.com/redbooks/pdfs/gg243376.pdf)
! No longer available (http://www.youtube.com/watch?v=ngaxThMsUzw&feature=youtu.be#)
@Coskun dokuman için sağolasın fakat bu tip dokümanlar sonuç odaklı çalışmalar için değil de konu üzerine uzmanlaşlaşacaklara hitap ediyor.
Resim, tablo, grafik vs üzerinde anlatımlı dokümanları daha iyi kavrıyorum.
C -> B'ye SYN yolladı.
C -< B C ye ACK/SYN yolladı
C -> B ye ACK yolladı
ACK No ve Seq No şu idi şu oldu.
Arada paket kayboldu. Bunun üzerine C B'ye şunu yolladı. B haaa paket kaybolmuş o zaman o paketi yeniden yollayayım dedi tarzında muhabbetlerin ele alındığı bir doküman yok mudur?
Web server çalışması: Alt seviyede neler olup bitiyor hakkındaki yazılarım.
Ethernetten gelip giden paketler (http://www.cncdesigner.com/wordpress/?p=6252)
ARP paket hakkında (http://www.cncdesigner.com/wordpress/?p=6285)
IP paket hakkında (http://www.cncdesigner.com/wordpress/?p=6322)
Blog sayfamdaki açıklamalarımı nasıl buluyorsunuz?
Anlatım yeterince açık mı?
Alıntı yapılan: z - 05 Ekim 2016, 22:23:25
Blog sayfamdaki açıklamalarımı nasıl buluyorsunuz?
Anlatım yeterince açık mı?
Hocam anlatım genel olarak açık ve anlaşılır bunun yanında yazıları ara ara renklendirmeniz çok iyi oldu.
Elinize sağlık. Çok güzel bir çalışma oldu. Ayrıca kodları yayınlamaktan önemlisi konuyu detaylı açıklamanız çok daha önemli.
0x70C1 yi renklendirdiğiniz turkuaz bunun rengini değiştirmeniz mümkün mü? Okunabilirliği az.
O renklerden ben de memnun değilim fakat blog sayfanın sunduğu belirgin renklerden arta kalanlar genelde böyle.
açık renkli yazımlarda siyah zemin yapabilsem sorun kalkacak fakat öyle bir şeçenek yok.
CkEditor adlı aracı kullanabilirsiniz. Çok yetenekli. Formüller oluşturabiliyorsunuz. Word gibi bir şey..Wordpress desteği de var.
Bir deneyin. Ücretsiz (ücretli sürümde mevcut)
https://tr.wordpress.org/plugins/ckeditor-for-wordpress/ (https://tr.wordpress.org/plugins/ckeditor-for-wordpress/)
Kendi sitesinde demo var. Kurmadan deneyin... http://ckeditor.com/ (http://ckeditor.com/)
2 PCyi birbirine cross kablo ile bağladım ve herikisine de Hercules programını yükledim.
1. PCnin IP numarası: 95.0.177.59
Varsayılan Ağ Geçidi: 95.0.177.1
2. PCnin IP numarası: 192.168.1.5
Varsayılan Ağ Geçidi: 192.168.1.1
1. PC'yi Cilent, 2. PC'yi server çalıştırıp TCP ile konuşturmak istiyorum.
Hercules ayarlamaları nasıl yapılacak?
Hocam iki pc'nin aynı subnette olması gerekir.Mesela iki pc nin ip adreslerini 255.255.255.0 ile and işlemine tabi tuttuğunuzda sonucu aynı çıkması lazım.
Örneğin;
1.bilgisayarın ip adresi:192.168.2.10
1.bilgisayarın subnet mask ı 255.255.255.0
2.bilgisayarın ip adresi 192.168.2.20
2.bilgisayarın subnet maskı 255.255.255.0
İki bilgisayarı birbirine bağladığınızda gateway adresinin bir önemi yok.Eğer ip paketinin destination adresi o client ın subnet inde değilse client paketi gateway(modem,router vs) adresine gönderir.
Hercules'de de;
Örneğin 1.bilgisayar server olsun;
1. bilgisayarda TCP Server bölümünde port kısmına -atıyorum- 5000 yazın ve listen'a tıklayın.
2.bilgisayarda da TCP Client bölümünde Module Ip kısmına 192.168.2.10 port kısmına da 5000 yazın ve Connect e tıklayın.
Connection kurulduğunda 1.bilgisayardaki hercules'de 'Client Connection status' kısmında connection kurulduğuna dair bi mesaj yazacaktır.
2. Bilgisayarın IP No ve varsayılan geçit numarasını değiştirdim.
1. PCnin IP numarası: 95.0.177.59
Varsayılan Ağ Geçidi: 95.0.177.1
2. PCnin IP numarası: 95.0.177.2
Varsayılan Ağ Geçidi: 95.0.177.1
2--->1 ping atıyorum.
1--->2 ping atamıyorum.
1. PC'nin IP numarası neden bu şekildede 192.168.x.x şeklinde değil?
Hiç fikrim yok. O makine bir kere bile internete sokulmadı. O yüzden olabilir mi?
Hocam bazi ip gruplari sadece local aglarda kullanilir.Yani o iplere internette rastlanmaz.
https://en.m.wikipedia.org/wiki/Private_network
Bu arada tek taraflı ping atıp diğer taraftan atamama sorununun sebebi firewall imiş.
İnternete bağlanmış bir server sadece bu server üzerinden gidip gelen paketleri alabilir diyebiliriz değil mi?
Kötü adam olsak ancak bu serverdeki paketleri ele geçirebiliriz başka da bir şey yapamayız.
Yoksa yapabilirmiyiz?
Hocam network wifi ile kurulmuşsa havadaki paketlerin hepsini alıp okuyabilirsiniz
TCP handshake rutinlerimi test edebilmem için paket kaybı, paketin bozulması gibi sorunların da çıkması gerekiyor. Ancak Herkules bu konuda yardımcı olamıyor.
Delphi ile kod yazmaya kalksak flagları da biz belirleyerek paket hazırlayıp yollayabilirmiyiz?
Alıntı yapılan: z - 07 Ekim 2016, 11:57:28
TCP handshake rutinlerimi test edebilmem için paket kaybı, paketin bozulması gibi sorunların da çıkması gerekiyor. Ancak Herkules bu konuda yardımcı olamıyor.
Delphi ile kod yazmaya kalksak flagları da biz belirleyerek paket hazırlayıp yollayabilirmiyiz?
Hocam şu programı bir deneyin mümkün olan tüm thernet paketlerini oluşturabilir.
http://packeth.sourceforge.net/packeth/Home.html (http://packeth.sourceforge.net/packeth/Home.html)
https://sourceforge.net/projects/packeth/files/ (https://sourceforge.net/projects/packeth/files/)
Alıntı yapılan: z - 07 Ekim 2016, 11:57:28
TCP handshake rutinlerimi test edebilmem için paket kaybı, paketin bozulması gibi sorunların da çıkması gerekiyor. Ancak Herkules bu konuda yardımcı olamıyor.
Delphi ile kod yazmaya kalksak flagları da biz belirleyerek paket hazırlayıp yollayabilirmiyiz?
Defalarca yazdım. Osinato kullanın.
Alıntı yapılan: Burak B - 07 Ekim 2016, 18:49:55
Defalarca yazdım. Osinato kullanın.
konuyla hiçbir ilgim olmamasına rağmen arama yaptım osinato geçen tek mesaj yukarıdaki forumda :o
Bu normal çünkü doğrusu -Ostinato- (http://ostinato.org/) olucak. Yazım hatası yapmışım. Ama bu bir engel değil. Google araması yapınca zaten düzeltip söylüyor ne olduğunu.
https://www.picproje.org/index.php/topic,65601.msg511141/topicseen.html#msg511141 (https://www.picproje.org/index.php/topic,65601.msg511141/topicseen.html#msg511141)
https://www.picproje.org/index.php/topic,65601.msg511163/topicseen.html#msg511163 (https://www.picproje.org/index.php/topic,65601.msg511163/topicseen.html#msg511163)
https://www.picproje.org/index.php/topic,65601.msg511183.html#msg511183 (https://www.picproje.org/index.php/topic,65601.msg511183.html#msg511183)
Alıntı yapılan: Burak B - 01 Ekim 2016, 13:47:07
Osinato' yu kullanın. Hercules' e çok güvenmeyin. Hatta kendi socket kodunuzu yazmanız daha iyidir.
Bunlar dışında birkaç farklı şekilde daha söylediğimi hatırlıyorum bu uygulamayı kullanın diye.
...
@Burak B, senden özür diliyorum
@CaFFeiNe, özür dilecenecek biri durum yok. Rica ederim.
TCP'de handshake işlemleri için Stack yazmak kaçınılmaz oldu.
Explorer Serverdan talepte bulunuyor.
Server de, bak bendeki sayfa bu, boyu bu yolluyorum ve bana alıp almadığını bildir sonrasında bir daha arama kapat diyor.
1) Explorer tamam yolladığın dataları aldım. (Paket1)
2) Hani bana kapat demiştin ya tamam kapattım. (Paket2)
Bu esnada başka başka explorerlardan da benzer talepler alıyor.
Server peşpeşe cevaplar gelmeye başlıyor....
Ulan bu cevap veren de kim ben bir sürü kişiyle konuşmuştum keşke bir çetele tutsaymışım diyor. (Cevap verenin kim olduğu IP den belli fakat konuşurken yaa nerde kalmıştık deriz ya benzer durum. Aslında bu bilgi de seq no ve ack no da belli ama kendi seq no ve ack no muzu bilmemiz lazım. o geçmişte kaldı giitti. Saklamamız lazımdı)
Explorerlar farklı farklı uzaklıklarda farklı farklı ülkelerden cevap yollayınca 1 explorerdan gelen 2 paket peşpeşe değil bir başka explorerdan gelen paketle sandiviçlenebilir. (1. Explorer 1. paket) + (2. Explorer 1. paket) +(1. Explorer 2. paket) gibi sıralama her an değişebilir.
Sonra da ulan bu tamam kapattım dedi de kimdi bu sorusu gündeme geliyor.
Sonuç olarak bir explorer ile bağlantı kurulduktan sonra bazı bilgileri bir alana yazmalı. Bir kaç explorerla konusmaya baslayınca bunlarla ilgili çeteleler basit bir alana değil bir 'aray'a atmalı. Bu array stağımız oluyor.
Daha sonra bir paket geldimi paketi yollayan ile ilgili geçmiş kayıtların bu arraydan aranıp bulunması, kayıda ilave yapılması yada update edilmesi ya da toptan imha edilmesi gibi ek işler geliyor.
State machine, stack, stacktaki veriler arasında ilişkilendirme işi yapılacak.
Tam bir curcuna ile karşı karşıyayım.
Tek bir server ve tek bir Client oldumu klasik basit bir mantık yeterli. Serverle iki kişi konuşmaya başladımı işler de karışıklaşmaya başlıyor.
Öğretmen sınıfta her kafadan bir ses çıktımı kızar tek tek konuşun der. Burda öyle deme şansımız yok. Öyle dersek internet alt yapısını çok kötü kullanır ve çok yavaş haberleşme yaparız.
Sen en son şöyle demiştin şöyle yap. Sen diğeri dataları almamışsın al tekrar yolluyorum. Hey sen diğeri. Tamam hattı kapatma isteğini kabul ettim. Gibi muhabbetler.
İncelediğim github projelerinde bu konulara hiç girilmemiş ve sanki serverin karşısında tek bir explorer var hiç paket kaybolmuyor hiç paket bozulmuyor kabullerini yapmışlar. Üstelik web sayfasının tek bir TCP pakete sığacak kadar da kısa olacağı varsayılmış.
En başta basit bir web server yapalım diye yola çıkmıştık ya. Kesmedi. Çıtayı yükseltmek lazım.
Aşağıda sadece cerver ve bir client arasındaki TCP paket muhabbetleri var. Şimdi bu paketlerin arasına diğer clientlarla yapılan paketler de girdiğinde işler karmaşıklaşıyor.
(http://www.cncdesigner.com/wordpress/wp-content/uploads/TCP.png)
http://www.cncdesigner.com/wordpress/?p=6362 (http://www.cncdesigner.com/wordpress/?p=6362)
@z Peki bu nasıl olacak? Hangi paketin kimden geldiğini nasıl takip edeceksiniz. Özellikle şunun için soruyorum. Senin sunucun ile aynı bilgisayardan 1'den fazla istemci ile iletişim kurmaya çalışıldı. Burada aynı bilgisayardan farklı talepler geliyor. Bu sıkıntı yaratır mı?
(düzenlendi)
Bizim çipten aldığımız paket ethernet paket.
Onu açıyoruz içinden IP paket çıkıyor.
Onu açıyoruz içinden TCP paket çıkıyor.
MAC adres ethernet pakketten çıkıyor. IP adres IP paketten çıkıyor.
Aşağıdaki yazımı editleyeceğim. Orda MAC adresinden bahsetmem yanlış oldu.
Belki blog sayfamdaki yazıları da editlemem lazım. Çünkü IP pakette identification diye bir alan var. Onu kullanmıyoruz diye açıkladım. Zira mini severimi çalıştırdığımda sadece tek client ile çalışıyordu. O alana da ihtiyacım yoktu.
Bu işi bilen arkadaşlar en baştan bir giriş yapsalardı bazı şeyleri çözmek için bu kadar tırmalamayacaktık.
Mesela aşağıdaki tabloyu sırf handshake ipuçlarını yakalayıp algoritmayı yazabilmek için deneysel olarak elde ettim.
Tek server tek clientdaki IP ve TCP rutinlerim şu andan itibaren yeniden elden geçecek.
Alıntı YapSonlanan bağlantılar sonrası tekrar aynı bağlantı sağlanırsa veya yeni bağlantı sağlanırsa ack ve seq numaraları kaldığı yerden mi devam ediyor?
Aynı client aynı server linki kapatıp ardından tekrar link kurarlarsa bile bu numaralar farklı değer alıyor.
Tek client ile çalışırken web servere paketler olması gereken sırada geliyor
iki ayrı client ile çalışmak ve paketleri iç içe geçirip serverı zorlamak istiyorum. Bunu nasıl yapacağım. (state machine'ı debug etmem lazım)
Paket(A1), Paket(A2) 1. clienttan gelebilecek peşpeşe paketler olsun.
Paket(B1), Paket(B2) 2 clienttan gelebilecek peşpeşe paketler olsun.
Paketler A1, A2, B1, B2 şeklinde gelirse zaten sorun yok
Fakat ben A1, B1, B2, A2 ya da A1, B1, A2, B2 şeklinde gelsin istiyorum.
Aslında explorerlardan birisini çok yavaşlatabilsem de çözüm olabilir.
Çözüm öneriniz varmı?
Şimdi gelen/giden paketlerle ilgili bir çetele tutmak istiyorum.
Öncelike sorundan bahsedeyim.
Serverdan A kullanıcısının explorerına PSH + ACK flağa sahip bir paket yolladım. A explorerı bana birazdan buna ilişkin ACK yollayacak.
Daha henüz gelmemişken bir başka B kullanıcısından daha önce gönderdiğim bir pakete ilişkin ACK gelecek.
Şimdi bu gelen ACK A'dan mı geldi B'denmi anlamam lazım.
Tutacağım çetelede neler olmalı bilemiyorum.
Aslında şu sorunun cevabı daha önemli.
Bir TCP paket (Etherner + IP + TCP) dünyanın diğer ucuna doğru yol alırken aradaki iletişim cihazları bu paketin nereleri ile oynarlar.