← Retour au cours
▶ Aperçu gratuit · Leçon offerte

Leçon 2 — Tronc commun SISR/SLAM : programmation, SQL, réseaux TCP-IP

⏱ 1080 min · 🎬 Lecon · 🏆 15 XP
🎬
Vidéo en production
Notre équipe pédagogique tourne actuellement cette leçon avec un·e formateur·rice expert·e. Le contenu textuel ci-dessous est complet et utilisable dès maintenant.

Tronc commun SISR / SLAM — bases techniques

Programmation Python / PHP · SQL · Réseaux TCP/IP · Cybersécurité de base · Bloc E4

🎯 Objectifs pédagogiques

  • Maîtriser les bases de programmation communes aux deux options : variables, types, structures de contrôle, fonctions, classes.
  • Concevoir et interroger une base de données relationnelle avec SQL (DDL, DML, DQL).
  • Comprendre le modèle OSI et la pile TCP/IP avec leurs 7 et 4 couches respectives.
  • Maîtriser le sous-réseautage CIDR (calcul de masques, broadcast, hôtes utiles).
  • Appliquer les principes fondamentaux de cybersécurité via la triade CIA (Confidentiality, Integrity, Availability).

1. Bases de programmation — Python et PHP

Que vous choisissiez SISR ou SLAM, vous écrirez du code. SISR a besoin de scripts d'automatisation (Bash, PowerShell, Python), SLAM développe des applications complètes (PHP, Python, Java).

1.1 Variables et types primitifs

En Python, le typage est dynamique :

age = 19                  # int
nom = "Camille"          # str
moyenne = 14.75           # float
est_majeur = True         # bool
modules = ["E4", "E5"]  # list

En PHP, les variables commencent par $ :

<?php
$age = 19;
$nom = "Camille";
$moyenne = 14.75;
$est_majeur = true;
$modules = ["E4", "E5"];
?>

1.2 Structures de contrôle

# Python
if age >= 18:
    print("Majeur")
elif age >= 16:
    print("Mineur, mais permis AM possible")
else:
    print("Mineur")

for module in modules:
    print(f"Module : {module}")

i = 0
while i < 5:
    print(i)
    i += 1

1.3 Fonctions et POO simple

# Python
def calcul_moyenne(notes):
    return sum(notes) / len(notes)

class Etudiant:
    def __init__(self, nom, option):
        self.nom = nom
        self.option = option
    def presente(self):
        return f"{self.nom} — option {self.option}"

alice = Etudiant("Alice", "SISR")
print(alice.presente())

2. SQL — Bases de données relationnelles

Le langage SQL (Structured Query Language) est utilisé par tous les SGBD relationnels : MariaDB, MySQL, PostgreSQL, Microsoft SQL Server, Oracle. Trois sous-langages :

  • DDL (Data Definition Language) : CREATE, ALTER, DROP — structure de la base.
  • DML (Data Manipulation Language) : INSERT, UPDATE, DELETE — modification des données.
  • DQL (Data Query Language) : SELECT — interrogation.

2.1 Création de tables

