Sunteți pe pagina 1din 363

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Reele de calculatoare
Obiective:

Modele de referin OSI si TCP/IP Nivelul legaturii de date - tipuri de retele Nivelul de retea/rutare, algoritmi de dirijare Nivelul aplicaie modelul client-server Programarea aplicaiilor de reea Servicii i protocoale la nivel de aplicaie

Page 1 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Modele de referin
Arhitecturile de reea cele mai cunoscute sunt: - modelul de referina OSI (Open System Interconnection interconectarea sistemelor deschise) - modelul TCP/IP (Transmission Control Protocol / Internet Protocol).

Page 2 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Modelul ISO/OSI
Un nivel OSI are un set bine definit de funcii de reea, iar funciile fiecrui nivel comunic i colaboreaz cu funciile nivelurilor aflate imediat deasupra i dedesubtul nivelului respectiv. Fiecare nivel asigur anumite servicii sau aciuni care pregtesc datele pentru a fi transmise n reea ctre un alt calculator. Toate cererile sunt transmise de la un nivel la altul prin intermediul interfeelor. Fiecare nivel se bazeaza pe activittile si serviciile nivelului ierarhic inferior.

Page 3 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Page 4 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Nivelul 8

Page 5 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Nivelul fizic
1. Nivelul fizic are rolul de a transmite datele de la un calculator la altul prin intermediul unui mediu de comunicaie. Datele sunt vzute la acest nivel ca un ir de bii. Problemele tipice sunt de natur electric: nivelele de tensiune corespunztoare unui bit 1 sau 0, durata impulsurilor de tensiune, cum se iniiaz i cum se oprete transmiterea semnalelor electrice, asigurarea pstrrii formei semnalului propagat. Mediul de comunicaie nu face parte din nivelul fizic.

Page 6 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Medii fizice de transmisie

Page 7 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

The physical layer is concerned with transmitting raw bits over a communication channel. The design issues have to do with making sure that when one side sends a 1 bit, the other side as a 1 bit, not as a 0 bit receives it. Typical questions here are how many volts should be used to represent a 1 and how many for a 0, how many microseconds a bit lasts, whether transmission may proceed simultaneously in both directions, how the initial connection is established and how it is torn down when both sides are finished, and how many pins the network connector has and what each pin is used for. The design issues here deal largely with mechanical, electrical, and procedural interfaces, and the physical transmission medium, which lies below the physical layer. Physical layerdesign can properly be considered to be within the domain of the electrical engineer.

Page 8 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Nivelul legturii de date


2. Nivelul legturii de date corecteaz erorile de transmitere aprute la nivelul fizic, realiznd o comunicare corect ntre dou noduri adiacente ale reelei. Mecanismul utilizat n acest scop este mprirea fluxului de bii n cadre ( frame), crora le sunt adugate informaii de control. Cadrele sunt transmise individual, putnd fi verificate i confirmate de ctre receptor. Alte funcii ale nivelului se refer la fluxul de date (astfel nct transmitorul s nu furnizeze date mai rapid dect le poate accepta receptorul) i la gestiunea legturii (stabilirea conexiunii, controlul schimbului de date i nchiderea conexiunii). Folosete adresare fizic.
Page 9 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Protocoale la nivelul legturii de date


ARP/RARP DCAP HDLC PPP FDDI Address Resolution Protocol/Reverse Address Data Link Switching Client Access Protocol High-Level Data Link Control Point-to-Point Protocol Fiber Distributed Data Interface Ethernet Token Ring Frame Relay Asynchronous Transfer Mode Spanning tree protocol wireless LAN Logical Link Control

ATM STP IEEE 802.11 LLC

Page 10 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Servicii oferite de nivelul legturii de date


Encapsulation of network layer data packets into frames Frame synchronization Logical link control (LLC) sublayer: Error control (automatic repeat request, ARQ), in addition to ARQ provided by some Transport layer protocols, to forward error correction (FEC) techniques provided on the Physical Layer, and to error-detection and packet canceling provided at all layers, including the network layer. Data link layer error control (i.e. retransmission of erroneous packets) is provided in wireless networks and V.42 telephone network modems, but not in LAN protocols such as Ethernet, since bit errors are so uncommon in short wires. In that case, only error detection and canceling of erroneous packets are provided. Flow control, in addition to the one provided on the Transport layer. Data link layer error control is not used in LAN protocols such as Ethernet, but in modems and wireless networks. Media access control (MAC) sublayer:

Page 11 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Multiple access protocols for channel-access control, for example CSMA/CD protocols for collision detection and retransmission in Ethernet bus networks and hub networks, or the CSMA/CA protocol for collision avoidance in wireless networks. Physical addressing (MAC addressing) LAN switching (packet switching) including MAC filtering and spanning tree protocol Data packet queueing or scheduling Store-and-forward switching or cut-through switching Quality of Service (QoS) control Virtual LANs (VLAN)

The main task of the data link layer is to take a raw transmission facility and transform it into a line that appears free of transmission errors in the network layer. It accomplishes this task by having the sender break the input data up into data frames (typically a few hundred bytes), transmit the frames sequentially, and process the acknowledgment frames sent back by the receiver. Since the physical

Page 12 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

layer merely accepts and transmits a stream of bits without any regard to meaning of structure, it is up to the data link layer to create and recognize frame boundaries. This can be accomplished by attaching special bit patterns to the beginning and end of the frame. If there is a chance that these bit patterns might occur in the data, special care must be taken to avoid confusion. The data link layer should provide error control between adjacent nodes. A noise burst on the line can destroy a frame completely. In this case, the data link layer software on the source machine must retransmit the frame. However, multiple transmissions of the same frame introduce the possibility of duplicate frames. A duplicate frame could be sent, for example, if the acknowledgment frame from the receiver back to the sender was destroyed. It is up to this layer to solve the problems caused by damaged, list, and duplicate frames. The data link layer may offer several different service classes to the network layer, each of a different quality and with a different price. Another issue that arises in the data link layer (and most of the higher layers as well) is how to keep a fast transmitter from drowning a slow receiver in data. Some traffic regulation mechanism must be employed in order to let the transmitter know how much buffer space the receiver has at the moment. Frequently, flow regulation and error handling are integrated, for convenience.
Page 13 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

If the line can be used to transmit data in both directions, this introduces a new complication that the data link layer software must deal with. The problem is that the acknowledgment frames for A to B traffic competes for the use of the line with data frames for the B to A traffic. A clever solution piggybacking has been devised. In most practical situations, there is a need for transmitting data in both directions. One way of achieving full-duplex data transmission would be to have two separate communication channels, and use each one for simplex data traffic (in different directions). If this were done, we would have two separate physical circuits, each with a "forward" channel (for data) and a "reverse" channel (for acknowledgment). In both cases the bandwidth of the reverse channel would be almost entirely wasted. In effect, the user would be paying the cost of two circuits but only using the capacity of one. A better idea is to use the same circuit for data in both directions. In this model the data frames from A to B are intermixed with the acknowledgment frames from A to B. By looking at the "kind" field in the header of an incoming frame, the receiver can tell whether the frame is data or acknowledgment. Although interweaving data and control frames on the same circuit is an improvement over having two separate physical circuits, yet another improvement is possible. When a data frame arrives, instead of immediately sending a separate
Page 14 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

control frame, the receiver restrains it and waits until the network layer passes it the next packet. The acknowledgment is attached to the outgoing data frame. In effect, the acknowledgment gets a free ride on the next outgoing data frame. The technique of temporarily delaying outgoing acknowledgment so that they can be hooked onto the next outgoing data frame is widely known as piggybacking.

Page 15 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Nivelul reea
3. Nivelul reea asigur dirijarea unitilor de date ntre nodurile surs i destinaie, trecnd eventual prin noduri intermediare (routing ). Este foarte important ca fluxul de date s fie astfel dirijat nct s se evite aglomerarea anumitor zone ale reelei (congestionare). Interconectarea reelelor cu arhitecturi diferite este o funcie a nivelului reea. Folosete adresare logic.

Page 16 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Protocoale la nivelul de reea


DHCP ICMP/ICMPv6 IGMP IP IPv6 RIP2 RIP for IPv6 Dynamic Host Configuration Protocol Internet Control Message Protocol Internet Group Management Protocol Internet Protocol version 4 Internet Protocol version 6 Routing Information Protocol Routing Information Protocol for IPv6

This layer provides switching and routing technologies, creating logical paths, known as virtual circuits for transmitting data from node. Routing and forwarding are functions of this layer, as well as addressing, internetworking error handling, congestion control and packet sequencing. The network layer is concerned with controlling the operation of the subnet. A key design issue is determining how packets are routed from source to destination. Routes could be based on static tables that are "wired into" thenetwork and rarely changed. They could also be determined at the start of each conversation, for example a terminal session. Finally, they could be highly dynamic, being determined anew for each packet, to reflect the current network load.
Page 17 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

If too many packets are present in the subnet at the same time, they will get in each other's way, forming bottlenecks. The control of such congestion also belongs to the network layer. Since the operators of the subnet may well expect remuneration for their efforts, there is often some accounting function built into the network layer. At the very least, the software must count how many packets or characters or each customer sends bits, to produce billing information. When a packet crosses a national border, with different rates on each side, the accounting can become complicated. When a packet has to travel from one network to another to get to its destination, many problems can arise. The addressing used by the second network may be different from the first one. The second one may not accept the packet at all because it is too large. The protocols may differ, and so on. It is up to the network layer to overcome all these problems to allow heterogeneous networks to be interconnected. In broadcast networks, the routing problem is simple, so the network layer is often thin or even nonexistent. NFS uses Internetwork Protocol (IP) as its network layer interface. IP is responsible for routing, directing datagrams from one network to another. The network layer may have to break large datagrams, larger than MTU, into smaller packets and host receiving the packet will have to reassemble the fragmented datagram. The
Page 18 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Internetwork Protocol identifies each host with a 32-bit IP address. IP addresses are written as four dot-separated decimal numbers between 0 and 255, e.g., 199.89.60.14. The leading 1-3 bytes of the IP identify the network and the remaining bytes identify the host on that network. The network portion of the IP is assigned by InterNIC Registration Services, under the contract to the National Science Foundation, and the local network administrators assign the host portion of the IP, locally by retea@spiruharet.ro. For large sites, usually subnetted like ours, the first two bytes represent the network portion of the IP, and the third and fourth bytes identify the subnet and host respectively. Even though IP packets are addressed using IP addresses, hardware addresses must be used to actually transport data from one host to another. The Address Resolution Protocol (ARP) is used to map the IP address to it hardware.

Page 19 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Nivelul transport
4. Nivelul transport realizeaz o conexiune ntre dou calculatoare gazda (host) detectnd i corectnd erorile pe care nivelul reea nu le trateaz. Este nivelul aflat n mijlocul ierarhiei, asigurnd nivelelor superioare o interfa independent de tipul reelei utilizate. Funciile principale sunt: stabilirea unei conexiuni sigure ntre dou maini gazd, iniierea transferului, controlul fluxului de date i nchiderea conexiunii.

Page 20 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Transport Layer
Mobile IP RUDP TCP UDP XOT Mobile IP Protocol Reliable UDP Transmission Control Protocol User Datagram Protocol X.25 over TCP

This layer provides transparent transfer of data between end systems, or hosts, and is responsible for end-to-end error recovery and flow control. It ensures complete data transfer. The basic function of the transport layer is to accept data from the session layer, split it up into smaller units if need be, pass these to the network layer, and ensure that the pieces all arrive correctly at the other end. Furthermore, all this must be done efficiently, and in a way that isolates the session layer from the inevitable changes in the hardware technology. Under normal conditions, the transport layer creates a distinct network connection for each transport connection required by the session layer. If the transport connection requires a high throughput, however, the transport layer might create

Page 21 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

multiple network connections, dividing the data among the network connections to improve throughput. On the other hand, if creating or maintaining a network connection is expensive, the transport layer might multiplex several transport connections onto the same network connection to reduce the cost. In all cases, the transport layer is required to make the multiplexing transparent to the session layer. The transport layer also determines what type of service to provide to the session layer, and ultimately, the users of the network. The most popular type of transport connection is an error-free point-to-point channel that delivers messages in the order in which they were sent. However, other possible kinds of transport, service and transport isolated messages with no guarantee about the order of delivery, and broadcasting of messages to multiple destinations. The type of service is determined when the connection is established. The transport layer is a true source-to-destination or end-to-end layer. In other words, a program on the source machine carries on a conversation with a similar program on the destination machine, using the message headers and control messages. Many hosts are multi-programmed, which implies that multiple connections will be entering and leaving each host. Their needs to be some way to tell which message

Page 22 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

belong to which connection. The transport header is one place this information could be put. In addition to multiplexing several message streams onto one channel, the transport layer musk takes care of establishing and deleting connections across the network. This requires some kind of naming mechanism, so that process on one machine has a way of describing with whom it wishes to converse. There must also be a mechanism to regulate the flow of information, so that a fast host cannot overrun a slow one. Flow control between hosts is distinct from flow control between switches, although similar principles apply to both.

Page 23 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Nivelul sesiune
5. Nivelul sesiune stabilete i ntreine conexiuni (sesiuni) ntre procesele aplicaie, rolul su fiind acela de a permite proceselor s stabileasc "de comun acord" caracteristicile dialogului si sa sincronizeze acest dialog.
This layer establishes, manages and terminates connections between applications. The session layer sets up, coordinates, and terminates conversations, exchanges, and dialogues between the applications at each end. It deals with session and connection coordination. The session layer allows users on different machines to establish sessions between them. A session allows ordinary data transport, as does the transport layer, but it also provides some enhanced services useful in some applications. A session might be used to allow a user to log into a remote time-sharing system or to transfer a file between two machines. One of the services of the session layer is to manage dialogue control. Sessions can allow traffic to go in both directions at the same time, or in only one direction at a
Page 24 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

time. If traffic can only go one way at a time, the session layer can help keep track of whose turn it is. A related session service is token management. For some protocols, it is essential that both sides do not attempt the same operation at the same time. To manage these activities, the session layer provides tokens that can be exchanged. Only the side holding the token may perform the critical operation. Another session service is synchronization. Consider the problems that might occur when trying to do a two-hour file transfer between two machines on a network with a 1-hour mean time between crashes. After each transfer was aborted, the whole transfer would have to start over again, and would probably fail again with the next network crash. To eliminate this problem, the session layer provides a way to insert checkpoints into the data stream, so that after a crash, only the data after the last checkpoint has to be repeated.

Page 25 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Protocoale la nivelul sesiune


BGMP DIS DNS ISAKMP/IKE LDAP NetBIOS/IP Border Gateway Multicast Protocol Distributed Interactive Simulation Domain Name Service Internet Security Association and Key Management Protocol and Internet Key Exchange Protocol Lightweight Directory Access Protocol NetBIOS/IP for TCP/IP Environment

Page 26 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Nivelul prezentare
6. Nivelul prezentare realizeaz operaii de transformare a datelor n formate nelese de entitile ce intervin intr-o conexiune. Transferul de date ntre maini de tipuri diferite (Unix-DOS, de exemplu) necesit i codificarea datelor n funcie de caracteristicile acestora. Nivelul prezentare ar trebui s ofere i servicii de criptare/decriptare a datelor, n vederea asigurrii securitii comunicaiei n reea.

Page 27 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

