Start z STM32 VL Discovery – 15 — TCP/IP – 1

Start z STM32 VL Discovery – 15 — TCP/IP – 1
Razem głosów: 3 co stanowi: 93.33% całości.

Jako ?e poznali?my ju? podstawowe mo?liwo?ci i operacje na naszym STM32VL, umiemy u?ywa? portów, RTC, LCD, przycisków itd. Czas wi?c chyba ku temu by zacz?? pod??cza? nasze STM do bardziej zaawansowanych peryferii. Na pierwszy ogie? pu?cimy sobie wi?c  interfejs sieci WEB  oparty o uk?ad ENC28J60 firmy Microchip.

 

enc28j60

Ka?dy pewnie zna ten uk?ad. Wdawanie si? w szczegó?y mo?e by? przyt?aczaj?ce g?ównie dla pocz?tkuj?cych z STM32 cho? nie tylko, a poniewa? b?dziemy programowa? uk?ad do komunikacji z sieci? Ethernet to jednak diabe? tkwi w szczegó?ach. Dlatego konieczne jest, w celu omówienia omówienie od pocz?tku. Zaczniemy od definicji poj??. Eksperci wybacz? , ?e potraktuj? to bardzo skrótowo i uproszcz? opis,  ale dla mniej do?wiadczonych, to z pewno?ci? b?dzie dobre przypomnienie i wprowadzenie je?li jeszcze nie borykali si? z tym problemem, a chcieli by kiedy? co? takiego pope?ni?.

 

Pr?dko?? i topologia

Sieci Ethernet fizycznie mog? przesy?a? dane w ró?nym tempie. Wcze?niej, sieci Ethernet sk?ada?y si? z jednego kabla koncentrycznego (zreszt? nie tak dawno temu), komunikacja mog?a odbywa? si? tylko w jednym kierunku, bo nie by?o mo?liwe wykorzystanie pe?nego dupleksu. Obecnie po??czenie Ethernet wykonane jest z 4 par skr?conych w kablu (skr?tka) co umo?liwia zarówno nadawanie jak i odbiór – urz?dzenie mo?e nadawa? i odbiera? w tym samym czasie (czyli stosuje si? FULL Duplex). Wcze?niej by?a norm?  szybko?? transmisji 10 Mb/s, obecnie dominuj?c? pr?dko?ci? jest 100 Mbit/s, a cz?sto mo?na spotka? si? z pr?dko?ci? 1 Gb/s.

Na szcz??cie, prawie wszystkie urz?dzenia s?  kompatybilne w dó? i ka?de urz?dzenie powinno by? w stanie komunikowa? si? w sieci 10/100 Base-T.

W sieciach korzystaj?cych z wielu par skr?conych przewodów s? wykorzystywane sieci o topologii gwiazdy

– zatem istnieje centralny obiekt (zwykle jest to switch, ruter lub inne urz?dzenie do przesy?ania pakietów), w którym s? wprowadzane kable od wszystkich urz?dze? ethernetowych.

Kiedy wi?c stworzymy nasze urz?dzenie, pod??czymy go do kabla ze z??czami RJ-45 po obu stronach, tak ?e jeden koniec kabla idzie do switcha/rutera a drugi  do naszego urz?dzenia. Owszem mo?emy si? spi?? krosowanym przewodem bezpo?rednio z  naszym komputerem , ale jednak polecam u?ycie rutera.

Wreszcie, chcia?bym zwróci? uwag?, ?e na wi?kszo?ci komputerów zainstalowano zapory blokuj?ce ruch tak wi?c w przypadku jakiejkolwiek awarii, z?ego dzia?ania programu z innych cz??ci traktuj?cych o TCP/IP, nie zapomnijmy o sprawdzeniu tej opcji.

 

Adresy

Podstaw? sieci Ethernet jest jednoznaczny adres. Aby u?atwi? odró?nienie dwóch adresów stosuje si?:

– adres dla protoko?u internetowego (IP) i adres Media Access Control (MAC).

Obecnie najcz??ciej u?ywane adresy typu IPv4, który sk?ada si? z 4 sekcji 8-bit (np. 192.168.1.5).

Adres MAC jest skonstruowany jak dla urz?dze? USB kod VID – adresy MAC zawieraj? numer producenta, a ich przydzia? jest tak problematyczny jak VID.

