26
Wykład Mikrosystemy Elektroniczne 1 Mikrostos TCP/IP 1. Wstęp Wykład dotyczący minimalnej implementacji stosu TCP/IP (mikrostos TCP/IP) powstał na podstawie rozdziału 2 pracy dyplomowej dyplomanta Dariusza Załęskiego pt.: Opracowanie i realizacja mikroserwera TCP/IP opartego na układach AT89S53 i CS8900A. Zawarto w nim podstawowe informacje na temat sieci Ethernet oraz protokołów sieciowych wykorzystywanych przez mikroserwer. Opisano również zaimplementowane protokoły warstwy aplikacji, tj. „własny” protokół oraz protokół wykorzystywany w usłudze wysyłania wiadomości e-mail – SMTP. Ethernet jest obecnie najszerzej na świecie wykorzystywaną technologią lokalnych sieci komputerowych (ang. LAN – Local Area Network). Standard Ethernet dla sieci pracującej z prędkością 10 Mb/s opublikowało w roku 1980 konsorcjum DEC-Intel-Xerox (DIX). Wtedy też organizacja IEEE rozpoczęła prace zmierzające do opracowania własnego standardu, bazującego na specyfikacji sieci lokalnej podanej przez DIX. W roku 1985 po raz pierwszy opublikowano standard IEEE 802.3 Ethernet o pełnej nazwie Carrier Sense Multiple Access with Collision Detection (CSMA/CD) Access Method and Physical Layer Specifications. Do tej chwili powstało wiele rozszerzeń standardu IEEE 802.3, wprowadzających komunikację z dużo większymi przepływnościami, aż do 1000 Mb/s (IEEE 802.3z). W dalszej części omówiono transmisję danych z prędkością do 10 Mb/s w nieekranowanej skrętce miedzianej (ang. Unshielded Twisted Pair - UTP), którego warstwę fizyczną opisuje standard IEEE 802.3i (10BaseT), wydany w 1990 roku. 2. Warstwa fizyczna Warstwa fizyczna jest najniższą warstwą sieci Ethernet. Definiuje ona typ okablowania, zastosowanych złącz oraz określa sposób kodowania informacji i poziomy sygnałów elektrycznych. Mikroserwer pracuje w standardzie sieci 10BaseT, która charakteryzuje się następującymi parametrami: ! topologia gwiazdy, ! jako medium transmisyjne wykorzystywana jest skręcona nieekranowana para przewodów miedzianych – skrętka (UTP) o impedancji 100 . Stosuje się skrętkę co najmniej 4-tej kategorii o maksymalnym paśmie przenoszenia 20 MHz, ! złącza typu RJ45, przy czym kable zakończone są wtykami, gniazda zaś posiadają urządzenia sieciowe np. router’y, karty sieciowe, hub’y, switch’e, ! maksymalna odległość pomiędzy dwoma urządzeniami sieciowymi wynosi 100 m, ! maksymalna prędkość transmisji dochodzi do 10 Mb/s, ! transmisja różnicowa dwiema parami przewodów, ! kodowanie Manchester. Na poniższym rysunku 1 przedstawiono zasadę pracy kodera Manchester oraz typowy poziom sygnału w sieci Ethernet 10BaseT.

Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Embed Size (px)

Citation preview

Page 1: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 1

Mikrostos TCP/IP1. Wstęp

Wykład dotyczący minimalnej implementacji stosu TCP/IP (mikrostos TCP/IP) powstał napodstawie rozdziału 2 pracy dyplomowej dyplomanta Dariusza Załęskiego pt.: Opracowanie irealizacja mikroserwera TCP/IP opartego na układach AT89S53 i CS8900A.

Zawarto w nim podstawowe informacje na temat sieci Ethernet oraz protokołów sieciowychwykorzystywanych przez mikroserwer. Opisano również zaimplementowane protokoły warstwyaplikacji, tj. „własny” protokół oraz protokół wykorzystywany w usłudze wysyłania wiadomoście-mail – SMTP.

Ethernet jest obecnie najszerzej na świecie wykorzystywaną technologią lokalnych siecikomputerowych (ang. LAN – Local Area Network). Standard Ethernet dla sieci pracującej zprędkością 10 Mb/s opublikowało w roku 1980 konsorcjum DEC-Intel-Xerox (DIX). Wtedy teżorganizacja IEEE rozpoczęła prace zmierzające do opracowania własnego standardu, bazującegona specyfikacji sieci lokalnej podanej przez DIX. W roku 1985 po raz pierwszy opublikowanostandard IEEE 802.3 Ethernet o pełnej nazwie Carrier Sense Multiple Access with CollisionDetection (CSMA/CD) Access Method and Physical Layer Specifications.

Do tej chwili powstało wiele rozszerzeń standardu IEEE 802.3, wprowadzającychkomunikację z dużo większymi przepływnościami, aż do 1000 Mb/s (IEEE 802.3z). W dalszejczęści omówiono transmisję danych z prędkością do 10 Mb/s w nieekranowanej skrętcemiedzianej (ang. Unshielded Twisted Pair - UTP), którego warstwę fizyczną opisuje standardIEEE 802.3i (10BaseT), wydany w 1990 roku.

2. Warstwa fizyczna

Warstwa fizyczna jest najniższą warstwą sieci Ethernet. Definiuje ona typ okablowania,zastosowanych złącz oraz określa sposób kodowania informacji i poziomy sygnałówelektrycznych.

Mikroserwer pracuje w standardzie sieci 10BaseT, która charakteryzuje się następującymiparametrami:

! topologia gwiazdy,! jako medium transmisyjne wykorzystywana jest skręcona nieekranowana para

przewodów miedzianych – skrętka (UTP) o impedancji 100 Ω. Stosuje się skrętkę conajmniej 4-tej kategorii o maksymalnym paśmie przenoszenia 20 MHz,

! złącza typu RJ45, przy czym kable zakończone są wtykami, gniazda zaś posiadająurządzenia sieciowe np. router’y, karty sieciowe, hub’y, switch’e,

! maksymalna odległość pomiędzy dwoma urządzeniami sieciowymi wynosi 100 m,! maksymalna prędkość transmisji dochodzi do 10 Mb/s,! transmisja różnicowa dwiema parami przewodów,! kodowanie Manchester.

Na poniższym rysunku 1 przedstawiono zasadę pracy kodera Manchester oraz typowypoziom sygnału w sieci Ethernet 10BaseT.

Page 2: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 2

Rys. 1. Kod Manchester.

2.1. Ramka sieci Ethernet, adres MAC

W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne) fizyczne adresy48-bitowe, zapisywane szesnastkowo w postaci 6 bajtów, oddzielonych dwukropkami lubmyślnikami. Są to tzw. adresy MAC (ang. Media Access Code). Każdy producent komputerowejkarty sieciowej lub niezależnego urządzenia sieciowego nadaje mu adres należący do przyznanejdanemu producentowi puli adresów. Przykładowe adresy MAC mają postać:

00-00-1F-15-AA-C800-E0-7D-00-68-58

Dodatkowo zdefiniowany jest tzw. rozgłoszeniowy adres MAC. Wysłanie ramki Ethernet doodbiorcy z tym adresem powoduje, iż odbiorą ją wszystkie komputery działające w danymsegmencie sieci. Adres rozgłoszeniowy składa się z 48 bitów o wartości ‘1’, czyli 6 bajtów owartości 255:

FF-FF-FF-FF-FF-FF

Wszystkie 16- i 32-bitowe liczby w protokołach sieciowych zapisywane są w konwencjiBig-Endian, tzn. najstarszy bajt pierwszy. Dane zaś przesyłane są w pakietach o długości od 72do 1526 bajtów. Rysunek 2 przedstawia wygląd ramki ethernetowej (ang. frame) w standardzieEthernet II.

Rys. 2. Ramka sieci Ethernet.

Na początku wysyłana jest preambuła (ang. preamble) – stały ciąg siedmiu zer i jedyneknaprzemiennie (1010101) mający na celu zsynchronizowanie odbiornika umieszczonego w

+2,5V

0

-2,5V

0 0 1 1 0 1 0 0 1

Page 3: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 3

zdalnym urządzeniu sieciowym z nadajnikiem, a następnie jeden bajt o wartości 10101011,wskazujący na początek ramki – SFD (ang. Start-of-Frame Delimiter). Tuż po SFD przesyłane sąadresy MAC odbiorcy (ang. Destination Address – DA) i nadawcy ramki (ang. Source Address –SA), każdy po 6 bajtów, pole (LLC data) zawierające typ protokołu wyższej warstwy lub długośćdanych oraz blok danych o długości maksimum 1500 bajtów (ang. Logical Link Control – LLC),zakończony 32-bitową sumą kontrolną (ang. Frame Check Sequence – FCS).

