Endüstriyel Ethernet
TEKNİK REHBER ENDÜSTRİYEL ETHERNET TSN 2026

TSN —
Time-Sensitive Networking.

IEEE 802.1 standartlar ailesi ile standart Ethernet üzerinde deterministik iletişim: zamanlama, önceliklendirme ve ağ senkronizasyonu.

00 TSN nedir — IEEE 802.1 ailesi ve motivasyon

TSN (Time-Sensitive Networking), IEEE 802.1 çalışma grubunun geliştirdiği, standart Ethernet üzerinde zaman garantili (deterministik) iletişim sağlayan standartlar bütünüdür. Amaç; EtherCAT veya PROFINET gibi özel protokollere gerek kalmadan, IT ve OT ağlarını tek bir Ethernet altyapısında birleştirmektir.

Standart Ethernet, CSMA/CD ve best-effort iletim modeliyle tasarlanmıştır. İki paket aynı anda gönderilirse çakışma olur; iletim gecikmesi değişkendir (jitter). Endüstriyel otomasyon, ses/video yayını ve araç içi ağlar ise garantili gecikme ve sıfıra yakın jitter gerektirir. TSN bu ihtiyacı standart donanım üzerinde karşılar.

TSN standartlar ailesi

StandartKonuDurum
IEEE 802.1AS-2020Zamanlama ve senkronizasyon (gPTP)Yayımlandı
IEEE 802.1Qbv-2015Enqueue Time ile iletim seçimi (TAS)802.1Q'ya entegre
IEEE 802.1Qav-2009Akış tabanlı gecikme sınırlaması (CBS)802.1Q'ya entegre
IEEE 802.1Qbu-2016Frame preemption802.1Q'ya entegre
IEEE 802.1CB-2017Frame replikasyon ve eleme (FRER)Yayımlandı
IEEE 802.1Qcc-2018Stream Reservation (SRP) güncellemeleri802.1Q'ya entegre
IEEE 802.1Qci-2017Per-Stream Filtering and Policing802.1Q'ya entegre
NOT

TSN standartlar ailesi IEEE 802.1Q mega-standardında birleştirilmiştir. "802.1Qbv" gibi isimler artık ayrı doküman değil, 802.1Q revizyonlarındaki bölümlere atıfta bulunur.

01 802.1Qbv — Gate Control List ve TDMA zamanlama

IEEE 802.1Qbv (Time-Aware Shaper, TAS), her çıkış kuyruğu için bir kapı (gate) tanımlar. Bu kapılar, kesin zamanlara göre açılıp kapatılarak belirli bir trafik sınıfının belirli zaman diliminde iletilmesi garantilenir.

Temel kavramlar

Gate Control List (GCL)Her giriş, bir kapı durumu (bitmask: hangi kuyruk açık) ve süre (nanosaniye cinsinden) çiftinden oluşur. GCL döngüsel olarak tekrar eder.
Cycle TimeGCL'nin toplam periyodu. Örneğin 1 ms döngü içinde 200 µs'lik "koruma penceresi" ve 800 µs'lik best-effort penceresi tanımlanabilir.
Guard BandZaman kritik penceresinden hemen önce kapıların kapatıldığı kısa süre. Devam eden uzun bir frame'in kritik pencereye taşmasını engeller.
Base TimeGCL'nin başladığı mutlak zaman damgası (gPTP ağ zamanı cinsinden). Tüm köprüler aynı base time'ı kullanarak senkronize çalışır.
Trafik Sınıfları802.1Q VLAN önceliği (PCP 0-7), 8 trafik sınıfına eşlenir. TC7 en yüksek öncelik, TC0 en düşük.

GCL örneği — 1 ms döngü

  Zaman (µs):  0    200    250    1000
               │     │      │       │
  TC7 (krit.)  ████████             │  (200 µs açık)
  Guard band         ████           │  (50 µs kapalı)
  TC0-6 (BE)              ██████████  (750 µs açık)

  GCL:
  [0]  gates=0x80  duration=200000 ns   (sadece TC7 açık)
  [1]  gates=0x00  duration=50000  ns   (guard band)
  [2]  gates=0x7F  duration=750000 ns   (TC0-6 açık)
  cycle-time = 1000000 ns (1 ms)
