applications client/serveur tcp/ip - lionne.cnam.frlionne.cnam.fr/cours/cpi/tcp_ip.pdf · –...

52
C.Crochepeyre Applications CS 1 Applications client/serveur TCP/IP - Sockets Rappels

Upload: trandieu

Post on 10-Sep-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 1

Applications client/serveurTCP/IP - Sockets

Rappels

Page 2: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 2

PLAN

• Modèle client/serveur• Modèle ISO et protocole TCP/IP• Comment ça marche?• La programmation: les sockets• Exemples client/serveur: UDP et TCP

Page 3: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 3

Modèle client/serveur : C/S

• L’application informatique est éclatée entre– La partie application cliente : processus « client »– La partie application serveur : processus « serveur »

• Le client fournit au serveur les données pour effectuer des traitements: demande de service

• Le serveur rend le service et retourne au client les résultats

client serveur

Page 4: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 4

Pourquoi?

• Le serveur peut être sollicité par plusieurs clients pour le même service • Chaque application peut être distante : réseau• Clients et serveur peuvent s’exécuter sur des machines différentes. Les

puissances de calcul peuvent être mieux réparties• Les applications clientes peuvent être différentes

clients clientserveur

M1

M2

M3

Page 5: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 5

Côté client

• Le client est à l’initiative de la demande– Il doit s’adresser au bon serveur– Lui fournir toutes les données pour effectuer le service– Attendre les résultats– Assurer la présentation

M1

serveur

M2

M3

client

Page 6: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 6

Côté serveur• Le serveur doit être actif et attendre une demande• A la demande d’un client, il doit récupérer les données

pour effectuer le traitement• Il doit renvoyer au client concerné les résultats non

formatés

serveur

M1M2

M3

client

Page 7: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 7

• Serveur itératif– Le serveur ne traite qu’une demande à la fois

• Serveur parallèle– Le serveur traite plusieurs demandes simultanément

clients serveur

clientsserveur

Page 8: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 8

Les échanges par réseaux

• Communication entre équipements– LAN: Local Area Network (10 mètres à quelques km)– MAN: Metropolitan Network (de 10 à 100 km)– WAN: Wide Area Network (100km au monde entier)

• Architectures: étoile, anneau, maillage, arbre…• Canaux: bus, satellite,…• Débits: bits/s, Kbits/s, Mbits/s, Gbits/s ..• Protocoles entre équipements: format, ordre des échanges

(envois et réceptions), actions associées• Echanges sur des réseaux hétérogènes: Inter-Net

Page 9: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 9

Modèle OSI

• ISO International Organisation for Standardization• Le modèle OSI Open System Interconnection

– Architecture en 7 couches– Principes:

• Chaque système possède un ensemble de couches• La communication entre 2 applications de même couche s’effectue

selon un protocole propre à cette couche• Chaque couche se réfère aux services fournis par les couches

inférieures• Lors d’un dialogue entre 2 couches de même niveau, les couches

inférieures sont transparentes

Page 10: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 10

• Les couches basses:– Physique: transmission binaire– Liaison: transmission de trames– Réseau: acheminement des paquets, routage, interconnexion des sous-

réseaux

• Les couches hautes– Transport: transport de bout en bout des messages, découpage et

réassemblage (paquets), gestion de la connexion– Session: dialogue entre tâches distantes synchronisation– Présentation: présentation des données échangées entre applications– Application: accès aux services par l’utilisateur

• Protocole simplifié: TCP/IP

Page 11: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 11

• Des solutions d’échange de données entre deux processus distants: fichiers, ftp, applications…

• Le protocole de communication TCP/IP– TCP utilisé avec IP ou UDP avec IP– Les couches

• Network Access (couches OSI 1 et 2): ethernet ou autre• Internet (couche OSI 3): IP• Host/Host (couche OSI 4): TCP ou UDP• Processus et applications (couches OSI 5,6 et 7) :tftp, telnet, smtp,

http…

Le protocole TCP/IP

Page 12: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 12

• Le réseau Ethernet– Réseau local– Norme IEEE 802.3 technique d’accès CSMA/CD– Topologie: segment de bus– Vitesse de transmission de 10Mbits/s à 1000 Mbits/s– Supports: câble coaxial, paires torsadées, fibre optique– Avantages: simplicité, faible coût, débit élevé, connexion/déconnexion, …– Inconvénients: durée de transmission bornée, absence de récupération

d’erreurs au niveau liaison, pas de mécanisme de priorité…