Adres MAC jest 6-bajtowy i prezentowany jest jako ci?g liczb szesnastkowych lub numerów poszczególnych rozdzielonych dwukropkiem (na przyk?ad 00:00 C: 2B: DE: 3F: 25).

Ogólnie, liczby IP i MAC musz? by? unikalne w sieci (tj. nie mo?na mie? dwóch urz?dze? z tym samym IP lub numer MAC).  Oprócz wspomnianych wy?ej adresów sieci s? równie? domeny, sk?adaj?ce si? z tekstowych nazw o (np. sunduino.pl).  Przeniesienie tej „ludzkiej postaci czytelnej dla nas” na adres IP obs?uguje protokó? DNS, który zwraca si? do serwera nazw, który zarz?dza adresami IP domen by przet?umaczy?  j? na numer IP dla danej nazwy.

Dla informacji te? musz? dopowiedzie? i? pula adresów IPv4 jest na wyko?czeniu wi?c powoli wprowadza si? IPv6 gdzie adres sk?ada si? z 16 bajtów i zapis jego wygl?da tak: fec0:0000:0000:0001:0800:5a12:3456  a rozdzielenie bloków dwukropkiem lub kropk? wyst?puje po 2 bajtach.

 

Ma?y smoczek do adresów :)  —- Niektóre bloki adresów nie s? transmitowane w Internecie. Dla naszych celów mo?emy g?ównie u?y? adresów o zakresach:

10.0.0.0 – 10.255.255.255,
172.16.0.0 – 172.31.255.255,
192.168.0.0 – 192.168.255.255.
Dlatego zaleca si? korzysta? z nich w wewn?trznej sieci.
Ponadto s? jeszcze adresy loopback, których nie mo?emy stosowa?  do naszych urz?dze?, a mieszcz? si? w zakresie 127.0.0.0  –  127.255.255.255
Przy nadawaniu adresu naszemu urz?dzeniu musimy te? uwzgl?dni? urz?dzenia w sieci.
np. nasz ruter ma adres 192.168.0.1  , komputer  192.168.0.2 wiec nasze urz?dzenie
mo?e mie? np. 192.168.0.3 do 255. Czyli upraszczaj?c musisz mie? IP taki jaki nie wystepuje w sieci.
Porty 

Urz?dzenie pod??czone do sieci Ethernet mo?e obs?ugiwa? kilka us?ug (np. serwer WWW i FTP).

W celu odró?nienia ró?nych us?ug s? im przypisane ró?ne porty.
Przyk?adem takim w sieci najcz??ciej u?ywanym (w?a?ciwie dla protoko?u http) jest port 80.
Numer portu podany jest 2 bajtowy, wi?c zakres portów jest w obr?bie od 1 do 65535.
Numer portu mo?na zazwyczaj wprowadzi? po adresie IP za pomoc? dwukropka.
Przyk?adowo przegl?darka podczas wpisywania adresu np. sunduino.pl sama interpretuje to jako: sunduino.pl:80. Mo?liwo?? wpisania portu jest bardzo przydatna. Mo?e to by? wykorzystywane tak, ?e us?ugi s? uruchamiane na okre?lonym porcie i je?li kto? nie zna odpowiedniego numeru portu, nie mo?e komunikowa? si? z us?ug? (na przyk?ad, witryna mo?e dzia?a? na „sunduino.pl: 55” i po wpisaniu w przegl?darce tylko „sunduino.pl” nie zobaczymy nic). Oczywi?cie, ?e s? programy, które mog? stopniowo skanowa? wszystkie porty porty, ale to nas teraz nie interesuje.
W skrócie Adres IP i port docelowy opisuje gniazdo, które jest oznaczeniem kana?u komunikacyjnego miedzy urz?dzeniami Ethernet.
Protoko?y 

Wreszcie dochodzimy do protoko?ów.

Protoko?y komunikacyjne sk?adaj? si? z kilku warstw, zwykle znamy ten aktualny który jest
najwy?ej i jest najbardziej zbli?ony do aplikacji.
S? to przede wszystkim protoko?y komunikacyjne i te s? dla nas lepsze od najni?szych.
Zobaczmy równie? dodatkowy obraz do modelu OSI i protoko?ów:

Protoko?ów aplikacyjnych jest wiele i z czasem warto wiedzie? jakie poza najpopularniejszymi HTTP, DNS czy FTP.

Protoko?y komunikacyjne