İPUCU

802.1Qbv tek başına yeterli değildir; köprülerdeki GCL'lerin birbirleriyle koordineli olması gerekir. Bu koordinasyonu 802.1Qcc Stream Reservation ve merkezi ağ yönetimi (CNC) sağlar.

02 802.1Qav — Credit-Based Shaper

IEEE 802.1Qav (Credit-Based Shaper, CBS), akış bazlı bant genişliği rezervasyonu yapar. Her sınıf için bir "kredi" sayacı tutulur; frame ancak kredi pozitifken gönderilebilir. Bu mekanizma, ses/video akışları için garanti edilmiş bant genişliği ve sınırlı gecikme sağlar.

CBS parametreleri

idleSlopeSaniyede kazanılan kredi miktarı (bit/s). Rezerve edilmek istenen bant genişliğine eşit olmalıdır.
sendSlopeFrame gönderilirken saniyede tüketilen kredi. idleSlope - portSpeed ile hesaplanır (negatif değer).
hiCreditMaksimum pozitif kredi limiti. Taşma önler; burst büyüklüğünü sınırlar.
loCreditMinimum negatif kredi limiti. Frame gönderiminden sonra kredi bu sınıra kadar düşebilir.

Kredi hesabı örneği

ParametreSınıf A (SR Class A)Sınıf B (SR Class B)
Maks gecikme2 ms (2 köprü)50 ms (7 köprü)
Rezervasyon75% portu75% portu
idleSlope75 Mbit/s75 Mbit/s
sendSlope-25 Mbit/s-25 Mbit/s

CBS, TAS (802.1Qbv) ile birlikte kullanılır: TAS "ne zaman" göndereceğini belirlerken CBS "ne kadar" göndereceğini kontrol eder. Tipik bir TSN ağında ses/video akışları CBS ile, kritik kontrol mesajları ise TAS ile yönetilir.

03 802.1AS — gPTP ve ağ senkronizasyonu

IEEE 802.1AS (Generalized Precision Time Protocol, gPTP), TSN'in saat senkronizasyon standardıdır. IEEE 1588v2 (PTP) profilini endüstriyel Ethernet için özelleştirir ve tüm ağ düğümlerinin nanosaniye hassasiyetinde aynı zamana hizalanmasını sağlar.

gPTP hiyerarşisi

GrandmasterAğın en doğru saat kaynağı. GPS veya IEEE 1588 hardware clock'a bağlı olabilir. Tüm zaman referansını sağlar.
Best Master Clock Algorithm (BMCA)Her düğüm announce mesajları ile saat kalitesini (clockClass, clockAccuracy, offsetScaledLogVariance) ilan eder. En iyi saat Grandmaster seçilir.
Transparent ClockKöprü cihazlar. Mesajı iletirken kendi işleme gecikmesini "correction field"a ekler; bu sayede end-to-end gecikme telafisi otomatik yapılır.
Boundary ClockHer portunda bağımsız PTP zamanlayıcısı olan büyük köprüler. Segmentler arası senkronizasyon köprüsü görevi görür.

Sync mesajlaşma akışı

