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.

Auteur
Affiliations

Université de Toulon

LIS UMR CNRS 7020

Date de publication

2025-02-25

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)
  • Plus d’adresses disponibles au niveau mondial
import java.net.InetAddress;
// 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", 
        ia.getAddress(),
        ia.getNetworkPrefixLength());
}
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
// 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

Réutilisation