This layer provides independence from differences in data representation (e.g., encryption by translating from application to network format, and vice versa. The presentation layer works to transform data into the form that the application layer can accept. This layer formats and encrypts data to be sent across a network, providing freedom from compatibility problems. It is sometimes called the syntax layer. The presentation layer performs certain functions that are requested sufficiently often to warrant finding a general solution for them, rather than letting each user solve the problems. In particular, unlike all the lower layers, which are just interested in moving bits reliably from here to there, the presentation layer is concerned with the syntax and semantics of the information transmitted. A typical example of a presentation service is encoding data in a standard, agreed upon way. Most user programs do not exchange random binary bit strings. They exchange things such as people's names, dates, amounts of money, and invoices. These items are represented as character strings, integers, floating point numbers, and data structures composed of several simpler items. Different computers have different codes for representing character strings, integers and so on. In order to make it possible for computers with different representation to communicate, the data structures to be exchanged can be defined in an abstract
Page 28 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

way, along with a standard encoding to be used "on the wire". The presentation layerhandles the job of managing these abstract data structures and converting from the representation used inside the computer to the network standard representation. The presentation layer is also concerned with other aspects of information representation. For example, data compression can be used here to reduce the number of bits that have to be transmitted and cryptography is frequently required for privacy and authentication.

Page 29 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Nivelul aplicaie
7. Nivelul aplicaie are rolul de "fereastra" de comunicaie ntre utilizatori, acetia fiind reprezentai de entitile aplicaie (programele). Nivelul aplicaie nu comunic cu aplicaiile ci controleaz mediul n care se execut aplicaiile, punndu-le la dispoziie servicii de comunicaie.

Page 30 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Protocoale la nivelul aplicaie


FANP Finger FTP HTTP IMAP4 IMPPpre/IMPPmes IPDC IRC NTP POP3 Radius RLOGIN RTSP SCTP S-HTTP SLP SMTP SNMP SOCKS TELNET TFTP Flow Attribute Notification Protocol User Information Protocol File Transfer Protocol Hypertext Transfer Protocol Internet Message Access Protocol rev 4 Instant Messaging and Presence Protocols IP Device Control Internet Relay Chat Protocol Network Time Protocol Post Office Protocol version 3 Remote Authentication Dial In User Service Remote Login Real-time Streaming Protocol Stream Control Transmision Protocol Secure Hypertext Transfer Protocol Service Location Protocol Simple Mail Transfer Protocol Simple Network Management Protocol Socket Secure (Server) TCP/IP Terminal Emulation Protocol Trivial File Transfer Protocol

Page 31 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Funciile nivelului aplicaie


Printre funciile nivelului aplicaie se afl: identificarea partenerilor de comunicaie, determinarea disponibilitii acestora i autentificarea lor; sincronizarea aplicaiilor cooperante i selectarea modului de dialog; stabilirea responsabilitilor pentru tratarea erorilor; identificarea constrngerilor asupra reprezentrii datelor; transferul informaiei.

Page 32 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

This layer supports application and end-user processes. Communication partners are identified, quality of service is identified, user authentication and privacy are considered, and any constraints on data syntax are identified. Everything at this layer is application-specific. This layer provides application services for file transfers, e-mail and other network software services. Telnet and FTP are applications that exist entirely in the application level. Tiered application architectures are part of this layer. The application layer contains a variety of protocols that are commonly needed. For example, there are hundreds of incompatible terminal types in the world. Consider the plight of a full screen editor that is supposed to work over a network with many different terminal types, each with different screen layouts, escape sequences for inserting and deleting text, moving the cursor, etc. One way to solve this problem is to define an abstract network virtual terminal for which editors and other programs can be written to deal with. To handle each terminal type, a piece of software must be written to map the functions of the network virtual terminal onto the real terminal. For example, when the editor moves the virtual terminal's cursor to the upper left-hand corner of the screen, this software must issue the proper command sequence to the real terminal to get its cursor there too. All the virtual terminal software is in the application layer.
Page 33 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Another application layer function is file transfer. Different file systems have different file naming conventions, different ways of representing text lines, and so on. Transferring a file between two different systems requires handling these and other incompatibilities. This work, too, belongs to the application layer, as do electronic mail, remote job entry, directory lookup, and various other general-purpose and special-purpose facilities.

Page 34 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Rezumat
OSI 7 Layer Model 7. Application Layer - DHCP, DNS, FTP, HTTP, IMAP4, NNTP, POP3, SMTP, SNMP, SSH, TELNET and NTP and more . 6. Presentation layer SSL, WEP, WPA, Kerberos, 5. Session layer Logical Ports 21, 22, 23, 80 etc 4. Transport - TCP, SPX and UDP 3. Network - IPv4, IPV6, IPX, OSPF, ICMP, IGMP and ARP 2. Data Link- 802.11abgn ( Wi-Fi), - 802.16(WiMAX), ATM, Ethernet(802.3), Token Ring(802.5), Frame Relay, PPTP, L2TP and ISDN 1. Physical -Hubs, Repeaters, Cables, Optical Fiber, Coaxial Cable, Twisted Pair Cable and Connectors

Page 35 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

ncapsulare - protocol data unit


1. Layer 1 (Physical Layer) PDU is the bit. 2. Layer 2 (Data Link Layer) PDU is the frame. 3. Layer 3 (Network Layer) PDU is the packet. 4. Layer 4 (Transport Layer) PDU is the segment. 5. Layer 5 and above are referred to as data.

Page 36 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Page 37 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Modelul TCP/IP

Page 38 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Page 39 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Bibliografie
Tanenbaum A. S., Reele de calculatoare, Editura Agora, Trgu Mure, 1997 TCP/IP Illustrated: the protocols, ISBN 0-201-63346-9, W. Richard Stevens, 1994 William Stallings, Data and Computer Communications, Prentice Hall 2006, ISBN 0-13243310-9

Page 40 | 2011, Copyright Alex Averian

Retele de calculatoare Lectia 1

Introducere in studiul retelelor

Intrebri ?

Page 41 | 2011, Copyright Alex Averian

Cerinte laborator (DNS)


Implementati un client DNS care poate fi folosit pentru interogarea unui server DNS folosind UDP/IP (port 53). Clientul va realiza numai cereri de tip A adresa (Type = 1) si va afisa rezultatul pe ecran. Vor fi interpretate urmatoarele sectiuni: Headerul DNS Pachetele cerere (querry) de tip A (Type = 1) Pachetele raspuns (response, authority, additional) de tip A (Type = 1), NS (Type = 2) si CNAME (Type = 5)
Programul se va scrie utilizand limbajul C sau C++. Fisierul se va trimite pe adresa aaverian@gmail.com pana la data de 25 mai 2010 ora 12.00.

Retele de calculatoare Lectia 2

Nivelul fizic

Nivelul fizic
Modul de lucru in retea Nivelul fizic Medii de transmisie Echipamente de nivel 1 Tipuri de reele Topologii de retele

Page 1 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Ce nseamna lucrul n reea?


O reea de calculatore reprezint o colecie de calculatoare autonome, interconectate intre ele. Exist mai multe posibiliti fizice de conectare (cabluri din cupru, fibre optice, microunde, satelii de comunicaie, etc.). Un sistem cu o unitate de control i mai multe uniti aservite nu este o reea, aa cum nu este o reea nici un calculator cu imprimante i terminale aflate la distan. Se spune despre dou calculatoare c sunt interconectate dac sunt capabile s schimbe informaii ntre ele.
Page 2 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Retea de calculatoare
Un calculator conectat mpreun cu altele are acces la datele stocate pe acestea precum i la echipamentele lor. Conceptul de conectare al unor calculatoare care partajeaz resursele se numete lucrul n reea. Calculatoarele care fac parte dintr-o reea pot partaja date, mesaje, imagini grafice, imprimante, plotere, aparate fax, modemuri etc.

Page 3 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Utilizarea reelelor
Avantaje: Utilizarea n comun a imprimantelor i a altor periferice. Dac calculatorul lucreaz autonom el are acces numai la perifericele lui, deci fiecare calculator ar avea nevoie de o imprimant proprie pentru scrierea rapoartelor. Acest lucru nu este economic, innd cont de costul acestui periferic i de timpul efectiv de utilizare. Deci, mai economic este ca mai multe calculatoare s utilizeze aceeai imprimant, lucru care este posibil numai dac calculatoarele sunt interconectate n reea.
Page 4 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Avantaje Partajarea unor produse soft. Fiecare calculator din reea poate avea acces la produsele instalate pe anumite calculatoare din reea. Schimbul rapid de informaii ntre membrii organizaiei respective, aflai la distane orict de mari, mai ales utiliznd facilitai de pot electronic, chat, etc.

Page 5 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Nivelul fizic

Page 6 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Nivelul fizic
Nivelul fizic are rolul de a transmite datele de la un calculator la altul prin intermediul unui mediu de comunicaie. Defineste la nivel electric, mecanic, procedural si functional legatura fizica intre calculatoarele care comunica. Il putem asocia cu termenii semnal, unde si cablu. Datele sunt vzute la acest nivel ca un ir de bii. Asigurarea pstrrii formei semnalului propagat.

Page 7 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Problemele tipice sunt de natur electric: Nivelele de tensiune corespunztoare unui bit 1 sau 0, durata impulsurilor de tensiune, cum se iniiaz i cum se oprete transmiterea semnalelor electrice, tipurile de cablu, transmisie radio, microunde, infrarosu sau prin fibra optica, distanta maxima dintre doua capete ale legaturii, etc. Tipuri de specificatii pentru acest nivel: EIA-232D (specifica interfetele si semnalul dintre DTE si DCE) , Ethernet (IEEE 802.3), Token Ring (IEEE 802.5

Page 8 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Nivelul fizic
Nu comunica cu stratul de mai sus. Nu poate identifica hosturile din retea. Descrie doar fluxuri de biti. Nu poate recunoaste ce calculator transmite daca transmit toate in acelasi timp.

Page 9 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Transferul datelor

Page 10 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Tipuri de retele
Reele peer-to-peer ntr-o reea peer-to-peer nu exist servere dedicate i nici o organizare ierarhic a calculatoarelor. Toate calculatoarele sunt considerate egale (peers), de unde i numele tipului de reea. n general, fiecare calculator are i rolul de client si cel de server, neexistnd un administrator responsabil pentru ntreaga reea. Utilizatorul fiecrui calculator stabilete resursele locale care vor fi partajate n reea. Dimensiunea. Reelelor peer-to-peer sunt numite i grupuri de lucru (workgroups). Acest termen desemneaz un numr
Page 11 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

mic de persoane. Costul. Reelele peer-to-peer sunt relativ simple. Deoarece fiecare calculator joac att rolul de client ct i de sever, nu este nevoie de un server central puternic si nici de alte componente necesare ca n cazul unei reele de mare capacitate. Reelelor peer-to-peer implic, de obicei, costuri mai mici dect cele bazate pe server. Sisteme de operare peer-to-peer. ntr-o reea peer-to-peer, software-ul de reea nu presupune acelai nivel de performane i de securitate cu cel al reelelor bazate pe
Page 12 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

server dedicat. Unele sisteme de operare, cum ar fi Microsoft Windows NT Workstation, Microsoft Windows Workgroups si Microsoft Windows 95/98 nglobeaz funcionalitatea de reea peer-to-peer si deci nu mai este necesar software suplimentar.

Page 13 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Reele peer-to-peer
Reele peer-to-peer descriere Utilizatorii sunt proprii administratori i i planific nivelul de securitate Se folosete un sistem de cablare simplu, vizibil care conecteaz toate calculatoarele din reea. Reele peer-to-peer reprezint o alegere bun pentru mediile n care: Exist cel mult 10-15 utilizatori
Page 14 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Utilizatorii se afla intr-o zon restrns Securitatea datelor nu este o problem esenial Organizaia i reeaua nu au o cretere previzibil n viitorul apropiat Din aceste considerente, rezult c n anumite situaii o reea peer-to-peer este preferabil unei reele bazat pe server.

Page 15 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Reele bazate pe server


Reele bazate pe server ntr-un mediu de lucru cu muli utilizatori, o reea peer-topeer nu mai este potrivit. Din acest motiv majoritatea reelelor au servere dedicate. Un server dedicat este un calculator care funcioneaz doar ca server, nefiind folosit ca client sau staie de lucru. Serverele se numesc "dedicate" deoarece sunt optimizate s deserveasc rapid cerinele clienilor din reea si s asigure securitatea fiierelor i a directoarelor. Numrul de servere crete odat cu complexitatea reelei.
Page 16 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Modelul client-server
O reea client/server reprezint un mediu de lucru n reea n care calculatorul client lanseaz o solicitare, iar un calculator care funcioneaz ca server o ndeplinete. Modelul se refer la mprirea operaiilor de prelucrare a datelor ntre calculatorul client i un calculator server mai puternic. Modul de abordare client/server este avantajoas pentru organizaiile n care un numr mare de utilizatori trebuie s aib acces permanent la cantiti mari de date. Administrarea bazelor de date este tipul de aplicatie cel mai frecvent folosit in mediile de client/server.
Page 17 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

De obicei, chiar i ntr-o reea peer-peer, orice calculator poate juca att rol de server ct i de client.

Page 18 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Modelul client-server
Avantaje: Partajarea resurselor. Un server este proiectat pentru a oferi acces la mai multe fiiere i imprimante, asigurnd n acelai timp fiecrui utilizator performanele i securitatea necesar. Partajarea datelor n cazul reelelor bazate pe server poate fi administrat i controlat centralizat. Resursele sunt localizate de obicei ntr-un server central, fiind mai uor de detectat i ntreinut dect cele distribuite pe diferite calculatoare. Securitatea este principalul motiv pentru care se recurge la o reea bazat pe server. ntr-un mediu de lucru bazat pe
Page 19 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

server, cum este Windows NT Server, politica de securitate este stabilit de un administrator, care o aplic fiecrui utilizator n reea. Salvarea de siguran a datelor (backup). Deoarece datele importante sunt centralizate pe unul sau mai multe servere, se poate planifica salvarea lor regulat. Redundana. Prin intermediul sistemelor redundante, datele de pe un server pot fi copiate i pstrate on-line, astfel c, n cazul n care apar probleme la dispozitivul primar de stocare s fie disponibil o copie de siguran a datelor respective. Numrul de utilizatori poate fi orict de mare, lucru realizabil datorit utilitarelor de monitorizare i administrare disponibile n prezent.
Page 20 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Tipuri de servere
Servere de fiiere i de tiprire administreaz accesul i folosirea de utilizatori a resurselor de tip fiier i imprimant. De exemplu dac folosii o aplicaie de prelucrare a textelor, aceasta va rula pe calculatorul dumneavoastr. Documentul prelucrat de aplicaie este pstrat pe server i ncrcat n memoria calculatorului propriu, astfel nct poate fi folosit local. Cu alte cuvinte serverele de fiiere i de tiprire sunt folosite n general pentru stocarea datelor i a fiierelor. Servere de aplicaii pun la dispoziia clienilor componenta
Page 21 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

server a aplicaiilor de tip client-server, precum i datele respective. De exemplu, serverele pstreaz volume mari de date structurate, care sunt uor de accesat (baze de date). Acest tip de servere difer de serverele de fiiere i de tiprire, n cazul crora datele sau fiierele sunt descrcate n totalitate pe calculatorul care le-a solicitat. La serverele de aplicaii , baza de date se afl pe server i numai rezultatul interogrii este descrcat pe calculatorul care a lansat solicitarea. O aplicaie client care ruleaz local va accesa datele de pe serverul de aplicaii. n loc de ntreaga baz de date pe calculatorul local va fi descrcat de pe server numai rezultatul interogrii.
Page 22 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Tipuri de servere
Serverele de pot gestioneaz transferul de mesaje electronice ntre utilizatorii reelei Serverele de fax gestioneaz traficul de mesaje fax n dinspre reea, partajnd una sau mai multe plci de fax modem Serverul de comunicaii gestioneaz fluxul de date i mesaje email transmise ntre reeaua serverului i alte reele, calculatoare mainframe sau utilizatori aflai la distan, care folosesc modem i linii telefonice pentru a se conecta la server Serverele de directoare permit utilizatorilor s localizeze, s stocheze i s partajeze informaiile din reea.

Page 23 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Tipuri de Retele
PAN - Personal area nertwork LAN - Cea mai uzual metod de cablare permitea conectarea a maximum 30 de utilizatori, printr-un cablu avnd lungime maxima de 180-200 de metri. O astfel de reea se numete reea local sau LAN (Local Area Network) MAN - Primele reele LAN nu au putut satisface nevoile de interconectare din cadrul organizaiilor mari, cu birouri aflate la distan unele de altele. O reea metropolitan (Metropolitan Area Network MAN)
Page 24 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

este o versiune extins de LAN ce se poate ntinde pe zona ocupat de un grup de birouri nvecinate sau chiar suprafaa unui ora. Acest tip de reea funcionez pe baza unor tehnologii similare cu cele ale LAN-urilor. WAN - Pe msur ce avantajele reelelor au devenit cunoscute si s-au dezvoltat tot mai mult aplicaii pentru mediul de lucru n reea, reelele LAN s-au dezvoltat devenind reele de mare acoperire geografica (Wide Area Network WAN).

Page 25 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Topologii de Retele
Topologia definete structura reelei. Topologia fizic se refer la dispunerea fizic n teren a calculatoarelor, a cablurilor i celorlalte componente ale reelei. Topologia logic se refer la modul cum gazdele acceseaz mediul de comunicaie. Topologia unei reele afecteaz direct performanele reelei. O anumit topologie aleas influeneaz tipul de echipament utilizat, precum i posibilitile de extindere a reelei.
Page 26 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Topologii de Retele

Page 27 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Page 28 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Page 29 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Topologii logice
Broadcast Cea mai cunoscut tehnologie broadcast este tehnologia Ethernet (aprut nc de la sfritul anilor 1970), larg utilizat n toate reelele locale LAN (Local Area Network) din lume. Modalitatea de funcionare a reelelor Ethernet se bazeaz pe CSMA/CD (Carrier Sense Multiple Access with Collision Detection).

Topologia token passing Cea mai cunoscut tehnologie token passing este tehnologia Token Ring, construit ca alternativ la metoda Ethernet de detecie a coliziunilor.
NS=20 TS=10 NS=20 TS=4

TS=11

NS=11 TS=5

NS=4 TS=20

Page 30 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Medii de transmisie:
Cupru Fibra optica Fara fir

Page 31 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Cablul coaxial
Cablu coaxial, 10, 100 Mbs, 500M

Page 32 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Cablu perechi rasucite


Cablu UTP( unshielded twisted-pair), STP( shielded twisted-pair), 10, 100 Mbs, 100M

Page 33 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Moduri de mufare

Page 34 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Cablu direct
Cablu Straight-through Conecteaza calculator - hub/switch Conecteaza ruter hub/switch

Page 35 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Cablu crossover
Conecteaza calculator - calculator Conecteaza hub/switch hub/switch Conecteaza ruter ruter

Page 36 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Cablul rollover

Page 37 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Fibre optice
Fibra optica single mode Miez subtire Sursa de lumina- laser Dispersie scazuta Distante mari 5 KM

Fibra optica multi mode Miez mai gros, 62.5 sau 50-microni Distante mai mici, 500m Lumina- LED

Page 38 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Fibre optice
Avantaje: Fibra optica nu este afectata de sursele de zgomot extern cum ar fi campurile electromagnetice. Transmisia luminii pe fibra nu genereaza interferente. Viteza mare, cabluri de lungime mare. Probleme: Disiparea Absorbtia Atenuarea

Page 39 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Echipamente de nivel 1

Page 40 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Placa de retea- NIC(nivel2)

Page 41 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Wireless - Retea fara fir


Mod de lucru - Carrier-Sense Multiple Access with Collision Avoidance (CSMA/CA)

Page 42 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Retea fara fir ad-hoc


Elementul de baza intr-o retea wireless este celula wireless (termenul original conform standardului este Basic Service Set BSS) Fiecare celula are asociat un identificator de 48 de biti, unic, numit Basic Service Set ID BSSID.

Page 43 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Wireless infrastructura
Prezenta unei celule wireless organizate ntr-o anumita zona este manifestata prin emiterea periodica de catre una dintre statii a unui pachet special, numit beacon. Pe langa BSSID-ul celulei, pachetele beacon mai contin un sir de caractere numit SSID sau uneori numele retelei (engl. network name). Acest sir este fixat de administratorul retelei si serveste la identificarea retelei pentru utilizatorii umani.

Page 44 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Adaptoare Wireless
NIC pe interfata PCI, NIC pe interfata PCMCIA

Page 45 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Securitate - wireless
Securitate: Open system Wep (Wired Equivalent Privacy) ca in retele cablate, toti userii cunosc o parola WPA - WiFi Protected Access WPA-PSK ( personal - Pre-Shared Key) - fiind similar cu WEP (dar mult mai sigur) WPA-Entreprise - Controlul accesului si obtinerea cheilor se face printr-un mecanism numit Extensible Authentication Protocol (EAP)

Page 46 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Bibliografie
Tanenbaum A. S., Reele de calculatoare, Editura Agora, Trgu Mure, 1997 Tanenbaum A.S. (1992). Modern Operating Systems. Englewood Cliffs NJ: Prentice-Hall.

Page 47 | 2010, Alexandru Averian

Retele de calculatoare Lectia 2

Nivelul fizic

Daca exista INTREBARI?

Page 48 | 2010, Alexandru Averian

RETELE DE CALCULATOARE

NIVELUL LEGATURII DE DATE


1. 2. 3. 4. 5. 6. 7. 8. 9.

Nivelul legaturii de date Descrire , functii Subnivelul MAC, Subnivelul LLC Moduri de lucru Detectare ed erori Corectare de erori Ethernet Echipamente de nivel 2 Probleme

NIVELUL LEGTURII DE DATE


Nivelul legturii de date ofera servicii nivelului de retea, realiznd o comunicare corect ntre dou noduri adiacente ale reelei, corecteaz erorile de transmitere aprute la nivelul fizic. Mecanismul utilizat n acest scop este mprirea fluxului de bii n cadre ( frame), crora le sunt adugate informaii de control. Cadrele sunt transmise individual, putnd fi verificate i confirmate de ctre receptor. Alte funcii ale nivelului se refer conexiuni, la controlul fluxului de date i la corectarea erorilor de transmisie.

NIVELUL LEGATURII DE DATE


Functii le nivelului 2
1. 2. 3. 4. 5. 6. Ofera servicii nivelului de retea Comunica cu stratul superior prin LLC (Logical Link Conrtrol) Foloseste un mod de adresare, creaza si inchide conexiuni Organizeaza bitii in cadre, calculeaza sume de control, corecteaza datele Retransmite daca este cazul MAC media access control, controleaza accesul la mediu, depinde de tipul retelei 7. Ethernet - Carrier Sense Multiple Access/Collision Detection

NIVELUL LEGATURII DE DATE


Moduri de lucru
1. Transfer neconfirmat fara conexiune folosit in retele sigure, cu erori rare, sau in cazul tresmisiilor audio/video, nu se stabilesc conexiuni nu se confirma cadrele 2. Transfer confirmat fara conexiune nu stabileste conexiune, dar confirma frame-urile, retransmite daca nu primeste confirmarea, poate apare receptarea multipla 3. Transfer confirmat bazat pe conexiune stabileste conexiunea, numeroteaza cadrele, garanteaza receptia, garanteaza receptia o singura data in ordinea corecta, ofera un flux de biti sigurnivelului de retea. Se foloseste la legaturi seriale, punct la punct, sau in retele fara fir

NIVELUL LEGATURII DE DATE


Controlul erorilor Marcheaza inceputul si sfarsitul cadrelor Transmite si asteapta confirmare, porneste un ceas. Daca confirmarea nu soseste atunci cadrul este retransmis. Se executa transmiteri si pot apare receptari multiple. Pentru a nu se tranmite la nivelul 3 date de mai multe ori cadrele se numeroteaza in asa fel incat sa se poata detecta retransmisiile.

NIVELUL LEGATURII DE DATE


Controlul fluxului 1. Protocolul trebuie sa asigure mecanisme de control al fluxului. 2. Controlul fluxului se refera la reglarea cantitatii de date care este transmisa de emitator catre receptor. 3. Receptorul trebuie sa poata spune daca este data sa primeasca date. 4. Exista diverse implementari ale acestor mecanisme.

NIVELUL LEGATURII DE DATE


Corectarea erorilor Exista doua abordari: 1. Folosirea unor codificari ale informatiei si adaugarea de informatii redundante pentru detectarea erorilor 2. Folosirea unor codificari ale informatiei si adaugarea de informatii redundante pentru corectarea erorilor

NIVELUL LEGATURII DE DATE


Coduri pentru detectarea erorilor - exemplu Presupunem ca avem o linie cu o eroare de 10-6 pe bit si se fac transmiteri in blocuri de 1000 de biti. Pentru a detecta aparitia unei erori se adauga un bit de paritate la fiecare bloc, vom avea un bloc suplimentar de 1001 biti la 1000 de blocuri. Pentru 1Mb se adauga in total 2001 de biti. Daca se adauga un bit pe bloc si avem erori multiple este posibil sa nu detectam aparitia erorii.

NIVELUL LEGATURII DE DATE


Coduri pentru detectarea erorilor - exemplu Exemplu: Un cod detector de erori este un cod in care la fiecare bloc de date se adauga un bit de paritate. Adica se numara bitii de 1 din mesaj si daca acesta este impar se adauga un 1 altfel se adauga un zero. Daca se adauga un bit pe bloc si avem erori multiple este posibil sa nu detectam aparitia erorii.

NIVELUL LEGATURII DE DATE


Coduri pentru detectarea erorilor - exemplu Daca avem erori multiple putem imbunatati rata de detectare a erorilor, astfel: Privim mesajul ca o matrice de k linii si n coloane, pentru fiecare coloana se adauga un bit de paritate sub forma unei linii suplimentare. Matricea este transmisa linie cu linie. Receptorul verifica toti bitii de paritate, daca vreunul este gresit va cere o retransmisie a mesajului.

NIVELUL LEGATURII DE DATE


Coduri pentru detectarea erorilor - exemplu Modelul cu matrice poate detecta erori unice pe coloana. Daca pe o coloana se schimba de exemplu primul si ultimul bit dintr-o coloana atunci eroarea nu se observa. In practica se foloseste o alta metoda: codul polinomial sau codul cu redundanta ciclica (CRC).

NIVELUL LEGATURII DE DATE


Coduri pentru detectarea erorilor - exemplu Codul polinomial, codul cu redundanta ciclica (CRC). Sirul de biti este privit ca un polinom cu coeficienti binari. Un sir de k biti reprezinta coeficientii unui polinom cu k termeni de forma xk-1, x0. Exemplu: 110011 este x5 + x4 + x1 + x0 . Operatiile se fac modulo 2, fara transport sau imprumut prin operatorul XOR. Emitatorul si receptorul aleg un polinom generator G(x) cu 1 pe bitul cel mai semnificativ si cel mai putin semnificativ.

NIVELUL LEGATURII DE DATE


Coduri pentru detectarea erorilor - exemplu Codul polinomial, codul cu redundanta ciclica (CRC). Se adauga un cod de control la mesaj astfel incat polinomul asociat mesajului si codului de control sa fie divizibil prin polinomul G(x). Receptorul primeste mesajul si il imparte la G(x), daca se obtine un rest atunci inseamna ca s-a produs o eroare.

NIVELUL LEGATURII DE DATE


Coduri pentru detectarea erorilor - exemplu Codul polinomial, codul cu redundanta ciclica (CRC). Algoritm de calcul al codului de control: Fie r = grad G(x). Fie un mesaj de lungime m si polinomul asociat M(x).
1. Se adauga r de zero la mesaj astfel incat acum mesajul va avea lungime m+r, si corespunde polinomului xrM(x). 2. Se imparte G(x) la xrM(x) folosind impartirea modulo 2. 3. Se scade restul (de r biti sau mai putin) din sirul de biti coresp. lui xrM(x) folosind scaderea modulo 2. 4. Rezultatul notat cu T(x) este sirul cu cod control ce trebuie trimis. Exista cazuri care nu sunt detectate?

NIVELUL LEGATURII DE DATE


Coduri pentru corectarea erorilor Presupunem ca avem o linie cu o eroare de 10-6 pe bit si se fac transmiteri in blocuri de 1000 de biti.
Definim distanta Hamming

Daca avem un sir de biti care estre trimis de emitator si este receptat diferit de receptor. Distanta Hamming ne da numarul de biti in care difera mesajul emis de mesajul receptionat. Se calculeaza cu ajutorul operatorului XOR pe biti, si se nmara bitii de 1 din rezultat. Exemplu: 00110011, 01110111, distanta H este 2.

NIVELUL LEGATURII DE DATE


Coduri pentru corectarea erorilor Exemplu: 00110011, 01110111, distanta H este 2. Asta inseamna ca trebuiesc executate 2 corectii ca sa transformam un mesaj in altul. Un cadru am m biti si r biti de control Lungimea totala a unui mesaj este n = m + r. N este numit cuvant de cod.

NIVELUL LEGATURII DE DATE


Coduri pentru corectarea erorilor Un cadru are m biti si r biti de control. Unele aplicatii accepta ca fiind valide toate cele 2m mesaje. Dar prin modul de calcul nu se vor folosi toate cele 2n cuvinte. Se poaate face o lista a tuturor cuvintelor de cod. Distanta Hamming minima intre doua cuvinte de cod se numeste distanta Hamming a codului complet.

NIVELUL LEGATURII DE DATE


Coduri pentru corectarea erorilor

Distanta Hamming minima intre doua cuvinte de cod se numeste distanta Hamming a codului complet. Pentru a detecta o eroare pe d biti avem nevoie de un cod cu o distanta d+1, deoarece cu o astfel de codificare nu se poate ajunge de la un cuvant corect in d pasi la un alt cuvant corect.

NIVELUL LEGATURII DE DATE


Distanta Hamming minima intre doua cuvinte de cod se numeste distanta Hamming a codului complet. Pentru a corecta o eroare pe d biti avem nevoie de un cod cu o distanta 2d+1, deoarece cu o astfel de codificare cuvantele corecte sunt distantate, iar cuvintele eronate se afla la o distanta de maxim d fata de orice cuvant corect. Cel mai apropiat cuvat va fi chiar cuvantul original.

NIVELUL LEGATURII DE DATE


Codul Hamming Calcularea lungimii codului: Presupunem ca avem o codificare cu un mesaj de lungime m si un cod de control de lungime r care ne permite detectarea tuturor erorilor singulare. Cat de lung este r?
Fie n = m + r, pentru fiecare mesaj din cele 2m mesaje avem n mesaje eronate aflate la o distanta de 1 de mesaj. Pentru fiecare mesaj din cele 2m mesaje avem n+1 mesaje asociate (unul corect si n gresite). Daca numarul total de mesaje este 2n atunci avem (n+1)2m <= 2n sau (m + r + 1)2m <= 2n

NIVELUL LEGATURII DE DATE


Codul Hamming
(n+1)2m <= 2n

(m + r + 1)2m <= 2n

Daca se da m se poate obtine un r minim. Cum se realizeaza codificarea? Limita minima se poate atinge daca se foloseste codificarea Humming.

NIVELUL LEGATURII DE DATE


Codul Hamming, (m + r + 1)2m <= 2n Bitii mesajului se numeroteaza de a stanga la dreapta pornind de la 1. Bitii care sunt puteri ale lui 2(1,2,4,8...) sunt biti de control. Ceilalti sunt cei m biti de date (3,5,6,7,9...). Fiecare bit de control controleaza paritatea unui grup de biti si participa in mai multe calcule de paritate.

NIVELUL LEGATURII DE DATE


Codul Hamming, (m + r + 1)2m <= 2n Pentru a afla bitii de control pentru un bit de pe pozitia k se scrie k sub forma de suma de puteri ale lui 2. Exemplu: 11 = 1 + 2 + 8 (bitul 11 e verificat de bitii 1, 2, 8) 29 = 1 + 4 + 8+ 16 (bitul 29e verificat de bitii 1, 4, 8 si 16)

NIVELUL LEGATURII DE DATE


Codul Hamming
Cand soseste un mesaj, receptorul incepe analiza setand un contor la zero. Examineaza fiecare bit de control (k = 1,2,4,8, 16) pentru a vedea daca este corecta paritatea, daca nu adauga k la contor. Daca la final contorul este zero atunci inseamna ca nu avem erori. Daca contorul are valoare nenula aceasta reprezinta numarul bitului incorect. De exemplu daca bitii 1, 2 si 8sunt eronati rezulta ca bitul 11 este inversat. Codurile Hamming corecteaza doar erori singulare.

NIVELUL LEGATURII DE DATE


Codul Hamming
Codurile Hamming corecteaza doar erori singulare. Dar exista o posibilitate de a trata erorile in rafala (mai multi biti eronati consecutivi). Se creaza o matrice de biti si datele se transmit coloana cu coloana. La destinatie se reface matricea. Daca apare o eroare atunci fiecare coloana va avea un bit alterat. Ceea ce duce la posibilitatea de corectare.

NIVELUL LEGATURII DE DATE


Subsistemul MAC Sistem de control al accesului ma mediul de transmisie. Este dependent de tipul retelei. Exista mai multe tipuri de retele in functie de mediul de transmisie: pe cablu coaxial, pe cabluri rasucit, fibra optica, fara fir. Pe cablu de cupru:Ethernet, Token Bus, Token Ring; pe fibra optica FDDI.

NIVELUL LEGATURII DE DATE

NIVELUL LEGATURII DE DATE


Reateaua Ethernet
Modulde operare - CSMA/CD .

Reteaua Ethernet (IEEE 802.3) este de tip broadcast, adica fiecare statie poate sa vada frame-urile trimise in retea.

Fiecare statie incarca o copie a frame-ului care circula prin mediu si examineaza adresa MAC de destinatie a frame-ului. Daca acesta corespunde cu adresa respectivei statii atunci este trimis stratului 3 pentru a se examina si IP-ul acelui frame. In cazul in care adresa MAC nu corespunde, acel frame este ignorat. Mai multe hosturi pot emite in acelasi timp.

NIVELUL LEGATURII DE DATE


Una din problemele de care trebuie tinut seama in CSMA/CD este chestiunea coliziunilor si mai exact a evitarii acestora.

Metoda de acces CSMA/CD prevede c un sistem gata s emit, avnd deci un cadru pregtit, va asculta mai nti mediul de transmisie i, daca acesta este liber va transmite. Dac mediul este ocupat st n ascultare i cnd devine liber ncepe s transmit, continund ascultarea n timpul transmiterii cadrului. Dac dou sau mai multe sisteme au nceput transmisia ntr-un interval de timp suficient de mic se va produce o coliziune. Staiile care transmit vor detecta coliziunea, nceteaz transmisia datelor i vor emite un scurt semnal de bruiere pentru a asigura detectarea coliziunii de ctre toate sistemele din reea. Cele care au fost n coliziune nceteaz apoi emisia i vor retransmite, fiecare, dup o asteptare aleatoare.

NIVELUL LEGATURII DE DATE


Modulde operare - CSMA/CD .

Rezolvarea coliziunilor consta in urmatoarea secventa de pasi: O statie vrea sa transmita Asambleaza informatia Asculta pe cablu daca cineva transmite Daca da, atunci asteapta si apoi reincearca Daca linia este libera transmite Se poate intampla ca doua statii sa emita in acelasi timp si sa apara o coliziune moment in care informatia este alterata. Prima statie care a detectat fenomenul trimite un semnal prin care avertizeaza ca s-a produs o coliziune, in felul acesta avem certitudinea ca toate statiile au auzit ca s-a petrevut o coliziune. Din acest moment fiecare statie intra intr-o perioda de asteptare precis calculata pentru fiecare, apoi incearca sa transmita din nou.

NIVELUL LEGATURII DE DATE


Modulde operare - CSMA/CD, rezolvarea coliziunilor

Se ine seama de ntinderea reelei, mai exact de timpul de propagare dus-ntors (round-trip delay) maxim al reelei. Acest timp depinde de suportul fizic de transmisie (tip i lungime), de numrul repetoarelor prin care trece semnalul pentru a ajunge de la un capt la cellalt. Valoarea adoptat pentru acest timp este de 51,2 s i s-a stabilit n urmtorul mod: transmisia se face 10BaseT, iar viteza de propagare minim este 100.000Km/s i reeaua are maxim 5 segmente de cte 500m fiecare. Rezult:

t=5*0.5(Km)/100.000(Km/s)=25s, 2t=50s

NIVELUL LEGATURII DE DATE


Modulde operare - CSMA/CD, rezolvarea coliziunilor

S-a adoptat 51,2s pentru a putea transmite 512 bii cu rata de 10Mbps, adic 64 octei, cifr care a impus i valoarea minim a pachetului. Acest interval de timp mai este denumit i tran canal sau timp de vulnerabilitate. Semnalul de bruiere utilizat pentru anunarea coliziunii este necesar deoarece, altfel, n cazul n care s-ar produce o coliziune ntre cadrele emise de dou sisteme apropiate, ele ar nceta foarte rapid emiterea cadrelor, semnalul rezultat ar fi de foarte scurt durat i poate de amplitudine redus, astfel c sistemele ndeprtate nu ar detecta coliziunea.

NIVELUL LEGATURII DE DATE


Modulde operare - CSMA/CD, rezolvarea coliziunilor

Asteptarea dup care rencepe retransmiterea cadrului dup o coliziune este un multiplu al tranei de canal. Notnd acest multiplu cu M, ntrzierea va fi deci M*51,2s. Numrul ntreg M este un numar ales aleator, generat ntr-un domeniu de valori a crui mrime se stabilete conform unui algoritm al regresiei exponeniale binare. Acest algoritm spune c dac N este numrul de coliziuni pe care un cadru le-a suferit deja, se alege M astfel ca 0 M 2^N, dac N 10 i 0 M 2^10 dac 10 N 16.

NIVELUL LEGATURII DE DATE


Modulde operare - CSMA/CD, rezolvarea coliziunilor

Astfel dup prima coliziune M poate fi 0 sau 1, dup a doua coliziune poate fi 0, 1, 2, 3 i aa mai departe. Pentru N[0, 16] M este generat aleatoriu ntre 0 i 1023. Dac i dup 16 ncercri nu s-a reuit transmiterea cadrului, subnivelul de acces la mediu abandoneaz incercrile i semnaleaz defeciune. ntre cadre se impune o intrziere minim egal cu 9,6s, adic durata transmiterii a 96 bii (12 octei). Ea permite reiniializarea tuturor proceselor legate de nivelurile 1 i2 precum i restabilizarea condiiilor electrice pe suportul de transmisie.

NIVELUL LEGATURII DE DATE


Cadrul Ethernet (IEEE 802.3)

NIVELUL LEGATURII DE DATE


Modulde operare - CSMA/CD

Conform specificaiilor dimensiunea maxim a pachetului este: 1.518 octei = 14 oct. HEADER + 1.500 oct. DATE + 4 oct. CRC, iar cea minim: 64 octei = 14 oct. HEADER + 46 oct. DATE + 4 oct. CRC n cazul specificaiei IEEE Preambulul are 7 octei pentru sincronizare avnd fiecare structur 10101010. Detimitatorul de nceput de pachet care este un octet de forma 10101011 (ultimii 2 bii pe 1).

NIC ECHIPAMENT DE NIVEL 2


Placa de retea

WIRELESS
Placa de retea NIC pe interfata PCI

WIRELESS
Placa de retea NIC pe interfata PCMCIA

PUNTE, NIVEL 2
Puntea (bridge) O alt soluie pentru extinderea unei

reele o constituie utilizarea unei puni. Aceasta permite n plus fa de un hub un control mai bun al traficului de date, deoarece folosete o metoda de memorare a adreselor fizice ale calculatoarelor din reea, prin care decide daca un pachet de date trece sau nu prin punte catre calculatorul destinaie, ceea ce duce ia reducerea traficului in reea.

SWITCH, NIVEL 2
Rolul unui switch:
Conecteaza nodurile in topologia stea Segmenteaza reteaua Previne coliziunile

BIBLIOGRAFIE

Tanenbaum A. S., Reele de calculatoare, Editura Agora, Trgu Mure, 1997 TanenbaumA.S. (1992). Modern Operating Systems. Englewood Cliffs NJ: Prentice-Hall.

DACA EXISTA INTREBARI?

Multumim

RETELE DE CALCULATOARE

NIVELUL DE RETEA
1. 2. 3. 4. 5. 6. 7.

Nivelul de retea Descriere , functii Datagrame sau circuite virtuale? Adresare Dirijare Controlul fluxului si al congestiilor Echipamente de nivel 3

NIVELUL REEA
3. Nivelul reea imparte datele in pachete,

asigur dirijarea unitilor de date ntre nodurile surs i destinaie, trecnd eventual prin noduri intermediare (routing ). Este foarte important ca ruta de date s fie astfel aleas nct s se evite aglomerarea anumitor zone ale reelei (congestionare). Interoperabilitatea reelelor cu arhitecturi diferite este o funcie a nivelului reea.

NIVELUL DE RETEA
Functii le nivelului 2
1. 2. 3. 4. 5. Adresarea Fragmentarea Dirijarea pachetelor Evitarea congestionarii retelei Controlul fluxului

Servicii 1. orientate pe conexiune 2. ne-orientate pe conexiune Organizarea interna 1. datagrame 2. circuite virtuale

NIVELUL DE RETEA
Datagrame sau circuite virtuale? Exist dou filozofii de baza distincte pentru organizarea subretelei, una folosind conexiuni, iar a doua lucrnd fr conexiuni. n contextul operrii interne a subreelei, o conexiune este numit de obicei circuit virtual, prin analogie cu circuitele fizice care se stabilesc n sistemul telefonic. Pachetele independente ale organizrii neorientate pe conexiune se numesc datagrame, prin analogie cu telegramele.

NIVELUL DE RETEA
Circuite virtuale
Circuitele virtuale sunt folosite de obicei n subretele care ofer un serviciu orientat pe conexiune. Ideea care se afl la baza circuitelor virtuale este evitarea alegerii unei noi ci (rute) pentru fiecare pachet trimis. n consecin, cnd se stabilete o conexiune, se alege i memoreaz o cale ntre maina surs i maina destinaie, ca parte component a parametrilor conexiunii. Aceast cale va fi folosit pentru tot traficul de pe conexiune, exact n acelai mod n care funcioneaz sistemul telefonic. Cnd conexiunea este eliberat, circuitul virtual se elibereaz.

NIVELUL DE RETEA
Retea bazata pe datagrame
ntr-o reea datagram, nici o cale nu este stabilit n avans, chiar dac serviciul este orientat pe conexiune. Fiecare pachet trimis este dirijat independent de predecesorii si. Pachete consecutive pot urma ci diferite.

Cu toate c subreelele bazate pe datagrame au ceva mai mult de lucru, ele sunt, de obicei, mai robuste i se adapteaz la defecte i congestii mai uor dect subreelele bazate pe circuite virtuale.

NIVELUL DE RETEA
Retea bazata pe datagrame
Fiecare datagram trebuie s conin adresa complet a destinaiei. Pentru o reea marc, aceste adrese pot s fie destul de lungi (4 octei sau chiar mai mult). Cnd este recepionat un pachet, ruterul stabilete linia de ieire care trebuie folosit i trimite pachetul pe acest drum. De asemenea, stabilirea i eliberarea conexiunilor de nivel reea sau transport nu necesit nici un efort deosebit din partea ruterului.

NIVELUL DE RETEA
Circuite virtuale sau datagrame

NIVELUL DE RETEA
Alegerea unui mod de lucru Alegerea ntre un serviciu orientat pe conexiune i unul neorientat pe conexiune se reduce la alegerea locului n care s fie plasat complexitatea. n cazul serviciului orientat pe conexiune e vorba de nivelul reea, n cazul serviciului neorientat pe conexiune este vorba de nivelul transport (calculator gazd).

NIVELUL DE RETEA
Dirijare 1. 2. 3. 4. 5. 6. Dirijare cu vectori distanta Dirijare folosind starea legaturilor Dirijare ierarhica Dirijare pentru hosturi mobile Dirijare prin difuzare Dirijare multicast (prin trimitere multipla)

NIVELUL DE RETEA
Controlul congestiei 1. Principii ale controlului congestiei 2. Politici pentru prevenirea congestiei

NIVELUL DE RETEA
Controlul congestiei Principii ale controlului congestiei Ajustarea traficului Algoritmul picaturii Algoritmul galetii cu jeton Specificarea fluxului

NIVELUL DE RETEA
Controlul congestiei In retele cu circuite virtuale Pachete soc Cozi echitabile ponderate Pachete soc pas cu pas Imprastierea incarcarii aruncarea pachetelor Controlul fluctuatiilor audio/video

NIVELUL DE RETEA
Controlul congestiei Politici pentru prevenirea congestiei
Nivel Transport Politic Politica de retransmisie Politica de memorare temporar a pachetelor n afar de secven (out-oforder caching) Politica de confirmare Politica de control al fluxului Determinarea timeout-ului Circuite virtuale contra datagrame n interiorul subreelei Plasarea n cozi de ateptare a pachetelor i politici de servire Politica de distrugere a pachetelor Algoritmi de dirijare Gestiunea timpului de viat alpachetelor Politica de retransmitere Politica de memorare temporar a pachetelor n afar de secven (out-oforder caching) Politica de confirmare Politica de control al fluxului ,

Reea

Legtur de date

NIVELUL DE RETEA
Interconectarea retelelor

NIVELUL DE RETEA
Interconectarea retelelor

NIVELUL DE RETEA
Fragmentarea
Fiecare reea impune cteva dimensiuni maxime asupra pachetelor sale. Aceste limite au diferite cauze, printre ele fiind: Hardware (de exemplu, lungimea intervalului de transmisie TDM). 2. Sistemul de operare (de exemplu, toate zonele tampon au 512 octei). 3. Protocoale (de exemplu, numrul de bii din cmpul lungimea pachetului). 4. Concordana cu unele standarde. 5. Dorina de a reduce la un anumit nivel retransmisiile provocate de erori. 6. Dorina de a preveni ocuparea ndelungat a canalului de ctre un singur pachet. 1.

NIVELUL DE RETEA
Fragmentarea
Rezultatul acestor factori este c proiectanii dc reele nu au libertatea de a alege dimensiunea maxim a pachetelor oricum ar dori. Informaia utila maxim variaz de la 8 octei (celulele ATM) la 65515 octei (pachetele IP), cu toate c dimensiunea pachetelor la nivelurile mai nalte este deseori mai mare. O problem evident apare cnd un pachet mare vrea s traverseze o reea in care dimensiunea maxima a pachetului este prea mic. O soluie este s ne asigurm ca problema nu apare. Cu alte cuvinte, reeaua trebuie s utilizeze un algoritm de dirijare care evit transmiterea pachetelor prin reele n care pachetele nu pot fi manevrate. Ce se ntmpl dac pachetul surs original este prea mare pentru a fi manevrat de reeaua destinaie? Algoritmul de dirijare nu poate evita reteaua destinatie.

NIVELUL DE RETEA
Protocolul IP

NIVELUL DE RETEA
Adrese IP Adrese IPv4

NIVELUL DE RETEA
Adrese IP Adrese IPv6

NIVELUL DE RETEA
Adrese IPv6

NIVELUL DE RETEA
Protocolul ICMP

NIVELUL DE RETEA
Protocolul de rutare Rip, v1 si v2

NIVELUL DE RETEA
Protocolul de rutare OSPF

BIBLIOGRAFIE

Tanenbaum A. S., Reele de calculatoare, Editura Agora, Trgu Mure, 1997 Tanenbaum A.S. (1992). Modern Operating Systems. Englewood Cliffs NJ: Prentice-Hall.

DACA EXISTA INTREBARI?

Multumim

RETELE DE CALCULATOARE

NIVELUL DE RETEA

1. Nivelul de retea 2. Dirijare 3. Exemple

NIVELUL REEA
3. Nivelul reea imparte datele in pachete,

asigur dirijarea unitilor de date ntre nodurile surs i destinaie, trecnd eventual prin noduri intermediare (routing ). Este foarte important ca ruta de date s fie astfel aleas nct s se evite aglomerarea anumitor zone ale reelei (congestionare). Interoperabilitatea reelelor cu arhitecturi diferite este o funcie a nivelului reea.

NIVELUL REEA
Funcia principal a nivelului reea este dirijarea (dirijarea)

pachetelor de la maina surs ctre maina destinaie. n majoritatea subreelelor pachetele vor face salturi multiple pentru a-i face cltoria. Singura excepie remarcabil o reprezint reelele cu difuzare, dar chiar i aici dirijarea este important, atunci cnd sursa i destinaia nu sunt n aceeai reea.

Algoritmii care aleg calea i structurile de date folosite de acetia

reprezint un domeniu important al proiectrii nivelului reea.

Algoritmul de dirijare (routing algorithm) este acea parte a

software-ului nivelului reea care rspunde de alegerea liniei de ieire pe care un pachet recepionat trebuie trimis mai departe.

NIVELUL REEA
Dac subreeaua folosete intern datagrame, aceast decizie

trebuie luat din nou pentru fiecare pachet recepionat, deoarece e posibil ca cea mai bun rut s se fi modificat ntre timp.

Dac subreeaua folosete circuite virtuale, decizia de dirijare se ia

doar la stabilirea unui nou circuit virtual. Dup aceea pachetele de date vor urma doar calea stabilit anterior. Acest ultim caz este numit uneori sesiune de dirijare, deoarece calea rmne n funciune pentru o ntreag sesiune utilizator .

Indiferent dac ruta se alege independent pentru fiecare pachet sau

doar la stabilirea unei noi conexiuni, exist anumite proprieti pe care un algoritm de dirijare trebuie s le aib: corectitudine, simplitate, robustee, stabilitate, prevenirea defavorizrii nodurilor, optimalitate.

NIVELUL REEA
Algoritmii de dirijare pot fi grupai n dou mari clase: neadaptivi i

adaptivi.

Algoritmii neadaptivi nu i bazeaz deciziile de dirijare pe

msurtori sau estimri ale traficului i topologiei curente. Astfel, alegerea cii folosite pentru a ajunge de la nodul A la nodul B se calculeaz n avans, off-line i parvine ruterului la iniializarea reelei. Aceast procedur se mai numete i dirijare static.

Algoritmii adaptivi i modific deciziile de dirijare pentru a

reflecta modificrile de topologie i de multe ori i pe cele de trafic. Algoritmii adaptivi difer prin locul de unde i iau informaia (de exemplu local, de la un ruter vecin sau de la toate ruterele), prin momentul la care schimb rutele (de exemplu la fiecare T secunde, cnd se schimb ncrcarea sau cnd se schimb topologia) i prin metrica folosit pentru optimizare (de exemplu distana, numrul de salturi sau timpul estimat pentru tranzit).

NIVELUL DE RETEA
1. Dirijare pe calea cea mai scurta Metrica: calea ce mai scurta -in numar de noduri - distanta geografica - intarzierea totala - costul transmisiei - banda totala - trafic Se foloseste algoritmul lui Dijkstra

NIVELUL DE RETEA
2. Dirijare prin inundare
Pachetul este trimis pe toate caile in afara de calea pe care a venit. Se genereaza un numar mare de pachete duplicat si acest numar poate creste la infinit daca nu se iau unele masuri. O masura este inserarea unui contor de salturi care scade la fiecare pas, pachetul va fi distrus cand contorul ajunge la zero. O alta masura este identificarea pachetelor, pentru a preveni retransmiterea acestora, prin inserarea unui numar de secventa, ruterul mentine o lista de numere.

NIVELUL DE RETEA
2. Dirijare prin inundare
O variant a algoritmului de inundare, care este i ceva mai practic, este inundarea selectiv. n acest algoritm ruterele nu trimit fiecare pachet recepionat pe fiecare legtur de ieire, ci doar pe acele linii care duc aproximativ n direcia potrivit. De obicei sunt puine motive pentru a trimite un pachet spre partea de vest a reelei folosind o legtur spre est, excepie fcnd reelele cu topologii deosebite. Inundarea nu este practic pentru majoritatea aplicaiilor, Ias are destule utilizri.

NIVELUL DE RETEA
2. Dirijare prin inundare
De exemplu, n aplicaiile militare, unde un mare numr de rutere pot fi scoase din funcionare la orice moment, robusteea extraordinar a inundrii este necesar. n aplicaiile de baze de date distribuite, este uneori necesar s fie actualizate toate bazele de date concurent, caz n care inundarea poate fi folositoare. O a treia utilizare posibil a inundrii este ca metric la care s se raporteze toi ceilali algoritmi de dirijare. Inundarea alege ntotdeauna cea mai scurt cale, deoarece alege n paralel toate cile posibile. n consecin, nici un alt algoritm nu poate produce o ntrziere mai redus (dac ignorm suprancrcarea generat de procesul de inundare).

NIVELUL DE RETEA
3. Dirijare bazata pe flux
Tine cont atat de topologie cat si de flux. Trebuie sa fie cunoscute in avans topologia, fluxul si capacitatile liniilor. Se calculeaza intarzierea medie a unui pachet pe fiecare linie folosind elemente de teoria cozilor. Pe baza ntrzierilor medii ale tuturor liniilor se poate calcula imediat, ca medie ponderat dup flux, ntrzierea medie a unui pachet pentru ntreaga subreea. Problema dirijrii se reduce apoi la gsirea algoritmului de dirijare care produce ntrzierea medie minim pentru subreea.

NIVELUL DE RETEA
4. Dirijare cu vectori distanta - dinamic
Algoritmul de dirijare cu vectori distan (distance vector routing) presupune c fiecare ruter menine o tabel (de exemplu un vector) care pstreaz cea mai bun distan cunoscut spre fiecare destinaie i linia care trebuie urmat pentru a ajunge acolo. Aceste tabele sunt actualizate prin schimbul de informaii ntre nodurile vecine. Algoritmul de dirijare cu vectori distan este cunoscut i sub alte nume, cum ar fi algoritmul distribuit de dirijare Bellman-Ford sau algoritmul Ford-Fulkerson.

NIVELUL DE RETEA
4. Dirijare cu vectori distanta - dinamic
n dirijarea pe baza vectorilor distan, fiecare ruter pstreaz o tabel de dirijare coninnd o intrare pentru fiecare ruter din subreca. Aceast intrare are dou pri: linia de ieire preferat care se folosete pentru destinaia respectiv i o estimare a timpului sau distanei pn la acea destinaie. Metrica folosit poate fi numrul de salturi, ntrzierea n milisecunde, numrul total de pachete care ateapt n cozi de-a lungul cii.

NIVELUL DE RETEA
4. Dirijare cu vectori distanta - dinamic
Se presupune c ruterul cunoate distana" spre fiecare din vecinii si. Dac se folosete metrica salturilor, distana este de doar un salt. Dac metrica folosit este cea a lungimilor cozilor de ateptare, ruterul examineaz pur i simplu lungimile acestor cozi. Dac metrica este cea a ntrzierilor, ruterul o poate msura direct prin pachete speciale ECHO, n care receptorul va marca doar timpul curent (tampila de timp) i le va trimite napoi ct mai repede posibil.

NIVELUL DE RETEA
4. Dirijare cu vectori distanta - dinamic
Fiecare ruter comunica doar cu vecinii, converge greu. Apare problema numararii la infinit.
Solutie : despicarea orizontului. Distantele nu sut raportate pe directia rutei. Ex. Dii spune lui C: ruta catre B este infinit. In cazul urmator apare problema numararii la infinit.

NIVELUL DE RETEA
5. Dirijare folosind starea legaturilor
Foloseste informatie legata de starea legaturilor, converge repede, comunica cu toate ruterele. 1. S descopere care sunt vecinii si i afle adresele de reea ale acestora. 2. S msoare ntrzierea sau costul pn Ia fiecare din vecinii si. 3. S pregteasc un pachet prin care anun pe toat lumea c tocmai a terminat de cules datele despre vecini. 4. S trimit acest pachet ctre toate celelalte rutere. 5. S calculeze cea mai scurt cale spre fiecare ruter Dijkstra. 6. Exemple: IS-IS, OSPF

NIVELUL DE RETEA
6. Dirijare ierarhica Reteaua se imparte in regiuni, fiecare ruter cunoaste numai propria regiune si poate dirija pachetele in interiorul regiunii sale. Se reduce astfel numarul de intrari in tabelele de rutare ale ruterelor. Nr opim de niveluri in retea cu N rutere este Ln(N). Dim tabelei: e*LN(N)

NIVELUL DE RETEA
7. Dirijare pt calculatoare mobile Fiecare celula are un agent local, si un agent pentru straini. Agentul pt straini emite un pachet prin care isi semnaleaza prezenta. Cand un sistem mobil intra in aria unei celule se inregistreaza la un agent pentru straini, cu adresa fizica si de retea. Agentul strain anunta agentul local din celula de care apartine sistemul mobil, cu informatii de securitate. Dupa de primeste confirmarea adauga sistemul mobil in lista sa de clienti.

NIVELUL DE RETEA
8. Dirijare prin difuzare O metoda ar consta in trimiterea unui pachet catre fiecare gazda. Necesita lista tuturor destinatarilor.

NIVELUL DE RETEA
9. Dirijare prin trimitere multipla (multicast)
Pentru unele aplicaii avem nevoie de o modalitate de a trimite mesaje spre grupuri bine definite, care conin un numr mare de noduri, dar totui redus fa de dimensiunea reelei ca un ntreg. Trimiterea unui mesaj ctre un astfel de grup se numete multicasting, iar algoritmul de dirijare asociat se numete dirijare multicast.

NIVELUL DE RETEA
9. Dirijare prin trimitere multipla (multicast)
Pentru a realiza dirijarea multicast, este necesar gestiunea grupului. Trebuie s existe modaliti de a crea i distruge grupuri i ca procesele s intre n grupuri sau s le prseasc. Cum se realizeaz aceste funcii nu e treaba algoritmului de dirijare. Important pentru algoritmul de dirijare este c atunci cnd un proces se ataeaz unui grup, el trebuie s informeze gazda sa despre aceasta. Este foarte important ca un ruter s tie cror grupuri aparin calculatoarele gazd asociate.

NIVELUL DE RETEA
9. Dirijare prin trimitere multipla (multicast)
Fie calculatoarele gazd trebuie s anune ruterul asociat la producerea unei modificri n alctuirea grupurilor, sau ruterul trebuie s interogheze periodic aceste calculatoare gazd. n ambele cazuri, ruterul determin care este apartenena la grupuri a calculatoarelor gazd. Ruterele i informeaz vecinii, astfel c informaia se propag prin subretea. Pentru a realiza dirijarea multicast, fiecare ruter calculeaz arborele de acoperire care acoper toate celelalte rutere din subreea.

NIVELUL DE RETEA
Controlul congestiei
Congestia apare atunci cnd foarte multe pachete sunt prezente n reea. Dac prin controlul fluxului se urmrete traficul capt la capt ntre un expeditor i un destinatar, prin controlul congestiei se urmrete s se asigure c subreeaua este capabil s transporte ntreg traficul implicat. Congestia este o problem global implicnd toate calculatoarele, toate ruterele din reea. Abordarea tratrii congestiei se poate face prin: metode n bucl deschis - care rezolv problema la proiectare, planificnd cnd s distrug pachete, unde se iau deciziile n reea, cnd se accept trafic nou, etc. metode n bucl nchis - abordare care curpinde trei pri
1. monitorizarea sistemului, pentru a detecta cnd i unde se produce congestia; 2. trimiterea acestor informaii ctre locurile unde se pot executa aciuni. 3. ajusteaz funcionarea sistemului pentru a corecta problema.

NIVELUL DE RETEA
Controlul congestiei
Metricile folosite pentru monitorizare sunt: lungimea medie a cozilor de ateptare, numrul de pachete care sunt retransmise pe motiv de time out, procentul din totalul pachetelor care au fost distruse (din cauza lipsei spaiului temporar de memorare), ntrzierea medie a unui pachet. Algoritmii n bucl deschis pot aciona: asupra sursei (fereastra glisant, gleata gurit, gleata cu jeton) asupra destinaiei (formarea traficului - negocierea parametrilor de transfer) Algoritmii n bucl nchis sunt: cu reacie invers implicit cu reacie invers explicit La cei cu reacie invers implicit sursa deduce existena congestiei din observaii locale, cum ar fi timpul necesar pentru ntoarcerea pachetelor de confirmare, iar la cei cu reacie invers explicit, pachetele sunt trimise napoi de la locul congestiei ctre surs pentru a o avertiza.

NIVELUL DE RETEA
Controlul congestiei
n literatur (vezi A. Tanenbaum Reele de calculatoare)cei mai cunoscui algoritmi pentru controlul congestiei sunt: gleata gurit; gleata gurit cu jeton; controlul n subreele bazate pe circuite virtuale: - controlul admisiei - stabilirea de noi circuite virtuale - negocierea traficului - volumul de date - calitatea serviciului pachete de oc pachete oc cu salt cozi echitabile ponderate mprtierea ncrcrii protocolul de rezervare a resurselor

BIBLIOGRAFIE

Tanenbaum A. S., Reele de calculatoare, Editura Agora, Trgu Mure, 1997 Tanenbaum A.S. (1992). Modern Operating Systems. Englewood Cliffs NJ: Prentice-Hall.

DACA EXISTA INTREBARI?

Multumim

Retele de calculatoare

Lectia 6 -Nivelul de transport

Nivelul de Transport

Preliminarii Porturi UDP (User Datagram Protocol) TCP (Transmission Control Protocol) TCP versus UDP

2010, A. Averian

Retele de calculatoare

Lectia 6 -Nivelul de transport

Preliminarii - Modele de servicii

Asigura transmiterea de date de la masina sursa la masina destinatie comunicare end-to-end Asigura transportul datelor de la aplicatie la aplicatie Asigura fluxuri de octeti in mod fiabil (reliable) orientat-conexiune

2010, A. Averian

Retele de calculatoare

Lectia 6 -Nivelul de transport

Ofera servicii mult mai fiabile decat cele de la nivelul retea (e.g. pachetele pierdute/incorecte de la nivelul retea pot fi detectate/corectate la nivelul transport) Tipuri de servicii: orientate pe conexiune sau datagrame Serviciile (controlul fluxului/erorilor) se pot realiza: End-to-end: intre punctele terminale ale aplicatiei Hop-by-hop: intre fiecare doua noduri ale drumului dintre cele doua puncte terminale

2010, A. Averian

Retele de calculatoare

Lectia 6 -Nivelul de transport

Relatia (logica) intre nivele: retea-transport-aplicatie

Entitatea de transport: hardware-ul si/sau software-ul ce utilizeaza serviciile nivelului retea TPDU (Transport Protocol Data Unit) - unitatea de date pentru transportUtilizatoare de servicii de Transport

2010, A. Averian

Retele de calculatoare

Lectia 6 -Nivelul de transport

Figura. Modelul OSI

2010, A. Averian

Retele de calculatoare

Lectia 6 -Nivelul de transport

Calitatea serviciilor - QoS (Quality of Service)


Intarzierea la stabilirea conexiunii Probabilitatea de insucces la stabilirea conexiunii Productivitatea Intirzierea la transfer Rata reziduala a erorilor Protectia Prioritatea Rezilienta

2010, A. Averian

Retele de calculatoare

Lectia 6 -Nivelul de transport

Primitive generale
Permit utilizatorilor nivelului transport (e.g. programe de aplicatie) sa acceseze serviciile
Primitiva LISTEN Unitatea de date trimisa (nimic) Explicatie Se blocheaza pana cand un proces incearca sa se conecteze Incearca sa stabileasca conexiunea Transmite informatie Se blocheaza pana cand se primeste date trimise Trimisa de partea care vrea sa se deconecteze

CONNECT SEND RECEIVE

CONNECTION REQ. DATA (nimic)

DISCONNECT DISCONNECTION REQ.

2010, A. Averian

Nivelul de Transport Adauga o noua dimensiune adreselor IP de la nivelul retea Se asociaza unei aplicatii (serviciu) si nu unei gazde Un proces poate oferi mai multe servicii => poate utiliza mai multe porturi Un serviciu poate corespunde la mai multe procese

2010, A. Averian

Porturi
Pot avea valori intre 0 - 65535 0-1024 - valori rezervate, 0-512 servicii de sistem
(IANA -Internet Assigned Number Authority: RFC 1700)

2010, A. Averian

Exemple:
/etc/services : sunt precizate porturile asociate serviciilor sistem HTTP -80; SMTP -25; telnet -23; SSH 22 Cele mai importante protocoale la nivelul transport:

TCP (Transmission Control Protocol) - protocol de transport orientat conexiune; RFC 793 (1122), 1323 UDP (User Datagram Protocol) - protocol de transport neorientat conexiune; RFC 768
Protocol de transport neorientat conexiune, nesigur, minimal Nu ofera nici o calitate suplimentara serviciilor Nu recurge la negocieri sau la confirmari ale primirii datelor
2010, A. Averian

Analogie: UDP - similar postei terestre Trimiterea unei scrisori Nu se garanteaza ordinea receptionarii Mesajul se poate pierde Utilizeaza IP

2010, A. Averian

Pentru a oferii servicii de comunicare intre procese foloseste porturi UDP transmite pachete: antet (8 bytes) + continut

Figura: Antet UDP

UDP length = 8 bytes + Dimensiunea continutului Source port si Destination port identifica "end- point"-urile de pe masinile sursa si destinatie UDP checksum - nu este obligatoriu
2010, A. Averian

Exemple
- DNS (Domain Name System)
Use-case: A are nevoie de IP-ul host-ului cu numele www.spiruharet.ro Pas 1. A trimite un pachet UDP continind numele host-ului : www.spiruharet.ro Pas 2. Serverul de DNS trimite un pachet UDP de raspuns continind adresa IP a host-ului: 10.0.0.1

2010, A. Averian

Protocol de transport orientat conexiune, sigur Vizeaza oferirea calitatii maxime a serviciilor Integreaza mecanisme de stabilire si de eliberare a conexiunii Controleaza fluxul de date (stream-oriented) Folosind port-uri extinde protocolul IP pentru comunicarea intre

procese aflate pe host-uri diferite si nu numai intre host-uri

2010, A. Averian

Analogie: TCP - similar telefoniei Initierea unei convorbiri Dialogul dintre parti Terminarea convorbirii Utilizeaza conexiuni, nu porturi ca abstractiuni fundamentale
Conexiunile se identifica prin perechi reprezentate de adresa IP:PORT (soclu - socket) - Exemplu: (80.121.123.165: 1234, . 80.12.23.34: 22) Ambele parti (expeditorul, destinatarul) trebuie sa participe la realizarea conexiunii Una din parti ofera o deschidere pasiva - asteapta aparitia unei cereri de conectare a
partenerului de comunicare care realizeaza o deschidere activa Un numar de port poate fi partajat de conexiuni multiple de pe aceeasi masinaTCP

2010, A. Averian

Conexiunile TCP sunt full-duplex O conexiune TCP este un flux de octeti si nu un flux de mesaje Exemplu: Emitatorul trimite 4 fragmente de 512 octeti Receptorul poate primi: - 1. doua fragmente de 1024 de octeti - 2. un fragment de 1 octet si unul de 2047 de octeti Problema: Pachetele de date pot fi pierdute, eronate sau duplicate Solutia TCP pentru asigurarea fiabilitatii cumunicarii (reliability) - Pentru fiecare octet din fluxul de octeti transmis se asteapta confirmare de primire - Mesajele de confirmare contin secvente de numere pentru ca destinatarul sa asocieze corect confirmarile pachetelor primite

2010, A. Averian

Antetul TCP

2010, A. Averian

Antetul TCP
Cimpurile Source Port si Destination Port identifica punctele finale ale conexiunii Flaguri de control URG (URGence) - daca este setat campul Urgent Pointer este folosit ACK (ACKnowledgment)
daca este setat campul Acknowledge Number este folosit; este setat in toate pachetele de confirmare PSH (PuSH)-datele vor fi transmise imediat aplicatiei destinatare
2010, A. Averian

RST (ReSeT) - semnalizeaza erori in conexiune (e.g. deschiderea unei conexiuni este refuzata)

SYN (SYNchronize)

folosit pentru stabilirea conexiunii (Cererea de conexiune: SYN=1, ACK=0; Raspunsul la cerere: SYN=1, ACK=1; ) indica cererea de conexiune si conexiune acceptata
FIN (FINish)- indica inchiderea conexiunii

2010, A. Averian

Antetul TCP
Campul Sequence Number (SEQ) - Daca flagul SYN este setat => SEQ are valoarea iniiala a numarului de ordine; - Daca flagul SYN este nesetat => SEQ are ca valoare numarul de ordine a primului octet trimis in acest pachet
2010, A. Averian

Antetul TCP
Campul Acknowldge Number - Daca flagul ACK este setat => are valoarea numarului de ordine al urmatorului octet care se asteapta a fi receptionat; Campul Window size - numarul de octeti pe care receptorul doreste sa ii receptioneze (controlul fluxului)
2010, A. Averian

Campul Checksum - folosit pentru verificarea sumei de control al pachetului TCP (antet si data)
Campul Urgent Pointed- daca flagu URG este setat, indica deplasamentul fata de numarul curent de ordine la care se gaseste informatia urgenta
2010, A. Averian

Stabilirea conexiunii Three-way handshaking


CONNECT

Comunicarea efectiva La fiecare receptionare de date, se transmite expeditorului un mesaj de confirmare (engl. acknowledgment)
2010, A. Averian

Expeditorul memoreaza fiecare pachet transmis si asteapta confirmarea din partea destinatarului pentru a transmite urmatorul pachet Daca dupa un timp dat nu se primeste confirmarea, pachetul este retransmis Comunicarea efectiva - protocolul cu Fereastra Glisanta folosit la transmiterea datelor Fereastra glisanta la transmiterea datelor Comunicarea efectiva - Controlul fluxului La receptia datelor se foloseste un buffer care contine: Zona pentru datele primite si confirmate Zona pentru datele care pot fi primite

Detectia erorilor & retransmiterea datelor


Fiecare segment trimis contine un numar de secventa (Sequence Number) indicind pozitia octetilor transmisi in cadrul fluxului de date - Gazda destinatar verifica numarul de secventa pentru fiecare segment (se testeaza daca anumite segmente se pierd, sunt duplicate sau nu sunt in ordine) si trimite inapoi pentru fiecare segment un numar de confirmare (Acknowledgment Number), specificind numarul de secventa al urmatorului octet care se astepta a fi receptionat
2010, A. Averian

Retele de calculatoare

Lectia 6 -Nivelul de transport

Segmentele pierdute sunt detectate folosindu-se un timer de retransmisie a datelor - Pentru detectarea erorilor se utilizeaza si checksum-uri
-

2010, A. Averian

Retele de calculatoare

Lectia 6 -Nivelul de transport

Inchiderea conexiunii
Conexiunile TCP fiind full-duplex, cand o aplicatie semnaleaza ca nu mai exista date de trimis, TCP va inchide conexiunea doar intr-o directie Partenerul de comunicatie poate expedia un segment TCP cu bitul FIN setat; confirmarea semnifica ca sensul respectiv de comunicare este efectiv oprit - Conexiunea este desfiintata cind ambele directii au fost oprite
-

Resetarea conexiunii
-

Uneori conditii anormale forteaza aplicatiile sau software-ul de retea sa distruga conexiunea Pentru resetarea conexiunii, o parte a comunicarii initiaza terminarea, trimitind un segment cu bitul RST setat Cealalta parte abandoneaza conexiunea, fara a se mai transmite eventuale date ramase netransmise Transferul in ambele directii este oprit, buffer-ele sunt golite
2010, A. Averian

Fortarea transmiterii datelor

Retele de calculatoare

Lectia 6 -Nivelul de transport

TCP poate divide fluxul de date in segmente de dimensiuni diferite de pachetele vehiculate de aplicatii => eficienta transmisiei Uneori intervine situatia de a transmite datele fara a se mai astepta umplerea buffer-elor (e.g., aplicatii interactive) Fortarea transmiterii se realizeaza prin push: se seteaza bitul PSH si se forteaza transmiterea segmentelor, indiferent de starea de umplere a buffer- elor Modeleaza comportamentul protocolului Starile sunt utilizate la managementul conexiunii
State
CLOSED LISTEN SYN RCVD SYN SENT ESTABLISHED FIN WAIT 1 FIN WAIT2 TJMED WAIT CLOSING CLOSE WAIT LAST ACK

Description
No connection is active or pending The server Is waiting for an incoming call A connection request lias arrived: wait for ACK The application has started to open a conneclion The normal dala transJer state The application has said it is l ini shed The other side has agreed Lo release Wait tor bI packets to die off Both sides have iried to close simultaneously The other side has initiated a release Wait for al packets to die olf
2010, A. Averian

Retele de calculatoare

Lectia 6 -Nivelul de transport

Automatul finit TCP


2010, A. Averian

Retele de calculatoare

Lectia 6 -Nivelul de transport

Stabilirea conexiunii:
CLOSED - din aceasta stare se poate cere o deschidere activa (se trece in SYN_SENT) sau pasiva (SYN_RCVD) LISTEN - se poate trimite o cerere de conexiune activa (se trece in SYN_SENT) ori pasiva (>YN_RCVD) Conexiune stabilita: ESTABLISHED - poate incepe transmisia de date (din aceasta stare se poate trece in CLOSE_WAIT sau FIN_WAIT_1) Deconectarea initiata de procesul partener CLOSE_WAIT, LAST_ACK, CLOSE Stari ce intervin in procesul de deconectare FIN_WAIT_1, FIN_WAIT_2, CLOSING , TIME_WAIT

2010, A. Averian

Exemplu netstat -t

Exemple de utilizari ale TCP:


- Majoritatea protocoalelor de aplicatii:

HTTP TELNET SMTP SSH

Ambele se bazeaza pe IP, utilizeaza porturi Unitatea de transmisie

TCP -> Segment TCP UDP -> Pachet UDP

UDP ofera servicii minimale de transport (efort minim de transmisie)


2010, A. Averian

TCP ofera servicii orientate-conexiune, full- duplex, sigure - pentru transportul fluxurilor de octeti ( -> mecanism complex de transmisie)

Utilizarea TCP sau UDP depinde de aplicatie:

e-mail, transfer de fisiere, operare in timp-real, transmisii multimedia in timp real, chat,...

2010, A. Averian

Sumar

Preliminarii Porturi UDP (User Datagram Protocol) TCP (Transmission Control Protocol) TCP versus UDP

ntrebri?

2010, A. Averian

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Introducere in programarea aplicatiilor de retea


Ce ste un socket? Tipuri de socket Adrese socket Model de comunicatie client server Functii Completarea structurii sockaddr_in Exemple Cerinte pt laborator Bibiliografie

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Ce este socket?
Un socket este un capat de comunicatie" sau punct final de comunicatie" care poate fi numit si adresat intr-o retea, fiind locul unde programul de aplicatie se intalneste cu furnizorul mediului de transport. Un soket este: - d.p.d.v. al unui program de aplicatie: o resursa alocata de sistemul de operare; - d.p.d.v. al sistemului de operare: o structura de date intretinuta de catre nucleul sistemului de operare; aceasta structura este referita in aplicatii printr-un intreg numit descriptor de socket. Relativ la un socket se pot face una dintre urmatoarele doua analogii: socket-cutie postala: - proprietarul (aplicatia) depune mesajele de trimis si isi ridica corespondenta primita; - facorul postal (furnizorul mediului de transport) deschide cutia de cateva ori pe zi, ridica corespondanta de expediat si depune corespondenta sosita la adresa respectiva; socket-aparat telephonic - proprietarul formeaza un numar si dupa stabilirea legaturii incepe sa discute cu persoana de la celalalt capat al firului; - aparatul si intreaga retea telefonica asigura stabilitatea legaturii pana la incheierea convorbirii .

OBS. doua aplicatii pot comunica intre ele prin socket doar dupa ce fiecareia dintre ele sistemul de operare i-a alocat un socket (exista un numar de descriptori de socket rezervati pentru aplicatiile de sistem, restul descriptorilor fiind disponibili pentru utilizatori).

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Tipuri de socket
Se disting doua tipuri de socket: socket stream si socket datagram. Comunicarea este posibila, doar daca la ambele capete este utilizat acelasi tip de socket.

Socket stream
Interfata socket stream defineste un serviciu orientat conexiune, datele fiind transmise fara erori si fara duplicari, Datele sunt receptionate in aceeasi ordine in care au fost transmise, avandu-se grija insa ca fluxul de date sa nu depaseasca o valoare maxima de octeti la un moment dat. Asupra datelor ce sunt transmise nu se impune nici un fel de limitare, ele fiind considerate simple siruri de octeti. Transportul este realizat folosind protocolul TCP. Fiind un serviciu orientat conexiune, este potrivita analogia facuta anterior cu aparatul telefonic. Ca exemplu de utilizare pentru socket stream poate fi dat unul dintre serviciile nivelului aplicatie, si anume FTP (File Transfer Protocol). Deci, socket stream asigura o conexiune sigura, lucru care presupune insa reducerea performantei datorita efortului de calcul necesar mentinerii conexiunii si verificarilor de corectitudine. La nivel utilizator aceasta reducere a performantei nu este insa sesizata . Se recomanda utilizarea socket-ului stream in cazurile in care cantitatile de date ce sunt transmise sunt mari, iar comunicatia are loc in retele WAN.

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Socket datagram
Interfata socket datagram defineste un serviciu fara conexiune in care datagramele sunt transmise ca si pachete separate. Serviciul nu asigura garantii cu privire la receptionarea datelor, acestea putand fi pierdute ori duplicate, ordinea de sosire la destinatie putand fi de asemenea diferita de cea de transmitere. Marimea unei datagrame este limitata la numarul de octeti care pot fi transmit intr-o singura tranzactie. Transportul este realizat folosind protocolul UDP, iar analogia potrivita este cea cu cutia postala. Comunicarea prin socket-ul datagram este nesigura deoarece pachetele pot fi ignorate, alterate sau duplicate in timpul transmisiei, utilizarea lui fiind recomandata in cazurile in care aplicatia implementeaza un mecanism propriu de corectitudine sau daca aplicatia nu este sensibila la transmisii eronate. Se castiga insa viteza la prelucrare raportat la socket-ul stream. Se recomanda folosirea acestui tip de socket pentru transmiterea unei cantitati mici de date in cadrul retelelor LAN.

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Adrese socket
Pentru a fi independent de platforma, socket permite utilizarea mai multor familii de adrese, o astfel de familie definind un stil de adresare. Toate host-urile din aceeasi familie de adrese inteleg si folosesc aceeasi schema pentru adresarea capetelor socket-ului. Familiile de adrese sunt identificate printr-un numar intreg, numele acestora incepand cu AF (Adress Family): AF-INET: defineste adresarea in domeniul Internet, fiind si cea mai importanta familie; AF-UNIX: reprezinta sistemul local (protocoale interne UNIX); AF-NS: pentru protocoale Xerox NS;

Generic, stuctura unei adrese este urmatoarea:


struct sockaddr { u_short sa_family; char sa_data[14]; } //valoare AF_xxx //dependent de familie

unde, sa_family: indica familia de adrese folosita; sa_data: interpretat in functie de familie. OBS. fiecare familie de adrese are definita structura proprie de adresa care se suprapune peste cea generica in momentul transmiterii ei catre nucleu.

Retele de calculatoare - Introducere in programarea aplicatiilor de retea Adresele din familia AF_INET sunt de tip struct sockaddr_in si sunt definite in <arpa/inet.h> astfel:
struct in_addr { union { struct{ unsigned char s_b1, s_b2, s_b3, s_b4; } S_un_b; struct { unsigned short s_w1, s_w2; } S_un_w; unsigned long s_addr; } S_un; }; struct sockaddr_in{ short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8]; };

//valoare AF_INET //numarul de port //adresa IP //nefolosit

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Model de comunicatie client/server


Aplicatiile care folosesc socket respecta o serie de scenarii bine stabilite: este vorba despre ordinea de apelare a functiilor sistem in functie de tipul de socket si de rolul pe care il joaca aplicatia (client sau server) 4.1. Scenariul aplicatiei client in cazul socket stream Succesiunea apelurilor pentru client este dupa cum urmeaza: SERVER CLIENT

Apelurile sistem pentru aplicatia client Asa cum se poate observa si din figura, apelurile sistem se pot grupa in trei sectiuni: sectiunea de initializare, sectiunea de transfer de date si sectiunea de inchidere a conexiunii.

Secventa de initializare:
7

Retele de calculatoare - Introducere in programarea aplicatiilor de retea socket: cere nucleului sistemului sa creeze un socket prin care sa poata fi contactat; se fixeaza familia de adrese folosita si tipul de socket (in acest caz stream) ; connect: initiaza conexiunea intre aplicatia client si aplicatia server. La finalul acestui apel, fie exista o conexiune stabila intre client si server, fie se returneaza un cod de eroare. Apelurile sistem socket si connect trebuie efectuate in mod obligatoriu in aceasta ordine si o singura data. Daca se apeleaza connect pentru un socket deja conectat se va reurna o eroare.

Sectiunea de transfer de date:


send: trimite catre server un sir de octeti. Pentru a putea trimite date este necesara existenta unei conexiuni. Fara aceasta metoda send va intoarce un cod de eroare si nu va trimite nimic; recv: primeste un sir de octeti de la server. Pentru a putea primi date este necesara existenta unei conexiuni. Fara aceasta metoda recv va intoarce un cod de eroare si nu va primi nimic;

Apelurile sistem send si recv NU trebuie efectuate in mod obligatoriu in aceasta ordine. Ordinea prezentata in figura corespunde comunicatiei de tip cerere-raspuns. De asemenea aceste metode se pot apela de mai multe ori. Ordinea apelurilor depinde de modul in care sunt implementate aplicatiile server si client.

Sectiunea de inchidere a conexiunii:


close: cere nucleului sistemului sa inchida conexiunea existenta si sa elibereze orice resurse folosite; Apelul sistem close este optional, dar recomandat. Sistemul de operare se ocupa oricum de eliberarea tuturor resurselor atunci cand aplicatia este finalizata. In urma acestui apel conexiunea este incheiata iar orice apel de tip send sau receive va returna o eroare.

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Functia socket
Aceste apeluri sistem trebuie precedate de specificarea fisierului header: #include <sys/socket.h>

Apelurile soket si connect (apeluri socket de conexiune)


Prototipurile apelurilor sunt:
int socket (int familie, int tip, int protocol);

unde: familie: indica familia de adresa socket utilizata (AF_INET, AF_UNIX, etc); tip: indica tipul de socket folosit (SOCK_STREAM, SOCK_DGRAM); protocol: argument care are valoare 0 cu specificatia lasam sistemului alegerea protocolului" Apelul creaza un socket care va asigura conectivitatea programului local, fie el client sau server. Apelul intoarce un SOCKET ( intreg), notat in cele ce urmeaza cu sd si care reprezinta descriptorul de socket (folosit de apelurile care urmeaza ca si parametru). sd se mai numeste si socket(descriptor) de intalnire.

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Functia connect
int connect( int sd, struct sockaddr *saddr, int sz); //returneaza 0 la succes si -1 la eroare
Un proces client care foloseste socket stream solicita nucleului sa conecteze prin sd, serverul avand adresa socket saddr reprezentata pe sz octeti. Structura sockaddr este o strucura generica prin intermediul careia se pot seta informatiile de identificare ale unui socket. Pentru socketul din familia AF_INET informatiile necesare pentru identificare sunt adresa IP si portul. Se poate observa ca structura sockadrr_in contine aceste campuri. Problema care apare in acest moment este cum se poate transforma o structura de tip sockaddr intr-o structura de tip sockaddr_in. O solutie ar fi fost folosirea mostenirii. Mai exact, structura sockaddr?in sa mosteneasca stuctura sockaddr, dar acest lucru nu este posibil datorita faptului ca aceste structuri, ca si metodele despre care am discutat pana acum, sunt definite intr-un limbaj procedural (limbajul C) in care nu exista notiunea de mostenire. Ne ajuta totusi o alta particularitate a limbajului C, si anume un pointer se poat converti intr-un alt pointer folisnd un simplu cast". Astfel, putem crea o structura de tip sockaddr_in in care sa scriem datele de care avem nevoie, sa obtinem un pointer la aceasta structura si sa convertim acest pointer la un pointer de tip sockaddr pe care sa il oferim ca parametru metodei connect. Ex.:

SOCKET sd; struct sockaddr_in saddr; int sz = sizeof(saddr);

//apelam connect int result = connect(sd, (struct sockaddr*) &pointer_sockaddr, sz);


In acest fel metoda connect poate fi folosita si pentru alte familii de socket. Este suficient sa definim o noua structura asemanatoare cu sockaddr care sa contina detaliile de identificare pentru socketul din familia noastra.

10

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Completarea campurilor structurii sockaddr_in


O atentie deosebita trebuie acordata si structurii sockaddr_in. Asa cum am spus, in aceasta structura vom scrie adresa IP si portul folosite pentru identificarea socketului. Concret, membrul sin_port va primi valoarea portului iar membrul sin_addr adresa IP. Portul este un numar pe 2 octeti si trebuie specificat in formatul retea (Big Endian). Pe o masina Big Endian atribuirea se poate face direct deoarece datele au aceiasi reprezentare in memorie. In cazul in care matina foloseste Little Endian nu se poate face o atribuire directa ci trebuie facuta mai intai o conversie din Little Endian in Big Endian. Motivul pentru aceasta conversie este ca daca masina este Little Endian atunci octetul cel mai putin semnificativ este la adresa cea mai mica iar atunci cand se citeste valoarea in formatul retea acest octet devine cel mai semnificativ Ex1.: pentru portul 43962 (0xABBA in hexazecimal), Big Endian.

11

Retele de calculatoare - Introducere in programarea aplicatiilor de retea Exemplul de mai sus corspunde situatiei in care masina foloseste o reprezentare Big Endian si s-a facut o atribuire directa intre valoarea portului si membrul sin_port al structurii sockaddr_in:

saddr.sin_port = 43962; // OxABBA in hexazecimal


Sa presupunem ca structura saddr este pastrata in memorie incepand cu adresa 0x0028. Rezulta ca membrul sin_port se va afla in memorie incepand cu adresa 0x002A. Deoarece reprezentarea este Big Endian atunci octetul cel mai semnificativ se va afla la adresa cea mai mica. Atunci cand valoarea portului se va copia in sirul de octeti ce va fi trimis in retea octetii se copiaza in aceiasi ordine. Rezulta ca octetul cel mai semnificativ al portului se va afla inaintea octetului mai putin semnificativ (in cazul nistru MSB este octetul 12 iar LSB este octetul 13). Atunci cand se va interpreta valoarea in formatul retea se va citi mai intai MSB-ul si din octetul urmator LSB-ul. Rezulta valoarea 0xABBA (in hexazecimal), adica exact valoarea dorita. Ex2.: pentru portul 43962 (0xABBA in hexazecimal), Little Endian

Transformare Little Endian - format retea

12

Retele de calculatoare - Introducere in programarea aplicatiilor de retea Exemplul de mai sus corspunde situatiei in care masina foloseste o reprezentare Little Endian si s-a facut o atribuire directa intre valoarea portului si membrul sin_port al structurii sockaddr_in:

saddr.sin_port = 43962; // OxABBA in hexazecimal


Sa presupunem ca structura saddr este pastrata in memorie incepand cu adresa 0x0028. Rezulta ca membrul sin_port se va afla in memorie incepand cu adresa 0x002A. Deoarece reprezentarea este Little Endian atunci octetul cel mai putin semnificativ se va afla la adresa cea mai mica. Atunci cand valoarea portului se va copia in sirul de octeti ce va fi trimis in retea octetii se copiaza in aceiasi ordine. Rezulta ca octetul cel mai putin semnificativ al portului se va afla inaintea octetului mai semnificativ (in cazul nostra LSB este octetul 12 iar MSB este octetul 13). Atunci cand se va interpreta valoarea in formatul retea se va citi mai intai MSB-ul si din octetul urmator LSB-ul. Rezulta valoarea OxBAAB (in hexazecimal), o valoare diferita de cea dorita. Pentru a se obtine valoarea dorita este necesara inversare a celor doi octeti. Astfel, in loc sa facem o atribuire directa a valorii, vom folosii metoda htons. Aceasta metoda face o transformare a unui short din formatul masinii (in cazul nostru Little Endian) in formatul retea (identic cu Big Endian).

saddr.sin_port = htons(43962);

Transformare Little Endian - htons - format retea 13

Retele de calculatoare - Introducere in programarea aplicatiilor de retea In urma apelului htons numarul OxABBA este convertit la numarul OxBAAB si salvat in memorie in formatul Little Endian. Astfel octetul mai putin semnificativ (OxAB) va fi salvat la adresa mai mica iart octetul cel mai semnificativ (OxBA) la adresa mai mare. Atunci cand se copiaza valoarea in sirul de octeti transmis in retea se va pastra ordinea din memorie. Insa atunci cand valoarea este interpretata, se va incepe citirea cu primul octet si aacesta va fi interpretat ca MSB. Rezulta valoarea OxABBA, adica exact valoarea dorita. Aceiasi situatie apare si in cazul adresei IP. Adresa IP este un numar de 32 de biti (4 octeti). In cadrul structurii sockaddr_in adresa ip (membrul sin_addr) este reprezentata ca un union. Un union este asemanatopr cu o structura, diferenta fiind aceea ca in cazul unei structuri fiecare membru ocupa propria zona de memorie, in timp ce in cazul unui union toti membrii impart aceiasi zona de memorie (memoria alocata este dimensiunea celui mai mare membra). In cazul nostra acest union contine o structura cu 4 char-uri (dimensiune 4*1=4), o structura cu 2 short-uri (dimensiune 2*2=4) si un unsigned long (dimensiune 1*4=4). Dimensiunea union-ului este deci 4. Practic, acest union permite scrierea adresei IP in 3 feluri in aceiasi zona de memorie. La final, in memorie, trebuie sa apara la adresa cea mai mica cel mai semnificativ octet al adresei IP. Ex. Daca avem adresa IP 127.0.0.1 se pot folosi urmatoarele variante pentru a seta adresa IP: A:
saddr.sin_addr.s_un_b.s_b1 saddr.sin_addr.s_un_b.s_b2 saddr.sin_addr.s_un_b.s_b3 saddr.sin_addr.s_un_b.s_b4 = = = = 127; 0; 0; 1;

B:
saddr.sin_addr.s_un_w.s_w1 = htons(16128); saddr.sin_addr.s_un_w.s_w2 = htons(1);

C:
saddr.sin_addr.s_addr = inet_addr(127.0.0.1");

Din cele 3 variante ultima este cea mai simpla practic adresa IP se scrie sub forma unui sir de caractere iar metoda inet_addr se ocupa de conversia ei intr-un numar scris direct in formatul retea.

14

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Functia Bind
int bind ( SOCKET sd, struct sockaddr * saddr, int sz); //returneaza 0 la succes si -1 la eroare
Server-ul isi inregistreaza adresa socket proprie saddr, pentru socket-ul sd; lungimea adresei local este sz. In saddr se trece numarul de port la care poate fi contactat, tot in local in campul sin_addr.s_addr se trece adresa IP a serverului sau constanta INADDR_ANY. Structura sockaddr va fi inlocuita cu o structura sockaddr_in (vezi metoda connect pentru detalii). Pentru port se foloseste aceiasi valoare ca si pentru connect (trebuie sa fie acelasi port pentru a se putea stabili conexiunea)

15

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Funtia Listen
int listen (SOCKET sd, int lungcoada); //returneaza 0 la succes si -1 la eroare
unde: lungcoada: indica numarul maxim de conexiuni care sunt acceptate pe socket-ul sd in asteptare daca server-ul este ocupat (cele ce depasesc lungcoada vor fi refuzate); majoritatea sistemelor de operare nu admit mai mult de 5 clienti simultan.

16

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Functia Accept
#include <sys/types.h> #include <sys/socket.h> int accept(int sd, struct sockaddr *addr, socklen_t *addrlen);
Apelul pune server-ul sa astepte o conexiune socket stream sd pana cand un client reuseste un connect la el. La realizarea conexiunii, in argumentele addr si addrlen sunt intoarse adresa socket a clientului si lungimea pe care este reprezentata aceasta. Apelul intoarce trei valori: 1. un SOCKET pe care il notam fd. Acesta reprezinta un descriptor pe care server-ul il foloseste pe post de descriptor de fisier pentru schimbul de mesaje cu clientul; fd se mai numeste si socket (descriptor) de schimb. 2. adresa socket a procesului client in departe. Structura oferita ca parametru va fi umpluta automat cu datele clientului 3. lungimea acestei adrese in addrlen.

17

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Functiile send, recv (operatii de I/O prin socket)


Aceste apeluri sunt cele mai simple apeluri sistem prin intermediul carora se pot face schimburi de date intre client si server prin socket. Utilizarea lor presupune citarea fisierului header: <sys/socket.h> Sintaxele apelurilor sunt: int send (SOCKET sd, char *T, int n, int f); int recv (SOCKET sd, char *T, int n, int f); unde: sd: descriptorul de socket prin care se realizeaza comunicatia cu partenerul departat; acest intreg provine dintr-un apel socket, cu exceptia send si recv dintr-un server socket stream, cand acesta provine din apelul accept; f: flag care are de regula valoarea 0 lasand in seama sistemului fixarea unor flaguri

Apelul send expediaza prin sd, un numar de maxim n octeti pe care ii ia din memorie incepand cu adresa T. Responsabilitatea depunerii octetilor la aceasta adresa T revine programatorului. OBS. in cazul send (cazul socket stream) adresa IP si portul destinatarului se stabilesc la conexiune; intregul returnat de apel reprezinta numarul de octeti care s-a putut transmite , in caz contrar, se intoarce o valoare negativa.

Apelul recv receptioneaza prin sd un numar de maxim n octeti pe care ii depune in memorie incepand cu adresa T. Programatorul trebuie sa se asigure ca zona tampon are rezervati la adresa T cel putin n octeti. OBS. in cazul recv (cazul socket stream) adresa IP si portul destinatarului se stabilesc la conexiune; intregul returnat de capel reprezinta numarul de octeti care au fost receptionati; faptul ca s-a inchis conexiunea este semnalat prin intoarcerea valorii 0; in caz de eroare se intoarce o valoare negativa.

OBS. tratarea situatiilor in care nu s-au transmis sau receptionat exact cei n octeti solicitati cade exclusiv in sarcina programatorului. Daca prin socket se poate transmite fie si numai 1 octet, acesta se va transmite si operatia este considerata incheiata.

18

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Precizarea adresei IP internet


Pentru conversia acestora este necesar headerul
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h>

Rutinele inet_addr, inet_ntoa Prototipurile rutinelor sunt: unsigned long inet_addr (char *S); char *inet_ntoa (struct in_addr I);

in_addr_t inet_addr(const char *S); char *inet_ntoa(struct in_addr I); int inet_aton(const char *cp, struct in_addr *inp);

Rutina inet_addr transforma sirul de caractere S scris in conventie C si care contine o adresa IP (scrisa in notatia punctuala), intro adresa de 32 biti a carei valoare o intoarce. Rutina inet_ntoa face operatia inversa, adica transformas intregul lung I intr-un sir de caractere care contine adresa IP in notatia punctuala.

19

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Internet v6
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); int inet_pton(int af, const char *src, void *dst);

Return Value inet_ntop() returns the dst parameter on success, or NULL on failure (and errno is set). inet_pton() returns 1 on success. It returns -1 if there was an error (errno is set), or 0 if the input isn't a valid IP address

20

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Exemple
Exemplu Server
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <errno.h> #include <stdio.h> #include <string.h> #include <stdlib.h> /* portul folosit */ #define PORT 8000 /* codul de eroare returnat de anumite apeluri */ extern int errno;

int main () { struct sockaddr_in server; struct sockaddr_in from; char buffer[100]; int sd;

/* structurile folosite de server si client */ /* mesajul trimis de client */ /* descriptorul de socket */

/* cream un socket */ if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1) { perror ("Eroare la socket().\n");

21

Retele de calculatoare - Introducere in programarea aplicatiilor de retea


return errno; } /* pregatim structurile de date */ bzero (&server, sizeof (server)); bzero (&from, sizeof (from)); /* initializam structura folosita de server */ server.sin_family = AF_INET; server.sin_addr.s_addr = htonl (INADDR_ANY); server.sin_port = htons (PORT);

/* stabilirea familiei de socket-uri */ /* acceptam orice adresa */ /* utilizam un port utilizator */

/* atasam socketul */ if (bind (sd, (struct sockaddr *) &server, sizeof (struct sockaddr) ) == -1) { perror ("Eroare la bind().\n"); return errno; } /* punem serverul sa asculte daca vin clienti sa se conecteze */ if (listen (sd, 5) == -1) { perror ("Eroare la listen().\n"); return errno; } /* servim clientii unul cate unul */ while (1) { int client; int length = sizeof (from); printf ("Asteptam la portul %d...\n", PORT); fflush (stdout); /* acceptam un client (ne vom bloca pina la realizarea conexiunii) */

22

Retele de calculatoare - Introducere in programarea aplicatiilor de retea


client = accept (sd, (struct sockaddr *) &from, &length); /* eroare la acceptarea conexiunii de la un client */ if (client < 0) { perror ("Eroare la accept().\n"); continue; } /* am realizat conexiunea, asteptam mesajul... */ bzero (buffer, 100); printf ("Asteptam mesajul...\n"); fflush (stdout); /* citirea mesajului */ if ((nr = recv (client, buffer, 100, 0)) <= 0) { perror ("Eroare la read() de la client.\n"); close (client); /* inchidem conexiunea cu clientul */ continue; } printf ("Mesajul a fost receptionat...\nTrimitem mesajul inapoi..."); /* returnam mesajul clientului */ if (send (client, buffer, nr, 0) <= 0) { perror ("Eroare la write() catre client.\n"); continue; } /* am terminat cu acest client, inchidem conexiunea */ close (client); } }

