# Suite des protocoles Internet

La suite des protocoles Internet est l'ensemble des protocoles utilisés pour le transfert des données sur Internet. Elle est aussi appelée DoD Standard (DoD pour Department of Defense), DoD Model, DoD TCP/IP ou encore US DoD Model, mais son nom le plus commun est TCP/IP, d'après le nom de ses deux premiers protocoles : TCP (de l'anglais Transmission Control Protocol) et IP (de l'anglais Internet Protocol). Ils ont été inventés par Vinton G. Cerf et Robert E. Kahn, travaillant alors pour la DARPA, avec des influences des travaux de Louis Pouzin. Le document de référence est RFC 1122.

## Histoire

TCP/IP fut créé lorsque Bob Kahn, travaillant alors pour la DARPA, dut créer un protocole pour un réseau de commutation de paquets par radio. Bien qu'ayant été un ingénieur majeur de l'ARPANET, qui utilisait alors le protocole NCP, il ne put se résoudre à l'utiliser car celui-ci devait fonctionner avec l'équipement réseau IMP et en plus n'effectuait pas de contrôle des erreurs. Il créa donc avec Vinton Cerf un protocole permettant de relier les réseaux entre eux.
La première publication de TCP/IP remonte à septembre 1973 lors d'une conférence de l'INWG.
Le réseau Arpanet adopte le 1er janvier 1983 la suite de protocoles TCP/IP qui sera la base d'Internet.
Depuis Arpanet ont été inclus des mécanismes d'affinement, qui comprennent l'utilisation d'une fenêtre glissante, pour la gestion des flux.
Les années qui suivent sont marquées par l'élaboration du modèle OSI, dans laquelle le français Hubert Zimmermann joue un rôle important. Ces discussions sont freinées par le sentiment des opérateurs télécoms de différents pays qui estiment que cette évolution peut nuire, à terme, à leurs monopoles respectifs. Le constructeur américain d'ordinateurs IBM est aussi accusé de se soucier d'abord de défendre sa position hégémonique sur le marché mondial dans l'informatique de gestion, qui sera affaiblie par la Justice américaine au cours des années 1970 l'obligeant ensuite à céder du terrain dans la microinformatique.
Le modèle OSI, qui décompose les différents protocoles en sept couches, peut être utilisé pour décrire la suite de protocoles Internet, bien que les couches du modèle OSI ne correspondent pas toujours avec les habitudes d'Internet (Internet étant basé sur TCP/IP qui ne comporte que quatre couches).
Chaque couche résout un certain nombre de problèmes relatifs à la transmission de données, et fournit des services bien définis aux couches supérieures. Les couches hautes sont plus proches de l'utilisateur et gèrent des données plus abstraites, en utilisant les services des couches basses qui mettent en forme ces données afin qu'elles puissent être émises sur un médium physique.
Le modèle Internet a été créé afin de répondre à un problème pratique, alors que le modèle OSI correspond à une approche plus théorique, et a été développé plus tôt dans l'histoire des réseaux, sous l'influence et la surveillance des opérateurs télécoms, alors en position de force. Le modèle OSI est donc plus facile à comprendre, mais le modèle TCP/IP est le plus utilisé en pratique.
Il est préférable d'avoir une connaissance du modèle OSI avant d'aborder TCP/IP, car les mêmes principes s'appliquent, mais sont plus simples à comprendre avec le modèle OSI.

## Couches TCP/IP

