Skip to main content
  1. Concetti/

Frame, Pacchetto, Segmento - OSI e Stream

·6 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

Descrive la struttura a livelli dei dati di rete — dal frame Ethernet al protocollo applicativo — e come tshark/Wireshark li numerano e raggruppano in stream.

TL;DR
#

[ FRAME ETHERNET (L2) ]
  └─ [ PACCHETTO IP (L3) ]
       └─ [ SEGMENTO TCP (L4) ]
            └─ [ Dati applicativi (L7) — HTTP, DNS, LLMNR, ecc. ]

Ogni riga di tshark è un frame. Dentro al frame c'è tutta la matrioska.


Definizioni
#

  • Frame — unità di dati del livello 2 (Ethernet). Viaggia tra due MAC. Contiene header L2 (MAC sorgente/destinazione, tipo) + payload (pacchetto IP) + trailer (FCS).
  • Pacchetto — unità di dati del livello 3 (IP). Viaggia tra due indirizzi IP. Contiene header IP (IP sorgente/destinazione, TTL, protocol) + payload (segmento TCP/UDP).
  • Segmento — unità di dati del livello 4 (TCP). Viaggia tra due socket (IP:porta ↔ IP:porta). Contiene header TCP (porte, seq/ack, flag) + dati applicativi.

Attenzione: è sbagliato dire "pacchetto TCP" — il termine corretto è segmento TCP. Per un esame o una nota tecnica, usare i termini giusti.


La NIC
#

La NIC (Network Interface Card) è la scheda di rete: il pezzo hardware/driver che manda e riceve bit sul cavo (o antenna Wi-Fi). È lei che vede i frame a livello 2 e li passa allo stack IP del sistema operativo.

[FILO / ARIA][NIC][STACK IP (kernel)][tshark / Wireshark]

Quando leggi un pcap, stai osservando la sequenza di frame che la NIC ha passato allo stack.


I 7 livelli OSI — cosa conta per il Blue Team
#

LivelloNomeCosa guardi in analisi
L1FisicoMezzo, velocità, errori fisici — di solito fuori dal pcap
L2Data LinkMAC, ARP, VLAN → topologia locale, spoofing, broadcast
L3ReteIP, TTL, routing → chi parla con chi, da dove a dove
L4TrasportoPorte, flag TCP, connessioni → servizi, scansioni, sessioni
L5SessioneGestione logica di sessioni applicative (ID sessione, login)
L6PresentazioneTLS, encoding, compressione — payload spesso cifrato
L7ApplicazioneHTTP, DNS, LLMNR, SMB → contenuto reale, comandi, C2

L7 è dove trovi il contenuto che ti interessa: la colonna "Info" di tshark mostra sempre una descrizione del protocollo L7.


La matrioska OSI
#

[ FILO / ARIA ]
+-------------------------------+
|      FRAME ETHERNET (L2)      |
|  MAC DST | MAC SRC | TYPE ... |
+-------------------------------+
|       PACCHETTO IP (L3)       |
|  IP HDR  |      IP PAYLOAD    |
+-------------------------------+
    +---------------------+
    |  SEGMENTO TCP (L4)  |
    | TCP HDR | DATI      |
    +---------------------+
               +-----------------+
               |  HTTP / DNS /   |
               |  LLMNR / ecc.   |  (L7)
               +-----------------+

Quando in tshark espandi un frame con -V:

  • "Frame N" → tutta la scatola esterna (vista dalla NIC)
  • "Ethernet II" → header L2 (MAC sorgente/destinazione)
  • "Internet Protocol Version 4" → header IP (pacchetto)
  • "Transmission Control Protocol" → header TCP (segmento)
  • "HTTP / DNS / LLMNR..." → livello applicativo

Esempio concreto — riga tshark e frame completo
#

No.   Time      Source      Destination   Protocol Length Info
108   4.325517  10.2.28.88  224.0.0.252   LLMNR    75     Standard query ...

Questo corrisponde a un frame visto dalla NIC:

FRAME 108 (75 byte sul filo)
+------------------------------------------------------------------+
| ETHERNET HEADER (L2)                                             |
| +-----------------+-----------------+-------------------------+  |
| | MAC DST (6B)    | MAC SRC (6B)    | EtherType (2B)         |  |
| +-----------------+-----------------+-------------------------+  |
|   es: 01:00:5e:00:00:fc   3c:15:c2:aa:bb:cc      0x0800 (IPv4)   |
+------------------------------------------------------------------+
| PACCHETTO IP (L3)                                                |
| +-------------------------------------------------------------+  |
| | IP HEADER (20+ B)                                           |  |
| |  - Versione, TTL, Proto=17(UDP), IP sorg=10.2.28.88         |  |
| |  - IP dest=224.0.0.252                                      |  |
| +-------------------------------------------------------------+  |
| |            PAYLOAD IP = SEGMENTO UDP (L4)                   |  |
+------------------------------------------------------------------+
| SEGMENTO UDP (L4)                                               |
| +----------------+----------------+--------------------------+  |
| | Porta sorgente | Porta dest     | Lunghezza + Checksum     |  |
| | es: 5355       | 5355 (LLMNR)   |                          |  |
| +----------------+----------------+--------------------------+  |
| |           DATI UDP = MESSAGGIO LLMNR (L7)                   |  |
+------------------------------------------------------------------+
| MESSAGGIO LLMNR (L7)                                            |
| +-------------------------------------------------------------+  |
| | "Standard query 0x97f5 ANY DESKTOP-TEYQ2NR"                 |  |
| |  - ID transazione 0x97f5                                    |  |
| |  - Tipo: query ANY                                          |  |
| |  - Nome: DESKTOP-TEYQ2NR                                    |  |
| +-------------------------------------------------------------+  |
+------------------------------------------------------------------+

-V è la matrioska esplosa — -T fields -e è la matrioska selettiva
#

-V apre tutto il frame livello per livello — è utile per esplorare e capire cosa c'è dentro:

tshark -r file.pcap -Y "frame.number == 108" -V

-T fields -e campo è la stessa cosa ma selettiva — quando sai già il nome del campo, estrai solo quello:

tshark -r file.pcap -Y "frame.number == 108" \
  -T fields -e ip.src -e ip.dst -e udp.dstport

Flusso pratico: usi -V per esplorare → trovi il nome del campo → usi -T fields -e per estrarlo in modo pulito.


Stream — conversazioni logiche
#

Uno stream è una conversazione logica continua tra due endpoint a un certo livello dello stack.

Ogni livello ha i propri stream, indipendenti tra loro:

LivelloStreamEndpointCome identificarlo
L2Ethernet conversationMAC A ↔ MAC B[Stream index: N] in Ethernet
L3IP conversationIP A ↔ IP B[Stream index: N] in IP
L4TCP streamIP A:porta A ↔ IP B:porta Btcp.stream == N

Un singolo frame può avere tre stream index diversi — non hanno relazione numerica tra loro.

Frame 43:
  [Stream index: 2]   ← Ethernet conversation (MAC↔MAC)
  [Stream index: 25]  ← IP conversation (IP↔IP)
  [Stream index: 40]  ← TCP stream (connessione specifica)

In pratica userai quasi sempre tcp.stream (L4).


TCP stream — come funziona
#

Una connessione TCP non è un singolo frame — è una serie di frame:

Frame 40  → TCP stream 7  (SYN)
Frame 41  → TCP stream 7  (SYN/ACK)
Frame 42  → TCP stream 7  (ACK)
Frame 43  → TCP stream 7  (HTTP GET /...)
Frame 44  → TCP stream 7  (HTTP risposta, parte 1)
Frame 45  → TCP stream 7  (HTTP risposta, parte 2)

Trovare il tcp.stream di un frame:

tshark -r file.pcap -Y "frame.number == 4093" \
  -T fields -e frame.number -e tcp.stream
# output: 4093    40

Seguire tutta la conversazione:

tshark -r file.pcap -q -z "follow,tcp,ascii,40"

Scenario Reale
#

Analisi pcap MTA 2026-02-28 (NetSupport RAT):

  • Il beaconing verso 45.131.214.85:443 era tutto nel tcp.stream == 40
  • L'hostname DESKTOP-TEYQ2NR è emerso filtrando NBNS (L7)
  • Lo username brolf è emerso filtrando Kerberos (L7, kerberos.CNameString)
  • IP e MAC della vittima sono stati letti dal frame via -V su frame specifici

Collegato a
#

  • network — protocolli di rete, stack OSI
  • tshark — comandi per navigare frame, stream, campi
  • wireshark — GUI equivalente

Related