import java.net.InetAddress;
Réseaux TCP/IP et Programmation Java
Java
Lecture
I211
Réseaux
TCP/IP
Sockets
Introduction aux concepts fondamentaux des réseaux TCP/IP et leur implémentation en Java. Couvre les protocoles réseau, l’adressage IP, les sockets et la programmation réseau moderne.
Fondamentaux des réseaux
Modèle OSI
Couche | Fonction | Protocoles |
---|---|---|
Application | Accès aux services réseaux | HTTP, FTP, SMTP |
Présentation | Format des données | Encodage, Compression |
Session | Gestion des sessions | Auth, Autorisation |
Transport | Fiabilité bout en bout | TCP, UDP |
Réseau | Routage | IP, ICMP |
Liaison | Accès au média | Ethernet, WiFi |
Physique | Transmission bits | Signaux électriques |
Modèle TCP/IP
Couche | Fonction | Protocoles |
---|---|---|
Application | Services utilisateur | HTTP, FTP, SMTP, DNS |
Transport | Connexion bout en bout | TCP, UDP |
Internet | Routage et adressage | IP, ICMP, ARP |
Accès réseau | Interface physique | Ethernet, WiFi, PPP |
Adresses IPv4
- Historique
- 32 bits divisés en 4 octets (x.x.x.x)
- Plages d’adresses :
- Privées :
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
- Publiques : Tout le reste
- Spéciales :
- 127.0.0.1 (localhost)
- 0.0.0.0 (any)
- 255.255.255.255 (broadcast)
- Privées :
- Plus d’adresses disponibles au niveau mondial
// Exemple IPv4 en Java
InetAddress ipv4 = InetAddress.getByName("192.168.1.1");
System.out.println("Est locale ? " + ipv4.isLoopbackAddress());
System.out.println("Est privée ? " + ipv4.isSiteLocalAddress());
Est locale ? false
Est privée ? true
Adresse Format IPv6
- Motivations: épuisement des adresses IPv4, sécurité, qualité de service, mobilité, auto-configuration, …
- 128 bits divisés en 8 groupes de 16 bits (xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx)
- Notation raccourcie : les zéros peuvent être omis (::1 pour localhost)
// Exemple IPv6 en Java
InetAddress ipv6 = InetAddress.getByName("2001:0db8:85a3:0000:0000:8a2e:0370:7334");
System.out.println("Est IPv6 ? " + (ipv6 instanceof Inet6Address));
Est IPv6 ? true
Masques de sous-réseau
- Séparation des adresses réseau et hôte
- Utilité : segmentation du réseau
- Notation CIDR : /24 équivaut à 255.255.255.0
- Calcul des adresses réseau :
// Exemple de manipulation de sous-réseau
NetworkInterface ni = NetworkInterface.getByName("eth0");
for (InterfaceAddress ia : ni.getInterfaceAddresses()) {
System.out.printf("Adresse: %s/%d%n",
.getAddress(),
ia.getNetworkPrefixLength());
ia}
Adresse: /172.19.0.3/16
Résolution DNS
- Traduction des noms de domaine en adresses IP
- DNS : Domain Name System
// Résolution DNS complète
InetAddress[] addresses = InetAddress.getAllByName("www.lis-lab.fr");
for (InetAddress addr : addresses) {
System.out.println("Nom canonique : " + addr.getCanonicalHostName());
System.out.println("Adresse IP : " + addr.getHostAddress());
}
Nom canonique : rproxy.lis-lab.fr
Adresse IP : 139.124.22.49
Ports et services
- Communication entre applications
- Numéro de port (0-65535)
- Convention de numérotation
- Ports réservés (0 à 1023) : services bien connus
- 80/443 : HTTP/HTTPS, 22 : SSH
- Ports enregistrés (1024-49151) : applications enregistrées
- Ports dynamiques (49152-65535) : applications temporaires
- Ports réservés (0 à 1023) : services bien connus
// Vérification de port disponible
try (ServerSocket socket = new ServerSocket(0)) { // 0 = port automatique
System.out.println("Port libre trouvé : " + socket.getLocalPort());
System.out.println("Adresse : " + socket.getInetAddress());
}
Port libre trouvé : 35525
Adresse : 0.0.0.0/0.0.0.0
Encapsulation des données
Exemple de topologie réseau
Exemple de Communication
Sockets TCP
- Communication orientée connexion
- Fiabilité et ordre des messages
- Exemple : HTTP, FTP, SSH
Création d’un serveur TCP
Les exemples suivants sont accessibles dans le dépôt :
- Source: ebpro/notebook-java-network-sample-tcpclientserver
- Branch:
develop
- Latest Commit:
eae7db6 (improve and simplify docker., 2025-02-24)
- Cloned to: ${SRC_DIR}=
/home/jovyan/work/materials/github/ebpro/notebook-java-network-sample-tcpclientserver
To get it:
git clone -b develop https://github.com/ebpro/notebook-java-network-sample-tcpclientserver