CREATE TABLE etudiants (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nom VARCHAR(100) NOT NULL,
    prenom VARCHAR(100) NOT NULL,
    option_choisie ENUM('SISR','SLAM') NOT NULL,
    moyenne DECIMAL(4,2),
    date_inscription DATE DEFAULT CURRENT_DATE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2.2 Requêtes SELECT avec jointures

SELECT e.nom, e.prenom, c.titre AS cours, n.note
FROM etudiants e
INNER JOIN notes n ON n.etudiant_id = e.id
INNER JOIN cours c ON c.id = n.cours_id
WHERE e.option_choisie = 'SISR'
  AND n.note >= 10
ORDER BY n.note DESC
LIMIT 20;

2.3 Agrégations

SELECT option_choisie, AVG(moyenne) AS moyenne_promo, COUNT(*) AS effectif
FROM etudiants
GROUP BY option_choisie
HAVING AVG(moyenne) >= 12;

3. Réseaux TCP/IP — Modèle OSI et pile Internet

Le modèle OSI (Open Systems Interconnection, ISO 7498) décompose les communications réseau en 7 couches. La pile TCP/IP en regroupe 4. Mémorisation : « Pour Le Réseau Tout Se Passe Automatiquement ».

OSINomRôleExemples de protocoles / unités
7ApplicationService utilisateurHTTP, HTTPS, FTP, SMTP, DNS, SSH
6PrésentationEncodage, chiffrementTLS, JPEG, ASCII, UTF-8
5SessionSessions logiquesNetBIOS, RPC
4TransportSegmentation, fiabilitéTCP (fiable), UDP (rapide) — segment
3RéseauAdressage logique, routageIPv4, IPv6, ICMP, ARP — paquet
2LiaisonAdressage physiqueEthernet 802.3, Wi-Fi 802.11, MAC — trame
1PhysiqueSignal électrique / optiqueRJ45, fibre, ondes radio — bit

3.1 Adressage IPv4 et CIDR

Une adresse IPv4 est codée sur 32 bits, notée en 4 octets décimaux séparés par des points : 192.168.1.10. Le masque de sous-réseau en notation CIDR ajoute /n où n est le nombre de bits du préfixe réseau.

CIDRMasqueHôtes utilesUsage type
/24255.255.255.0254Réseau LAN PME
/25255.255.255.128126VLAN service
/26255.255.255.19262VLAN département
/27255.255.255.22430Salle informatique
/30255.255.255.2522Liaison point-à-point routeurs

3.2 Classes historiques et plages privées (RFC 1918)

  • 10.0.0.0/8 — 16 777 214 hôtes (grandes entreprises).
  • 172.16.0.0/12 — 1 048 574 hôtes (PME, datacenter).
  • 192.168.0.0/16 — 65 534 hôtes (LAN domestique, TPE).

4. Cybersécurité — Triade CIA

La triade CIA formalise les 3 propriétés fondamentales de la sécurité de l'information :

  • Confidentialité (Confidentiality) — seules les personnes autorisées accèdent à l'information (chiffrement AES, TLS, contrôle d'accès).
  • Intégrité (Integrity) — l'information n'est pas altérée (hash SHA-256, signature électronique).
  • Disponibilité (Availability) — le service reste accessible aux utilisateurs légitimes (redondance, sauvegarde, anti-DDoS).

✏️ TP — Calcul de sous-réseau et requête SQL

Énoncé 1 (réseau) : L'entreprise possède le réseau 192.168.50.0/24. Découpez-le en 4 sous-réseaux égaux pour les services Direction, Compta, Production, Invités.

  1. 4 sous-réseaux → besoin de 2 bits supplémentaires → masque /26 (255.255.255.192).
  2. Chaque sous-réseau a 64 adresses, 62 hôtes utiles.
  3. Direction : 192.168.50.0/26 · Compta : 192.168.50.64/26 · Production : 192.168.50.128/26 · Invités : 192.168.50.192/26.

Énoncé 2 (SQL) : Affichez la moyenne des notes par option, uniquement pour les étudiants inscrits depuis 2024.

SELECT e.option_choisie, AVG(n.note) AS moyenne
FROM etudiants e
INNER JOIN notes n ON n.etudiant_id = e.id
WHERE e.date_inscription >= '2024-01-01'
GROUP BY e.option_choisie;

💡 Outils gratuits recommandés

⚠️ Erreurs fréquentes débutants

  • Confondre masque réseau et adresse réseau. Le masque est commun à toutes les machines du sous-réseau.
  • Oublier les adresses réseau (premier IP) et broadcast (dernier IP) qui ne sont pas attribuables à des hôtes.
  • Utiliser SELECT * en production : inefficace et risqué (révèle la structure interne).
  • Concaténer des variables dans une requête SQL : faille d'injection SQL. Utilisez les requêtes préparées : SELECT * FROM users WHERE id=?.

5. Approfondissement — Modèle OSI couche par couche

Comprendre les 7 couches OSI est indispensable pour diagnostiquer un incident réseau : chaque incident concerne une couche précise. La règle de diagnostic : remonter du bas vers le haut.