Page 13: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 13

• Le protocole IP– Interconnexion de machines situées sur des réseaux différents.– Assure:

• L’adressage par des adresses Internet • Le routage• La fragmentation et réassemblage des paquets• Le contrôle des erreurs• Le contrôle des flux• Le contrôle de la durée de vie du datagramme

– Deux services: send et deliver– Avantage: hétérogénéité des sous réseaux que doivent traverser les

messages des deux machines– Met en communication deux machines via des adresses Internet

Page 14: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 14

• UDP et TCP– Deux services transport, couche supérieure à IP– UDP: communication légère sans exigence de fiabilité ni de temps de

réponse • Transmission de messages• Possibilité de perte, duplication, déséquencement des messages: contrôle

par la couche supérieure applicationExemple TFTP (transfert de fichiers)

– TCP: communication fiable avec connexion• circuit virtuel entre deux processus• Pas de message mais un flot d’octets fragmentés en segments• Fiabilité avec numérotation des octets, acquittement, ré-

ordonnancement: contrôle de fluxExemple SMTP (mail)

– Communication entre deux processus via des n° de port

Page 15: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 15

Adresses IP

• Une adresse IP est unique pour chaque machine• Attribuée par l’AFNIC centre d'information et de gestion des noms

de domaine internet (France et île de la Réunion). • Adresse de 32 bits découpés selon l’utilité

– Adresse réseau– Adresse de la machine

• Classes réseaux: A, B, C, D, E• Codage adresse IP:

– Décimal pointé 163.173.212.27– Symbolique lion.cnam.fr machine.sous-domaine.domaine

• DNS Domain Name System– Table de correspondances entre un nom symbolique et une adresse pointée:

163.173.212.27 lion.cnam.fr– Hiérarchie des serveurs

Page 16: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 16

• Classe A: 0.0.0.0 à 127.255.255.255@locale

0

1 7

réseau

24

• Classe B: 128.0.0.0 à 191.255.255.255réseau @locale

0

1 1 14 18

1

• Classe C: 192.0.0.0 à 223.255.255.255réseau @locale

0

1 1 1 21 8

1 1

• Classe D: 224.0.0.0 à 239.255.255.255multicast

1 1 1 1 28

1 1 1 1

Page 17: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 17

• Adresse réseau– Identificateur réseau suivi de zéro

• 163.173.0.0 : réseau 163.173 de classe B– Diffusion au réseau (broadcast)

• Identificateur du réseau suivi de un• 163.173.255.255 diffusion au réseau 163.173 de classe B

• Adresse machine– Identificateur réseau et machine– 163.173.224.27: machine 224.27 du réseau 163.173 de classe B– 163.x.x.x: localhost désigne la machine locale– 0.0.0.0 utilisé si adresse inconnue de la machine

• Adresse sous réseau– Utilisation des adresses machines comme adresse sous réseau– Masque de réseau: 255.255.0.0 pour la classe B– Masque de sous réseau: 255.255.255.0 pour le sous réseauSi @IPdest & masque = @de la machine; alors envoi à la machine - sinon

routeur (@IPdest & masque, @IPmachine)

Page 18: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 18

• Adresse Ethernet– Chaque machine = adresse éthernet sur 48 bits– Adresse physique– Correspondance entre @IP et @Ethernet (@MAC)

• ARP Adress Resolution Protocol: – @IP -> @Ethernet -> machine– M1 envoie un message ARP avec son @IPM1et @EthernetM1

à toutes les machines, si M2 reconnaît son @IPM2– M2 répond et renvoie @EthernetM2– M1 met à jour sa table ARP avec les deux adresses de M2– M2 met à jour sa table ARP avec les deux adresses de M1

• RARP Reverse ARP: – Une station recherche son @IP dans une table inversée de

correspondance– machine -> @Ethernet -> @IP

Page 19: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 19

Comment ça marche?

• Les ports:– Côté serveur: chaque service (application) ouvre un port de communication

identifié par un n°– Côté client : chaque client (application) ouvre un port de communication

identifié par n°– La communication s’établit entre deux applications identifiées (ports) sur

deux machines identifiées (@IP).

• Envoi de paquets :– UDP: le message envoyé est découpée en datagrammes– TCP: le flot d’octets est bufferisé en segments

• Les couches UDP et TCP– UDP et TCP ajoutent aux données les n° ports: port_dest, port_exp

Page 20: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 20