23

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

24

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Exemplu Client
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h>

extern int errno; /* portul de conectare la server*/ int port = 8000; char * adresa = "127.0.0.1"; int main (int argc, char *argv[]) { int sd, nr; struct sockaddr_in server; char buffer[100];

/* descriptorul de socket */ /* structura folosita pentru conectare */ /* mesajul trimis */

if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1) { perror ("Eroare la socket().\n"); return errno; } /* initializam structura folosita pentru realizarea conexiunii cu serverul */ server.sin_family = AF_INET; /* familia socket-ului */

25

Retele de calculatoare - Introducere in programarea aplicatiilor de retea


server.sin_addr.s_addr = inet_addr(adresa); server.sin_port = htons (port); /* adresa IP a serverului */ /* portul de conectare */

/* ne conectam la server */ if (connect (sd, (struct sockaddr *) &server, sizeof (struct sockaddr)) == -1) { perror ("Eroare la connect().\n"); return errno; } /* citirea mesajului si trimiterea catre server */ bzero (buffer, 100); printf ("Introduceti mesajul: "); fflush (stdout); gets(buffer); nr = strlen(buffer); if (send (sd, buffer, nr, 0) <= 0) { perror ("Eroare la write() spre server.\n"); return errno; } /* citirea raspunsului dat de server (asteptam pana cind raspunde serverul)*/ if ( (nr = recv (sd, buffer, 100, 0)) < 0) { perror ("Eroare la read() de la server.\n"); return errno; } buffer[n] = 0; printf ("Mesajul primit este: %s\n", buffer); /* inchidem conexiunea*/ close (sd); }

26

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Cerinte laborator
Exercitiul 1.
Folosind functiile socket, connect, send, recv si close, scrieti o aplicatie client care trebuie sa indeplineasca urmatoarele cerinte: se conecteaza la aplicatia server pe portul 12346 si adresa IP 127.0.0.1 ii trimite serverului un text (maxim 256 de caractere) asteapta de la server un mesaj de maxim 256 de caractere inchide conexiunea cu serverul.

Exercitiul 2.
Folosind functiile socket, connect, send, recv si close, scrieti o aplicatie server care trebuie sa indeplineasca urmatoarele cerinte: se ataseaza la portul 8080 primeste mesaje de tip GET in format HTTP/1.1 raspunde in format HTTP cu un header raspuns livreaza fisierul cerut mentine conexiunea cu clientul.

Exercitiul 3.
Folosind functiile socket, connect, send, recv si close, scrieti o aplicatie client care trebuie sa indeplineasca urmatoarele cerinte: se conecteaza la aplicatia server pe portul 8080 si adresa IP 127.0.0.1 ii trimite serverului un mesajul GET in format HTTP/1.1 asteapta de la server un raspuns in format HTTP/1.1 parseaza si intelege raspunsul, asteapta si receptioneaza daca este cazul un fisier transmis de server afiseaza continutul fisrului pe ecran inchide conexiunea cu serverul.