Minimalna długość ramki Ethernet to 64 bajty. W przypadku, gdy pole danych jest mniejszeod 46 bajtów istnieje potrzeba jego wydłużenia, tak by cała ramka miała długość 64 bajtów.Wówczas na końcu pola danych zostaje dodane pole PAD wypełnione odpowiednią liczbą zer.

Interpretacja wspomnianego wyżej 16-bitowego pola długość/typ (na rys. Length Field)zależy od jego wartości. Jeżeli zawiera się w nim liczba mniejsza lub równa maksymalnemurozmiarowi pola danych (1500 bajtów), określa ono długość pola danych. Było towykorzystywane w starszych protokołach rodziny IEEE 802.2. Jeżeli natomiast to pole mawartość większą niż 1500, jest ona interpretowana jako identyfikator protokołu wyższej warstwy,zawartego (zagnieżdżonego) w polu danych. Przykładowo liczba 0x0806 (dziesiętnie 2054)jednoznacznie identyfikuje protokół ARP, a liczba 0x0800 (dziesiętnie 2048) protokół IP. Takabudowa ramki sieci Ethernet określona jest jako standard Ethernet II.

Na rysunku 3 przedstawiono przykład ramki Ethernet niosącej wiadomość ARP. Pole PADzostało dodane aby spełniony był warunek minimalnej długości ramki równej 64 bajty.

Rys. 2.3. Wiadomość ARP osadzona w ramce Ethernet II.

3. Protokoły sieciowe

3.1. Protokół ARP

ARP (Address Resolution Protocol) jest protokołem najniższej warstwy modelu ISO/OSI –warstwy fizycznej. Jego zadaniem jest mapowanie adresu logicznego IP na adres fizyczny MAC.Komputer chcący wysłać datagram IP zna jedynie adres IP odbiorcy. Natomiast w sieci Ethernetwszystkie przesyłane ramki powinny być opatrzone adresem MAC docelowego urządzeniasieciowego (pole DA). Protokół ARP definiuje sposoby wyszukiwania i konwersji 32-bitowychadresów IP na adresy wymagane przez warstwę dostępu do medium – w przypadku sieci Ethernetbędą to 48-bitowe adresy MAC.

Protokół ARP zakłada dynamiczne pozyskiwanie informacji o poszukiwanym adresie MAC.W tym celu w sieci Ethernet rozgłaszane są ramki o określonej strukturze, zawierającej m.in.adresy MAC i IP nadawcy oraz adres IP poszukiwanego urządzenia. Urządzenie, które rozpoznaswój adres IP, odsyła do nadawcy odpowiedź, zawierającą również jego adres MAC.

typ/długość LLC data

DA SA 0x0806 ARP message FCSPAD

Page 4: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 4

W celu uzyskania odpowiedzi, komputer wysyła pakiet ARP stanowiący zapytanie (ang. ARPRequest), pozostawiając wyzerowane pole adresu sprzętowego stacji poszukiwanej. RamkaEthernet zawierająca pakiet ARP jest rozgłaszana do wszystkich odbiorców w sieci lokalnejpoprzez podanie adresu MAC odbiorcy równego FF-FF-FF-FF-FF-FF.

Urządzenie, które rozpozna swój adres IP, odsyła do nadawcy pakiet ARP z odpowiedzią(ang. ARP Reply). W tym celu zamienia blok adresów nadawcy i odbiorcy, wypełniającdodatkowo swój adres MAC. Odpowiedź ARP jest kierowana bezpośrednio do nadawcy.

Mechanizm pozyskiwania adresów sprzętowych oparty na protokole ARP jest prosty iwydajny. W celu zmniejszenia ilości wysyłanych zapytań ARP, każdy komputer dysponujetablicą przypisań, odwzorowującą adresy IP na adresy MAC urządzeń, do których się ostatnioodwoływał. W celu zapobieżenia nieskończonemu przyrostowi ilości magazynowanych adresów,są one usuwane z tablicy, jeżeli nie były przez pewien czas potrzebne.

Dla przykładu - jeśli komputer A o adresie sprzętowym MAC 00-00-1F-15-AA-C8 iadresie IP 192.168.0.5 chce nawiązać połączenie z komputerem B o adresie IP 192.168.0.8, i niezna adresu MAC komputera B, to wysyła ramkę zapytania ARP, której postać przedstawiatabela 1. Zacieniowane wiersze stanowią nagłówek ramki Ethernet II, pozostałe tworzą pakietARP.

Z kolei komputer B, o ile jest aktywny, natychmiast odsyła odpowiedź ARP zawierającą jegoadres MAC 00-0C-76-8A-11-DE. Postać odpowiedzi ARP przedstawia tabela 2.

Tab. 1. Postać ramki zapytania ARP.długość pola opis zawartość

6 bajtów adres MAC odbiorcy (DA) FF-FF-FF-FF-FF-FF6 bajtów adres MAC nadawcy (SA) 00-00-1F-15-AA-C82 bajty typ/długość 0x0806 – ARP2 bajty protokół sprzętowy 0x0001 – Ethernet2 bajty protokół logiczny 0x0800 – IP1 bajt długość adresu fizycznego (MAC) 0x06 – 6 bajtów1 bajt długość adresu logicznego (IP) 0x04 – 4 bajty2 bajty kod operacji 0x0001 – zapytanie ARP6 bajtów adres sprzętowy (MAC) nadawcy 00-00-1F-15-AA-C84 bajty adres logiczny (IP) nadawcy C0-A8-00-05 - 192.168.0.56 bajtów adres sprzętowy (MAC) odbiorcy 00-00-00-00-00-004 bajty adres logiczny (IP) odbiorcy C0-A8-00-08 - 192.168.0.8

Tab. 2. Postać ramki odpowiedzi ARP.długość pola opis zawartość

6 bajtów adres MAC odbiorcy (DA) 00-00-1F-15-AA-C86 bajtów adres MAC nadawcy (SA) 00-0C-76-8A-11-DE2 bajty typ/długość 0x0806 – ARP2 bajty protokół sprzętowy 0x0001 – Ethernet2 bajty protokół logiczny 0x0800 – IP1 bajt długość adresu fizycznego (MAC) 0x06 – 6 bajtów1 bajt długość adresu logicznego (IP) 0x04 – 4 bajty2 bajty kod operacji 0x0002 – odpowiedź ARP

Page 5: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 5

6 bajtów adres sprzętowy (MAC) nadawcy 00-0C-76-8A-11-DE4 bajty adres logiczny (IP) nadawcy C0-A8-00-08 - 192.168.0.86 bajtów adres sprzętowy (MAC) odbiorcy 00-00-1F-15-AA-C84 bajty adres logiczny (IP) odbiorcy C0-A8-00-05 - 192.168.0.5

W mikroserwerze zaimplementowano pełny protokół ARP, tj. mikroserwer ma możliwośćwysyłania odpowiedzi ARP (jako serwer) jak i wysyłania zapytań ARP (jako klient).

3.2. Stos protokołów TCP/IP

W latach 1973-78 Agencja DARPA i Stanford University opracowały dwa wzajemnieuzupełniające się protokoły: połączeniowy TCP (Transmision Control Protocol) ibezpołączeniowy IP (Internet Protocol). Protokoły te służą do łączenia oddzielnych fizyczniesieci w jedną sieć logiczną. Wykorzystywane są w sieciach lokalnych i rozległych.Najistotniejsze zalety protokołów TCP/IP:! otwartość i niezależność od specyfikacji sprzętowo-programowej systemów

komputerowych,! możliwość integracji wielu różnych rodzajów sieci komputerowych,! wspólny schemat adresacji pozwalający na jednoznaczne zaadresowanie każdego

użytkownika w sieci,! istnienie standardowych protokołów warstw wyższych.

Współcześnie protokoły TCP/IP to zestaw (stos) wielu protokołów przeznaczonych do:! transferu danych: IP, TCP, UDP (User Datagram Protocol),! kontroli poprawności połączeń: ICMP (Internet Control Message Protocol),! zarządzania siecią: SNMP (Simple Network Management Protocol),! zdalnego logowania się do sieci: TELNET,! usług aplikacyjnych, np. przesyłanie plików: FTP (File Transfer Protocol),

Architektura protokołów TCP/IP jest czterowarstwowa w odróżnieniu od siedmio-warstwowej architektury ISO/OSI. Obie architektury przedstawia tabela 3.

Tab. 3. Warstwowy model ISO/OSI i TCP/IP.ISO/OSI TCP/IP

warstwa aplikacjiwarstwa prezentacji

warstwa sesjiwarstwa aplikacji

warstwa transportowa warstwa transportowawarstwa sieciowe warstwa Internetu

warstwa łącza danychwarstwa fizyczna (sprzętowa) warstwa dostępu do sieci

Jak w każdym modelu warstwowym, dane generowane przez programy aplikacyjne sąprzekazywane w dół stosu, kiedy mają być wysłane przez sieć i w górę stosu przy odbiorze.Każda warstwa stosu dodaje do danych przekazywanych z warstwy wyższej informacje sterującew postaci nagłówków. Nagłówek dodany w warstwie wyższej jest traktowany jako dane w