• Couche IP:– IP ajoute, entre autres, aux données transmises par UDP ou TCP les

adresses IP des machines (destinataire et expéditeur)@dest, @exp, données…. @dest, @exp, données….

• Les paquets sont acheminés via les réseaux jusqu’à la machine destinataire @dest

• Les données sont transmises à l’application identifiée par son n°de port et récupère l’@IP de l’expéditeur

Page 21: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 21

« Pourquoi? »

PS PC « Pourquoi? »

@S @C

@S @C PS PC « Pourquoi? »

UDP

IP

« Pourquoi? »

PS PC « Pourquoi? »

@S @C PS PC « Pourquoi? »

UDP

IP

Port PS Port PC

Le client interroge le serveur

ClientServeur

Page 22: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 22

Programmation: les sockets

• Programmation des points terminaux de communication entre deux processus– Une socket à chaque extrémité du canal de communication

• Point de sortie pour l’émission de données• Point d’entrée pour la réception de données

• Utilisation essentielle pour des processus distants. Pour les processus locaux, d’autres outils (IPCs, PIPE)

• A chaque socket sont associés: descripteur, domaine, nom.....• Le SGF est impliqué dans la gestion des sockets

Page 23: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 23

• Descripteur– Référence attribuée dans le processus créateur– utilisation des descripteurs de fichiers:

• Entrée dans la table des descripteurs du processus avec pointeur vers une structure interne de type socket

• Redirection possible d’un fichier standard vers une socket• fork() : le fils hérite des descripteurs donc des sockets• Lecture et écriture en spécifiant le descripteur

Table desdescripteurs

duprocessus A

socket

Table desfichiers

Structure socket

i-noeudConnexions en attentesConnexions activesData à émettreData à recevoir

Files

Page 24: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 24

• Domaine– Deux domaines possibles

• Internet pour une communication distante• Unix pour une communication interne (si besoin)

– Un format d’adresses de la socket selon le domaine– Des protocoles associés au domaine

• Nom– Référence pour le processus et les autres processus

• Une structure interne avec:– Pour une communication locale: nom de fichier– Pour une communication distante: une adresse transport

adresse réseau + n° de port• Tout processus, non fils, peut hériter de la socket à condition

que le descripteur soit « attaché » à cette référence– Similitude avec un fichier

• La référence d’une socket est dans un i-nœud particulier

Page 25: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 25

– Socket distante• Côté client

– Un client doit connaître la référence de la socket serveur afin de l’appeler

– La référence de la socket cliente peut être laissée à la charge du système

• Côté serveur– La référence de la socket serveur doit être connue du client– La référence de la socket cliente est transmise automatiquement

au serveur lors de la demande du client. Le serveur peut ainsi lui répondre.

Page 26: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 26

• Le type– Sémantique associée à la communication

• SOCK_DGRAM pour mode datagramme : des messages• SOCK_STREAM pour mode connecté : un flot de données

– Similitudes avec• le courrier : l’expéditeur écrit au destinataire avec son adresse dans

le courrier, pour la réponse• le téléphone : l’appelant compose le n°, l’appelé décroche et une

ligne de communication est établie entre les deux n°. Ils raccrochent, la ligne est libérée.

• Deux protocoles, deux modes de communication– Pour assurer la sémantique (type)

• UDP pour SOCK_DGRAM• TCP pour SOCK_STREAM

Page 27: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 27

Mode datagramme: le protocole UDP

Côté Client Côté Serveurcréation d’une socket

(attachement)socket()/bind()

construction adresse du serveur

envoi message au serveursendto()

à une @serveur connue

attente réponse du serveurréception

recvfrom()

création et attachementd’une socket

socket() et bind()

attente message du client réception

recvfrom()@client

envoi réponse au clientsendto()

Page 28: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 28

Mode connecté: le protocole TCP

Côté Client Côté Serveurcréation d’une socket

(attachement)socket()/bind()

construction adresse du serveur

demande connexionconnect()

à une @serveur connue

échangeswrite()read()

création et attachementd’une socket d’écoute

socket() et bind()

Ouverture du servicelisten()

Attente de demande de connexion client

accept()@client

nouvelle socket de service

Échanges socket de serviceread()write()

Page 29: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 29

Les primitives de création

• Création d’une socketsock = socket(domaine, type, protocole)

int sock; n° du descripteur socket crééeint domaine; AF_INET ou AF_UNIX (AF_LOCAL..)int type; SOCK_DGRAM ou SOCK_STREAMint protocole; O protocole par défaut

– Implication des différentes tables du SGF Unix– Suppression au close() de la socket– Fonction assimilable à la fonction pipe() mais un seul n° de descripteur, pas de

nom de fichier– Les processus fils héritent des descripteurs du père donc du descripteur de la

socket

Page 30: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 30

• Suppression d’une socketclose(sock)

int sock; descripteur socket

– à la fermeture du dernier descripteur de la socket– Cas STOCK_STREAM: il peut arriver que la suppression soit bloquante

car le tampon d’émission a encore des caractères non transmis.

Page 31: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 31

• Attachement d’une adresse à une socket: nom de la socket– Le descripteur doit être associé à un nom de fichier si domaine Unix ou

un n° de port et une @IP si domaine Internet

bind(sock, adresse, lgstruct) int sock; descripteur socketint lgstruct; longueur de la structure selon le domaine

Deux structures différentes : socket interne et socket distante

adresse domaine UNIXstruct sockaddr_un {short sun_family;char sun_path [109];} nom fichier

adresse domaine INTERNETstruct sockaddr_in {short sin_family;u_short sin_port; @portstruct in_addr sin_addr; @IPchar sin_zero [8];}

Page 32: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 32

• Après le bind() le descripteur pointe sur la structure système associée à la socket – avec le nom du fichier de type S (socket) spécifié dans sun_path

si Unix – avec le n° du port et l’adresse IP si Internet

• Possibilitéssin_addr = INADDR_ANY (une des adresses de la machine)

= ou gethostname()…sin_port = 0 un port libre alloué par le système

= n° port choisi= getservbyname() ….

Page 33: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 33

• Exemplessocket Unixstruct sockaddr_un sockux;………..sockux.sun_family = AF_UNIX;strcpy(sockux.sun_path, « sockunix.test »)bind(sock,&sockux,strlen(sockux.sun_path)+2)

socket INTERNETstruct sockaddr_in sockit;……………..;sockit.sin_family = AF_INET;sockit.sin_port = n° du port associé à la socket; (format réseau)sockit.sin_addr = adresse de la machine; (format réseau)bind(sock, &sockit,sizeof(sockit));

Page 34: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 34

• Des fonctions pour récupérer les adresses machinesgethostname() récupération du nom de la machine dans une chaîne de caractèresgethostbyname() récupération du nom de la machine dans une structure hostent

• Des fonctions pour récupérer les n° ports des services– Si le service est connu

getservbyname() getservent() getservbyport() permettent de récupérer les caractéristiques des services dans un structure « servent »

– Service quelconque utilisateurgetsockname() récupération du n° du port attaché à une socket en fournissant le descripteur

Page 35: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 35

• Conversion des formats des données– Chaque machine code ses données selon un format local, les échanges

entre machines impliquent donc des conversions • du format local au format réseau et • du format réseau au format local

– L’adresse IP et n° port doivent être au format réseau dans la structure système avant envoi

– L’adresse IP et n° port reçus dans la structure doivent être reconvertis au format local avant utilisation (ex: pour un printf de l’adresse de la machine)

• Primitives conversion des données– ntohl() adresse réseau entier long en adresse locale– ntohs() adresse réseau entier court en adresse locale– ntonl() adresse locale entier long en adresse réseau– ntons() adresse locale entier court en adresse réseau

Page 36: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 36

Les primitives d’échanges mode UDP

• Après création de la socket et attachement• Emission

nc = sendto(sock,msg,option,p_dest,lgdest)int nc; nb de car envoyésint sock; n° descripteur socket localechar *msg; adresse message à envoyerInt lg; long du message à envoyerInt option; 0 pour SOCK_DGRAMstruct sockaddr *p_dest; struct socket avec l’adresse du destinataireint lgdest; long structure socket

sendmsg() envoi de plusieurs messages

Page 37: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 37

• Réceptionnc = recvfrom(sock,msg,lg,option,p_exp,lgexp)int nc; nb de car reçusint sock; n° descripteur socketchar *msg; adresse récupération du messageInt lg; taille espace réceptionInt option; 0 ou MSG_PEEKstruct sockaddr *p_exp; struct récup l’adresse de l’expéditeurint lgdest; long structure de l’expéditeur

recvmsg() réception de plusieurs messages

Page 38: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 38

Primitives en mode TCP• Après création de la socket et attachement• Etablissement du circuit virtuel

côté client côté serveurdemande de connexion préparation du serviceconnect(sock,p_adr,lg_adr) listen(soke,nb)

traitement de la connexion reçuesocks=accept(socke, p_adr,p_lg_adr)

Client:int sock; descripteur socket clientestruct sockaddr *p_adr; structure contenant @machineServeur et n° portint lg_adr; long de la structure

Serveurint socke descripteur socket écoute serveurint nb; nombre maxi de connexions pendantesint socks; descripteur socket de service qui va communiquer avec le clientstruct sockaddr *p_adr; structure récupérant @machineClient et n° portInt lg_adr; long structure

Page 39: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 39

• Emissionnc = write(socks,msg,lg)int socks descripteur socket de servicechar *msg adresse du message à envoyerint lg long du messageint nc nb de car réellement émis

Ounc = send(socks,msg,lg,option)option 0 idem write

MSG_OOB caractère urgent (out-of-band) MSG_PEEK conservation message…

Page 40: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 40

• RéceptionNc = read(socks, msg, lg, option)int socks descripteur socket de servicechar *msg adresse du message reçuint lg long du messageint nc nb de car réellement lus

OuNc = recv(socks, msg, lg, option)

Page 41: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 41

Serveur parallèle: TCP

• Pour éviter que le serveur prenne en charge qu’un seul service à la fois, il crée un processus fils à chaque demande client

• Le processus fils hérite automatiquement des descripteurs ouverts par le père (socke et socks) dans sa propre table des descripteurs ainsi que des données associées.

• Chaque fils remplace son code par le code du service à exécuter exec(service demandé) avec passage en paramètres : socke et socks

• Le fils communique alors directement avec son client• Le processus serveur est déchargé de ce service et peut accepter

une autre demande.• Ne pas oublier de fermer

– La socket d’écoute dans le processus fils (non utile)– La socket de service dans le processus père (non utile)

Page 42: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 42

clientsserveur

Serveur parallèle

Page 43: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 43

Serveur parallèle: TCP

Côté Client Côté Serveurcréation d’une socket

(attachement)socket()/bind()

construction adresse du serveur

demande connexionconnect()

à une @serveur connue

échangeswrite()read()

création et attachementd’une socket d’écoute

socket() et bind()

Ouverture du servicelisten()

Attente de demande de connexion client

accept()@client

nouvelle socket de service

création d’un processus filsfork() exec()

Échanges socket de serviceread()write()

Page 44: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 44

Exemple simple UDP

• Client UDP/**********************************************//* utilisation des sockets mode datagramme *//* client UDP *//* Le client envoie une suite de car au serveur *//*********************************************/

#include <stdio.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>extern errno;