27

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Bibliografie suplimentara

A. Tanenbaum, Reele de calculatoare (ediia a patra), Byblos, Tg.Mure, 2003 D. Comer, Internetworking With TCP/IP, vol.I: Principles, Protocols, and Architecture (2nd edition), Prentice Hall, New Jersey, 1991 D. Comer, D. Stevens, Internetworking with TCP/IP: vol.III: Client-Server Programming and Applications, Prentice Hall, New Jersey, 1993

K. Ross, D. Rubenstein, P2P Systems, Tutorial, 2004 S. Raab et al., Mobile IP Technology and Applications, Cisco Press, 2005 J. Doyle, CCIE Professional Development: Routing TCP/IP, Volume I, Macmillan Technical Publishing, 1998 K. Robbins, S. Robbins, UNIX Systems Programming: Communication, Concurrency, and Threads, Prentice Hall PTR, 2003 R. Stevens, TCP/IP Illustrated, Volume 1: The Protocols, Addison-Wesley Longman, 1994 R. Stevens, TCP/IP Illustrated, Volume 2: The Implementation, Addison-Wesley Longman, 1995 R. Stevens, TCP/IP Illustrated, Volume 3: TCP for Transaction, HTTP, NNTP, and the UNIX Domain Protocols, Addison-Wesley Longman, 1996

R. Stevens, B. Fenner, A. Rudoff, UNIX Network Programming Volume 1, Third Edition: The Sockets Networking API, Addison Wesley, 2003

J. Martin, J. Leben, TCP/IP Networking, Prentice Hall, New Jersey, 1994 A. Abbas, Grid Computing: A Practical Guide to Technology and Applications, Charles River Media, 2004 M. Ben-Ari, Principles of Concurrent Programming, Prentice Hall International, 1982 S. Dixit, R. Prasad (eds.), Wireless IP and Building the Mobile Internet, Artech House, 2003 A. Grama et al., Introduction to Parallel Computing (2nd edition), Addison Wesley, 2003

28

Retele de calculatoare - Introducere in programarea aplicatiilor de retea


E. Hall, Internet Core Protocols: The Definitive Guide, O'Reilly, 2000 G. Held, Ethernet Networks (4th edition), John Wiley & Sons, 2003 A. Jones, J. Ohlund, Network Programming for Microsoft Windows, Microsoft Press, 1999 A. Kshemkalyani, M. Singhal, Distributed Computing. Principles, Algorithms, and Systems, Cambridge University Press, 2008 C. McNab, Network Security Assessment, O'Reilly, 2004 D. Naik, Internet. Standards and Protocols, Microsoft Press, 1998 K. Robbins, S. Robbins, Unix Systems Programming: Communication, Concurrency, and Threads, Prentice Hall PTR, New Jersey, 2003 M. Rochkind, Advanced UNIX Programming, Prentice Hall, New Jersey, 1985 N. Shi (ed.), Mobile Commerce Applications, Idea Group Publishing, 2004 R. Stevens, Advanced UNIX Programming in the UNIX Environments, Addison-Wesley, Reading MA, 1992 A. Wells, Grid Application Systems Design, CRC Press, 2008