Je?li ju? wiesz co to jest adres i port, to zmartwi? ci? bo to jeszcze nie wszystko. Ka?dy port mo?e komunikowa? si? z wieloma protoko?ami.  Istniej? trzy wspólne – TCP, UDP i ICMP.

Protoko?y komunikacyjne tworzone podczas przesy?ania niektórych danych (Application Protocol), przez które przechodz? pakiety warstwy Internetu i odwrotnie podczas odbierania pakietów pobieranych z Internetu tworz? warstw? danych dla protoko?ów aplikacyjnych.

TCP – (Transmission Control Protocol) to protokó? dwustronny ze sprawdzeniem poprawno?ci transmisji.

Czyli podczas przesy?ania danych w jednym kierunku odbiorca potwierdza prawid?owe odbieranie pakietów i ewentualnie mo?e ??da? retransmisji pakietu przesy?anego nieprawid?owo.

UDP – (User Datagram Protocol) to protokó? jednokierunkowy bez potwierdzenia poprawno?ci.

W sumie nie jest to du?a wada jak si? wydaje i z powodzeniem ten protokó? prosto mo?na wykorzysta?.

ICMP – komunikaty Control Protocol (Internet Message) jest on inny ni? powy?sze dwa.

Jest to protokó?, w którym wykazuje si? , ?e co? jest nie tak – na przyk?ad to, ?e ??dana us?uga nie jest dost?pna. Wi?c to jest sposób, aby wys?a? raport o b??dzie. Teoretycznie je?li wszystko jest w naszej transmisji ok nie musimy korzysta? ICMP.

Interfejs Ethernet

Zadaniem interfejsu Ethernet jest odsy?anie nag?ówka datagramu i dodawanie docelowej sumy kontrolnej CRC, a podczas odbierania sprawdza? prawid?owo?? CRC.

Poni?ej wida? w jaki sposób dane podczas transmisji innych danych stopniowo s?  „pakowane” i zostaj? wys?ane do sieci Ethernet. Natomiast w drug? stron? s? stopniowo rozpakowywane a? do otrzymania wiadomo?ci w?a?ciwej :)

 

Przep?yw danych w sieci Ethernet

Z powy?szego wynika to co jest oczywiste, jak przenie?? dane przez sie? Ethernet.

Z naszego urz?dzenia wysy?amy ramki broadcast do najbli?szego urz?dzenia master w sieci (jest to zwykle router). Je?li dane id? do routera, to zostaje rozszerzona ramka a? znajdzie adres docelowy datagramu, datagram dodaje swój nag?ówek – tworz?c tym samym swój pakiet i wysy?a go w zale?no?ci od adresu docelowego. Urz?dzenie docelowe zostanie wykryte po otwarciu klatki datagramu, nast?pnie musi rozpakowa? dane z pakietu danych przekazywanych do wy?szego protoko?u.

Pakiet jest przetwarzany (np. w przypadku pakietów TCP generowany jest CRC zwrotny).
W ramce (frames) pakiety  i datagramy mog? tworzy?  ba?agan, mo?e to utrudnia? zrozumienie siebie przez urz?dzenia. Dlatego dok?adna posta? powinna by? przepisana,  zaczynaj?c od do?u sprz?tu w sieci  Ethernet. (czyli najni?szej warstwy)

Format ramki Ethernet zgodnie z IEEE 802.3

Docelowy MAC ?ród?owy MAC D?ugo?? DATA CRC

 

 

Format ramki Ethernet zgodnie z v.2

Docelowy MAC ?ród?owy MAC Typ DATA CRC

Typ: IP = 0x0800, 0x0806 = ARP, RARP = 0x8035, 0x8137 = IPX

Po prostu ??na pocz?tku ramki jest dodatkowa sekwencja bajtów, gdzie naprzemiennie podawane s?  

101010 .., w celu umo?liwienia synchronizacji odbiornika. 

Do ramki Ethernet s? pakowane poszczególne datagramy :

Format datagramu IPV4

Bytes 0 1 2 3
0-3 Wersja D?ugo?? hl. Rodzaj us?ugi D?ugo?? ca?kowita
07/4 Identyfikacja Obiekty Fragment offset
11/8 TTL Protokó? Header checksum
15/12 Adres nadawcy
Od 16 do 19 Adres docelowy
Od 20 do 23 Wybrany Filler
Dane