CoucheNomUnité de données (PDU)ÉquipementExemple d'incident
1PhysiqueBitCâble RJ45, fibre optique, switch (ports), point d'accès Wi-FiCâble débranché, LED LINK éteinte
2Liaison de donnéesTrame EthernetSwitch, pont, carte réseau (MAC)Boucle réseau, doublon MAC, VLAN mal configuré
3RéseauPaquetRouteur, pare-feu L3 (IP)Mauvaise passerelle, route absente, ACL bloquante
4TransportSegment (TCP) / Datagramme (UDP)Pare-feu L4 (ports)Port fermé, SYN flood, connexion TCP qui timeout
5SessionDonnéesSession SSH déconnectée, cookie expiré
6PrésentationDonnéesCertificat TLS expiré, encodage UTF-8 corrompu
7ApplicationDonnéesErreur 500 PHP, requête SQL invalide

5.1 Encapsulation et décapsulation

Quand une application envoie une donnée, chaque couche ajoute un en-tête (header) avec ses propres informations : c'est l'encapsulation. À la réception, chaque couche retire son en-tête : c'est la décapsulation.

[Donnée applicative HTTP]
  + en-tête TCP (port src, port dst, séquence)         -> Segment TCP
    + en-tête IP (IP src, IP dst, TTL)                 -> Paquet IP
      + en-tête Ethernet (MAC src, MAC dst, type)     -> Trame Ethernet
        + signal électrique sur le câble cuivre        -> Bits physiques

6. Sous-réseautage VLSM — Calcul détaillé

Le VLSM (Variable Length Subnet Mask) découpe un réseau en sous-réseaux de tailles différentes selon les besoins. C'est un classique de l'épreuve E5 SISR.

6.1 Tableau de référence CIDR

CIDRMasque décimalMasque binaire (4 octets)Adresses totalesHôtes utiles
/30255.255.255.25211111111.11111111.11111111.1111110042
/29255.255.255.24811111111.11111111.11111111.1111100086
/28255.255.255.24011111111.11111111.11111111.111100001614
/27255.255.255.22411111111.11111111.11111111.111000003230
/26255.255.255.19211111111.11111111.11111111.110000006462
/25255.255.255.12811111111.11111111.11111111.10000000128126
/24255.255.255.011111111.11111111.11111111.00000000256254
/23255.255.254.011111111.11111111.11111110.00000000512510
/22255.255.252.011111111.11111111.11111100.000000001 0241 022
/16255.255.0.011111111.11111111.00000000.0000000065 53665 534

6.2 Exemple VLSM concret — PME 3 départements

Énoncé : la PME possède le réseau 172.16.0.0/22 (1 022 hôtes). Trois départements à raccorder :

  • Production : 500 postes (besoin réel ~600 hôtes).
  • Administration : 200 postes (besoin réel ~250 hôtes).
  • Direction : 50 postes (besoin réel ~60 hôtes).
  • Liens point-à-point routeurs : 2 hôtes par lien.

Découpage VLSM (du plus grand au plus petit) :

DépartementSous-réseauMasque1re IP utileDernière IP utileBroadcast
Production (/22 trop large, /23 = 510 - non, /22 nécessaire) → on prend /22 puis on subdivise. Refaisons avec /22 = 1022 hôtes : Production /23172.16.0.0/23255.255.254.0172.16.0.1172.16.1.254172.16.1.255
Administration /24172.16.2.0/24255.255.255.0172.16.2.1172.16.2.254172.16.2.255
Direction /26172.16.3.0/26255.255.255.192172.16.3.1172.16.3.62172.16.3.63
Lien R1↔R2 /30172.16.3.64/30255.255.255.252172.16.3.65172.16.3.66172.16.3.67

7. Ports TCP/UDP standards à mémoriser