29

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Rezumat

Ce ste un socket? Tipuri de socket Adrese socket Model de comunicatie client server Functii Completarea structurii sockaddr_in Exemple Cerinte pt laborator Bibiliografie

Intrebari ?

30

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Introducere in programarea aplicatiilor de retea


Ce ste un socket? Tipuri de socket Adrese socket Model de comunicatie client server Functii Completarea structurii sockaddr_in Exemple Cerinte pt laborator Bibiliografie

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Ce este socket?
Un socket este un capat de comunicatie" sau punct final de comunicatie" care poate fi numit si adresat intr-o retea, fiind locul unde programul de aplicatie se intalneste cu furnizorul mediului de transport. Un soket este: - d.p.d.v. al unui program de aplicatie: o resursa alocata de sistemul de operare; - d.p.d.v. al sistemului de operare: o structura de date intretinuta de catre nucleul sistemului de operare; aceasta structura este referita in aplicatii printr-un intreg numit descriptor de socket. Relativ la un socket se pot face una dintre urmatoarele doua analogii: socket-cutie postala: - proprietarul (aplicatia) depune mesajele de trimis si isi ridica corespondenta primita; - facorul postal (furnizorul mediului de transport) deschide cutia de cateva ori pe zi, ridica corespondanta de expediat si depune corespondenta sosita la adresa respectiva; socket-aparat telephonic - proprietarul formeaza un numar si dupa stabilirea legaturii incepe sa discute cu persoana de la celalalt capat al firului; - aparatul si intreaga retea telefonica asigura stabilitatea legaturii pana la incheierea convorbirii .

OBS. doua aplicatii pot comunica intre ele prin socket doar dupa ce fiecareia dintre ele sistemul de operare i-a alocat un socket (exista un numar de descriptori de socket rezervati pentru aplicatiile de sistem, restul descriptorilor fiind disponibili pentru utilizatori).

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Tipuri de socket
Se disting doua tipuri de socket: socket stream si socket datagram. Comunicarea este posibila, doar daca la ambele capete este utilizat acelasi tip de socket.

Socket stream
Interfata socket stream defineste un serviciu orientat conexiune, datele fiind transmise fara erori si fara duplicari, Datele sunt receptionate in aceeasi ordine in care au fost transmise, avandu-se grija insa ca fluxul de date sa nu depaseasca o valoare maxima de octeti la un moment dat. Asupra datelor ce sunt transmise nu se impune nici un fel de limitare, ele fiind considerate simple siruri de octeti. Transportul este realizat folosind protocolul TCP. Fiind un serviciu orientat conexiune, este potrivita analogia facuta anterior cu aparatul telefonic. Ca exemplu de utilizare pentru socket stream poate fi dat unul dintre serviciile nivelului aplicatie, si anume FTP (File Transfer Protocol). Deci, socket stream asigura o conexiune sigura, lucru care presupune insa reducerea performantei datorita efortului de calcul necesar mentinerii conexiunii si verificarilor de corectitudine. La nivel utilizator aceasta reducere a performantei nu este insa sesizata . Se recomanda utilizarea socket-ului stream in cazurile in care cantitatile de date ce sunt transmise sunt mari, iar comunicatia are loc in retele WAN.

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Socket datagram
Interfata socket datagram defineste un serviciu fara conexiune in care datagramele sunt transmise ca si pachete separate. Serviciul nu asigura garantii cu privire la receptionarea datelor, acestea putand fi pierdute ori duplicate, ordinea de sosire la destinatie putand fi de asemenea diferita de cea de transmitere. Marimea unei datagrame este limitata la numarul de octeti care pot fi transmit intr-o singura tranzactie. Transportul este realizat folosind protocolul UDP, iar analogia potrivita este cea cu cutia postala. Comunicarea prin socket-ul datagram este nesigura deoarece pachetele pot fi ignorate, alterate sau duplicate in timpul transmisiei, utilizarea lui fiind recomandata in cazurile in care aplicatia implementeaza un mecanism propriu de corectitudine sau daca aplicatia nu este sensibila la transmisii eronate. Se castiga insa viteza la prelucrare raportat la socket-ul stream. Se recomanda folosirea acestui tip de socket pentru transmiterea unei cantitati mici de date in cadrul retelelor LAN.

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Adrese socket
Pentru a fi independent de platforma, socket permite utilizarea mai multor familii de adrese, o astfel de familie definind un stil de adresare. Toate host-urile din aceeasi familie de adrese inteleg si folosesc aceeasi schema pentru adresarea capetelor socket-ului. Familiile de adrese sunt identificate printr-un numar intreg, numele acestora incepand cu AF (Adress Family): AF-INET: defineste adresarea in domeniul Internet, fiind si cea mai importanta familie; AF-UNIX: reprezinta sistemul local (protocoale interne UNIX); AF-NS: pentru protocoale Xerox NS;

Generic, stuctura unei adrese este urmatoarea:


struct sockaddr { u_short sa_family; char sa_data[14]; } //valoare AF_xxx //dependent de familie

unde, sa_family: indica familia de adrese folosita; sa_data: interpretat in functie de familie. OBS. fiecare familie de adrese are definita structura proprie de adresa care se suprapune peste cea generica in momentul transmiterii ei catre nucleu.

Retele de calculatoare - Introducere in programarea aplicatiilor de retea Adresele din familia AF_INET sunt de tip struct sockaddr_in si sunt definite in <arpa/inet.h> astfel:
struct in_addr { union { struct{ unsigned char s_b1, s_b2, s_b3, s_b4; } S_un_b; struct { unsigned short s_w1, s_w2; } S_un_w; unsigned long s_addr; } S_un; }; struct sockaddr_in{ short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8]; };

//valoare AF_INET //numarul de port //adresa IP //nefolosit

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Model de comunicatie client/server


Aplicatiile care folosesc socket respecta o serie de scenarii bine stabilite: este vorba despre ordinea de apelare a functiilor sistem in functie de tipul de socket si de rolul pe care il joaca aplicatia (client sau server) 4.1. Scenariul aplicatiei client in cazul socket stream Succesiunea apelurilor pentru client este dupa cum urmeaza: SERVER CLIENT

Apelurile sistem pentru aplicatia client Asa cum se poate observa si din figura, apelurile sistem se pot grupa in trei sectiuni: sectiunea de initializare, sectiunea de transfer de date si sectiunea de inchidere a conexiunii.

Secventa de initializare:
7

Retele de calculatoare - Introducere in programarea aplicatiilor de retea socket: cere nucleului sistemului sa creeze un socket prin care sa poata fi contactat; se fixeaza familia de adrese folosita si tipul de socket (in acest caz stream) ; connect: initiaza conexiunea intre aplicatia client si aplicatia server. La finalul acestui apel, fie exista o conexiune stabila intre client si server, fie se returneaza un cod de eroare. Apelurile sistem socket si connect trebuie efectuate in mod obligatoriu in aceasta ordine si o singura data. Daca se apeleaza connect pentru un socket deja conectat se va reurna o eroare.

Sectiunea de transfer de date:


send: trimite catre server un sir de octeti. Pentru a putea trimite date este necesara existenta unei conexiuni. Fara aceasta metoda send va intoarce un cod de eroare si nu va trimite nimic; recv: primeste un sir de octeti de la server. Pentru a putea primi date este necesara existenta unei conexiuni. Fara aceasta metoda recv va intoarce un cod de eroare si nu va primi nimic;

Apelurile sistem send si recv NU trebuie efectuate in mod obligatoriu in aceasta ordine. Ordinea prezentata in figura corespunde comunicatiei de tip cerere-raspuns. De asemenea aceste metode se pot apela de mai multe ori. Ordinea apelurilor depinde de modul in care sunt implementate aplicatiile server si client.

Sectiunea de inchidere a conexiunii:


close: cere nucleului sistemului sa inchida conexiunea existenta si sa elibereze orice resurse folosite; Apelul sistem close este optional, dar recomandat. Sistemul de operare se ocupa oricum de eliberarea tuturor resurselor atunci cand aplicatia este finalizata. In urma acestui apel conexiunea este incheiata iar orice apel de tip send sau receive va returna o eroare.

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Functia socket
Aceste apeluri sistem trebuie precedate de specificarea fisierului header: #include <sys/socket.h>

Apelurile soket si connect (apeluri socket de conexiune)


Prototipurile apelurilor sunt:
int socket (int familie, int tip, int protocol);

unde: familie: indica familia de adresa socket utilizata (AF_INET, AF_UNIX, etc); tip: indica tipul de socket folosit (SOCK_STREAM, SOCK_DGRAM); protocol: argument care are valoare 0 cu specificatia lasam sistemului alegerea protocolului" Apelul creaza un socket care va asigura conectivitatea programului local, fie el client sau server. Apelul intoarce un SOCKET ( intreg), notat in cele ce urmeaza cu sd si care reprezinta descriptorul de socket (folosit de apelurile care urmeaza ca si parametru). sd se mai numeste si socket(descriptor) de intalnire.

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Functia connect
int connect( int sd, struct sockaddr *saddr, int sz); //returneaza 0 la succes si -1 la eroare
Un proces client care foloseste socket stream solicita nucleului sa conecteze prin sd, serverul avand adresa socket saddr reprezentata pe sz octeti. Structura sockaddr este o strucura generica prin intermediul careia se pot seta informatiile de identificare ale unui socket. Pentru socketul din familia AF_INET informatiile necesare pentru identificare sunt adresa IP si portul. Se poate observa ca structura sockadrr_in contine aceste campuri. Problema care apare in acest moment este cum se poate transforma o structura de tip sockaddr intr-o structura de tip sockaddr_in. O solutie ar fi fost folosirea mostenirii. Mai exact, structura sockaddr?in sa mosteneasca stuctura sockaddr, dar acest lucru nu este posibil datorita faptului ca aceste structuri, ca si metodele despre care am discutat pana acum, sunt definite intr-un limbaj procedural (limbajul C) in care nu exista notiunea de mostenire. Ne ajuta totusi o alta particularitate a limbajului C, si anume un pointer se poat converti intr-un alt pointer folisnd un simplu cast". Astfel, putem crea o structura de tip sockaddr_in in care sa scriem datele de care avem nevoie, sa obtinem un pointer la aceasta structura si sa convertim acest pointer la un pointer de tip sockaddr pe care sa il oferim ca parametru metodei connect. Ex.:

SOCKET sd; struct sockaddr_in saddr; int sz = sizeof(saddr);

//apelam connect int result = connect(sd, (struct sockaddr*) &pointer_sockaddr, sz);


In acest fel metoda connect poate fi folosita si pentru alte familii de socket. Este suficient sa definim o noua structura asemanatoare cu sockaddr care sa contina detaliile de identificare pentru socketul din familia noastra.

10

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Completarea campurilor structurii sockaddr_in


O atentie deosebita trebuie acordata si structurii sockaddr_in. Asa cum am spus, in aceasta structura vom scrie adresa IP si portul folosite pentru identificarea socketului. Concret, membrul sin_port va primi valoarea portului iar membrul sin_addr adresa IP. Portul este un numar pe 2 octeti si trebuie specificat in formatul retea (Big Endian). Pe o masina Big Endian atribuirea se poate face direct deoarece datele au aceiasi reprezentare in memorie. In cazul in care matina foloseste Little Endian nu se poate face o atribuire directa ci trebuie facuta mai intai o conversie din Little Endian in Big Endian. Motivul pentru aceasta conversie este ca daca masina este Little Endian atunci octetul cel mai putin semnificativ este la adresa cea mai mica iar atunci cand se citeste valoarea in formatul retea acest octet devine cel mai semnificativ Ex1.: pentru portul 43962 (0xABBA in hexazecimal), Big Endian.

11

Retele de calculatoare - Introducere in programarea aplicatiilor de retea Exemplul de mai sus corspunde situatiei in care masina foloseste o reprezentare Big Endian si s-a facut o atribuire directa intre valoarea portului si membrul sin_port al structurii sockaddr_in:

saddr.sin_port = 43962; // OxABBA in hexazecimal


Sa presupunem ca structura saddr este pastrata in memorie incepand cu adresa 0x0028. Rezulta ca membrul sin_port se va afla in memorie incepand cu adresa 0x002A. Deoarece reprezentarea este Big Endian atunci octetul cel mai semnificativ se va afla la adresa cea mai mica. Atunci cand valoarea portului se va copia in sirul de octeti ce va fi trimis in retea octetii se copiaza in aceiasi ordine. Rezulta ca octetul cel mai semnificativ al portului se va afla inaintea octetului mai putin semnificativ (in cazul nistru MSB este octetul 12 iar LSB este octetul 13). Atunci cand se va interpreta valoarea in formatul retea se va citi mai intai MSB-ul si din octetul urmator LSB-ul. Rezulta valoarea 0xABBA (in hexazecimal), adica exact valoarea dorita. Ex2.: pentru portul 43962 (0xABBA in hexazecimal), Little Endian

Transformare Little Endian - format retea

12

Retele de calculatoare - Introducere in programarea aplicatiilor de retea Exemplul de mai sus corspunde situatiei in care masina foloseste o reprezentare Little Endian si s-a facut o atribuire directa intre valoarea portului si membrul sin_port al structurii sockaddr_in:

saddr.sin_port = 43962; // OxABBA in hexazecimal


Sa presupunem ca structura saddr este pastrata in memorie incepand cu adresa 0x0028. Rezulta ca membrul sin_port se va afla in memorie incepand cu adresa 0x002A. Deoarece reprezentarea este Little Endian atunci octetul cel mai putin semnificativ se va afla la adresa cea mai mica. Atunci cand valoarea portului se va copia in sirul de octeti ce va fi trimis in retea octetii se copiaza in aceiasi ordine. Rezulta ca octetul cel mai putin semnificativ al portului se va afla inaintea octetului mai semnificativ (in cazul nostra LSB este octetul 12 iar MSB este octetul 13). Atunci cand se va interpreta valoarea in formatul retea se va citi mai intai MSB-ul si din octetul urmator LSB-ul. Rezulta valoarea OxBAAB (in hexazecimal), o valoare diferita de cea dorita. Pentru a se obtine valoarea dorita este necesara inversare a celor doi octeti. Astfel, in loc sa facem o atribuire directa a valorii, vom folosii metoda htons. Aceasta metoda face o transformare a unui short din formatul masinii (in cazul nostru Little Endian) in formatul retea (identic cu Big Endian).

saddr.sin_port = htons(43962);

Transformare Little Endian - htons - format retea 13

Retele de calculatoare - Introducere in programarea aplicatiilor de retea In urma apelului htons numarul OxABBA este convertit la numarul OxBAAB si salvat in memorie in formatul Little Endian. Astfel octetul mai putin semnificativ (OxAB) va fi salvat la adresa mai mica iart octetul cel mai semnificativ (OxBA) la adresa mai mare. Atunci cand se copiaza valoarea in sirul de octeti transmis in retea se va pastra ordinea din memorie. Insa atunci cand valoarea este interpretata, se va incepe citirea cu primul octet si aacesta va fi interpretat ca MSB. Rezulta valoarea OxABBA, adica exact valoarea dorita. Aceiasi situatie apare si in cazul adresei IP. Adresa IP este un numar de 32 de biti (4 octeti). In cadrul structurii sockaddr_in adresa ip (membrul sin_addr) este reprezentata ca un union. Un union este asemanatopr cu o structura, diferenta fiind aceea ca in cazul unei structuri fiecare membru ocupa propria zona de memorie, in timp ce in cazul unui union toti membrii impart aceiasi zona de memorie (memoria alocata este dimensiunea celui mai mare membra). In cazul nostra acest union contine o structura cu 4 char-uri (dimensiune 4*1=4), o structura cu 2 short-uri (dimensiune 2*2=4) si un unsigned long (dimensiune 1*4=4). Dimensiunea union-ului este deci 4. Practic, acest union permite scrierea adresei IP in 3 feluri in aceiasi zona de memorie. La final, in memorie, trebuie sa apara la adresa cea mai mica cel mai semnificativ octet al adresei IP. Ex. Daca avem adresa IP 127.0.0.1 se pot folosi urmatoarele variante pentru a seta adresa IP: A:
saddr.sin_addr.s_un_b.s_b1 saddr.sin_addr.s_un_b.s_b2 saddr.sin_addr.s_un_b.s_b3 saddr.sin_addr.s_un_b.s_b4 = = = = 127; 0; 0; 1;

B:
saddr.sin_addr.s_un_w.s_w1 = htons(16128); saddr.sin_addr.s_un_w.s_w2 = htons(1);

C:
saddr.sin_addr.s_addr = inet_addr(127.0.0.1");

Din cele 3 variante ultima este cea mai simpla practic adresa IP se scrie sub forma unui sir de caractere iar metoda inet_addr se ocupa de conversia ei intr-un numar scris direct in formatul retea.

14

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Functia Bind
int bind ( SOCKET sd, struct sockaddr * saddr, int sz); //returneaza 0 la succes si -1 la eroare
Server-ul isi inregistreaza adresa socket proprie saddr, pentru socket-ul sd; lungimea adresei local este sz. In saddr se trece numarul de port la care poate fi contactat, tot in local in campul sin_addr.s_addr se trece adresa IP a serverului sau constanta INADDR_ANY. Structura sockaddr va fi inlocuita cu o structura sockaddr_in (vezi metoda connect pentru detalii). Pentru port se foloseste aceiasi valoare ca si pentru connect (trebuie sa fie acelasi port pentru a se putea stabili conexiunea)

15

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Funtia Listen
int listen (SOCKET sd, int lungcoada); //returneaza 0 la succes si -1 la eroare
unde: lungcoada: indica numarul maxim de conexiuni care sunt acceptate pe socket-ul sd in asteptare daca server-ul este ocupat (cele ce depasesc lungcoada vor fi refuzate); majoritatea sistemelor de operare nu admit mai mult de 5 clienti simultan.

16

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Functia Accept
#include <sys/types.h> #include <sys/socket.h> int accept(int sd, struct sockaddr *addr, socklen_t *addrlen);
Apelul pune server-ul sa astepte o conexiune socket stream sd pana cand un client reuseste un connect la el. La realizarea conexiunii, in argumentele addr si addrlen sunt intoarse adresa socket a clientului si lungimea pe care este reprezentata aceasta. Apelul intoarce trei valori: 1. un SOCKET pe care il notam fd. Acesta reprezinta un descriptor pe care server-ul il foloseste pe post de descriptor de fisier pentru schimbul de mesaje cu clientul; fd se mai numeste si socket (descriptor) de schimb. 2. adresa socket a procesului client in departe. Structura oferita ca parametru va fi umpluta automat cu datele clientului 3. lungimea acestei adrese in addrlen.

17

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Functiile send, recv (operatii de I/O prin socket)


Aceste apeluri sunt cele mai simple apeluri sistem prin intermediul carora se pot face schimburi de date intre client si server prin socket. Utilizarea lor presupune citarea fisierului header: <sys/socket.h> Sintaxele apelurilor sunt: int send (SOCKET sd, char *T, int n, int f); int recv (SOCKET sd, char *T, int n, int f); unde: sd: descriptorul de socket prin care se realizeaza comunicatia cu partenerul departat; acest intreg provine dintr-un apel socket, cu exceptia send si recv dintr-un server socket stream, cand acesta provine din apelul accept; f: flag care are de regula valoarea 0 lasand in seama sistemului fixarea unor flaguri

Apelul send expediaza prin sd, un numar de maxim n octeti pe care ii ia din memorie incepand cu adresa T. Responsabilitatea depunerii octetilor la aceasta adresa T revine programatorului. OBS. in cazul send (cazul socket stream) adresa IP si portul destinatarului se stabilesc la conexiune; intregul returnat de apel reprezinta numarul de octeti care s-a putut transmite , in caz contrar, se intoarce o valoare negativa.

Apelul recv receptioneaza prin sd un numar de maxim n octeti pe care ii depune in memorie incepand cu adresa T. Programatorul trebuie sa se asigure ca zona tampon are rezervati la adresa T cel putin n octeti. OBS. in cazul recv (cazul socket stream) adresa IP si portul destinatarului se stabilesc la conexiune; intregul returnat de capel reprezinta numarul de octeti care au fost receptionati; faptul ca s-a inchis conexiunea este semnalat prin intoarcerea valorii 0; in caz de eroare se intoarce o valoare negativa.

OBS. tratarea situatiilor in care nu s-au transmis sau receptionat exact cei n octeti solicitati cade exclusiv in sarcina programatorului. Daca prin socket se poate transmite fie si numai 1 octet, acesta se va transmite si operatia este considerata incheiata.

18

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Precizarea adresei IP internet


Pentru conversia acestora este necesar headerul
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h>

Rutinele inet_addr, inet_ntoa Prototipurile rutinelor sunt: unsigned long inet_addr (char *S); char *inet_ntoa (struct in_addr I);

in_addr_t inet_addr(const char *S); char *inet_ntoa(struct in_addr I); int inet_aton(const char *cp, struct in_addr *inp);

Rutina inet_addr transforma sirul de caractere S scris in conventie C si care contine o adresa IP (scrisa in notatia punctuala), intro adresa de 32 biti a carei valoare o intoarce. Rutina inet_ntoa face operatia inversa, adica transformas intregul lung I intr-un sir de caractere care contine adresa IP in notatia punctuala.

19

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Internet v6
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); int inet_pton(int af, const char *src, void *dst);

Return Value inet_ntop() returns the dst parameter on success, or NULL on failure (and errno is set). inet_pton() returns 1 on success. It returns -1 if there was an error (errno is set), or 0 if the input isn't a valid IP address

20

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Exemple
Exemplu Server
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <errno.h> #include <stdio.h> #include <string.h> #include <stdlib.h> /* portul folosit */ #define PORT 8000 /* codul de eroare returnat de anumite apeluri */ extern int errno;

int main () { struct sockaddr_in server; struct sockaddr_in from; char buffer[100]; int sd;

/* structurile folosite de server si client */ /* mesajul trimis de client */ /* descriptorul de socket */

/* cream un socket */ if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1) { perror ("Eroare la socket().\n");

21

Retele de calculatoare - Introducere in programarea aplicatiilor de retea


return errno; } /* pregatim structurile de date */ bzero (&server, sizeof (server)); bzero (&from, sizeof (from)); /* initializam structura folosita de server */ server.sin_family = AF_INET; server.sin_addr.s_addr = htonl (INADDR_ANY); server.sin_port = htons (PORT);

/* stabilirea familiei de socket-uri */ /* acceptam orice adresa */ /* utilizam un port utilizator */

/* atasam socketul */ if (bind (sd, (struct sockaddr *) &server, sizeof (struct sockaddr) ) == -1) { perror ("Eroare la bind().\n"); return errno; } /* punem serverul sa asculte daca vin clienti sa se conecteze */ if (listen (sd, 5) == -1) { perror ("Eroare la listen().\n"); return errno; } /* servim clientii unul cate unul */ while (1) { int client; int length = sizeof (from); printf ("Asteptam la portul %d...\n", PORT); fflush (stdout); /* acceptam un client (ne vom bloca pina la realizarea conexiunii) */

22

Retele de calculatoare - Introducere in programarea aplicatiilor de retea


client = accept (sd, (struct sockaddr *) &from, &length); /* eroare la acceptarea conexiunii de la un client */ if (client < 0) { perror ("Eroare la accept().\n"); continue; } /* am realizat conexiunea, asteptam mesajul... */ bzero (buffer, 100); printf ("Asteptam mesajul...\n"); fflush (stdout); /* citirea mesajului */ if ((nr = recv (client, buffer, 100, 0)) <= 0) { perror ("Eroare la read() de la client.\n"); close (client); /* inchidem conexiunea cu clientul */ continue; } printf ("Mesajul a fost receptionat...\nTrimitem mesajul inapoi..."); /* returnam mesajul clientului */ if (send (client, buffer, nr, 0) <= 0) { perror ("Eroare la write() catre client.\n"); continue; } /* am terminat cu acest client, inchidem conexiunea */ close (client); } }