Wynika z tego jawnie, ?e pojedynczy datagram zawiera pakiety danych dla ka?dego protoko?u

Nag?ówek TCP

Jak wi?c widzicie w datagramie TCP wysy?any jest równie? numer potwierdzenia, jest on sekwencyjny i tylko tak datagram mo?e zosta? zatwierdzony. Wynika z tego, ?e wysy?anie i potwierdzanie datagramów jest mo?liwe jednym certyfikatem dla ca?ego bloku co znacznie przyspiesza komunikacj?.

Je?li za?apali?cie bakcyla i chcecie wiedzie? wi?cej na ten temat poczytajcie tutaj:

IP  – http://www.tcpipguide.com/free/t_IPDatagramGeneralFormat.htm

UDP – http://www.tcpipguide.com/free/t_UDPMessageFormat.htm

ARP – http://www.tcpipguide.com/free/t_ARPMessageFormat.htm

Programiki

W tej chwili roztrz?samy problem tylko teoretycznie, wi?c mo?emy równie? spojrze? na jaki? kod.

Mamy kilka opcji a jak?e :

– albo napisa? co? ma?ego i prostego np mini stos TCP/IP samodzielnie;

– lub wykorzysta? stos, który zapewnia Microchip  (mo?emy, poniewa? jest to dla ENC28J60);

– lub wykorzysta? lekki  stos TCP/IP ze szwedzkiego uniwersytetu (lwIP);

– czy wreszcie mo?emy wykorzysta? por?czny i ma?y stosik TPC/IP z InterNICHE, który jest darmowy do u?ytku z produktami ST Microelectronics.

Zawsze mo?emy te? sami si? spali? na stosie za sianie defetyzmów i herezji elektronicznych,  ale to zostawmy mo?e w tej chwili … to? ju? czasy ciemnoty i ?redniowiecze mamy za sob? :)

Tak , ale mimo wszystko dalej nie wiemy co zrobi? i w stron? którego ?wiate?ka si? uda? …

Nie ma to jak niepewnie sta? na rozdro?u, dróg i pomys?ów wiele , a dobrego rozwi?zania nie wida? :(

Wszystko ma swoje plusy i minusy. W ka?dym razie, gdy przyjrzymy si?, jak rozwi?zuj? to inni, dojdziemy do wniosku, ?e i nam nie mo?e si? nie uda?. Wiec co robimy ??

Pozagl?damy sobie do ARP Microchipa ??

Dobra niech b?dzie :)

Operacja ARP sk?ada si? z dwóch funkcji.

Pierwsza to procedura ARPGet dla pakietów przychodz?cych:

 

Druga funkcja jest bardziej dla nas interesuj?ca :

echhh…  a SwapARPPacket();  wygl?da tak :

Zawi?e ??

Nie przecie? wida? wyra?nie, ?e ??danie wys?ania ARP jest nast?puj?ce:

 

Warto w tym miejscu wspomnie? ?e je?li nasze urz?dzenie chce rozwi?za? adres spoza naszej sieci , po prostu odpytuje ruter, który odpowiada wysy?aj?c adres MAC. Dzieje si? tak dlatego,

?e aby wys?a? co? poza nasz? sie? pierwszy w ?cie?ce jest nasz RUTER i to on wysy?a wiadomo?? dalej na IP spoza naszej sieci.

Konkluzja

W sumie nie wiem czy jest ona w tym miejscu potrzebna, bowiem potraktowa?em z du?ym uproszczeniem tematyk? TCP/IP, ale postaram si? w nast?pnym artykule pope?ni? z wami prost? komunikacj? UDP (bo ten protokó? jest bardzo prosty). Napiszemy te? prost? aplikacj? na PC, w której b?dziemy obserwowa? co si? dzieje :), ale te? wydawa? polecenia naszej p?ytce STM32VL.  Postaram si? te? wdro?y? protokó? TCP g?ównie po k?tem portu 80,  jak tez pope?nimy ma?y serwer HTTP gdzie przy pomocy przegl?darki b?dziemy mogli sprawdzi? czy np. przycisk zosta? wci?ni?ty. Oczywi?cie to tylko wszystko jest zabaw? i wst?pem do powstawania z?o?onych uk?adów Home Inteligence , które zapewne ?atwiej wam b?dzie budowa? w przysz?o?ci gdy  zrozumiecie ide? dzia?ania TCP/IP na mikrokontrolerach.

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay