|
TCP
Le protocole
TCP est défini dans le but de fournir un service de transfert
de données de haute fiabilité (à la différence
de UDP) entre deux ordinateurs "maîtres" raccordés
sur un réseau de type "paquets commutés", et
sur tout système résultant de l'interconnexion de ce
type de réseaux.
TCP
(Transmission Control Protocol : Protocole de Contrôle
de Transmission) a pour but, au niveau des applications, de gérer
les données en provenance (ou à destination) de la
couche inférieure du modèle (IP). Lorsque les données
sont fournies au protocole IP, celui-ci les encapsule dans les
datagrammes IP, en fixant le champ protocole à 6 (afin de
savoir que le protocole en amont est TCP...).
Caractéristiques
principales du protocole TCP:
TCP permet
de remettre en ordre les datagrammes en provenance du protocole IP
TCP permet
de vérifier le flot de données afin d'éviter
une saturation du réseau
TCP permet
de formater les données en segments de longueur variable afin
de les "remettre" au protocole IP
TCP permet
de multiplexer les données, c'est-à-dire de faire
circuler simultanément des informations provenant de sources
(applications par exemple) distinctes sur une même ligne
TCP permet
l'initialisation et la fin d'une communication de manière
normalisée
Information
TCP
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
29
|
30
|
31
|
|
Port
Source
|
Port
destination
|
|
Numéro
d'ordre
|
|
Numéro
d'accusé de réception
|
|
Décalage données
|
réservée
|
URG
|
ACK
|
PSH
|
RST
|
SYN
|
FIN
|
Fenêtre
|
|
Somme
de contrôle
|
Pointeur
d'urgence
|
|
Options
|
Remplissage
|
|
Données
|
Signification
des différents champs:
Port Source
(16 bits): Port de la machine source
Port
Destination (16 bits): Port de la machine de destination
Numéro
d'ordre (32 bits): Lorsque le drapeau SYN est à 0, le
numéro d'ordre est celui du premier mot (word) du segment en
cours Lorsque SYN est à 1, le numéro de séquence
est le numéro de séquence initial utilisé pour
synchroniser les numéros de séquence (ISN)
Numéro
d'accusé de réception (32 bits): Dernier segment
reçu par le récepteur
Décalage
des données (4 bits): il permet de repérer le début
des données dans le paquet. Le décalage est ici
essentiel car le champ d'options est de taille variable
Réservé
(6 bits): Champ inutilisé actuellement mais prévu pour
l'avenir
Drapeaux
(flags) (6x1 bit): Les drapeaux représentent des
informations supplémentaires:
URG:
si ce drapeau est à 1 le paquet doit être traité
de façon urgente
ACK:
si ce drapeau est à 1 le paquet est un accusé de
réception
PSH
(PUSH): si ce drapeau est à 1, le paquet fonctionne suivant
la méthode PUSH
RST:
si ce drapeau est à 1, la connexion est réinitialisée
SYN:
si ce drapeau est à 1, les numéros d'ordre sont
synchronisés
FIN:
si ce drapeau est à 1 la connexion s'interrompt
Fenêtre
(16 bits): Champ permettant de connaître le nombre d'octets que
le récepteur souhaite recevoir sans accusé de réception
Somme de
contrôle (Checksum ou CRC): La somme de contrôle est
réalisée en faisant la somme des champs de données
de l'en-tête, afin de pouvoir vérifier l'intégrité
de l'en-tête
Pointeur
d'urgence (16 bits): Indique le numéro d'ordre à
partir duquel l'information devient urgente
Options
(Taille variable): Des options diverses
Les champs
d'option peuvent occuper un espace de taille variable à la fin
de l'en-tête TCP. Ils formeront toujours un multiple de 8 bits.
Toutes les options sont prises en compte par le Checksum. Un
paramètre d'option commence toujours sur un nouvel octet. Il
est défini deux formats types pour les options:
Cas 1:
Option mono-octet.
Cas 2:
Octet de type d'option, octet de longueur d'option, octets de
valeurs d'option.
La longueur
d'option prend en compte l'octet de type, l'octet de longueur
lui-même et tous les octets de valeur et est exprimée en
octets.
Notez que la
liste d'option peut être plus courte que ce que l'offset de
données pourrait le faire supposer. Dans ce cas, un octet de
remplissage (padding) devra être rajouté après le
code de fin d'options. Cet octet est nécessairement à
0.
TCP doit
implémenter toutes les options. Actuellement, les options
définies sont (type indiqué en octal):
Type
Longueur
Description
0
-
Fin
de liste d'option
1 -
Nop
2
4 Taille de segment maximal
Définition
des options spécifiques
Fin de liste
d'options = |00000000|
>> Type=0
Ce code indique
la fin du champ d'options. Sa position peut ne pas coïncider
avec l'indication du début du champ de données marqué
dans l'Offset de données. Il doit être placé
après toutes les options, et non après chaque option.
Il ne doit être utilisé que dans le cas ou la fin des
options ne coïncide pas avec le début du champ de
données.
No-Operation
= |00000001|
>>Type=1
Cette option
peut être utilisée entre deux options, par exemple pour
aligner le début d'une option sur un début de mot de 16
bits. L'utilisation de ce séparateur n'est pas une obligation.
L'implémentation doit donc prévoir de pouvoir prendre
en compte un option même au milieu d'un mot.
Taille maximale
de segment = |00000010|00000100|
Taille max. segment | >> Type=2
Longueur=4
Bourrage:
On remplit l'espace restant après les options avec des zéros
pour avoir une longueur multiple de 4 octets=32 bits , et de sorte
que l'offset de données marqué dans l'en-tête
corresponde bien au début des données applicatives.
UDP :
A la différence de TCP, UDP est un protocole non connecté.
UDP n'a pas d'indicateur et de bits réservés comme TCP
. Cependant TCP et UDP se basent sur les ports source et destination.
Comme les paquets TCP, les paquets UDP ne doivent jamais avoir un
port source ou destination réglé à 0. Des
paquets UDP peuvent également être réduits en
fragments avec malveillance.
IP :
Le protocole IP
permet l'élaboration et le transport des datagrammes IP, sans
en assurer la "livraison". Le protocole IP traite les
datagrammes IP indépendamment les uns des autres en
définissant leur représentation, leur routage et leur
expédition.
Le
protocole IP détermine le destinataire du message grâce
à 3 champs:
Le champ
adresse IP : adresse de la machine
Le champ
masque de sous-réseau : un masque de sous-réseau
permet au protocole IP de déterminer la partie de l'adresse
IP qui concerne le réseau
Le champ
passerelle par défaut : Permet au protocole Internet de
savoir à quelle machine remettre le datagramme si la machine
de destination n'est pas sur le réseau local
Information
IP sur 32 bits
|
Version (4
bits)
|
Longueur
entête (4 bits)
|
Type
de service (8 bits)
|
Longueur
totale (16 bits)
|
|
Identification (16
bits)
|
Drapeau (3
bits)
|
Décalage
fragment (13 bits)
|
|
Durée
de vie (8 bits)
|
Protocole (8
bits)
|
Somme
de contrôle en-tête (16 bits)
|
|
Adresse
IP source (32 bits)
|
|
Adresse
IP destination (32 bits)
|
|
Données
|
Signification
des différents champs:
Version
(4 bits) : il s'agit de la version du protocole IP que l'on utilise
(actuellement on utilise la version 4 IPv4) afin de vérifier
la validité du datagramme. Elle est codée sur 4 bits.
Longueur
d'en-tête, ou IHL pour Internet Header Length
(4 bits) : il s'agit du nombre de mots de 32 bits constituant
l'en-tête (nota : la valeur minimale est 5). Ce champ est codé
sur 4 bits.
Type de
service (8 bits) : il indique la façon selon laquelle le
datagramme doit être traité.
Le Type de
Service donne une indication sur la qualité de service
souhaitée, qui reste cependant un paramètre "abstrait".
Ce paramètre est utilisé pour "guider" le
choix des paramètres des services actuels lorsqu'un datagramme
transite dans un réseau particulier. Certains réseaux
offrent un mécanisme de priorité, traitant
préférentiellement un tel trafic par rapport à
un trafic moins prioritaire (en général en acceptant
seulement de véhiculer des paquets d'un niveau de priorité
au dessus d'un certain seuil lors d'une surcharge momentanée).
Principalement, le choix offert est une négociation entre les
trois contraintes suivantes : faible retard, faible taux d'erreur, et
haut débit.
|
Bits
0-2 :
|
Priorité.
|
|
|
Bit
3 :
|
0
= Retard standard,
|
1
= Retard faible.
|
|
Bits
4 :
|
0
= Débit standard,
|
1
= Haut débit.
|
|
Bits
5 :
|
0
= Taux d'erreur standard
|
1
= Taux d'erreur faible.
|
|
Bit
6-7 :
|
Réservé.
|
|
0
1
2
3
4
5
6
7
-----------------------------------------------------
|
PRIORITE
| D
| T
| R
| 0
| 0
|
-----------------------------------------------------
Priorité
(détail)
-
|
111
-
|
Network
Control
|
|
110
-
|
Internetwork
Control
|
|
101
-
|
CRITIC/ECP
|
|
100
-
|
Flash
Override
|
|
011
-
|
Flash
|
|
010
-
|
Immediate
|
|
001
-
|
Priority
|
|
000
-
|
Routine
|
La priorité
"Network Control" est stipulée comme étant
une priorité à l'intérieur d'un seul réseau.
Le fait d'utiliser cette option instaure une priorité pour
chaque section traversée. La priorité "Internetwork
Control" n'est gérée que par les routeurs. Si
l'utilisation de ces priorités ont une signification
particulière ou supplémentaire pour l'un des réseaux,
il est de la responsabilité de ce dernier de lire et
d'interpréter les présentes informations.
Longueur
totale (16 bits): il indique la taille totale du datagramme en
octets. La taille de ce champ étant de 2 octets, la taille
totale du datagramme ne peut dépasser 65536 octets. Utilisé
conjointement avec la taille de l'en-tête, ce champ permet de
déterminer où sont situées les données.
Identification,
drapeaux (flags) et déplacement de fragment sont des
champs qui permettent la fragmentation des datagrammes, ils sont
expliqués plus bas.
Durée
de vie appelée aussi TTL, pour Time To Live
(8 bits) : ce champ indique le nombre maximal de routeurs à
travers lesquels le datagramme peut passer. Ainsi ce champ est
décrémenté à chaque passage dans un
routeur, lorsque celui-ci atteint la valeur critique de 0, le routeur
détruit le datagramme. Cela évite l'encombrement du
réseau par les datagrammes perdus.
Protocole
(8 bits) : ce champ permet de savoir de quel protocole est issu le
datagramme. Voici la liste des plus courants :
ASSIGNED
INTERNET PROTOCOL NUMBERS (RFC 790)
|
Decimal
|
Octal
|
Protocol
Numbers
|
|
0
|
0
|
Reserved
|
|
1
|
1
|
ICMP
|
|
2
|
2
|
Unassigned
(IGMP)
|
|
3
|
3
|
Gateway-to-Gateway
|
|
4
|
4
|
CMCC
Gateway Monitoring Message
|
|
5
|
5
|
ST
|
|
6
|
6
|
TCP
|
|
7
|
7
|
UCL
|
|
8
|
10
|
Unassigned
|
|
9
|
11
|
Secure
|
|
10
|
12
|
BBN
RCC Monitoring
|
|
11
|
13
|
NVP
|
|
12
|
14
|
PUP
|
|
13
|
15
|
Pluribus
|
|
14
|
16
|
Telenet
|
|
15
|
17
|
XNET
|
|
16
|
20
|
Chaos
|
|
17
|
21
|
User
Datagram
|
|
18
|
22
|
Multiplexing
|
|
19
|
23
|
DCN
|
|
20
|
24
|
TAC
Monitoring
|
|
21-62
|
25-76
|
Unassigned
|
|
63
|
77
|
any
local network
|
|
64
|
100
|
SATNET
and Backroom EXPAK
|
|
65
|
101
|
MIT
Subnet Support
|
|
66-68
|
102-104
|
Unassigned
|
|
69
|
105
|
SATNET
Monitoring
|
|
70
|
106
|
Unassigned
|
|
71
|
107
|
Internet
Packet Core Utility
|
|
72-75
|
110-113
|
Unassigned
|
|
76
|
114
|
Backroom
SATNET Monitoring
|
|
77
|
115
|
Unassigned
|
|
78
|
116
|
WIDEBAND
Monitoring
|
|
79
|
117
|
WIDEBAND
EXPAK
|
|
80-254
|
120-376
|
Unassigned
|
|
255
|
377
|
Reserved
|
Somme de
contrôle de l'en-tête ( header checksum)
(16 bits) : ce champ contient une valeur codée sur 16 bits
qui permet de contrôler l'intégrité de l'en-tête
afin de déterminer si celui-ci n'a pas été
altéré pendant la transmission. La somme de contrôle
est le complément à un de tous les mots de 16 bits de
l'en-tête (champ somme de contrôle exclu).
Celle-ci est en fait telle que lorsque l'on fait la somme des champs
de l'en-tête (somme de contrôle incluse), on obtient un
nombre avec tous les bits positionnés à 1 .
Adresse IP
source (32 bits) : Ce champ représente l’adresse IP
de la machine émettrice, il permet au destinataire de répondre
Adresse IP
destination (32 bits) :
l’adresse IP du destinataire du message
DHCP
(Dynamic Host Configuration Protocol) est un protocole qui permet à
un ordinateur qui se connecte sur un réseau d'obtenir
dynamiquement (c'est-à-dire sans intervention
particulière) sa configuration (principalement, sa
configuration réseau). L'ordinateur se trouve une adresse IP
tout seul grâce à DHCP. Le but principal étant la
simplification de l'administration d'un réseau.
Le protocole
DHCP sert principalement à distribuer des adresses IP sur un
réseau, mais il a été conçu au départ
comme complément au protocole BOOTP (Bootstrap Protocol) qui
est utilisé lorsque l'on installe une machine à travers
un réseau (BOOTP est utilisé en étroite
collaboration avec un serveur TFTP sur lequel le client va trouver
les fichiers à charger et à copier sur le disque dur).
Un serveur DHCP
peut renvoyer des paramètres BOOTP ou de configuration propres
à un hôte donné.
ARP :
Le protocole ARP (Address Resolution Protocol) sert à
faire la correspondance entre l'adresse IP d'une interface et son
adresse physique(MAC).
Le dialogue
entre deux machine d'un réseaux local ressemble à peu
près à ce qui est décrit ci-dessous:
A(123.124.125.126)
veut se connecter au serveur B(123.124.125.99)
A
envoie une requête ARP à destination de tous les
hôtes du réseau pour obtenir l'adresse MAC de B.
La requête
est du type: Est ce que celui qui à telle adresse
IP(123.124.125.99) peut m'envoyer son adresse MAC ?
B
voit qu'il est directement concerné et il envoi une réponse
ARP à A du type: Mon adresse MAC est AA:12:CB:35:EF:54
ICMP est
employé pour passer un message d'erreur entre deux hôtes
ou un centre serveur et un dispositif de réseau tel qu'un
routeur. Puisque UDP et IP sont des protocoles non connectés,
ils se basent sur ICMP pour transmettre des messages d'erreur en leur
nom. Pour éviter les boucles de messages d'erreur, les
réponses ne sont jamais envoyés aux messages d'erreur
ICMP.
ICMP n'a aucun
numéro de ports; il utilise des types et des codes de message
ICMP à la place.
ICMP supporte
le traffic broadcast. C’est-à-dire que les paquets ICMP
ne sont pas très compliqués, et il n'y a pas beaucoup
de façons pour qu'ils puissent être rendus anormaux.
Un message ICMP
peut être utilisé avec malveillance ; c’est
le cas d’une redirection. Les messages de redirection ICMP sont
destinés a être envoyer d'un routeur à un centre
serveur afin d'informer ce centre serveur qu'un routeur différent
est plus optimal que lui en contactant une adresse de destination
particulière.
Certaines
attaques telles que WinFreeze utilisent de faux messages de
redirection ICMP pour essayer de convaincre un hôte de
s'utiliser comme routeur optimal. Évidemment n'importe quel
paquet qui indique à un dispositif de "router" le
traffic vers lui-même devrait être considéré
comme fortement anormal.
La plupart des
paquets ICMP se composent de petites en-têtes et charge utile.
La plupart des
paquets de demande d'écho ICMP ont une en-tête de 8
bytes et une charge utile de 56 bytes. Des paquets ICMP qui sont
sensiblement plus grands que la normale devraient être
considérés douteux.
Certains types
ICMP, tels que des demandes d'écho, ne devraient porter aucune
données. Quelques applications malveillantes comprenant
quelques programmes de Distribues Denial Of Service (DDOS) et les
programmes de tunneling utilisent des paquets ICMP en tant que
"récipients" cachant d'autres trafics.
Ainsi une
réponse d'écho ICMP pourrait réellement contenir
un protocole IP complètement différent dans ses
données. Si on surveille un système pour de grands
paquets ICMP ou pour des paquets de types spécifiques ICMP qui
ne devraient pas contenir de données, on doit pouvoir détecter
ce type de trafic.
|