Page 6: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 6

warstwie niższej (tzw. enkapsulacja). Nazewnictwo struktur danych w zależności odwykorzystywanego protokołu transportowego przedstawia tabela 4.

Tab. 4. Nazewnictwo jednostki danych w zależności od warstwy.TCP UDP

warstwa aplikacji strumień (ang. stream) wiadomość (ang. message)warstwa transportowa segment pakietwarstwa Internet datagram datagramwarstwa dostępu do sieci ramka (ang. frame) ramka (ang. frame)

Zadania poszczególnych warstw są następujące:

! warstwa dostępu do sieciNajniższa w hierarchii architektury protokołów TCP/IP. Jej funkcje odpowiadają w przybliżeniufunkcjom trzech najniższych warstw modelu ISO/OSI. Do komunikacji w sieciach rozległych lubprzez łącza szeregowe wykorzystuje m.in. takie protokoły jak: X.25 (w sieciach pakietowych),PPP (Point-to-Point Protocol) lub SLIP (Serial Line IP).

! warstwa InternetPodstawowym protokołem tej warstwy jest IP, który jest odpowiedzialny za przesyłanie pakietówzwanych datagramami między użytkownikami sieci. Jest to protokół bezpołączeniowy, cooznacza, że datagramy są przesyłane przez sieć bez kontroli poprawności ich dostarczenia. Wefekcie datagram może zostać zgubiony w sieci, przekłamany lub zniekształcony.Drugim protokołem tej warstwy jest ICMP ściśle związany z IP. Służy on do przesyłaniakomunikatów o nieprawidłowościach w pracy sieci. Protokół pozwala na przesyłanie wiadomościsterujących między węzłami sieci. Wiadomości te dotyczą sterowania przepływem, testowaniapołączeń, wskazania alternatywnych połączeń i wykrywania niedostępnych użytkowników.

! warstwa transportowaZapewnia bezpośrednie połączenie między końcowymi użytkownikami (systemami)wymieniającymi informacje. Najważniejsze protokoły tej warstwy to TCP oraz UDP.Protokół TCP jest protokołem połączeniowym umożliwiającym wykrywanie błędów na obukońcach połączenia. Ma on możliwość ustanowienia i utrzymania połączenia wirtualnego międzydwoma użytkownikami w celu przesyłania danych, sterowania przepływem, przesyłaniapotwierdzeń oraz kontroli i korekcji błędów. Protokół UDP jest protokołem bezpołączeniowym,nie posiada mechanizmów sprawdzania poprawności dostarczenia danych do miejscaprzeznaczenia. Segmenty TCP jak i pakiety UDP w celu ich dalszego przesłania są umieszczanewewnątrz datagramu IP.

! warstwa aplikacjiProtokoły tej warstwy dostarczają użytkownikom różnych usług wykorzystując jako protokołówtransportowych TCP lub UDP.

Najbardziej znane protokoły warstwy aplikacji korzystające z TCP to:! TELNET – umożliwia zdalne łączenie z systemem,! FTP - przesyłanie plików przez sieć,

Page 7: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 7

! SMTP (Simple Mail Transfer Protocol), POP3 (Post Office Protocol ver.3) dla wymianypoczty elektronicznej,

! HTTP (ang. Hyper Text Transfer Protocol) – przeglądanie stron WWW (ang. World WideWeb).

Natomiast do bardziej znanych protokołów warstwy aplikacji korzystających z protokołu UDPnależą:! DNS (Domain Name Service) – odpowiada za zamianę adresów IP na tzw. adresy

domenowe,! RIP (Routing Information Protocol) - wymiana informacji związanych z aktualizacją reguły

doboru tras w węzłach sieci (routing),! NFS (Network File System) - współdzielenie plików przez wiele komputerów dołączonych

do sieci.

Każda aplikacja korzystająca z protokołów TCP lub UDP jest identyfikowana za pomocąnumeru portu. W Internecie niektóre numery portów są zarezerwowane i wstępnie przypisane dotzw. dobrze znanych usług (ang. well known port numbers). Dobrze znane usługi to np. takieprotokoły sieciowe jak FTP: porty 20 i 21, TELNET: 23, SMTP: 25, POP3: 110, HTTP: 80, itd.

Protokoły TCP/IP używają również pojęcia gniazda. Gniazdo to kombinacja adresu IP inumeru portu. W związku z tym gniazdo jednoznacznie określa proces w Internecie, czyzakończenie logicznego łącza komunikacyjnego między dwiema aplikacjami. Jeśli aplikacjerealizowane są na dwóch różnych komputerach, to para odpowiadających im gniazd definiujepołączenie w protokole połączeniowym TCP.

3.3. Protokół IP

Jak już wspomniano wcześniej protokół IP umożliwia transmisję bloków informacji zwanychdatagramami, pomiędzy dwoma urządzeniami (ang. host), identyfikowanymi przez 32-bitoweadresy IP. Prócz tego protokół IP zapewnia mechanizmy fragmentacji i składania datagramów odługości przekraczającej możliwości protokołów sieciowych niższej warstwy. Nie jestrealizowane natomiast sterowanie przepływem danych ani żadna kontrola poprawności przekazuinformacji między nadawcą a odbiorcą.

32-bitowe adresy IP są zwykle przedstawiane w formie 4 bajtów zapisanych dziesiętnie,oddzielonych kropkami. Przykładowe adresy IP mają postać:

100.200.100.253 80.50.38.114

Urządzenia pogrupowane są w podsieci, określane również przez 32-bitowe adresy. Każdeurządzenie z przypisanym adresem IP przynależy do jednej podsieci i musi prócz swego adresuznać również tzw. maskę podsieci (ang. subnet mask). Maska podsieci jest 32-bitowa izapisujemy ją podobnie jak adres IP. Przykładowa maska podsieci:

255.255.255.0

Page 8: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 8

Grupa bitów ustawionych w masce sieciowej (w przykładzie: 24 najstarsze bity adresu)definiuje zakres bitów określający podsieć. Grupa bitów wyzerowanych (tutaj 8 najmłodszychbitów) definiuje zakres bitów określający numer hosta – komputera lub innego urządzeniasieciowego.

Dla pierwszego z przykładowych adresów IP na podstawie maski podsieci można obliczyćnumer podsieci mnożąc logicznie (operacja AND) maskę podsieci z adresem IP. Należypamiętać, że wszystkie adresy są po prostu 32-bitowymi liczbami, tyle że zapisanymi wspecyficzny sposób:

100.200.100.253 AND 255.255.255.0 = 100.200.100.0

Wyróżnia się grupę adresów IP, które nie mogą być przyznawane urządzeniom, ani nieokreślające numerów podsieci. Jest wśród nich m.in. adres rozgłoszeniowy(ang. broadcast) – używany w celu wysłania informacji do wszystkich komputerówodbierających nadaną ramkę (połączonych co najwyżej koncentratorami lub przełącznikami).Adres rozgłoszeniowy składa się z 32 ustawionych bitów:

255.255.255.255

Istnieje również specjalny adres rozgłoszeniowy podsieci, używany w celu transmisjiinformacji jedynie do hostów działających w danej podsieci. Tworzy się go poprzez ustawieniewszystkich bitów adresu podsieci przypisanych do numeru hosta. Matematycznie ujmując, w celuobliczenia adresu rozgłoszeniowego podsieci należy do numeru podsieci dodać logicznie(operacja OR) zanegowaną maskę podsieci. Na przykład:

100.200.100.0 OR (NOT 255.255.255.0) = 100.200.100.255

W omawianym wcześniej standardzie Ethernet II, datagramy protokołu IP są enkapsulowanew polu danych przesyłanej ramki. Pole określające typ zawiera natomiast wartość 0x0800, cojednoznacznie identyfikuje protokół IP.

Poniżej w tabeli 5 przedstawiono budowę nagłówka datagramu IP. W pierwszym wierszuumieszczono numery bitów w 32-bitowych słowach nagłówka.

Tab. 5. Nagłówek IP.00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

wersja IHL ToS długość całkowitaidentyfikator flagi przesunięcie fragmentu

TTL protokół suma kontrolna nagłówkaadres źródłowy IPadres docelowy IP

Pole „wersja” (ang. version) zawiera, w datagramach protokołu IP wersji czwartej, wartość 4(binarnie: 0100). Istnieje również szósta wersja protokołu IP, znacznie bardziej rozwinięta i do tejpory bardzo mało rozpowszechniona w Internecie.

Page 9: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 9

Pole „IHL” (ang. Internet Header Length) specyfikuje długość nagłówka liczoną w słowach32-bitowych. Nagłówki datagramów IP mogą zawierać dodatkowe pola opcji, zapisywanebezpośrednio za polem adresu docelowego. W opcjach są zapisywane parametry bezpieczeństwa,specjalne informacje na temat wyznaczania trasy datagramu (ang. routing) czy też dane o czasiewysłania datagramu (ang. timestamp). Najczęściej jednak dodatkowe opcje nie są doklejane donagłówków datagramów IP i 4-bitowe pole „IHL” ma wartość 5 (długość nagłówka wynosi 20bajtów).