Grandmaster                 Slave
    │                          │
    │── Sync (t1) ────────────►│  (t2 slave'de ölçülür)
    │── Follow_Up (t1) ───────►│
    │                          │
    │◄─ Delay_Req (t3) ────────│  (t3 slave'de ölçülür)
    │── Delay_Resp (t4) ───────►│
    │                          │
    │  offset = ((t2-t1)-(t4-t3)) / 2
    │  delay  = ((t2-t1)+(t4-t3)) / 2

gPTP vs IEEE 1588v2 farkları

ÖzellikIEEE 1588v2gPTP (802.1AS)
Taşıma katmanıUDP/IPv4, UDP/IPv6, EthernetSadece Ethernet (L2)
Mesaj türleriTüm PTP mesajlarıAzaltılmış alt küme
Propagation delayEnd-to-end veya peer delaySadece peer delay
Transparent ClockOpsiyonelZorunlu
ProfilGenel amaçlıTSN'e özel, AVB/otomotiv

04 Linux TC alt sistemi — taprio ve ETF qdisc

Linux traffic control (TC) alt sistemi, ağ paketlerinin sıralamasını ve zamanlamasını yönetir. TSN için iki kritik qdisc (queueing discipline) mevcuttur: taprio (TAS/802.1Qbv) ve ETF (Earliest TxTime First).

taprio — Time-Aware Priority Shaper

taprio, 802.1Qbv'nin Linux implementasyonudur. Gate Control List'i doğrudan kernel'da uygular ve donanım desteği varsa (hardware offload) NIC'in timestamp donanımına devret.

# taprio konfigürasyonu — 1 ms döngü, 4 kuyruk
# TC7: 200 µs kritik pencere | TC0-6: 750 µs | guard 50 µs
tc qdisc replace dev eth0 parent root handle 100 taprio \
    num_tc 4 \
    map 3 3 3 3 3 3 3 0 1 2 0 0 0 0 0 0 \
    queues 1@0 1@1 1@2 1@3 \
    base-time 0 \
    sched-entry S 0x08 200000 \
    sched-entry S 0x00 50000  \
    sched-entry S 0x07 750000 \
    clockid CLOCK_TAI \
    flags 0x2       # 0x2 = software mode, 0x0 = hardware offload
num_tcTrafik sınıfı sayısı (maks 8). NIC kuyruklarıyla eşleşmeli.
mapVLAN önceliği (0-15) → trafik sınıfı eşleme. 16 giriş, her biri TC numarası.
queues"sayı@başlangıç" formatında her TC için NIC kuyruğu ataması.
sched-entry SGCL girişi: "S" = Set-And-Hold-MAC, bitmask, süre(ns).
clockid CLOCK_TAITAI (International Atomic Time) — PTP zamanıyla uyumlu. GPS kaynaklı sistemlerde UTC+37 s offset.

ETF — Earliest TxTime First

ETF qdisc, pakete gömülü SO_TXTIME zaman damgasına göre iletimi zamanlar. taprio'nun alt qdisc'i olarak kullanılır ve nanosaniye hassasiyetinde paket gönderim zamanlaması sağlar.

# ETF'yi taprio alt qdisc'i olarak ekle
tc qdisc add dev eth0 parent 100:1 etf \
    offload \
    clockid CLOCK_TAI \
    delta 200000    # 200 µs önceden kuyruğa al

# ETF + taprio için socket konfigürasyonu (C kodu):
# setsockopt(sock, SOL_SOCKET, SO_TXTIME, &sk_txtime, sizeof(sk_txtime));
# cmsg ile SCM_TXTIME zaman damgası gönder

CBS — Credit-Based Shaper qdisc

# CBS qdisc (802.1Qav için)
tc qdisc add dev eth0 parent 100:2 cbs \
    idleslope 75000    \   # 75 Kbit/s
    sendslope -925000  \   # sendslope = idle - port_speed
    hicredit  30       \   # byte cinsinden
    locredit  -38      \
    offload 1              # NIC hardware offload

05 linuxptp — ptp4l, phc2sys, ts2phc

linuxptp, Linux için IEEE 1588 ve 802.1AS uyumlu PTP implementasyonudur. ptp4l PTP protokolünü çalıştırır, phc2sys NIC hardware clock'u sistem saatiyle senkronize eder ve ts2phc ise GPS/1PPS sinyalinden hardware clock'u disipline eder.

ptp4l konfigürasyonu (gPTP profili)

# /etc/ptp4l.conf — gPTP (802.1AS) profili
[global]
gmCapable               1
priority1               128
priority2               128
logAnnounceInterval     0      # 1 saniyede 1 announce
logSyncInterval         -3     # 8 ms'de 1 sync (2^-3)
logMinDelayReqInterval  -3
network_transport       L2     # Ethernet L2 (gPTP)
delay_mechanism         P2P    # Peer delay (gPTP zorunluluğu)
egressLatency           0
ingressLatency          0
time_stamping           hardware  # NIC hardware timestamping
tsproc_mode             filter
delay_filter            moving_median
delay_filter_length     10
clockServoDomain        0

[eth0]                         # TSN NIC arayüzü
# ptp4l başlatma
sudo ptp4l -f /etc/ptp4l.conf -i eth0 -m &

# phc2sys: NIC PHC → CLOCK_REALTIME
sudo phc2sys -s eth0 -c CLOCK_REALTIME \
             -O 0 -R 8 -f /etc/ptp4l.conf -m &

# phc2sys: CLOCK_REALTIME → CLOCK_TAI (taprio için)
sudo phc2sys -s CLOCK_REALTIME -c CLOCK_TAI \
             -O -37 -R 8 &

# Senkronizasyon durumunu izle
sudo pmc -u -b 0 'GET CURRENT_DATA_SET'
# offset from master: -5 ns
# mean path delay: 234 ns

ts2phc — GPS ile hardware clock senkronizasyonu

# /etc/ts2phc.conf
[global]
ts2phc.master 1          # Bu cihaz Grandmaster
leapfile /usr/share/zoneinfo/leap-seconds.list

[eth0]                   # TSN NIC
ts2phc.extts_polarity rising

[/dev/pps0]              # GPS 1PPS sinyali
ts2phc.master 1

linuxptp araçları özeti

AraçGörevTipik Kullanım
ptp4lPTP protokol motoruHer TSN düğümünde çalışır
phc2sysPHC ↔ sistem saati senkronizasyonuCLOCK_TAI'yi güncel tutar
ts2phcHarici referans → PHCGPS/GNSS Grandmaster kurulumu
pmcPTP Management ClientDurum sorgulama, konfigürasyon
timemasterNTP+PTP kombinasyonuSistem saati yönetimi
NOT

Hardware timestamping zorunludur — software timestamping ile TSN performansı elde edilemez. NIC'in ethtool -T çıktısında "hardware-transmit" ve "hardware-receive" desteği görünmelidir.

06 LLDP ve komşu keşfi

LLDP (Link Layer Discovery Protocol, IEEE 802.1AB), ağ cihazlarının komşularını keşfetmesi ve yeteneklerini ilan etmesi için kullanılır. TSN ağlarında her düğüm LLDP ile IEEE 802.1Qbv ve 802.1AS desteğini diğer düğümlere bildirir.

TSN ile ilgili LLDP TLV'ler

IEEE 802.1 OUI TLV (0x0080C2)VLAN adı, port VLAN ID, protokol VLAN ID ve MAC/PHY konfigürasyonu için genişletilmiş TLV'ler.
802.1AS Capabilities TLVgPTP desteği, as capable flag, ölçülen link delay değerleri. Neighbor Discovery için kritik.
IEEE 802.3 OUI TLV (0x00120F)MAC/PHY konfigürasyonu, maksimum frame boyutu, güç üzerinden Ethernet (PoE) bilgileri.
# lldpd kurulumu ve konfigürasyon
sudo apt install lldpd

# Konfigürasyon dosyası /etc/lldpd.conf
configure system description "TSN Edge Node v1.0"
configure lldp tx-interval 5       # Her 5 saniyede bir yayın
configure lldp tx-hold 4           # TTL = tx-interval × tx-hold

sudo systemctl enable lldpd
sudo systemctl start lldpd

# Komşuları listele
sudo lldpcli show neighbors
# -------------------------------------------------------------------------------
# Interface:    eth0, via: LLDP, RID: 1, Time: 0 day, 00:02:34
#   Chassis:
#     ChassisID: mac aa:bb:cc:dd:ee:01
#     SysName:   tsn-switch-01
#     MgmtIP:    192.168.1.1
#   Port:
#     PortID:    ifname eth1
#     PortDescr: TSN Port 1 (802.1Qbv)

# Yetenekleri göster
sudo lldpcli show neighbors details | grep -A5 802.1
İPUCU

TSN merkezi ağ konfigürasyonu (CNC/CUC) için NETCONF/YANG kullanan sistemler, LLDP bilgilerini topoloji veritabanını doldurmak için kullanır. lldpd'nin NETCONF köprüsü için yang-lldp modeli mevcuttur.

07 TSN destekli NIC'ler — Intel i210/i225 ve NXP LS1028A

TSN performansı büyük ölçüde NIC donanımına bağlıdır. Hardware timestamp, hardware taprio offload ve çoklu TX kuyruğu desteği olmadan yazılım tabanlı TSN'in jitter'ı yüzlerce mikrosaniyeye çıkabilir.

Intel I210 / I225

Intel I210-T1GbE, 4 TX + 4 RX kuyruğu, hardware timestamping, taprio software mode. TSN prototipleri için standart seçim. igb sürücüsü.
Intel I225-LM / I226-V2.5 GbE, 4 kuyruk, hardware taprio offload, Launch Time Control (ETF hardware), 802.1Qbv. igc sürücüsü.
# I225 hardware taprio offload kontrolü
ethtool -k eth0 | grep -E "tx-checksum|hw-tc-offload"
# hw-tc-offload: on   (taprio hardware offload aktif)

# I225 timestamp yetenekleri
ethtool -T eth0
# Capabilities:
#         hardware-transmit     (SOF_TIMESTAMPING_TX_HARDWARE)
#         software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)
#         hardware-receive      (SOF_TIMESTAMPING_RX_HARDWARE)
#         hardware-raw-clock    (SOF_TIMESTAMPING_RAW_HARDWARE)
# PTP Hardware Clock: 0
# Hardware Transmit Timestamp Modes:
#         off                   (HWTSTAMP_TX_OFF)
#         on                    (HWTSTAMP_TX_ON)

# I225 için hardware taprio
tc qdisc replace dev eth0 parent root taprio \
    num_tc 4 \
    map 3 3 3 3 3 3 3 0 1 2 0 0 0 0 0 0 \
    queues 1@0 1@1 1@2 1@3 \
    base-time 0 \
    sched-entry S 0x08 200000 \
    sched-entry S 0x07 800000 \
    clockid CLOCK_TAI \
    flags 0x0    # 0x0 = hardware offload

NXP LS1028A (SoC)

LS1028A, entegre TSN switch çekirdeği içeren bir SoC'tur. ENETC (Ethernet Controller) ve Felix switch donanımı ile tam 802.1Qbv/Qav/AS desteği sunar; ayrı NIC gerekmez.

ÖzellikIntel I225NXP LS1028A
TipPCIe NICEntegre SoC switch
Port sayısı16 (Felix switch)
802.1Qbv offloadEvetEvet
802.1ASSoftware (ptp4l)Hardware (ptp4l + enetc)
802.1CB FRERHayırEvet
Linux sürücüsüigcenetc + mscc-felix

08 Pratik: taprio + ETF ile deterministik UDP gönderim

Bu bölümde Intel I225 NIC'e sahip bir Linux makinesinden, taprio + ETF qdisc kombinasyonunu kullanarak nanosaniye hassasiyetinde zamanlı UDP paket gönderimi gerçekleştirilir.

Sistem hazırlığı

# 1. PTP senkronizasyonu başlat
sudo ptp4l -f /etc/ptp4l.conf -i eth0 -m &
sudo phc2sys -s eth0 -c CLOCK_REALTIME -O 0 -R 8 -m &
sudo phc2sys -s CLOCK_REALTIME -c CLOCK_TAI -O -37 -R 8 &

# 2. Senkronizasyonu doğrula (offset < 1 µs beklenir)
sudo pmc -u -b 0 'GET CURRENT_DATA_SET' | grep offset
# offsetFromMaster   -143

# 3. taprio + ETF konfigürasyonu (I225 hardware offload)
sudo tc qdisc del dev eth0 root 2>/dev/null
sudo tc qdisc add dev eth0 parent root handle 100 taprio \
    num_tc 2 \
    map 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 \
    queues 1@0 1@1 \
    base-time $(date +%s)000000000 \
    sched-entry S 0x01 300000 \
    sched-entry S 0x02 700000 \
    clockid CLOCK_TAI \
    flags 0x0

sudo tc qdisc add dev eth0 parent 100:1 etf \
    offload clockid CLOCK_TAI delta 200000

SO_TXTIME ile zamanlı UDP gönderici

/* tsn_sender.c — ETF + SO_TXTIME ile deterministik UDP */
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <arpa/inet.h>
#include <linux/net_tstamp.h>
#include <linux/errqueue.h>

#define DST_IP    "192.168.1.2"
#define DST_PORT  5000
#define CYCLE_NS  1000000ULL   /* 1 ms */
#define OFFSET_NS 200000ULL    /* pencere başından 200 µs sonra */

int main(void)
{
    int sock = socket(AF_INET, SOCK_DGRAM, 0);

    /* SO_TXTIME'ı etkinleştir */
    struct sock_txtime sk_txtime = {
        .clockid = CLOCK_TAI,
        .flags   = 0,
    };
    setsockopt(sock, SOL_SOCKET, SO_TXTIME,
               &sk_txtime, sizeof(sk_txtime));

    /* VLAN önceliği 7 (TC7) için SO_PRIORITY */
    int prio = 7;
    setsockopt(sock, SOL_SOCKET, SO_PRIORITY, &prio, sizeof(prio));

    struct sockaddr_in dst = {
        .sin_family = AF_INET,
        .sin_port   = htons(DST_PORT),
    };
    inet_pton(AF_INET, DST_IP, &dst.sin_addr);

    struct timespec now;
    clock_gettime(CLOCK_TAI, &now);
    uint64_t txtime = (uint64_t)now.tv_sec * 1000000000ULL
                    + now.tv_nsec;
    /* Bir sonraki döngü sınırına hizala */
    txtime = (txtime / CYCLE_NS + 1) * CYCLE_NS + OFFSET_NS;

    for (int i = 0; i < 1000; i++) {
        char buf[64];
        snprintf(buf, sizeof(buf), "TSN frame %d txtime=%lu", i, txtime);

        /* Kontrol mesajında txtime gönder */
        char cmsg_buf[CMSG_SPACE(sizeof(uint64_t))];
        struct iovec  iov = { buf, strlen(buf) };
        struct msghdr msg = {
            .msg_name       = &dst,
            .msg_namelen    = sizeof(dst),
            .msg_iov        = &iov,
            .msg_iovlen     = 1,
            .msg_control    = cmsg_buf,
            .msg_controllen = sizeof(cmsg_buf),
        };
        struct cmsghdr *cm = CMSG_FIRSTHDR(&msg);
        cm->cmsg_level  = SOL_SOCKET;
        cm->cmsg_type   = SCM_TXTIME;
        cm->cmsg_len    = CMSG_LEN(sizeof(uint64_t));
        memcpy(CMSG_DATA(cm), &txtime, sizeof(txtime));

        sendmsg(sock, &msg, 0);

        txtime += CYCLE_NS;  /* Sonraki döngü */
    }

    close(sock);
    return 0;
}

Gecikme ölçümü

# Alıcı tarafta RX timestamp ile gecikme ölç
# SO_TIMESTAMPING ile hardware RX zamanını al
python3 -c "
import socket, struct, time
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('0.0.0.0', 5000))
# SOF_TIMESTAMPING_RX_HARDWARE | SOF_TIMESTAMPING_RAW_HARDWARE
s.setsockopt(socket.SOL_SOCKET, socket.SO_TIMESTAMPING, 0x28)
while True:
    data, _, _, ts = s.recvmsg(1024, 1024)
    print(f'Alındı: {data[:20]}, HW TS: {ts}')
"

# cyclictest ile sistem latency ölçümü
sudo cyclictest -p80 -t1 -n -i1000 -l10000 \
                --policy=fifo \
                -h400 -q | tail -5
# Max: 18 µs (TSN + PREEMPT_RT ile)
UYARI

SO_TXTIME ile gönderilen paketler, belirtilen txtime'dan önce gönderilemez. Eğer uygulama paketleri çok geç hazırlarsa ETF drop eder. ethtool -S eth0 | grep tx_late ile geç gönderilen paketleri izleyin.