Comme les suites de protocoles TCP/IP et OSI ne correspondent pas exactement, toute définition des couches TCP/IP peut être sujette à discussion.
Le terme de « pile » est souvent employé, traduit littéralement de stack TCP/IP, mais ce n'est pas dans le sens de la « pile » informatique qui désigne l'outil de base des langages de programmation évolués.
En outre, le modèle OSI n'offre pas une richesse suffisante au niveau des couches basses pour représenter la réalité ; il est nécessaire d'ajouter une couche supplémentaire d'interconnexion de réseaux (Internetworking) entre les couches Transport et Réseau. Les protocoles spécifiques à un type de réseau particulier, mais qui fonctionnent au-dessus de la couche de liaison de données, devraient appartenir à la couche réseau. ARP, et STP (qui fournit des chemins redondants dans un réseau tout en évitant les boucles) sont des exemples de tels protocoles. Toutefois, ce sont des protocoles locaux qui opèrent au-dessous de la fonction d'interconnexion de réseaux ; placer ces deux groupes de protocoles (sans parler de ceux qui fonctionnent au-dessus du protocole d'interconnexion de réseaux, comme ICMP) dans la même couche peut prêter à confusion.
Le schéma qui suit essaie de montrer où se situent divers protocoles dans le modèle OSI de l'ISO :
| 7 | Application | par exemple : HTTP, HTTPS, Gopher, SMTP, SNMP, FTP, Telnet, NFS, NNTP |
| 6 | Présentation | par exemple : ASCII, Unicode, MIME, XDR, ASN.1, SMB, AFP |
| 5 | Session | ex. ISO 8327 / CCITT X.225, RPC, Netbios, ASP |
| 4 | Transport | par exemple : TCP, UDP, SCTP, SPX, ATP |
| 3 | Réseau | par exemple : IP (IPv4 ou IPv6), ICMP, IGMP, X.25, CLNP, ARP, RARP, OSPF, RIP, IPX, DDP |
| 2 | Liaison | par exemple : Ethernet, Token Ring, PPP, HDLC, Frame relay, RNIS (ISDN), ATM, Wi-Fi, Bluetooth, ZigBee, irDA (Infrared Data Association) |
| 1 | Physique | par exemple : techniques de codage du signal (électronique, radio, laser, etc.) pour la transmission des informations sur les réseaux physiques (réseaux filaires, optiques, radioélectriques …) |
Habituellement, les trois couches supérieures du modèle OSI (Application, Présentation et Session) sont considérées comme une seule couche Application dans TCP/IP. Comme TCP/IP n'a pas de couche session unifiée sur laquelle les couches plus élevées peuvent s'appuyer, ces fonctions sont généralement remplies par chaque application (ou ignorées). Une version simplifiée des couches TCP/IP est présentée ci-après :
| 5 | Application « couche 7 » | par exemple : HTTP, FTP, DNS les protocoles de routage comme RIP, qui est transporté par UDP, OSPF qui est transporté directement sur IP, BGP qui est transporté par TCP, sont considérés comme faisant partie de la couche application |
| 4 | Transport | par exemple : TCP, UDP, SCTP |
| 3 | Réseau | Pour TCP/IP il s'agit de IP, les protocoles requis comme ICMP et IGMP fonctionnent au-dessus d'IP, mais peuvent quand même être considérés comme faisant partie de la couche réseau ; ARP ne fonctionne pas au-dessus d'IP |
| 2 | Liaison | par exemple : Ethernet, Token Ring… |
| 1 | Physique | par exemple : la boucle locale (transmission par modulation sur lignes analogiques : lignes téléphoniques RTC, numériques, ADSL…), les grandes artères de communication (transmission par multiplexage, commutation…), les réseaux de radiocommunication (radio, téléphonie sans fil, satellite…) |
Une autre approche du modèle TCP/IP consiste à mettre en avant un modèle en 2 couches. En effet, IP fait abstraction du réseau physique. Et ce n'est pas une couche application qui s'appuie sur une couche transport (représentée par TCP ou UDP) mais des applications. On aurait donc :
| | Applications |
| 2 | Transport |
| 1 | IP (Internet) |
| | Accès réseau |
Cette représentation est plus fidèle aux concepts d'IP. Rappelons que ce « modèle » est antérieur au modèle OSI et tenter de les faire correspondre peut induire en erreur. En effet, TCP introduit une notion de session, or TCP est au niveau TRANSPORT sur un modèle calqué sur l'OSI. Cette antériorité au modèle OSI explique aussi certaines incohérences comme l'implémentation d'un protocole de routage au-dessus d'UDP (RIP est implémenté sur UDP, alors qu'OSPF, arrivé après le modèle OSI et cette volonté de vouloir découper les thématiques par couches, s'appuie directement sur IP). DHCP est également implémenté sur UDP, niveau « applications » alors que c'est le rôle de la couche réseau de fournir une configuration de niveau 3.

### Couche physique

La couche physique décrit les caractéristiques physiques de la communication, comme les conventions à propos de la nature du média utilisé pour les communications (les câbles, les liens par fibre optique ou par radio), et tous les détails associés comme les connecteurs, les types de codage ou de modulation, le niveau des signaux, les longueurs d'onde, la synchronisation et les distances maximales.

### Couche de liaison de données

La couche de liaison de données spécifie comment les paquets sont transportés sur la couche physique, et en particulier le tramage (i.e. les séquences de bits particulières qui marquent le début et la fin des paquets). Les en-têtes des trames Ethernet, par exemple, contiennent des champs qui indiquent à quelle(s) machine(s) du réseau un paquet est destiné. Exemples de protocoles de la couche de liaison de données : Ethernet, Wireless Ethernet, SLIP, Token Ring et ATM.
PPP (Point to Point Protocol) est un peu plus complexe, car il a été initialement spécifié pour fonctionner au-dessus d'un autre protocole de liaison de données.
Cette couche est subdivisée en LLC et MAC par l'IEEE.

### Couche réseau

Dans sa définition d'origine, la couche de réseau résout le problème de l'acheminement de paquets à travers un seul réseau. Exemples de protocoles de ce type : X.25, et le Initial Connection Protocol d'ARPANET.
Lorsque deux terminaux communiquent entre eux via ce protocole, aucun chemin pour le transfert des données n'est établi à l'avance : il est dit que le protocole est « non orienté connexion ». Par opposition, pour un système comme le réseau téléphonique commuté, le chemin par lequel va passer la voix (ou les données) est établi au commencement de la connexion : le protocole est « orienté connexion ».
Avec l'avènement de la notion d'interconnexion de réseaux, des fonctions additionnelles ont été ajoutées à cette couche, et plus spécialement l'acheminement de données depuis un réseau source vers un réseau destinataire. Ceci implique généralement le routage des paquets à travers un réseau de réseaux, connu sous le nom d'Internet.
Dans la suite de protocoles Internet, IP assure l'acheminement des paquets depuis une source vers une destination, et supporte aussi d'autres protocoles, comme ICMP (utilisé pour transférer des messages de diagnostic liés aux transmissions IP) et IGMP (utilisé pour gérer les données multicast).
ICMP et IGMP sont situés au-dessus d'IP, mais assurent des fonctions de la couche réseau, ce qui illustre l'incompatibilité entre les modèles Internet et OSI.
La couche réseau IP peut transférer des données pour de nombreux protocoles de plus haut niveau. Ces protocoles sont identifiés par un numéro de protocole IP (IP Protocol Number) unique. ICMP et IGMP sont respectivement les protocoles 1 et 2.

### Couche transport

Les protocoles de la couche de transport peuvent résoudre des problèmes comme la fiabilité des échanges (« est-ce que les données sont arrivées à destination ? ») et assurer que les données arrivent dans l'ordre correct. Dans la suite de protocoles TCP/IP, les protocoles de transport déterminent aussi à quelle application chaque paquet de données doit être délivré.
TCP (protocole IP numéro 6) est un protocole de transport « fiable », orienté connexion, qui fournit un flux d'octets fiable assurant l'arrivée des données sans altérations et dans l'ordre, avec retransmission en cas de perte, et élimination des données dupliquées. Il gère aussi les données « urgentes » qui doivent être traitées dans le désordre (même si techniquement, elles ne sont pas émises hors bande).
TCP essaie de délivrer toutes les données correctement et en séquence — c'est son but et son principal avantage sur UDP, même si ça peut être un désavantage pour des applications de transfert ou de routage de flux en temps-réel, avec des taux de perte élevées au niveau de la couche réseau.
UDP (protocole IP numéro 17) est un protocole simple, sans connexion, « non fiable » — ce qui signifie qu'il ne vérifie pas que les paquets sont arrivés à destination, et ne garantit pas leur arrivée dans l'ordre. Si une application a besoin de ces garanties, elle doit les assurer elle-même, ou bien utiliser TCP. UDP est généralement utilisé par des applications de diffusion multimédia (audio et vidéo, etc.) pour lesquelles le temps requis par TCP pour gérer les retransmissions et l'ordonnancement des paquets n'est pas disponible, ou pour des applications basées sur des mécanismes simples de question/réponse comme les requêtes DNS, pour lesquelles le surcoût lié à l'établissement d'une connexion fiable serait disproportionné par rapport au besoin.
Aussi bien TCP qu'UDP sont utilisés par de nombreuses applications. Les applications situées à une quelconque adresse réseau se distinguent par leur numéro de port TCP ou UDP. Par convention, des ports bien connus sont associés avec certaines applications spécifiques.
RTP (Real Time Protocol) est un protocole fonctionnant avec UDP ou TCP, spécialisé dans le transport de données possédant des contraintes temps réel. Typiquement, il sert à transporter des vidéos pour que l'on puisse synchroniser la lecture des images et du son directement, sans les stocker préalablement.
SCTP (Stream Control Transmission Protocol) a été défini en 2000 dans la RFC 4960, et un texte d'introduction existe dans la RFC 3286. Il fournit des services similaires à TCP, assurant la fiabilité, la remise en ordre des séquences, et le contrôle de congestion. Alors que TCP est byte-oriented (orienté octets), SCTP gère des « frames » (courtes séquences). Une avancée majeure de SCTP est la possibilité de communications multi-cibles, où une des extrémités de la connexion est constituée de plusieurs adresses IP.

### Couche application

C'est dans la couche application que se situent la plupart des programmes réseau.
Ces programmes et les protocoles qu'ils utilisent incluent HTTP (World Wide Web), FTP (transfert de fichiers), SMTP (messagerie), SSH (connexion à distance sécurisée), DNS (recherche de correspondance entre noms et adresses IP) et beaucoup d'autres.
Les applications fonctionnent généralement au-dessus de TCP ou d'UDP, et sont souvent associées à un port bien connu. Exemples :
* HTTP port TCP 80 ;
* SSH port TCP 22 ;
* DNS port UDP 53 (TCP 53 pour les transferts de zones et les requêtes supérieures à 512 octets) ;
* RIP port UDP 520 ;
* FTP port TCP 21 ;
Ces ports ont été assignés par l'Internet Assigned Numbers Authority (IANA).
Sous UNIX, on trouve un fichier texte servant à faire les correspondances port↔protocole : /etc/services. Sous Windows, il se situe dans %SystemRoot%\System32\drivers\etc. Il se nomme services, on peut le lire avec le Bloc-notes.
Dans le modèle TCP/IP, les protocoles de routage dynamiques sont inclus dans cette couche, y compris OSPF, même si OSPF est encapsulé directement sur IP (protocole IP numéro 89), sans utiliser de protocole de transport. Dans le modèle OSI, le protocole de routage IS-IS fait partie de la couche réseau. Certains auteurs, bien qu'utilisant un modèle de référence calqué sur celui de TCP/IP, suivent l'exemple du modèle OSI et décrivent les protocoles de routage dans le chapitre consacré à la couche réseau.
Auth, BOOTP, BOOTPS, DHCP, Echo, Finger, FTP, Gopher, HTTPS, IRC, IMAP, IMAPS, Kerberos, QOTD, Netbios, NNTP, NFS, POP, POPS, RTSP, NTP, SFTP, SMTP, SNMP, SSH, Telnet, TFTP, WAIS, Webster, Whois, XDMCP, Gemini.