ServicePortTransportUsage
FTP (data)20TCPTransfert de fichiers — données
FTP (control)21TCPTransfert de fichiers — commandes
SSH22TCPConnexion sécurisée à distance (Linux, Cisco)
Telnet23TCPConnexion à distance non sécurisée (à éviter)
SMTP25TCPEnvoi d'emails
DNS53UDP/TCPRésolution de noms
DHCP serveur67UDPDistribution d'adresses IP
DHCP client68UDPRéception de bail DHCP
HTTP80TCPWeb non chiffré
POP3110TCPRéception d'emails
IMAP143TCPRéception d'emails (synchronisation)
HTTPS443TCPWeb chiffré TLS
SMB / CIFS445TCPPartage de fichiers Windows
RDP3389TCPBureau à distance Windows
MySQL / MariaDB3306TCPBase de données MySQL
PostgreSQL5432TCPBase de données PostgreSQL
MongoDB27017TCPBase de données NoSQL
Redis6379TCPCache mémoire

8. Python — Approfondissement

8.1 Listes, dictionnaires, tuples

# Liste (mutable, ordonnée)
notes = [12, 14, 16, 9, 18]
notes.append(15)
print(notes[0])        # 12
print(notes[-1])       # 15
print(len(notes))      # 6
print(sorted(notes))   # [9, 12, 14, 15, 16, 18]

# Dictionnaire (clé:valeur)
etudiant = {
    "nom": "Martin",
    "prenom": "Alice",
    "option": "SISR",
    "notes": [14, 16, 12]
}
print(etudiant["nom"])
etudiant["age"] = 19
for cle, valeur in etudiant.items():
    print(f"{cle} -> {valeur}")

# Tuple (immuable)
coordonnees = (48.8566, 2.3522)   # Paris

8.2 Gestion d'erreurs try/except

try:
    n = int(input("Entrez un entier : "))
    resultat = 100 / n
    print(f"100 / {n} = {resultat}")
except ValueError:
    print("Erreur : ce n'est pas un entier valide.")
except ZeroDivisionError:
    print("Erreur : division par zéro impossible.")
except Exception as e:
    print(f"Erreur inattendue : {e}")
finally:
    print("Fin du programme.")

8.3 Lecture/écriture de fichiers

# Écriture
with open("rapport.txt", "w", encoding="utf-8") as f:
    f.write("Rapport TP réseau\n")
    f.write("Date : 2026-05-28\n")

# Lecture ligne par ligne
with open("rapport.txt", "r", encoding="utf-8") as f:
    for ligne in f:
        print(ligne.strip())

9. PHP — Approfondissement avec PDO

PDO (PHP Data Objects) est l'API recommandée pour accéder aux bases de données : requêtes préparées obligatoires pour prévenir l'injection SQL.

<?php
try {
    $pdo = new PDO(
        "mysql:host=localhost;dbname=lms;charset=utf8mb4",
        "user_app",
        "MotDePasseFort!",
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES => false,
        ]
    );

    // Requête préparée — SÉCURISÉE
    $stmt = $pdo->prepare("SELECT * FROM etudiants WHERE option_choisie = :opt AND moyenne >= :min");
    $stmt->execute([
        ":opt" => "SISR",
        ":min" => 12,
    ]);
    foreach ($stmt->fetchAll() as $etu) {
        echo "{$etu['prenom']} {$etu['nom']} — {$etu['moyenne']}\n";
    }
} catch (PDOException $e) {
    error_log("Erreur DB : " . $e->getMessage());
    http_response_code(500);
}
?>

10. SQL avancé — Jointures et contraintes

10.1 Les 4 types de jointures

JointureComportementCas d'usage
INNER JOINRenvoie uniquement les lignes qui matchent dans les 2 tablesÉtudiants ayant des notes
LEFT JOIN (ou LEFT OUTER JOIN)Renvoie toutes les lignes de la table de gauche + NULL pour les non-matches à droiteTous les étudiants même sans note
RIGHT JOINInverse de LEFT JOINToutes les notes même sans étudiant lié (incohérence à corriger)
FULL OUTER JOINRenvoie toutes les lignes des 2 tables, NULL si pas de match. MySQL ne le supporte pas nativement — utiliser UNION.Audit complet

10.2 Exemple LEFT JOIN

SELECT e.nom, e.prenom, COUNT(n.id) AS nb_notes, AVG(n.note) AS moyenne
FROM etudiants e
LEFT JOIN notes n ON n.etudiant_id = e.id
GROUP BY e.id, e.nom, e.prenom
ORDER BY moyenne DESC;