Pole „ToS” czyli „typ usługi” (ang. Type of Service) pozwala na określenie parametrówpomocnych w wyznaczaniu trasy datagramu. Podzielone jest na 5 fragmentów o długości od 1 do3 bitów, których znaczenie podano w tabeli 6.

Tab. 6. Zawartość pola ToS.

bit znaczenie

0–2 pierwszeństwo

3 opóźnienie: 0 – normalne, 1 – niskie

4 przepustowość: 0 – normalna, 1 – wysoka

5 pewność transmisji: 0 – normalna, 1 – wysoka

6–7 bity zarezerwowane

W praktyce wykorzystuje się bity 3–5 pola „ToS” w takich usługach jak VoIP (ang. Voiceover IP) czy wideokonferencjach internetowych, choć do niedawna produkowane routery nieanalizowały zawartości pola „ToS” i nie uwzględniały go w procesie określania trasy transmisjidatagramu. Zapewnienie jakości usług poprzez m.in. specyfikację typu usługi dlaprzekazywanego datagramu okazało się niezbędne do poprawnego przekazu głosu przez sieć takrozległą, jak Internet. Dlatego większość obecnie produkowanego osprzętu sieciowego analizujepole „ToS”.

16-bitowe pole „długość całkowita” (ang. total length) datagramu IP zawiera liczoną wbajtach sumę długości nagłówka (podaną w polu „IHL”) i ilości danych występujących tuż zanagłówkiem. Każde urządzenie sieciowe musi być przygotowane do obróbki datagramów ocałkowitej długości nie mniejszej niż 576 oktetów. Z wielkości pola wynika, iż najdłuższetransmitowane datagramy nie mogą przekraczać 65535 oktetów. Jednak w praktyce maksymalnadługość datagramu jest ograniczona do rozmiaru pola danych ramki Ethernet o maksymalnejdługości (1518 bajtów) i jest nie większa niż 1500 bajtów.

„Identyfikator” (ang. identification) datagramu IP stanowi liczba 16-bitowa, inna dla każdegonadawanego datagramu. Bardzo ważna jest dla prawidłowego złożenia datagramu podzielonegona fragmenty, którego każdy przesyłany fragment otrzymuje ten sam identyfikator.

3-bitowe pole „flagi” (ang. flags) specyfikuje, czy niższa warstwa protokołów sieciowych manie dzielić datagramu na fragmenty (zapalony bit 17 drugiego słowa datagramu – flaga „Don’t

Page 10: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 10

Fragment”) oraz, dla datagramu podzielonego na fragmenty, czy będą przesyłane kolejnefragmenty (zapalony bit numer 18, flaga „More Fragments”). Pierwszy bit pola „flagi” nie jestużywany i w wysyłanych datagramach musi miećwartość 0.

13-bitowe pole „przesunięcie fragmentu” (ang. fragment offset) określa, do którego miejscadatagramu dany fragment należy. Przesunięcie fragmentu jest mierzone w jednostkach po 8bajtów a pierwszy z wysyłanych fragmentów musi mieć w tym polu wstawioną wartość 0.

Pole „TTL” (ang. Time To Live) datagramu IP określa czas życia datagramu. Jest on liczonyw ilości węzłów, przez które musi przejść datagram aż zostanie zatrzymany – nie przesłany dalej.Taki mechanizm zabezpiecza przed nieskończoną transmisją datagramu w razie niemożliwościznalezienia właściwej drogi do odbiorcy oraz pozwala ograniczyć transmisję do małego obszarugeograficznego, np. jednego państwa. Nadanie polu „TTL” zbyt niskiej wartości spowoduje, żenie dotrze on do zbyt odległego, w sensie ilości pośrednich węzłów, odbiorcy. Najczęściej polu„TTL” przy wysyłaniu datagramu nadawana jest stała wartość, np. 64.

8-bitowe pole „protokół” (ang. protocol) specyfikuje protokół wyższej warstwykomunikacyjnej, którego pakiet jest enkapsulowany w polu danych datagramu IP.Oprogramowanie mikroserwera będzie wymagało implementacji protokołów: ICMP (oidentyfikatorze 1) oraz TCP (o identyfikatorze 6).

Integralność informacji zawartych w nagłówku datagramu IP zapewnia 16-bitowa „sumakontrolna nagłówka” (ang. header checksum). Jest ona obliczana według prostego algorytmu,zakładającego zsumowanie wszystkich słów nagłówka jako liczb 16-bitowych a następniedopełnienie do jedności otrzymanej liczby. Otrzymana liczba jest 24-bitowa i nie można jejumieścić w 16-bitowym polu sumy kontrolnej. Dokonuje się tutaj prostego zabiegu – najstarszybajt tej liczby jest „odcinany” a następnie dodawany do otrzymanej w ten sposób liczby 16-bitowej. Na czas obliczeń pole sumy kontrolnej jest zerowane. Poniżej zamieszczonoprzykładowy nagłówek IP oraz sposób obliczenia sumy kontrolnej nagłówka (tabela 7).

Ostatnie dwa 32-bitowe słowa nagłówka datagramu IP stanowią: adres źródłowy IP (adresnadawcy datagramu) oraz adres docelowy IP (adres odbiorcy).

Tab. 7. Przykładowy nagłówek IP.00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

0100 (4) 0101 (5) 00000000 0000000001011100 (92 bajty)1100110111001101 (52685) 000 0000000000000000

10000000 (128) 00000110 (6 – TCP) 1110101101110001 (EB70)11000000101010000000000000000101 (192.168.0.5)11000000101010000000000000001000 (192.168.0.8)

Nagłówek z tabeli 7 zakodowany heksalnie ma postać:

45 00 00 5CCD CD 00 0080 06 EB 70C0 A8 00 05C0 A8 00 08

Page 11: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 11

By obliczyć sumę kontrolną należy najpierw zsumować przedstawione liczby jako16-bitowe (po 2 bajty):

45 0000 5CCD CD00 0080 0600 00C0 A800 05C0 A800 08

03 14 8C

W kolejnym kroku najstarszy bajt liczby 24-bitowej trzeba „odciąć” i dodać do uzyskanej liczby16-bitowej:

14 8C00 0314 8F

Teraz pozostaje tylko uzyskaną liczbę 148F odjąć od liczby FFFF, co daje liczbę EB70, którajest szukaną sumą kontrolną nagłówka IP.

W układzie mikroserwera, ze względu na ograniczone zasoby sprzętowe i moc obliczeniowąmikrokontrolera, wprowadzono pewne założenia odnośnie protokołu IP:! pole „wersja” zawsze przyjmuje wartość dziesiętna 4, zaś pole „IHL” wartość 5,! pola: „ToS”, „flagi”, „przesunięcie fragmentu” są wypełnione zerami,! długość całkowita nie może przekraczać maksymalnego rozmiaru pola danych ramki

Ethernet II, który wynosi 1500 bajtów,! pole „identyfikator” może przyjmować dowolną wartość stałą, ponieważ nie przewiduje się

fragmentacji,! pole „TTL” posiada stałą, niską wartość (np. TTL=32),! w polu „protokół” wartości dozwolone to: 1 – ICMP, 6 – TCP (tylko te dwa protokoły

zostały zaimplementowane). Datagramy IP z innymi wartościami tego pola będąignorowane.

3.4. Protokół ICMP

Jak wcześniej wspomniano Internet Protocol realizuje zawodne przenoszenie pakietów bezużycia połączenia za pomocą przekazywania datagramów w routerach. Datagram wędruje odnadawcy przez różne sieci i routery aż do końcowego odbiorcy. Jeżeli router nie potrafi aniwyznaczyć trasy ani dostarczyć datagramu, albo gdy wykrywa sytuację mającą wpływ namożliwość dostarczenia datagramu (np. przeciążenie sieci, wyłączenie maszyny docelowej,wyczerpanie się licznika czasu życia datagramu) to musi poinformować pierwotnego nadawcę,aby podjął działania w celu uniknięcia skutków tej sytuacji.

Protokół komunikatów kontrolnych Internetu ICMP powstał aby umożliwić routeromoznajmianie o błędach oraz udostępnianie informacji o niespodziewanych sytuacjach. Protokół

+

wyzerowane pole sumy kontrolnej

+

Page 12: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 12

ICMP jest traktowany jako wymagana część IP i musi być realizowany przez każdąimplementację IP, ponieważ wiadomość ICMP jest enkapsulowana w datagramie IP, któregopole „protokół” przyjmuje wartość 1.

Chociaż protokół ICMP powstał, aby umożliwić routerom wysyłanie komunikatów to każdamaszyna może wysyłać komunikaty ICMP do dowolnej innej. Z technicznego punktu widzeniaICMP jest mechanizmem powiadamiania o błędach. Udostępnia on routerom, które rozpoznająbłąd, sposób powiadomienia o nim nadawcy, którego błąd dotyczy. Chociaż w specyfikacjiprotokołu są określone zamierzone sposoby korzystania z ICMP i sugestie na temat tych działań,które mogą być podejmowane w odpowiedzi na komunikaty o błędach, ICMP nie dla każdegomożliwego błędu wyszczególnia działania, jakie mają być zapoczątkowane.

Tak więc gdy datagram powoduje błąd, ICMP może jedynie powiadomić pierwotnegonadawcę o przyczynie. Nadawca musi otrzymaną informację przekazać danemu programowiużytkownika, albo podjąć inne działanie mające na celu uporanie się z tym problemem.

Każdy komunikat ICMP ma własny format, ale wszystkie zaczynają się trzema takimisamymi polami. Budowę wiadomości ICMP przedstawia tabela 8.

Tab. 8. Wiadomość ICMP.00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

typ kod suma kontrolna ICMPdane

Pole „typ” (ang. type) jednoznacznie określa typ wiadomości ICMP, zaś pole „kod” (ang.code) specyfikuje dokładniej wiadomość w obrębie danego typu. Suma kontrolna wiadomościICMP (ang. ICMP checksum) wyznacza się w podobny sposób jak dla nagłówka IP, leczobejmuje ona całą wiadomość ICMP, tzn. łącznie z polem „dane”.

W układzie mikroserwera implementacja protokołu ICMP ograniczać się będzie jedynie doobsługi odsyłania odpowiedzi na wiadomość żądania echa (typ=8), którą można wysłać zkomputera przy pomocy standardowego programu ping.

Format wiadomości ICMP nakazującej wysłanie echa (ang. Echo Request) przedstawiatabela 9.

Tab. 9. Wiadomość Echo Request.00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

0x08 (typ 8) 0x00 (kod 0) suma kontrolna wiadomości ICMPidentyfikator numer sekwencji

Dane (32 bajty)

Wiadomość „Echo Request” zawiera, prócz wcześniej omówionych pól, 16-bitowyidentyfikator oraz 16-bitowy numer sekwencji. Te pola mogą przyjmować wartość zerową lubinną dowolnie wybraną i są pomocne w dopasowaniu wysyłanych wiadomości „Echo Reply” doodebranych odpowiedzi.

Page 13: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 13

Po odebraniu skierowanej do niego wiadomości ICMP „Echo”, urządzenie sieciowe maobowiązek odesłać nadawcy potwierdzenie w postaci wiadomości ICMP „Echo Reply”.Wiadomość ta musi zawierać dane identyczne z odebranymi, ten sam identyfikator i numersekwencji a różni się jedynie zawartością pola „typ”, które tym razem przyjmuje wartość 0.

Mechanizm automatycznego odsyłania odpowiedzi na wiadomość ICMP „Echo Request”daje użytkownikowi komputera wygodną możliwość sprawdzenia, czy dane urządzenie sieciowedziała poprawnie i można się z nim skomunikować. W każdym sieciowym systemie operacyjnymistnieje polecenie ping, w którego wywołaniu należy podać nazwę lub numer IP komputera, doktórego chcemy wysłać wiadomość ICMP „Echo Request”. Przykładowo: ping192.168.0.5

Podczas implementacji protokołu ICMP przyjęto następujące założenia:! ze wszystkich wiadomości ICMP mikroserwer będzie reagował wyłącznie na żądanie

echa,! minimalny rozmiar pola danych w wiadomości ICMP „Echo Reply” wynosi

0 bajtów, maksymalny ograniczono do 128 bajtów,! suma kontrolna wiadomości ICMP jest obliczana w uproszczony sposób. Wykorzystano

tu fakt, iż odpowiedź na żądanie echa różni się jedynie wartością pola „typ” (typ=0) isumy kontrolnej. Z zasady tworzenia sumy kontrolnej wynika, że jej wartość wwiadomości ICMP „Echo Reply” jest o 0x8000 większa niż wiadomości ICMP „EchoRequest”. Dwubajtowa liczba 0x8000 wzięła się z bajtów pola „typ” i „kod”. Zatem wmomencie odsyłania odpowiedzi na żądanie echa do wartości sumy kontrolnejwiadomości żądania echa, dodawana jest liczba 0x8000, przy czym jeśli wystąpiprzepełnienie, to do LSB sumy kontrolnej dodawana jest liczba 1 (przeniesienie z MSB).

3.5. Protokół TCP

Jak już wcześniej wspomniano, protokół TCP tworzy wirtualne połączenie pomiędzy dwomaużytkownikami umożliwiając na bezpieczny (bezbłędny) transfer danych. Do wyspecyfikowaniaodbiorcy za pomocą 32-bitowej adresacji, wspieranej przez protokół IP, TCP dodaje mechanizmwyróżniający w każdym urządzeniu 65536 tzw. portów. Port jest logiczną jednostką, do którejkierowane są informacje. Do każdego portu może być przypisany program odbierający wyłącznieinformację skierowaną do danego portu. Istnieje grupa wyróżnionych numerów portów, dlaktórych podano standardowy program obsługujący i rodzaj przesyłanych danych, np. informacji zserwerów nazw – DNS (ang. Domain Name Server) czy podających aktualny czas.

Do portów o numerach poniżej 1024 są przypisane konkretne usługi np. TELNET – port 23.Ich użycie do innych celów jest utrudnione lub wręcz uniemożliwione w zwykłymoprogramowaniu użytkowym działającym pod kontrolą niektórych sieciowych systemówoperacyjnych. Korzystanie przez aplikacje z portów o wysokich numerach (czasami dopiero tychprzekraczających 16383) jest dozwolone i zalecane dla niestandardowych usług systemowych.

Nagłówek pojedynczego segmentu TCP przedstawia tabela 10.

Page 14: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 14

Tab. 10. Nagłówek TCP.00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

port źródłowy (nadawcy) port docelowy (odbiorcy)numer porządkowy

numer potwierdzeniadłg.nagłówka zarezerwowane bity kontrolne rozmiar okna

suma kontrolna wskaźnik pilnych danychdane

Ze względu na okrojoną implementacje protokołu TCP w układzie mikroserwera, tylkoniektóre pola nagłówka TCP zostały wyjaśnione.

Pole „port źródłowy” (ang. source port) zawiera numer portu, jakiego użył nadawca przywysyłaniu strumienia TCP, zaś „port docelowy” (ang. destination port) zawiera numer portuodbiorcy, do którego jest skierowany ów strumień. Np. użytkownik przegląda sobie stronyWWW (ang. World Wide Web). Przeglądarka internetowa w jego komputerze wysyłaodpowiednio segmenty TCP z zapytaniami do serwera WWW, w których „port docelowy”zawiera liczbę 80 (80 – standardowy port usługi WWW). Podobnie serwer stron WWWodpowiada segmentami TCP, w których pole „port źródłowy” jest równe 80. Numer portuźródłowego w segmentach użytkownika oraz portu docelowego w segmentach serwera WWWjest również taki sam. Zatem przy wzajemnej wymianie danych pomiędzy hostami, każdy z nichmusi zamieniać miejscami pola „port źródłowy” i „port docelowy” w nagłówku TCP.

32-bitowe pole „numer porządkowy” (ang. sequence number) oraz „numer potwierdzenia”(ang. acknowledgment number) zostanie omówione później.

Długość nagłówka (ang. data offset) zawiera liczbę całkowitą, która określa długośćnagłówka segmentu mierzoną w wielokrotnościach 32 bitów. Dla typowego segmentu TCP polema wartość 5.

Ponieważ niektóre segmenty mogą przenosić tylko potwierdzenia, inne dane, inne zaśzawierają prośby o ustanowienie lub zamknięcie połączenia - pole „bity kontrolne” (ang. controlbits) zawiera informację o przeznaczeniu zawartości segmentu. Zawartość pola zostanie opisanabardziej szczegółowo później.

Przy każdym wysłaniu segmentu oprogramowanie TCP klienta proponuje ile danych możeprzyjąć od serwera, umieszczając rozmiar swojego bufora w polu „rozmiar okna” (ang. window).

Sumę kontrolną w segmencie TCP oblicza się w podobny sposób jak dla nagłówka IP, lecz tusumowany jest tzw. pseudo-nagłówek IP, nagłówek TCP oraz dane, przy czym dane sądopełniane zerami tak, by ich rozmiar w bajtach był liczbą parzystą. W tabeli 11 przedstawionopostać pseudo-nagłówka IP.

Page 15: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 15

Tab. 11. Pseudo-nagłówek IP.00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

źródłowy adres IPdocelowy adres IP

00000000 typ protokołu długość całkowita

Pole „długość całkowita” w pseudo-nagłówku IP zawiera rozmiar całego segmentu TCP,czyli jest sumą długości jego nagłówka oraz danych przez niego niesionych. Dla odróżnienia wnagłówku IP pole „długość całkowita” jest sumą długości nagłówka IP i danych po nimnastępujących.

Poniżej przedstawiono sposób obliczenia sumy kontrolnej segmentu TCP maszyny o adresieIP 192.168.0.5, która chce nawiązać połączenie z serwerem FTP w sieci lokalnej o adresie IP192.168.0.8. W tabeli 12 przedstawiono postać pseudo-nagłówka IP, a w tabeli 13 postaćsegmentu TCP, dla opisanej sytuacji.

Tab. 2.12. Przykładowy pseudo-nagłówek IP.00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

0xC0A80005 (192.168.0.5)0xC0A80008 (192.168.0.8)

00000000 0x06 (TCP) 0x0014 (20 bajtów)

Tab. 2.13. Przykładowy nagłówek TCP.00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

0x0400 (port 1024) 0x0015 (port 21 – FTP)0xFE5D99B10x00000000

0101 (5) 0x0 000010 (SYN) 0x2000 (8192)suma kontrolna 0x0000

Dane zawarte w pseudo-nagłówku IP oraz nagłówku TCP należy zsumować jako liczbydwubajtowe. Na czas sumowania nagłówka TCP pole sumy kontrolnej jest wyzerowane.

C0 A800 05C0 A800 0800 0600 1404 0000 15FE 5D99 B150 0220 00

3 8D 9C

W słupku nie zapisano pola „numer potwierdzenia” i „suma kontrolna” ponieważ oba pola sąpuste (wypełnione zerami). Strzałką oznaczono liczby powstałe z pseudo-nagłówka IP, pozostałe

pseudo-nagłówekIP

tu powinno być pole„numer potwierdzenia” +

Page 16: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 16

liczby powstały z segmentu TCP. W podanym przykładzie nie występuje również pole z danymi,bo jest to segment rozpoczynający negocjację otwarcia połączenia TCP.

W kolejnym kroku najstarszy bajt liczby 24-bitowej trzeba „odciąć” i dodać do uzyskanejliczby 16-bitowej:

8D 9C00 038D 9F

Na koniec pozostało jeszcze uzyskaną liczbę dopełnić do jedności, czyli przeprowadzićoperację: 0xFFFF - 0x8D9F = 0x7260. Liczba 0x7260 jest poszukiwaną sumą kontrolnąnagłówka TCP.

3.5.1. Graf przejść stanów TCP

Aby zagwarantować, że dane przesyłane z jednej maszyny do drugiej nie są ani tracone, aniduplikowane używa się podstawowej metody znanej jako pozytywne potwierdzanie zretransmisją. Metoda ta wymaga, aby odbiorca komunikował się z nadawcą, wysyłając mu wmomencie otrzymania danych komunikat potwierdzenia (ang. acknowledge - ACK). Nadawcazapisuje sobie informację o każdym wysłanym pakiecie i przed wysłaniem następnego czeka napotwierdzenie. Oprócz tego nadawca uruchamia zegar w momencie wysyłania pakietu i wysyłaten pakiet ponownie, gdy minie odpowiedni czas, a potwierdzenie nie nadejdzie. Idea ta zostałazilustrowana na rysunku 4.

Rys. 4. Idea transmisji z potwierdzeniem.

Kolejny rysunek 5 pokazuje co się dzieje gdy pakiet został zgubiony lub gdy przekroczonyzostał limit czasu. Po wysłaniu pakietu nadawca włącza zegar. Gdy mija określony czas, w czasiektórego powinno nadejść potwierdzenie ACK nadawca przyjmuje, że pakiet został zagubiony iwysyła go ponownie.

wysłanie pakietu 1odebranie pakietu 1

wysłanie ACK 1odebranie ACK 1

wysłanie pakietu 2odebranie pakietu 2

wysłanie ACK 2odebranie ACK 2

wydarzenia po stronienadawcy

wydarzenia po stronieodbiorcy

komunikatysieciowe

+

Page 17: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 17

Rys. 5. Retransmisja niepotwierdzonego pakietu.

Pomimo swojej prostoty metoda ta jest jednak mało efektywna. Nadawca nie może wysłaćkolejnego pakietu, dopóty nie odbierze potwierdzenia odebrania pakietu poprzedniego. Dane wdanym momencie płyną tylko w jednym kierunku i to nawet wtedy, kiedy sieć umożliwiajednoczesną komunikację w obu kierunkach. Ponadto sieć nie będzie używana, kiedy maszynybędą zwlekać z odpowiedziami np. podczas wyliczania sum kontrolnych. Takie rozwiązaniepowoduje znaczne marnowanie przepustowości sieci.

Technika przesuwającego się okna (ang. sliding window) lepiej wykorzystuje przepustowośćsieci, gdyż umożliwia wysyłanie wielu pakietów przed otrzymaniem potwierdzenia. Wrozwiązaniu tym umieszcza się na ciągu pakietów ustalonego rozmiaru okna i przesłaniewszystkich pakietów, które znajdują się w jego obrębie. Mówimy, że pakiet jestniepotwierdzony, jeżeli został wysłany, a nie nadeszło dla niego potwierdzenie. Liczba pakietówniepotwierdzonych w danej chwili jest wyznaczona przez rozmiar okna. Dla protokołu zprzesuwającym się oknem , którego rozmiar jest np. równy 8, nadawca ma możliwość wysłaniaprzed otrzymaniem potwierdzenia do 8 pakietów. Gdy nadawca odbierze potwierdzenie dlapierwszego pakietu, okno przesuwa się i zostaje wysłany następny pakiet. Okno przesuwa siędalej gdy przychodzą kolejne potwierdzenia.

Zarówno idea transmisji z potwierdzeniem, retransmisji pakietu gdy nie nadeszłopotwierdzenie i przekroczony został timeout oraz technika przesuwającego się okna jest używanaw protokole TCP.

Algorytm przesuwającego się okna wykorzystuje wymienione wcześniej pola: „numerporządkowy”, „numer potwierdzenia”, „rozmiar okna” oraz flagi zawarte w polu „bity kontrolne”(rysunek 6). Zdefiniowano następujące flagi:! SYN – flaga inicjująca połączenie TCP,

wysłanie pakietu 1uruchomienie zegara Spodziewane

przybycie pakietu 1

powinno zostaćwysłane ACKpowinno przybyć

ACK 1

retransmisjapakietu 1 odebranie pakietu 1

wysłanie ACK 1odebranie ACK 1

wydarzenia po stronienadawcy

wydarzenia po stronieodbiorcy

komunikatysieciowe

strata pakietu

przekroczenie limituczasowego

Page 18: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 18

! FIN – flaga zamykająca połączenie TCP,! ACK – flaga ważnego potwierdzenia,! URG – flaga zawarta w segmencie danych pilnych,! RST – odbiorca przerywa połączenie,! PSH – jak najszybsze przesłanie danych do warstwy aplikacji.

Rys. 6. Wymiana numerów: porządkowego i potwierdzenia.

Nawiązanie połączenia w protokole TCP odbywa się na drodze tzw. wymiany trójetapowejpomiędzy klientem i serwerem. Wymiana jest pewnego rodzaju protokołem handshake’u ipodlegają jej: numer porządkowy, numer potwierdzenia oraz flagi. Ideę wymiany przedstawiarysunek 7. Podczas otwierania połączenia pole ACK w segmencie klienta jest równe zero.

Rys. 7. Wymiana trójetapowa – otwieranie połączenia TCP.

Po otwarciu połączenia, przy wysłaniu każdego segmentu TCP z danymi przez serwertowarzyszy ustawienie flagi ACK. Jak już wcześniej wspomniano, serwer wyśle co najwyżej takąliczbę niepotwierdzonych segmentów, dla której suma całkowitych długości tych segmentów nieprzekracza rozmiarowi okna, jakie zaproponował klient. Jednocześnie klient potwierdzanadchodzenie kolejnych poprawnych segmentów z serwera, wysyłając segmenty pozbawionedanych i ustawioną flagą ACK. Podczas transmisji ideę wymianę pól „numer porządkowy” i„numer potwierdzenia” można przedstawić równaniami:

! dla klienta –

=+=

SK

OSSK

ACKSEQ

lgdSEQACK,

Page 19: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 19

! dla serwera –

+==

WKKS

KS

lgdACKSEQ

SEQACK,

gdzie dla klienta:KACK – numer potwierdzenia w kolejnym segmencie u klienta,SSEQ – numer porządkowy w ostatnim segmencie odebranym z serwera,

OSlgd – długość całkowita ostatniego segmentu odebranego z serwera,

KSEQ – numer porządkowy w kolejnym segmencie u klienta,SACK – numer potwierdzenia w ostatnim segmencie odebranym z serwera.

gdzie dla serwera:SACK – numer potwierdzenia w kolejnym segmencie serwera,

KSEQ – numer porządkowy w ostatnim segmencie odebranym od klienta,SSEQ – numer porządkowy w kolejnym segmencie serwera,

KACK – numer potwierdzenia w ostatnim segmencie odebranym od klienta,WKlgd – długość całkowita kolejnego segmentu wysyłanego do klienta,

W protokole TCP rozróżnia się dwa rodzaje uczestników transmisji: uczestnik aktywny orazuczestnik pasywny. Pierwszy z nich jest klientem, stroną która zaczyna transmisję. Uczestnikiempasywnym jest serwer, który oczekuje na nadchodzące połączenia pod określony numer portu.

Podobnie jak przy otwieraniu połączenia, tak i przy jego zamykaniu wyróżnia się stronęaktywną i pasywną. Stroną aktywną dokonuje zamknięcia pierwsza, zazwyczaj jest nią klient.Stroną pasywną najczęściej jest serwer, który zamyka połączenie jako ostatni. Przebieg procesuzamykania połączenia pokazano na rysunku 8.

Rys 8. Zamykanie połączenia TCP.Całość stanów w jakim może się znajdować klient oraz serwer, wraz z warunkami przejścia

pomiędzy tymi stanami tworzy graf (diagram) przejść stanów TCP. Postać grafu przedstawiarysunek 9.

zamknięcie aktywne

brak danych do wysłania

FIN n

ACK n+1

zamknięcie pasywne

FIN m

ACK m+1

klient serwer

Page 20: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 20

Rys 9. Graf przejść stanów TCP.

Przedstawiony graf przejść stanów TCP pokazuje zarówno stany dla serwera jaki klienta. Przy każdej strzałce znajduje się flaga – warunek przejścia do kolejnego stanu. Dlaprzykładu FIN/ACK oznacza, że warunkiem przejścia ze stanu FIN_OCZEKIWANIE_1 do stanuZAMYKANIE jest odebranie segmentu z flagą FIN oraz wysłanie segmentu z ustawioną flagąACK.

W układzie mikroserwera zaimplementowano graf przejść stanów TCP zarówno dla serwerajak i klienta. Przed implementacją postać grafu uproszczono do minimalnej. Została onaprzedstawiona na rysunku 10.

Page 21: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 21

Rys 10. Zaimplementowany graf TCP w mikroserwerze.

Przejścia pomiędzy stanami w grafie realizowane przez klienta oznaczono przerywanymistrzałkami. Dla serwera kolejność przejść stanów jest odpowiednia:! Po włączeniu zasilania, restarcie mikrokontrolera lub przy nieaktywnym połączeniu, TCP

znajduje się w stanie LISTEN (ang. nasłuch). Serwer oczekuje na nadchodzące połączeniana portach 23 i 1024.

! Jeśli odebrany zostanie segment TCP z flaga SYN, to wysłany zostaje segmentz ustawioną flagą SYN i ACK. TCP przechodzi do stanu SYN_RECVD(ang. odebrano SYN).

! Nadejście segmentu z flaga ACK powoduje otwarcie wirtualnego połączenia. TCPprzechodzi do stanu ESTABLISHED (ang. ustanowione).

! Klient chcąc zakończyć połączenie z serwerem wysyła segment TCP z ustawionymiflagami FIN i ACK. Serwer odpowiada takim samym segmentem, zaś TCP przechodzi dostanu LAST_ACK (ang. oczekiwanie na ostatnie ACK).W mikroserwerze nie przewidziano możliwości zamykania połączenia przez serwer.

! Po odebraniu segmentu z flaga ACK połączenie zostaje prawidłowo zakończone. TCPprzechodzi do stanu CLOSED (ang. zamknięte), a następnie do stanu LISTEN.

Mikroserwer ma również zaimplementowaną „kliencką” część grafu TCP. Jest onawykorzystywana tylko i wyłącznie podczas nawiązywania połączenia z serwerem poczty SMTPprzy wysyłaniu wiadomości e-mail. W przypadku klienta przejścia między stanami sąnastępujące:! Naciśnięcie microswitch’a wyzwalającego przerwanie zewnętrzne INT0 początkuje proces

nawiązywania połączenia. Do serwera SMTP o znanym adresie IP i MAC, wysyłany jestsegment o ustawionej fladze SYN. TCP przechodzi do stanu SYN_SENT (ang. wysłanoSYN).

CLOSED

LISTEN

SYN_SENT

SYNC_RECVD

ESTABLISHED

FIN_WAIT_2 LAST_ACK

connect/SYN

SYN/SYN+ACK

SYN+ACK/ACKACK

disconnect/FIN+ACK

FIN+ACK/ACK

FIN+ACK/FIN+ACK

ACK

Page 22: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 22

! Serwer odpowiada segmentem z flagami SYN i ACK. Wówczas zostaje odesłany segment zflagą ACK. Wirtualne połączenie zostaje otwarte, zaś TCP jest w stanie ESTABLISHED.

! Połączenie zostaje zamknięte przez serwer lub klienta. Zamknięcie przez serwer omówionowyżej. Zamknięcie połączenia przez klienta jest zapoczątkowane wysłaniem przez niegosegmentu z ustawionymi flagami FIN i ACK. TCP przechodzi do stanu FIN_WAIT_2.

! Po odebraniu z serwera segmentu z ustawionymi flagami FIN i ACK, zostaje wysłanysegment z flaga ACK. Połączenie zostało pomyślnie zamknięte, zaś TCP przechodzi dostanu CLOSED, a następnie LISTEN.

Oczywiście w dowolnym stanie grafu TCP następuje odpowiednia, przedstawiona wcześniej,wymiana numeru potwierdzenia (ACK) i porządkowego (SEQ).

Podczas konstruowania mikroserwera przyjęto następujące założenia odnośnie protokołuTCP:! pole „numer potwierdzenia” w trakcie nawiązywania połączenia z klientem przyjmuje

zawsze tą samą wartość (0x1000),! „rozmiar okna” przyjęto na 0xFF,! pole „numer porządkowy” w trakcie nawiązywania połączenia z innym serwerem

przyjmuje zawsze stałą wartość (0x1000),! serwer nie ma możliwość zamknięcia aktywnego połączenia,! nie ma możliwość automatycznego powrotu do stanu CLOSED jeśli próba wysłania

wiadomości e-mail nie powiodła się. Mogło to nastąpić w wyniku błędnego adresu IP, gdyna danym hoście nie jest aktywny demon SMTP lub w wyniku błędów podczas dialoguSMTP. Jedynym wyjściem ze tego stanu jest restart mikrokontrolera,

! mikroserwer wykorzystuje porty: 23, 1024 i 1023,! niezaimplementowana została retransmisja przy braku potwierdzenia. W takiej sytuacji

mikroserwer zakleszcza się w odpowiednim stanie grafu TCP dopóty transmisja niezostanie wznowiona lub mikroserwer zostanie zrestartowany.

Port 23 związany jest z usługą TELNET. Jeśli połączenie zostało otwarte, to zawartośćwszystkich odbieranych segmentów TCP zostaje przesłana na interfejs szeregowy. Dane zaśodebrane z interfejsu szeregowego zostają wysłane poprzez sieć do klienta.

Na porcie 1024 zrealizowano własny protokół wymiany danych, który przedstawiony jest wkolejnym punkcie. Na ten port wysyłane są wszelkie dane powstałe w wyniku działania aplikacjisterownika (rozdział 7) do mikroserwera.

Port 1023 jest portem źródłowym mikroserwera podczas połączenia z serwerem SMTPwiadomości e-mail. Segmenty TCP o numerach portów różnych od wymienionych sąignorowane.

4. Protokoły warstwy aplikacyjnej

W mikroserwerze zaimplementowano dwa protokoły warstwy aplikacyjnej. Pierwszym znich jest „własnym” protokołem za pomocą, którego odbywa się sterowanie mikrosewerem przez

Page 23: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 23

aplikację sterownika pracującą na komputerze PC. Drugi z protokołów – SMTP – jeststandardowym protokołem transferu wiadomości e-mail do serwera poczty elektronicznej.

4.1. Protokół „własny”

Własny protokołu został opracowany w celu sterowania mikroserwerem za pomocąaplikacji sterownika pracującej na komputerze PC. Ułatwia on mikroserwerowi rozpoznaniaprzeznaczenia danych odbieranych na porcie 1024. Pierwszy bajt danych jednoznaczniecharakteryzuje operację związaną z danymi za nim następującymi. W tabeli 14 przedstawionowartość i znaczenie bajtu sterującego.

Tab. 14. Znaczenie rozkazów zastosowanych we własnym protokole.wartość bajtu(hex) znaczenie

0x01 dane przeznaczone do transmisji przez interfejs szeregowy0x09 bajt danych do wyświetlenia na diodach LED

0x10żądanie wysłania segmentu TCP z bajtem ustawionym naprzełączniku DIP

0x19 treść i znaczniki wiadomości e-mail