main(argc,argv) On passe en argument: n° port du service et l’@IP du serveurchar **argv;{struct hostent *h; Structure pour récupération des propriétés d’une machinestruct sockaddr_in sin; Structure socket on y place l’adresse du serveurchar buf[10]; Zone de messageint sock; descripteur socket

Page 45: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 45

if(argc!=3) { fprintf(stderr,"usage: %s remotehost remoteport \n",argv[0]);exit(0); }

if((sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0) création socket cliente UDP{perror("socket");exit(1); }

if(!(h=gethostbyname(argv[1]))) { récupération @machine serveurperror(argv[1]);exit(2); }

bzero(&sin,sizeof(sin)); maj struct socket clientesin.sin_family = AF_INET;bcopy(h->h_addr,&sin.sin_addr,h->h_length);sin.sin_port = htons(atoi(argv[2])); n° port serveur

Page 46: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 46

if(sendto(sock,"ABC",3,0,&sin, sizeof(sin))!=3) {fprintf(stderr,"erreur ecriture \n");exit(1); }

if(sendto(sock,"DEFGH",5, 0,&sin, sizeof(sin))!=5) {fprintf(stderr,"erreur ecriture \n");exit(1); }

if(sendto(sock,"IJ",2, 0,&sin, sizeof(sin))!=2) {fprintf(stderr,"erreur ecriture \n");exit(1); }

if(sendto(sock,"KLMNOPQRS",9,0,&sin, sizeof(sin))!=9) {fprintf(stderr,"erreur ecriture \n");exit(1); }

sleep(2);if(sendto(sock,"TUV",3, 0,&sin, sizeof(sin))!=3) {

fprintf(stderr,"erreur ecriture \n");exit(1); }

if(sendto(sock,"WXYZ",4, 0,&sin, sizeof(sin))!=4){fprintf(stderr,"erreur ecriture \n");exit(1); }

close (sock);}

Page 47: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 47

• Serveur UDP/************************************************//* utilisation de socket sur le reseau mode datagramme *//* partie serveur *//* Le serveur reçoit du client les caractères *//************************************************/

#include <unistd.h>#include<stdio.h>#include <fcntl.h>#include <sys/socket.h>#include <sys/time.h>#include <netinet/in.h>#include <netdb.h> struct sockaddr_in sin = {AF_INET}; Struct pour la socket serveur

main(){int len, sock;char ligne[10];int n;struct sockaddr_in adr; Struct pour récupérer l’adresse client

if((sock = socket(AF_INET,SOCK_DGRAM,0)) < 0){perror("socket");exit(1); }

Page 48: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 48

if(bind(sock, &sin, sizeof(sin)) < 0) attachement de la socket serveur{perror("bind");exit(2);}

len = sizeof(sin);if(getsockname(sock, &sin, &len) < 0) récupération n° port attribué à la socket serveur

{perror("getsockname");exit(3);}

printf("server bound to port %u 0x%x \n",ntohs(sin.sin_port),sin.sin_port); affiche le n° port socket serveurfor(;;){len = sizeof(adr);n = recvfrom(sock,ligne,10,0,&adr, &len); attend les carac du clientif (n == -1) {perror (" pb socket lecture");

exit();}

ligne[n] ='\0';printf("la chaine lue par le serveur est %s\n",ligne); affichage}}

Page 49: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 49

Exemple simple TCP• Client TCP

/*************************************//* client.c tcp_client *//* socket mode connecte *//* le client attend un message du serveur *//* il n’envoie rien au serveur *//*************************************/

#include <stdio.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>extern errno;

main(argc,argv) arguments: @port serveur et @machine serveur communiqués par le printf() du serveurchar **argv;{struct hostent *h; Struct conversion adressesstruct sockaddr_in sin; Struct socket cliente dans laquelle on place l’adresse du serveurchar buf[2048]; Buffer message du serveurint sock; Descripteur socket cliente

Page 50: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 50

if(argc!=3){fprintf(stderr,"usage: %s remotehost remoteport \n",argv[0]); @du port serveurexit(0);}if((sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0) création socket cliente TCP{perror("socket");exit(1);}if(!(h=gethostbyname(argv[1]))) @machine serveur{perror(argv[1]);exit(2);}bzero(&sin,sizeof(sin)); maj struct socketsin.sin_family = AF_INET;bcopy(h->h_addr,&sin.sin_addr,h->h_length); @machine serveursin.sin_port = htons(atoi(argv[2])); @port serveur

if(connect(sock,&sin,sizeof(sin)) < 0) demande connexion au serveur{perror("connect");}printf ("Attente Message Serveur \n"); attente d’un message du serveurread (sock, buf, 18);printf ("Message Recu : %s \n", buf);close (sock);}

Page 51: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 51

• Serveur TCP/*************************************//* server.c tcp_serveur *//* socket mode connecte *//* le serveur envoie un message au client *//* il n’attend rien du client *//*************************************/

#include <stdio.h>#include <signal.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/time.h>#include <netinet/in.h>#include <netdb.h>struct sockaddr_in sin = {AF_INET}; structure socket serveur

main(argc,argv)char **argv;{int namelen, newsock, sock;if((sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0) création socket serveur TCP{perror("socket");exit(1);}

Page 52: Applications client/serveur TCP/IP - lionne.cnam.frlionne.cnam.fr/Cours/CPI/TCP_IP.pdf · – Interconnexion de machines situées sur des réseaux différents. – Assure: • L’adressage

C.Crochepeyre Applications CS 52

if(bind(sock, &sin, sizeof(sin)) < 0) attachement de la socket serveur{perror("bind");exit(2);}namelen = sizeof(sin);if(getsockname(sock, &sin, &namelen) < 0) récupération n° port socket serveur{perror("getsockname");exit(3);}printf("server bound to port %u 0x%x \n",ntohs(sin.sin_port),sin.sin_port); affichage n° port

if(listen(sock,5) < 0) ouverture du service, 5 connexions pendantes{perror("listen");exit(4);}for (;;){if((newsock = accept(sock,&sin,&namelen)) < 0) attente de connexion cliente, acceptation {perror("accept"); et création de la socket de service et récupération de exit(5); } l’adresse du client dans &sin

write (newsock, "bonjour du Serveur", 18); le serveur envoie son bonjour au client

close(newsock);}}