10.3 Transactions ACID

START TRANSACTION;
INSERT INTO commandes (client_id, montant) VALUES (42, 199.90);
SET @cmd_id = LAST_INSERT_ID();
INSERT INTO commande_lignes (commande_id, produit_id, quantite) VALUES (@cmd_id, 7, 2);
UPDATE stocks SET quantite = quantite - 2 WHERE produit_id = 7;
-- Si tout OK :
COMMIT;
-- Sinon :
-- ROLLBACK;

10.4 Contraintes essentielles

  • NOT NULL — valeur obligatoire.
  • UNIQUE — valeur unique dans la colonne.
  • PRIMARY KEY — identifiant unique de la ligne (= NOT NULL + UNIQUE + index).
  • FOREIGN KEY ... REFERENCES table(col) — intégrité référentielle.
  • CHECK (note >= 0 AND note <= 20) — règle métier.
  • DEFAULT — valeur par défaut si non renseignée.

11. Cybersécurité — Triade CIA approfondie

11.1 Confidentialité — Chiffrement AES-256

Le chiffrement symétrique AES-256 (Advanced Encryption Standard, clé 256 bits) est le standard mondial pour le chiffrement de données au repos. Utilisé par Bitlocker, LUKS, Veracrypt, S3 Server-Side Encryption.

# Linux — chiffrer un fichier avec OpenSSL AES-256
openssl enc -aes-256-cbc -salt -pbkdf2 -in secret.txt -out secret.txt.enc
# Déchiffrer
openssl enc -aes-256-cbc -d -pbkdf2 -in secret.txt.enc -out secret.txt

11.2 Intégrité — Hash SHA-256 et signature

Un hash cryptographique transforme un message en empreinte de taille fixe. Toute modification du message change radicalement l'empreinte (effet d'avalanche).

# Linux — calculer le hash SHA-256 d'un fichier
sha256sum debian-12.5.iso
# 8e51f33e9efe0ad...  debian-12.5.iso

# Comparer avec la valeur officielle
echo "8e51f33e9efe0ad... debian-12.5.iso" | sha256sum -c

11.3 Disponibilité — RPO, RTO, règle 3-2-1

  • RPO (Recovery Point Objective) — quantité maximale de données perdues acceptable. Ex. : RPO 4 h = sauvegarde au minimum toutes les 4 h.
  • RTO (Recovery Time Objective) — temps maximum pour restaurer le service. Ex. : RTO 2 h = serveur redémarré sous 2 h.
  • SLA 99.9 % = 8 h 45 min d'indisponibilité maximale par an. 99.99 % = 52 min/an. 99.999 % = 5 min/an.
  • Règle de sauvegarde 3-2-1 : 3 copies, 2 supports différents, 1 hors-site (résistance ransomware, incendie).

12. Cas pratique guidé — Plan d'adressage PME

Énoncé : « SARL Aurore » dispose du bloc 192.168.10.0/24 et veut 3 VLAN départementaux. Faites le plan d'adressage complet.

VLANDépartementHôtes prévusSous-réseauPlage utilisablePasserelleBroadcast
10Direction10192.168.10.0/27.1 à .30192.168.10.1192.168.10.31
20Compta20192.168.10.32/27.33 à .62192.168.10.33192.168.10.63
30Production60192.168.10.64/26.65 à .126192.168.10.65192.168.10.127
99Management5192.168.10.128/29.129 à .134192.168.10.129192.168.10.135

Pour aller plus loin

Continuez le parcours 🚀

Inscrivez-vous pour accéder aux 5 autres leçons + le quiz final.

Créer mon compte
🍪 Nous utilisons des cookies essentiels et, avec ton accord, des cookies analytiques. En savoir plus

⚙️ Préférences cookies

Choisis quels cookies tu acceptes — modifiable à tout moment.

🔐 Essentiels (obligatoires)Authentification, session, sécurité. Toujours actifs.
📊 Analytics anonymesMesure d'audience anonymisée — aucune donnée personnelle.
📣 MarketingPublicités ITAG pertinentes sur d'autres sites.
💬 Contactez-nous sur WhatsApp