W przypadku wiadomości e-mail jej treść wraz z całymi komendami SMTP jest formowanaw aplikacji sterownika i wysyłana do mikroserwera w trzech segmentach TCP. W celuodróżnienia poszczególnych fragmentów wiadomości e-mail wprowadzono drugi bajt sterujący.Znaczenie poszczególnych kodów zawarte jest w tabeli 15.

Tab. 15. Znaczenie drugiego bajtu sterującego.wartość I bajtu(hex) wartość II bajtu (hex) znaczenie

0x01 adres e-mail nadawcy0x02 adres e-mail odbiorcy0x190x03 treść wiadomości e-mail

4.2. Protokół SMTP

SMTP jest protokołem powszechnie stosowanym podczas wysyłania poczty elektronicznej,który pracuje standardowo na porcie 25. Dialog pomiędzy klientem – – maszyną wysyłającąwiadomość e-mail, a serwerem SMTP odbywa się „czystym tekstem” z wykorzystaniem komendprotokołu SMTP.

Protokół SMTP definiuje trzycyfrowe kody odpowiedzi serwera na uzyskane połączenie lubwysyłane doń komendy. Za każdym kodem zamieszczona jest krótka informacja dodatkowoopisująca znaczenie komendy. Ogólnie przyjęto, że kody: 1yz, 2yz, 3yz (y,z – dowolne liczby)oznaczają odpowiedź pozytywną serwera, zaś kody: 4yz, 5yz odpowiedź negatywną. Druga zcyfr charakteryzuje czego dany kod dotyczy (x, z – dowolne liczby):! x0z – składnia poleceń,! x1z – informacje (status, informacje pomocnicze),! x2z – połączenie.

Poniżej przedstawiono przykładowy dialog, o minimalnej liczbie komend, klienta zserwerem SMTP (rys. 11).

Page 24: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 24

Rys. 11. Dialog klienta i serwera SMTP podczas transferu wiadomości e-mail.(Oznaczenia: S – serwer, C – klient)

Jak to wynika z rysunku, po uzyskaniu połączenia z serwerem SMTP klient odbiera linijkętekstu zaczynającą się od kodu 220 lub 421. Pierwszy oznacza , że serwer jest gotowy do dialoguz klientem, drugi zaś sygnalizuje o braku gotowości serwera SMTP. Zawsze po kodzie 220znajduje się adres domenowy serwera.

Następnie klient wysyła komendę HELO oraz swoją nazwę domenową lub nazwę komputeraw sieci lokalnej. Administrator serwera SMTP może zastrzec, że proces wysyłania wiadomości e-mail, będzie przebiegał dalej jeśli podana nazwa domenowa odpowiada adresowi IP klienta.Najczęściej jednak akceptowany jest dowolny ciąg znaków. Pozytywna odpowiedź serwerarozkaz HELO to kod 250, negatywna – 500, 501, 504, 421.

Po uzyskaniu kodu 250 klient wysyła ciąg znaków reprezentujący swój adres e-mail. Ciągznaków ma składnią: MAIL<SP>FROM:<[email protected]><CR><LF>.Znacznik <SP> oznacza spację (ang. space) (kod ASCII 0x20), <CR> oznacza powrót karetki(ang. Cariage-Return) – przejście kursora na początek linii (kod ASCII 0x0d), a <LF> oznaczawysunięcie linii (ang. LineFeed) – przejście kursora do nowej linii (kod ASCII 0x0a).Podawany adres e-mail musi mieć prawidłową składnię. Poprawność operacji potwierdzona jestkodem 250, a każdy inny kod oznacza błąd.

W kolejnym etapie klient wysyła adres e-mail odbiorcy. Jest to ciąg znaków postaci:RCPT<SP>TO:<[email protected]><CR><LF>. Podobnie jak przy komendzieMAIL jedynie kod 250 oznacza poprawność operacji, pozostałe kody sygnalizują błąd. Podanyadres e-mail musi dotyczyć dowolnej skrzynki będącej na serwerze SMTP, z którym nawiązałosię połączenie. Innymi słowy musi istnieć konto o podanym adresie e-mail na serwerze SMTP.

Page 25: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 25

Teraz pozostaje wysłać tylko treść wiadomości e-mail. Informuje się o tym serwer SMTPwysyłając rozkaz: DATA<CR><LF>. Serwer odpowie kodem 354 oraz zakomunikuje byzakończyć treść wiadomości sekwencją znaków <CR><LF>.<CR><LF>. Na początku treściwiadomości stosuje się dodatkowe znaczniki. Najbardziej popularne wyjaśniono poniżej:! Date: – data wysyłania wiadomości.! From: – imię lub pseudonim nadawcy.! To: – imię lub pseudonim odbiorcy.! Subject: – temat wiadomości e-mail.

Kolejność wystąpienia znaczników jest dowolna. Ich poprawną interpretacją zajmie sięprogram pocztowy odbiorcy. Ważne jest aby oddzielić znaczniki od właściwej treści wiadomościciągiem znaków <CR><LF>. Koniec treści wiadomości e-mail, jak wcześniej wspomniano,sygnalizuje się wysyłając ciąg <CR><LF>.<CR><LF>. Jeśli serwer nie stwierdził błędu, toodpowiada kodem 250. Każdy inny kod oznacza wystąpienie błędu.

Na koniec pozostaje tylko zakończyć połączenie z serwerem SMTP. Dokonuje się tegowysyłając komendę: QUIT<CR><LF>. Serwer odpowiada kodem 221, po czym zamykapołączenie. Tak przesłana wiadomość e-mail zostanie dostarczona poprawnie do odbiorcy o ilepodano jego poprawny adres e-mail i jego serwer pocztowy jest aktywny.

Poniżej wymieniono najczęściej występujące kody SMTP wraz z ich znaczeniem:! 211 – informacje statusowe serwera lub pomocnicza podpowiedź,! 214 – informacje „pomocy” serwera,! 220 <domena> – serwer gotowy,! 221 <domena> – serwer zamyka połączenie,! 250 – operacja MAIL lub RCPT zakończona sukcesem,! 354 – oczekiwanie na treść wiadomości e-mail,! 421 – serwer niedostępny,! 450 – dana skrzynka pocztowa jest zajęta lub niedostępna,! 451 – lokalny błąd serwera,! 452 – zbyt mało pamięci by kontynuować operację,! 500 – błąd składni, niepoprawna komenda,! 501 – błąd składni w parametrach lub argumentach,! 502 – nieznana komenda,! 503 – niepoprawna sekwencja komend,! 504 – komenda bez parametrów,! 550 – operacja wstrzymana – podana skrzynka pocztowa niedostępna,! 552 – za duży rozmiar wiadomości,! 553 – niedozwolona nazwa skrzynki pocztowej,! 554 – transakcja zakończona błędem.

Podczas implementacji klienta SMTP w mikroserwerze przyjęto następujące założenia iograniczenia:

! maksymalna długość adresu e-mail nadawcy i odbiorcy to 32 znaki,! maksymalna długość treści wiadomości e-mail to 256 znaków (łącznie z nagłówkami

From, To, Subject),

Page 26: Stos protoko³ów TCP/IP - pg.gda.plzbczaja/pdf/mse/mikrostosTCP.pdf · Ramka sieci Ethernet, adres MAC W sieci Ethernet wszystkie urządzenia posiadają unikalne (niepowtarzalne)

Wykład – Mikrosystemy Elektroniczne 26

! w aplikacji sterownika ograniczono rozmiar pola From i To na 32 znaki, a Subject na64 znaki,

! rozkazy wysyłane są w pojedynczym segmencie TCP, podobnie treść wiadomości e-mail,która zawiera znaczniki From, To i Subject, łącznie z ciągiem znaków<CR><LF>.<CR><LF> kończącym transfer treści.

W łatwy sposób można powiększyć rozmiar wysyłanej wiadomości e-mail, należy jednakpamiętać o tym, że rozmiar ten nie może być większy od rozmiaru pola danych ramki Ethernet omaksymalnej długości (1500 bajtów) oraz, że od tego rozmiaru należy odjąć długość nagłówkaIP (20 bajtów), nagłówka TCP (20 bajtów) i długość pól: From, To i Subject. Dodatkoworozmiar ten należy pomniejszyć o liczbę znaków użytych do formowania dodatkowychnagłówków oraz końca treści (łącznie 32 bajty). Zatem maksymalna liczba znaków będącychtreścią wiadomości e-mail może wynosić co najwyżej 1300 znaków.

We wstępnej fazie implementacji protokołu SMTP założono, że do nawiązania połączenia zserwerem SMTP konieczne będzie podanie jego adresu IP i MAC. Później zdecydowano sięzaimplementować w protokole ARP możliwość wysyłania zapytania i dlatego podczasnawiązywania połączenia z serwerem SMTP wymagane jest jedynie podanie jego adresu IP.Mikroserwer sam pozyska jego adres MAC korzystając z ARP.