23

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

24

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Exemplu Client
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h>

extern int errno; /* portul de conectare la server*/ int port = 8000; char * adresa = "127.0.0.1"; int main (int argc, char *argv[]) { int sd, nr; struct sockaddr_in server; char buffer[100];

/* descriptorul de socket */ /* structura folosita pentru conectare */ /* mesajul trimis */

if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1) { perror ("Eroare la socket().\n"); return errno; } /* initializam structura folosita pentru realizarea conexiunii cu serverul */ server.sin_family = AF_INET; /* familia socket-ului */

25

Retele de calculatoare - Introducere in programarea aplicatiilor de retea


server.sin_addr.s_addr = inet_addr(adresa); server.sin_port = htons (port); /* adresa IP a serverului */ /* portul de conectare */

/* ne conectam la server */ if (connect (sd, (struct sockaddr *) &server, sizeof (struct sockaddr)) == -1) { perror ("Eroare la connect().\n"); return errno; } /* citirea mesajului si trimiterea catre server */ bzero (buffer, 100); printf ("Introduceti mesajul: "); fflush (stdout); gets(buffer); nr = strlen(buffer); if (send (sd, buffer, nr, 0) <= 0) { perror ("Eroare la write() spre server.\n"); return errno; } /* citirea raspunsului dat de server (asteptam pana cind raspunde serverul)*/ if ( (nr = recv (sd, buffer, 100, 0)) < 0) { perror ("Eroare la read() de la server.\n"); return errno; } buffer[n] = 0; printf ("Mesajul primit este: %s\n", buffer); /* inchidem conexiunea*/ close (sd); }

26

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Cerinte laborator
Exercitiul 1.
Folosind functiile socket, connect, send, recv si close, scrieti o aplicatie client care trebuie sa indeplineasca urmatoarele cerinte: se conecteaza la aplicatia server pe portul 12346 si adresa IP 127.0.0.1 ii trimite serverului un text (maxim 256 de caractere) asteapta de la server un mesaj de maxim 256 de caractere inchide conexiunea cu serverul.

Exercitiul 2.
Folosind functiile socket, connect, send, recv si close, scrieti o aplicatie server care trebuie sa indeplineasca urmatoarele cerinte: se ataseaza la portul 8080 primeste mesaje de tip GET in format HTTP/1.1 raspunde in format HTTP cu un header raspuns livreaza fisierul cerut mentine conexiunea cu clientul.

Exercitiul 3.
Folosind functiile socket, connect, send, recv si close, scrieti o aplicatie client care trebuie sa indeplineasca urmatoarele cerinte: se conecteaza la aplicatia server pe portul 8080 si adresa IP 127.0.0.1 ii trimite serverului un mesajul GET in format HTTP/1.1 asteapta de la server un raspuns in format HTTP/1.1 parseaza si intelege raspunsul, asteapta si receptioneaza daca este cazul un fisier transmis de server afiseaza continutul fisrului pe ecran inchide conexiunea cu serverul.

27

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Bibliografie suplimentara

A. Tanenbaum, Reele de calculatoare (ediia a patra), Byblos, Tg.Mure, 2003 D. Comer, Internetworking With TCP/IP, vol.I: Principles, Protocols, and Architecture (2nd edition), Prentice Hall, New Jersey, 1991 D. Comer, D. Stevens, Internetworking with TCP/IP: vol.III: Client-Server Programming and Applications, Prentice Hall, New Jersey, 1993

K. Ross, D. Rubenstein, P2P Systems, Tutorial, 2004 S. Raab et al., Mobile IP Technology and Applications, Cisco Press, 2005 J. Doyle, CCIE Professional Development: Routing TCP/IP, Volume I, Macmillan Technical Publishing, 1998 K. Robbins, S. Robbins, UNIX Systems Programming: Communication, Concurrency, and Threads, Prentice Hall PTR, 2003 R. Stevens, TCP/IP Illustrated, Volume 1: The Protocols, Addison-Wesley Longman, 1994 R. Stevens, TCP/IP Illustrated, Volume 2: The Implementation, Addison-Wesley Longman, 1995 R. Stevens, TCP/IP Illustrated, Volume 3: TCP for Transaction, HTTP, NNTP, and the UNIX Domain Protocols, Addison-Wesley Longman, 1996

R. Stevens, B. Fenner, A. Rudoff, UNIX Network Programming Volume 1, Third Edition: The Sockets Networking API, Addison Wesley, 2003

J. Martin, J. Leben, TCP/IP Networking, Prentice Hall, New Jersey, 1994 A. Abbas, Grid Computing: A Practical Guide to Technology and Applications, Charles River Media, 2004 M. Ben-Ari, Principles of Concurrent Programming, Prentice Hall International, 1982 S. Dixit, R. Prasad (eds.), Wireless IP and Building the Mobile Internet, Artech House, 2003 A. Grama et al., Introduction to Parallel Computing (2nd edition), Addison Wesley, 2003

28

Retele de calculatoare - Introducere in programarea aplicatiilor de retea


E. Hall, Internet Core Protocols: The Definitive Guide, O'Reilly, 2000 G. Held, Ethernet Networks (4th edition), John Wiley & Sons, 2003 A. Jones, J. Ohlund, Network Programming for Microsoft Windows, Microsoft Press, 1999 A. Kshemkalyani, M. Singhal, Distributed Computing. Principles, Algorithms, and Systems, Cambridge University Press, 2008 C. McNab, Network Security Assessment, O'Reilly, 2004 D. Naik, Internet. Standards and Protocols, Microsoft Press, 1998 K. Robbins, S. Robbins, Unix Systems Programming: Communication, Concurrency, and Threads, Prentice Hall PTR, New Jersey, 2003 M. Rochkind, Advanced UNIX Programming, Prentice Hall, New Jersey, 1985 N. Shi (ed.), Mobile Commerce Applications, Idea Group Publishing, 2004 R. Stevens, Advanced UNIX Programming in the UNIX Environments, Addison-Wesley, Reading MA, 1992 A. Wells, Grid Application Systems Design, CRC Press, 2008

29

Retele de calculatoare - Introducere in programarea aplicatiilor de retea

Rezumat

Ce ste un socket? Tipuri de socket Adrese socket Model de comunicatie client server Functii Completarea structurii sockaddr_in Exemple Cerinte pt laborator Bibiliografie

Intrebari ?

30

Retele de calculatoare

Sistemul numelor de domenii

Sistemul numelor de domenii


Domain Name System (DNS)

1. Caracterizare 2. Organizare
3. Configurare

4. Comenzi, Primitive
1

DNS

Adresele IP (ex. 83.122.213.121) sunt dificil de


memorat. Se utilizeaza un sistem al numelor de domenii pentru a translata adresele IP in nume de domenii si invers. Numele de domenii se organizeaza in ierarhii RFC 1034, 1035

Retele de calculatoare

Sistemul numelor de domenii

Domenii Primare (Top Level Domains TLD)


Infrastructura: .arpa ARPA (Address and Routing Parameter Area) State (ccTLD) - coduri de state: .ro, .fr, .jp, ... Generice: .biz, .com, .info, .name, .net, .org, .pro Sponsorizate: .aero, .edu, .gov, .int, .jobs, .mil, .tel Rezervate: .example, .invalid, .localhost, .test Pseudo-domenii: .bitnet, .local, .root, .uucp etc.

Sub-domenii:

Lungime maxima 63 de caractere Nume de calculatoare (gazde)

Un nume de domeniu Subarbore al arborelui de domenii Nu trebuie sa respecte topologia retelei fizice

Retele de calculatoare

Sistemul numelor de domenii

Exemplu

Figura. O portiune a spatiului numelor de domenii in Internet.


5

Initial: /etc/hosts - perechi (nume, IP) Probleme de scalabilitate Servere de nume (name servers) Teoretic, un singur server de nume poate contine intreaga baza de date DNS si poate raspunde tuturor cererilor Problema: incarcarea

Retele de calculatoare

Sistemul numelor de domenii

Solutie Spatiul de nume DNS se divide in zone nesuprapuse cu servere de nume (name servers).

DNS consta dintr-o schema ierarhica de nume de domenii si a unui sistem de baze de date distribuite pentru implementarea acestei scheme de nume.

Reguli de alocare a numelor de domenii


Fiecare domeniu controleaza cum sunt alocate subdomeniile sale. Pentru a crea un nou subdomeniu, se cere permisiunea domeniului in care va fi inclus (un domeniu de la un anumit nivel va avea o autoritate). Atribuirea de nume de domenii respecta granitele organizationale, nu pe cele ale retelelor. Un anumit nivel din ierarhia de niveluri poate fi controlat de mai multe servere.

Retele de calculatoare

Sistemul numelor de domenii

Exemplu
O posibilia impartire a spatiului de nume DNS in zone.

Servere de nume

Exista un server primar (primary/authoritative name server) care deserveste un anumit domeniu si, eventual, mai multe servere secundare continind baze de date replicate.
Se utilizeaza:

TCP se utilizeaza pentru replicarea DNS UDP pentru interogari (lookups)

10

Client DNS

Denumit resolver, trimite un pachet UDP serverului DNS care cauta numele si returneaza adresa IP
Aplicatie:: resolver: spiruharet.ro Aplicatie:: resolver: spiruharet.ro Spiruharet.ro AUTHORITATIVE Spiruharet.ro AUTHORITATIVE

11

Exemplu de servere

BIND (Berkeley Internet Name Domain) MSDNS PowerDNS etc.

Ca resolver (client) interactiv, se poate folosi una dintre comenzile:

Nslookup Host Dig

12

Interogari

Recursiva - daca un server DNS nu cunoaste adresa pentru numele solicitat, atunci va interoga alt server DNS. Incrementala - daca serverul DNS nu stie sa raspunda, returneaza eroare si adresa altui server DNS (numit si referral) care ar putea cunoaste raspunsul la interogare. Fiecarui domeniu ii este asociata o multime de inregistrari de resurse (resource record - RR).
13

Mecanismul:
-

Cererea: resolver-ul trimite un nume de domeniu Raspunsul: inregistrarile de resurse asociate acelui nume (stocate in bazele de date DNS)

DNS realizeaza corespondenta dintre numele de domenii si inregistrarile de resurse.

14

Forma generala RR este: Nume_domeniu Timp_de_viata Tip Clasa Valoare Nume_domeniu (domain name) - precizeaza domeniul caruia i se aplica aceasta inregistrare Timp_de_viata (time-to-live) - da o indicatie despre cat de stabila este inregistrarea

15

Tip - precizeaza tipul inregistrarii


SOA (Start Of Authority) : domeniul curent, adresa e-mail a administratorului, etc. A - adresaIP a gazdei

MX (mail exchangers) - precizeaza numele domeniului pregatit sa accepte posta electronica pentru domeniul specificat CNAME (Canonical Name) - alias-uri pentru nume

HINFO- permit aflarea tipului de masina si de sistem de operare carora le corespunde domeniul
16

TXT: text neinterpretat (comentarii)

Clasa: pentru Internet valoarea acestuia este IN Valoare: acest camp poate fi un numar, un nume de

domeniu sau un sir ASCII; semantica depinde de tipul de inregistrare

17

Exemplu de interogare
%dig mail.google.ro ; <<>> DiG 9.4.2 <<>> mail.google.ro ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 43647 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;mail.google.ro. ;; AUTHORITY SECTION: google.ro. 60 IN

IN

SOA

ns1.google.com. dns-admin.google.com. 1413064 21600 3600 1209600 300

;; Query time: 75 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Apr 20 12:05:23 2010 ;; MSG SIZE rcvd: 92

18

Exemple de inregistrari de resurse DNS


Type
SOA A MX NS CNAME PTR HINFO TXT

Meaning
Start of Authority IP address of a host Mail exchange Name Server Canonical name Pointer HOST description Text

Value
Parameters for Lhis zone 32-Bil integer Priority, domain witling io accept e-mail Nome ol a server for Ihia domejn Domain name Alias for an IP address CPU and OS in ASCII Uninterpreted ASCII text

19

Exemplu de fisier pentru specificarea unei zone DNS


zone "spiruharet.ro" { type master; file "master/spiruharet.ro"; };

zone "rrmstudentfm.ro" { type master; file "master/rrmstudentfm.ro"; }; zone "radiorm.ro" { type master; file "master/radiorm.ro"; };
20

Exemplu de fisier pentru specificarea unei zone DNS


$ORIGIN . $TTL 86400 spiruharet.ro ; 1 day IN SOA spiruharet.ro. root.spiruharet.ro. ( 20090520 ; serial 3h ; refresh (3 hours) 1h ; retry (15 minutes) 1w ; expire (1 week) 1d ; minimum (1 day) )

IN IN IN

NS MX A

ns.spiruharet.ro. 10 aspmx.l.google.com. 85.9.22.182

$ORIGIN spiruharet.ro. www www 3600 IN 3600 IN A A 85.9.22.210 85.9.22.182

21

DNS clienti, resolveri, servere


Ca fisier de configurare al resolver-ului /etc/resolv.conf

%cat /etc/resolv.conf nameserver 127.0.0.1 nameserver 193.226.128.1 nameserver 193.226.128.129

22

Intrebare

Data avem o adresa, care va fi numele ei simbolic? (reverse DNS resolution sau reverse DNS lookup)
Exemplu
dig yonan.ro ; <<>> DiG 9.4.2 <<>> yonan.ro ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26050 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;yonan.ro. IN

;; ANSWER SECTION: yonan.ro. 86400 IN yonan.ro. 86400 IN ;; AUTHORITY SECTION: yonan.ro. 86400 IN

A A

185.19.122.128 185.19.122.120

NS

185.19.122.128.

;; Query time: 4 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Apr 20 12:01:06 2010 ;; MSG SIZE rcvd: 83 23

Mod de interogare Proximitatea spatiala: serverele locale vor fi interogate mai des decat cele la distanta. Proximitatea temporala: daca un set de domenii sunt referentiate repetat atunci se apeleaza la caching DNS. Fiecare intrare DNS va avea stabilita o valoare TTL (time to live). Se va utiliza si replicarea (servere multiple, servere root multiple) - se va interoga cel mai apropiat (geografic) server.
24

Rezumat

1. Domain Name System (DNS)


2. 3. 4. 5. Caracterizare Organizare Configurare Comenzi, Primitive (cursul viitor)

25

Retele de calculatoare

Sistemul numelor de domenii 2

Sistemul numelor de domenii (II)


Domain Name System (DNS) Caracterizare Organizare Configurare Comenzi, Primitive IDN

Retele de calculatoare

Sistemul numelor de domenii 2

DNS - Reluare

DNS - poate fi privit ca o baza de date distribuita utilizata la maparea dintre numele host-urilor si IP-uri si invers.

Retele de calculatoare

Sistemul numelor de domenii 2

DNS Structura
structura ierarhica domenii subdomenii

Retele de calculatoare

Sistemul numelor de domenii 2

DNS componente
spatiul numelor de domenii si RRs (resource records) Spatiul numelor de domenii este impartit in zone nesuprapuse RR - inregistrari in baza de date DNS Tipuri: A - adresa IP a gazdei...
Type
SOA A MX NS CNAME PTR HINFO TXT

Meaning
Start of Authority IP address of a host Mail exchange Name Server Canonical name Pointer HOST description Text

Value
Parameters for Lhis zone 32-Bil integer Priority, domain witling io accept e-mail Nome ol a server for Ihia domejn Domain name Alias for an IP address CPU and OS in ASCII Uninterpreted ASCII text

Retele de calculatoare

Sistemul numelor de domenii 2

Servere de nume (name servers) root name servers server primar (primary/authoritative name server) servere secundare clienti DNS sau resolvers

Retele de calculatoare

Sistemul numelor de domenii 2

Resolver

Client DNS (resolver), trimite un pachet UDP serverului DNS care cauta numele si returneaza adresa IP sau invers. Ca fisier de configurare al resolver-ului /etc/resolv.conf Nu trebuie scris un resolver pentru a afla adresa IP a unei gazde.

Retele de calculatoare

Sistemul numelor de domenii 2

Ca resolver interactiv se pot folosi comenzile: nslookup dig host whois


Retele de calculatoare

Sistemul numelor de domenii 2

Mod de functionare

Retele de calculatoare

Sistemul numelor de domenii 2

Exemple de utilizari:
%nslookup www.spiruharet.ro
%nslookup www.spiruharet.ro Server: 193.231.236.25 Address: 193.231.236.25#53 Non-authoritative answer: Name: www.spiruharet.ro Address: 85.9.22.210 Name: www.spiruharet.ro Address: 85.9.22.182

Retele de calculatoare

Sistemul numelor de domenii 2

%nslookup google.ro Server: 193.226.128.1 Address: 193.226.128.1#53 Non-authoritative answer: Name: google.ro Address: 209.85.229.104 Name: google.ro Address: 216.239.59.104 Name: google.ro Address: 74.125.77.104

10

Retele de calculatoare

Sistemul numelor de domenii 2

Reverse lookup
%nslookup 209.85.229.104 Server: 193.226.128.1 Address: 193.226.128.1#53 Non-authoritative answer: 104.229.85.209.in-addr.arpa name = ww-in-f104.1e100.net. Authoritative answers can be found from: 229.85.209.in-addr.arpa nameserver = ns3.google.com. 229.85.209.in-addr.arpa nameserver = ns4.google.com. 229.85.209.in-addr.arpa nameserver = ns1.google.com. 229.85.209.in-addr.arpa nameserver = ns2.google.com. ns1.google.com internet address = 216.239.32.10 ns2.google.com internet address = 216.239.34.10 ns3.google.com internet address = 216.239.36.10 ns4.google.com internet address = 216.239.38.10
11

Retele de calculatoare

Sistemul numelor de domenii 2

12

Retele de calculatoare

Sistemul numelor de domenii 2

DNS nslookup
%nslookup www.spiruharet.ro Server: 193.226.128.1 Address: 193.226.128.1#53 Non-authoritative answer: Name: www.spiruharet.ro Address: 85.9.22.210 Name: www.spiruharet.ro Address: 85.9.22.182 - Returneaza RR de tip A folosind serverul DNS specificat - man nslookup
13

Retele de calculatoare

Sistemul numelor de domenii 2

dig
Un instrument mai puternic decat nslookup. Practic comanda dig, ruland-o cu parametrii potriviti, ne poate da informatii legate de inregistrarile DNS ale unui domeniu zona A, servere MX, nameservere, inregistrare SOA etc.

Exemplu de utilizare:
dig www.spiruharet.ro A
; <<>> DiG 9.4.3-P1 <<>> www.spiruharet.ro A ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32282 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.spiruharet.ro. IN A ;; ANSWER SECTION: www.spiruharet.ro. 1899 IN A www.spiruharet.ro. 1899 IN A

85.9.22.182 85.9.22.210 14

Retele de calculatoare

Sistemul numelor de domenii 2

;; AUTHORITY SECTION: spiruharet.ro. 55568 IN ;; ADDITIONAL SECTION: ns.spiruharet.ro. 47860 IN

NS

ns.spiruharet.ro.

85.9.22.182

;; Query time: 22 msec ;; SERVER: 193.231.236.25#53(193.231.236.25) ;; WHEN: Tue Apr 27 08:58:38 2010 ;; MSG SIZE rcvd: 100

%dig spiruharet.ro soa


; <<>> DiG 9.4.2 <<>> spiruharet.ro soa ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10923 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;spiruharet.ro. IN

SOA

;; ANSWER SECTION: spiruharet.ro. 86400 IN ;; AUTHORITY SECTION: spiruharet.ro. 86400 IN

SOA

spiruharet.ro. root.spiruharet.ro. 20090520 10800 3600 60480

0 86400

NS

ns.spiruharet.ro. 15

Retele de calculatoare ;; ADDITIONAL SECTION: ns.spiruharet.ro. 86400 IN

Sistemul numelor de domenii 2

85.9.22.182

;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Apr 27 11:38:42 2010 ;; MSG SIZE rcvd: 105

%dig -x 85.9.22.182 (Reverse DNS)


; <<>> DiG 9.4.2 <<>> -x 85.9.22.182 ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 12062 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;182.22.9.85.in-addr.arpa. ;; AUTHORITY SECTION: 22.9.85.in-addr.arpa. 141

IN

PTR

IN

SOA

ns.gtstelecom.ro. hostmaster.gtstelecom.ro. 2010042203 28800 7200 1814400 600

;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Apr 27 11:37:24 2010 ;; MSG SIZE rcvd: 105

16

Retele de calculatoare

Sistemul numelor de domenii 2

In cazurile de mai sus comanda dig va citi din fisierul /etc/resolv.conf nameserverele folosite de sistem si le va interoga. Daca ne intereseaza sa interogam un anumit nameserver, unul care ar trebui sa aiba un rezultat diferit (ex. schimbam serverul de gazduire al unui site si dorim sa verificam daca zona DNS este setata corect) specificam ca prim argument al comenzii serverul (host sau adresa IP) pe care se va face interogarea precedat de semnul @. Exemplu %dig @ns.spiruharet.ro radiorm.ro mx
; <<>> DiG 9.4.2 <<>> @ns.spiruharet.ro radiorm.ro mx ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26341
17

Retele de calculatoare

Sistemul numelor de domenii 2

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;radiorm.ro. IN MX ;; ANSWER SECTION: radiorm.ro. 300 IN MX 30 mx.spiruharet.ro. ;; AUTHORITY SECTION: radiorm.ro. 300 IN NS ns.spiruharet.ro. ;; ADDITIONAL SECTION: ns.spiruharet.ro. 86400 IN A 85.9.22.182 ;; Query time: 0 msec ;; SERVER: 85.9.22.182#53(85.9.22.182) ;; WHEN: Tue Apr 27 11:45:04 2010 ;; MSG SIZE rcvd: 91

18

Retele de calculatoare

Sistemul numelor de domenii 2

host Exemplu de utilizare:


%host 216.239.34.10 10.34.239.216.in-addr.arpa domain name pointer ns2.google.com.

19

Retele de calculatoare

Sistemul numelor de domenii 2

Whois %whois spiruharet.ro


% Whois Server Version 2.17/2009-12-18 - whois.rotld.ro % Rights restricted by copyright. % Specifically, this data MAY ONLY be used for Internet operational % purposes. It may not be used for targeted advertising or any % other purpose. % Este INTERZISA folosirea datelor de pe acest server in oricare % alt scop decat operarea retelei. In special este INTERZISA % folosirea lor in scopuri publicitare. % Top Level Domain : ro % Maintainance : www.rotld.ro Domain Name: spiruharet.ro Registrar: ICI - ROTLD Whois Server: http://pwhois.rotld.ro/static Referral URL: http://www.rotld.ro Name Server: ns.spiruharet.ro Domain Status: OK whois: http: hostname nor servname provided, or not known

20

Retele de calculatoare

Sistemul numelor de domenii 2

Functii principale:

gethostbyname(); getaddrinfo(); gethostbyaddr() ; getnameinfo();

La unele sisteme de operare va trebui la compilarea aplicatiilor sa folosim biblioteca nsl (Name Server Library).

Una din structurile folosite: hostent Functii gethost...

21

Retele de calculatoare

Sistemul numelor de domenii 2

struct hostent { char* h_name; char** h_aliases; int h_addrtype; int h_length; char** h_addr_list; }

/* nume oficial (canonical) */ /* alias-uri */ /* AF_INET */ /* lungimea adresei: 4 sau 6 */ /*pointeri la adresele IP */

22

Retele de calculatoare

Sistemul numelor de domenii 2

gethostbyname ()

#include <netdb.h>
struct hostent *gethostbyname(const char *hostname);

In termenii DNS, gethostbyname() realizeaza o cerere pentru o inregistrare A. gethostbyname() se foloseste in special pentru IPv4.
Returneaza: in caz de succes returneaza un pointer la hostent, ce contine adresa IP a host-ului. In caz de eroare NULL, iar variabila h_errno indica eroarea aparuta.

23

Retele de calculatoare

Sistemul numelor de domenii 2

HOST NOT FOUND TRY_AGAIN NO_RECOVERY NO_DATA NO_ ADDRESS

(constante definite in netdb.h)

24

Retele de calculatoare

Sistemul numelor de domenii 2

Exemplu de utilizare: completarea structurii sockaddr_in avind in loc de adresa IP un nume simbolic:
struct sockaddr_in server; struct hostent *hos; if( ! ( hos = gethostbyname("spiruharet.ro") ) {/*Eroare la rezolvarea adresei*/} server.sin_f amily=AF_INET /* adresa IP o luam din structura hos */ memcpy(&server.sin_addr.s_addr, hos->h_addr_list[0], sizeof(hos->h_addr_list) ); server.sin_port=htons(80);

25

Retele de calculatoare

Sistemul numelor de domenii 2

gethostbyaddr ()

#include <netdb.h> struct hostent *gethostbyaddr (const char *addr, socklen_t len, int family);
In termenii DNS, gethostbyaddr() realizeaza o cerere la serverul de nume pentru o inregistrare PTR in domeniul in-addr.arpa Returneaza: In caz de succes returneaza un pointer la hostent, ce contine numele oficial al host-ului; In caz de eroare NULL, iar variabila h_errno indica eroarea aparuta Obs. gethostbyaddr() se foloseste in special pentru IPv4
26

Retele de calculatoare

Sistemul numelor de domenii 2

getservbyname()
#include <netdb.h> struct servent *getservbyname (const char *servname, const char *protoname); Returneaza: un pointer la struct servent in caz de sucess, NULL in caz de eroare.

27

Retele de calculatoare

Sistemul numelor de domenii 2

struct servent{ char *s_name; char **s_aliases; int s_port; char *s_proto; };

/* numele serviciului*/ /* alias-uri */ /* portul (network-byte order) */ /* protocolul */

Exemplu: struct servent *pserv; pserv=getservbyname("ftp","tcp"); /*FTP folosind TCP */

28

Retele de calculatoare

Sistemul numelor de domenii 2

getservbyport()
#include <netdb.h> struct servent *getservbyport (int port, const char *protoname); Cauta un serviciu dupa un numar de port si dupa protocol (optional) Returneaza: un pointer la struct servent in caz de sucess, NULL in caz de eroare Obs. port este in network byte order.

29

Retele de calculatoare

Sistemul numelor de domenii 2

Exemplu: struct servent *pserv;


pserv=getservbyport( htons(53), "udp"); /*DNS folosind UDP */ pserv=getservbyport( htons(21),"tcp"); /FTP folosind TCP */ Numele hostului sau o adresa IPv4 sau IPv6 ca string Portul serviciului sau numele serviciului ("http","pop",..) Contine informatii despre tipul de informatii pe care trebuie sa le intoarca primitiva

30

Retele de calculatoare

Sistemul numelor de domenii 2

getaddrinfo()
#include <netdb.h>
getaddrinfo ( const char *hostnarfne, const char *service, **result);
int const struct addrinfo *hints,- struct addrinfo

Obs. hostname, service, hints - parametri de intrare

Returneaza: 0 in caz de sucess, !=0 in caz de eroare Se recomanda a fi folosita si pentru IPv4 si pentru IPv6 Se poate utiliza in loc de gethostbyname()

31

Retele de calculatoare

Sistemul numelor de domenii 2

struct addrinfo { int ai_flag; /* AI_PASSIVE, AI_CANONNAME */ int ai_family; /* AF_INET sau AF_INET6 */ int ai_socktype; /* SOCK_STREAM sau SOCK_DGRAM */ int ai_protoco ; /* 0 (auto) sau IPPROTO_TCP, IPPROTO_UDP */ socklen_t ai_addrlen; /* lungimea lui ai_addr */ char * ai_canonname; /* numele canonic al host-ului */ struct sockaddr * ai_addr; /* adresa binara a socket-ului */ struct addrinfo *ai_next; /* pointer la urmatoarea structura din lista */ };

32

Retele de calculatoare

Sistemul numelor de domenii 2

Discutii
Daca functia returneaza cu succes result va pointa la lista de struct
addrinfo.

Cazuri cind se pot obtine structuri multiple:


- Exista mai multe adrese asociate cu numele hostului, si cate o structura este returnata pentru fiecare adresa (daca hint.ai_family a fost specificata) - Daca serviciul este furnizat pentru tipuri diferite de soket-uri, atunci cate o structura este returnata pentru fiecare tip de socket (in functie de hint.ai_socktype) - Informatia returnata de getaddrinfo() in structura struct addrinfo **result poate fi utilizata astfel: - Pentru socket () : ai_family, ai_socktype, ai_protocol - Pentru connect () sau bind(): ai_addr si ai_addrlen
33

Retele de calculatoare

Sistemul numelor de domenii 2

- Adresa soketului trimisa ca argument

#include <netdb.h> int getnameinfo( const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags);

34

Retele de calculatoare

Sistemul numelor de domenii 2

International Domain Names (IDN)

Extensie care permite folosirea caracterelor Unicode in numele de domenii, nu doar a celor ASCII. http://www.icann.org/en/topics/idn/ 16 Noiembrie 2009 - Inregistrarea de domenii IDN Restrictii: se vor putea folosi doar caracterele specifice limbii respective. Pot fi exploatate pentru atacuri de tip phishing.

35

Retele de calculatoare

Sistemul numelor de domenii 2

Radacina DNS este oficial administrata de Internet Corporation for Assigned Names and Numbers (ICANN) Exista si alte organizatii care ofera radacini alternative (alt DNS roots), precum OpenNIC sau New.Net

36

Retele de calculatoare

Sistemul numelor de domenii 2

Bibliografie
Unix Network Programming, R. Stevens B. Fenner, A. Rudoff, 2003

37

Retele de calculatoare

Sistemul numelor de domenii 2

Rezumat
Domain Name System (DNS) Caracterizare Organizare Configurare Comenzi, Primitive IDN

38

Retele de calculatoare

Sistemul numelor de domenii 2

Intrebari?

39

Retele de calculatoare

World Wide Web (WWW)

World Wide Web (WWW)


RFC 2616, 2817, 5785

WWW i are originea la CERN (European Center of Nuclear Research), Geneva. Tim Berners-Lee i Robert Cailliau au propus n 1989 un sistem informaional bazat pe hipertext. n 1990 s-a realizat primul browser. Browserul este un program software care asigur legatura dintre un PC local i Web. Legatura cu PC-ul local este ntreinut pe Web de ctre perechea browserului, serverul. Noiunea de server denumete un calculator i un program software din reea. Serverul rspunde la cererea browserului i furnizeaz calculatorului utilizatorului care utilizeaz browserul un document Web.

1|Page

Retele de calculatoare

World Wide Web (WWW)

Teminologie
1. Browser Pentru a avea acces la www utilizatorul trebuie s execute pe calculatorul su un program de rsfoire-browser, a coninutului unui server WEB. Aceste programe de rsfoire pot interpreta i afia documentele hipertext. Acestea nu conin text obinuit ci comenzi ce structureaz textul unor articole diverse (corp de paragraf, antete, grafic etc.). Cele mai cunoscute browsere sunt Internet Explorer, Mozilla Firefox, Opera, Chrome, Safari.etc 2. Hipertext Documentele de pe Web sunt documente hipertext.. Ele ofer utilizatorului o metod nesecvenial de citire a documentului afiat pe ecran. n loc s citeasc documentul n secven, de la nceput la sfrit, cititorul poate sri ctre noiuni din text care sunt importante pentru el. Pentru aceasta n text sunt marcate, subliniate, afiate cu alt culoare anumite cuvinte (ancore) prin care se activeaz o legtur ctre un alt loc din cadrul documentului, sau ctre alt locaie internet. Sistemul hipertext care poate afia o informaie multimedia (sunete, voce, imagini fixe i animate) n plus fa de text se numete sistem hipermedia. 3. URL Uniform Resource Locator reprezint o descriere complet a unui articol, ce conine localizarea acestuia. A fost introdus pentru a putea face referire n mod standard, n cadrul aplicaiei Web, la orice tip de articol (document, fiier de imagini, fiier de sunet etc.). 4. HTTP Hyper Text Transport Protocol este un protocol ce permite regsirea rapid a documentelor hipertext, indiferent de locul fizic unde se gsesc. 5. HTML Hyper Text Market Language este un protocol de descriere a documentelor pentru ca ele s fie afiate n cel mai favorabil format pe ecranul terminalului. Este format dintr-un set de comenzi ce descriu modul cum e structurat un document. Spre deosebire de procesoarele de texte care formateaz diferitele componente ale documentului (titlu, antet, note etc.), protocolul HTML marcheaz doar aceste elemente, fr a le formata, aceast sarcin revenind programului client (browser) care este adaptat monitorului utilizatorului.

2|Page

Retele de calculatoare

World Wide Web (WWW)

6. Legturi Legturile sau hiperlegturile sunt obiecte distincte dintr-un document de tip hipertext. Orice legtur are dou capete: unul care face referire la articolul care e solicitat n locul respectiv (figur, fiier, alt document) i altul numit ancor, format dintr-unul sau mai multe cuvinte, o figur sau o arie din zona afiat pe ecran. Aceasta este activat printr-un clic cu mouse-ul. 7. Pagina iniial (Home page).
Tim Berners-Lee, (n.1955), este un inginer i om de tiin britanic i profesor la MIT creatorul World Wide Web, face prima propunere pentru HTTP, n martie 1989. La data de 25 decembrie 1990 impreuna cu altii a pus n aplicare cu succes prima comunicare ntre un client i un server HTTP prin Internet .

3|Page

Retele de calculatoare

World Wide Web (WWW)

Protocoale de nivel aplicatie: HTTP HTTP este protocolul retelei de WorldWide Web WWW care a asigurat succesul acesteia, precum si a Internetului in general. Structura lui este extrem de simpla, bazata pe o sintaxa asemanatoare limbii engleze, ceea ce face scrierea de aplicatii ca servere, browsere extrem de simpla. 1. HTTP = HyperText Transfer Protocol Este un protocol destinat livrarii unor resurse unui client - browser, de catre un server. Bineinteles ca lucreaza prin intermediul stivei TCP/IP, portul standard pe care asculta serverul fiind 80. Aceste resurse pot fi fisiere de orice tip, sau iesirea generata de alte programe. 2. Structura tranzactiilor HTTP Protocolul HTTP are particularitatea de a nu memora o succesiune a starilor prin care trece legatura client-server. Astfel fiecare tranzactie este independenta: clientul trimite o cerere, serverul raspunde cu resursa ceruta. Alta resursa, alta tranzactie. Deoarece in unele situatii acest model nu a fost satisfacator(necesitatea pastrarii starii in care se afla sistemul) s-a inventat mecanismul stocarii de cookies pentru identificare, dar aceasta solutie este rezolvata inafara protocolului. Mesaj HTTP va avea intotdeauna formatul acesta: <linie initiala, diferita pentru cerere sau raspuns> Header1: valoare1 Header2: valoare2 <corpul mesajului, continand orice in orice format>

4|Page

Retele de calculatoare

World Wide Web (WWW)

Linia initiala poate fi de exemplu: GET /cale/fisier.html HTTP/1.1 GET / HTTP/1.1 Deci contine trei parti: metoda (cu majuscule), identificatorul resursei si versionea protocolului (tot cu majuscule). Toate aceste linii, cea initiala si headerele (zero sau mai multe) se termina cu perechea CR LF deci caracterele ASCII cu codul 0x0d si 0x0a dupa care urmeaza o linie goala si eventual corpul mesajului.

5|Page

Retele de calculatoare

World Wide Web (WWW)

Cereri HTTP Mai intalnite sunt doar trei tipuri de cereri emise de client: GET, HEAD si POST. HEAD este ca sintaxa este similara metodei GET, dar serverul nu returneaza resursa ceruta. Aceasta metoda este folosita de client pentru a testa existenta resursei respective si pentru a afla informatii despre ea (tip, dimensiune). Deci serverul returneaza doar liniile de header ce descriu resursa referita. POST este folosita de client pentru a trimite informatii serverului, de obicei pentru a fi procesate de catre un program ruland pe server. In acest caz resursa referita va fi numele programului caruia ii sunt destinate informatiile. Astfel: POST /cale/index.php HTTP/1.0 From: user@mysite.com User-Agent: Chrome Content-Type: application/x-www-form-urlencoded Content-Length: 40 id=10&nume=articol&res=file1.txt
GET Clientul cere o resurs care este pe serverul de web POST Acest lucru ilustreaz faptul c clientul de web trimite informaii la serverul de web si este folosit destul de des, atunci cnd se completeaza un formular online.

6|Page

Retele de calculatoare

World Wide Web (WWW)

PUT Acest lucru se ntmpl atunci cnd un client web trimite un document spre serverul de web. HEAD Vei vedea acest lucru n momentul in care clientul web vrea cateva informatii despre o resurs de pe server i nu solicita resursa n sine. DELETE Este folosit pentru a terge un document din server-ul web. TRACE Acesta nu vei vedea n mod normal, dar este folosita n cazul n care clientul dorete ca web proxy-uri s se declare. Este utilizata adesea pentru scopuri de depanare. OPTIUNI Vei vedea acest lucru n momentul in care clientul web vrea s tie ce alte metode pot fi utilizate pentru un document de pe server. CONNECT Este utilizata atunci cnd un client web dorete s se conecteze la un server HTTPS printr-un proxy.

7|Page

Retele de calculatoare

World Wide Web (WWW)

Raspunsuri HTTP

Formatul raspunsului
response = Status-Line *( ( general-header | response-header CRLF [ message-body ] | entity-header ) CRLF)

general-header = Cache-Control | Connection | Date | Pragma | Trailer | Transfer-Encoding | Upgrade | Via | Warning response-header = | | | | | | | | entity-header = | | | | Accept-Ranges Age ETag Location Proxy-Authenticate Retry-After Server Vary WWW-Authenticate

Allow Content-Encoding Content-Language Content-Length Content-Location

8|Page

Retele de calculatoare | | | | | | extension-header Content-MD5 Content-Range Content-Type Expires Last-Modified extension-header = message-header

World Wide Web (WWW)

O linie initiala de raspuns va avea formatul diferit: HTTP/1.1 404 Not Found

De asemenea continand trei parti: versiunea protocolului, codul raspunsului la cererea primita si motivul IN ENGLEZA. Acest motiv este destinat intelegerii utilizatorului, de aceea textul poate diferi. Codul raspunsului este destinat browserului, si in general avem clasele de raspunsuri: 1xx mesaj general de informare 2xx succes 3xx redirecteaza clientul catre alta resursa 4xx eroare din parte clientului 5xx eroare a serverului

9|Page

Retele de calculatoare

World Wide Web (WWW)

Raspunsuri

"200" "201" "202" "204" "301" "302" "304" "400" "401" "403" "404" "500" "501" "502" "503"

; OK ; Created ; Accepted ; No Content ; Moved Permanently ; Moved Temporarily ; Not Modified ; Bad Request ; Unauthorized ; Forbidden ; Not Found ; Internal Server Error ; Not Implemented ; Bad Gateway ; Service Unavailable

10 | P a g e

Retele de calculatoare

World Wide Web (WWW)

Headere Liniile de header contin diferite informatii utile, astfel browserul trimite de exemplu: User-Agent: Mozilla/4.0 Aici s-a trimis identificatorul utilizatorului (configurabil de catre utilizator evident) si numele programului care a generat cererea aici Mozilla 4.0. Headere in cerere
Accept Accept-Charset Accept-Encoding Accept-Language Authorization Expect From Host If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since Max-Forwards Proxy-Authorization Range Referer TE User-Agent

11 | P a g e

Retele de calculatoare

World Wide Web (WWW)

Headere in raspuns Un server va trimite headerele: Server: Apache/1. 3 Last-Modified: Tue, 9 Nov 2010 12:30:20 GMT In care precizeaza identitatea sa precum si data resursei. Daca serverul raspunde cu o resursa in corpul mesajului, de obicei mai adauga linii de header in care descrie aceasta resursa, ca si tip si dimeniune: Content-Type: text/html Content-Length: 1024
response-header = Accept-Ranges | Age | ETag | Location | Proxy-Authenticate | Retry-After | Server | Vary | WWW-Authenticate entity-header = | | | | | | | | | | Allow Content-Encoding Content-Language Content-Length Content-Location Content-MD5 Content-Range Content-Type Expires Last-Modified extension-header

12 | P a g e

Retele de calculatoare

World Wide Web (WWW)

Exemplu de sesiune HTTP Cum ar decurge conversatia client-server pentru aducerea fisierului /cale/index.html de pe serverul www.spiruharet.ro ? Clientul va deschide o conexiune (un socket) cu adresa precizata, pe portul 80 daca nu se doreste alt port, se lucreaza cu cel implicit. Dupa aceea va trimite serverului cererea: GET /cale/index.html HTTP/1.1 [crlf] User-Agent: Browser /1.1 [crlf] [crlf] iar serverul va raspunde pe acelasi socket cu ceva in genul mesajului urmator, dupa care va inchide socket-ul. Am renuntat la scrierea explicita a perechii CR+LF, dar este evident ca fiecare linie se termina astfel, in plus sa nu uitam prezenta liniei goale dupa header.

13 | P a g e

Retele de calculatoare

World Wide Web (WWW)

Exemplu HTTP/1.0 200 OK Date: Tue, 9 Nov 1999 13:50:22 GMT Content-Type: text/html Content-Length: 120 <html> <body> <h1>Titlu1</h1> (alte linii) . . </body> </html>

14 | P a g e

Retele de calculatoare

World Wide Web (WWW)

HTTP 1.1 pe scurt Nu vom intra in detalii despre aceasta versiune a protocolului HTTP, doar vom puncta cateva din noutatile aduse de acesta: - cererea clientului TREBUIE sa contina linia de header host: www.spiruharet.ro Deoarece acelasi server poate gazdui mai multe domenii (www.sit1.com, www.sit2.com etc) trebuie sa identific cumva daca fisierul cerut se afla in directoarele apartinand primului domeniu sau celui de-al doilea. Dar solutia la aceasta problema este de fapt folosirea cererilor cu referinta absoluta, de pilda: GET http://www.spiruharet.ro/cale/index.htm HTTP/1.2 - clientul sa suporte conexiuni persistente. HTTP 1.1 renunta la ideea unei singure conexiuni/cerere, caci deschiderea/inchiderea conexiunilor TCP/IP consuma mult timp si resurse CPU. Deci pe aceeasi conexiune clientul trimite mai multe cereri, iar serverul raspunde cererilor in ordinea lor. Daca clientul nu doreste aceasta, trimite linia de header Connection: Close - serverul poate transmite datele in sectiuni (chunks) pe masura ce sunt obtinute, astfel clientul nemaitrebuind sa astepte dupa intreaga cantitate odata. Raspunsul serverului va indica aceasta prin linia: Transfer-Encoding: chunked - in cazul comunicatiei lente, sau daca serverul are de asteptat mult pana va fi capabil sa trimita resursa, el trimite un raspuns de tipul 100 Continue clientului spunandu-i ca e in regula, dar sa mai stea putin: HTTP/1.0 100 Continue Acest raspuns de fapt va fi generat imediat dupa primirea primei linii de cerere. - cererile clientului pot sa fie conditionale, folosind linii de header de tipul: If-Modified-Since: sau IfUnmodified-Since:
15 | P a g e

Retele de calculatoare

World Wide Web (WWW)

Compresie HTTP Cerere


GET /encrypted-area HTTP/1.1 Host: www.spiruharet.ro Accept-Encoding: gzip, deflate

Raspuns
HTTP/1.1 200 OK Date: Mon, 23 May 2005 22:38:34 GMT Server: Apache/1.3.3.7 (Unix) Last-Modified: Wed, 08 Jan 2010 23:11:55 GMT Etag: "3f80f-1b6-3e1cb03b" Accept-Ranges: bytes Content-Length: 1024 Connection: close Content-Type: text/html; charset=UTF-8 Content-Encoding: gzip

Exemple de servere de web : Apache, NginX, Microsoft IIS, Sun Java System Web Server, Zeus Web Server, Lighttpd, Serenity Server

Exemple de clienti de web : Internet Explorer, Firefox, Chrome, Safari, Opera...

16 | P a g e

Retele de calculatoare

World Wide Web (WWW)

Un server HTTP 1.1 simplu Iata un exemplu simplu de server HTTP care raspunde numai la cererile de tip GET si HEAD. De altfel doar aceste cereri sunt obligatorii de implementat conform standardului. In primul rand se citeste cererea, care trebuie sa fie conforma specificatiilor protocolului HTTP. Pentru fiecare cerere noua se creeaza un fir de executie. Firul va prelua toata comunicatia cu clientul conectat. Toate situatiile de eroare sunt inregistrate, un raspuns semnaland eroarea este trimis clientului si cererea este abandonata. Daca am primit o comanda necunoscuta (serverul trateaza doar GET si HEAD clientul primeste aceasta informatie si cererea este abandonata. Dupa alte verificari, se trimite clientului raspunsul standard, headerul HTTP corespunzator si continutul fisierului cerut (pentru cereri GET).
#include #include #include #include #include <stdio.h> <sys/types.h> <sys/socket.h> <netinet/in.h> <arpa/inet.h>

#include <string.h> #include <stdlib.h> #include <sys/stat.h> #include<pthread.h> #define MY_PORT_ID 80 void* doClient(void * p) { //... } int main() { int sockid, newsd, pid, clilen; struct sockaddr_in my_addr, client_addr; if((sockid = socket(AF_INET, SOCK_STREAM, 0)) < 0) printf("socket error\n");

17 | P a g e

Retele de calculatoare
memset((char *) &my_addr, 0, sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(MY_PORT_ID); my_addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(sockid, (struct sockaddr *) &my_addr, sizeof(my_addr)) < 0) { printf("bind error\n"); return -1; }

World Wide Web (WWW)

printf("starting listen\n"); if(listen(sockid, 5) < 0) { printf("listen error\n"); return -1; } while(1) { printf("starting accept\n"); if((newsd = accept(sockid, (struct sockaddr *) &client_addr, &clilen)) < 0) printf("accept error\n"); printf("return from accept, socket %d\n", newsd); pthread_t fir; pthread_create(&fir, NULL, doClient, (void*)(long) newsd);

} return 0; }

18 | P a g e

Retele de calculatoare

World Wide Web (WWW)

Tema de laborator

Implementati in limbajul C sau C++ un server care implementeaza(partial) protocolul HTTP 1.1. Serverul va primi cereri pe portul 80 si va fi capabil sa serveasca mai multi clienti simultan folosind fire de executie. Fisierul se va trimite pe adresa aaverian@gmail.com pana la data de 25 mai 2010 ora 12.00.

19 | P a g e

Retele de calculatoare

World Wide Web (WWW)

Bibliografie
Unix Network Programming, R. Stevens B. Fenner, A. Rudoff, 2003 A. Tanenbaum, Reele de calculatoare (ediia a patra), Byblos, Tg.Mure, 2003 K. Robbins, S. Robbins, UNIX Systems Programming: Communication, Concurrency, and Threads, Prentice Hall PTR, 2003 R. Stevens, TCP/IP Illustrated, Volume 1: The Protocols, Addison-Wesley Longman, 1994

20 | P a g e

Retele de calculatoare

World Wide Web (WWW)

Rezumat
WWW HTTP Formatul mesajelor Headere Sesiune Laborator Bibliografie

Intrebari ?

21 | P a g e

S-ar putea să vă placă și