Építsünk IP telefont! Moldován István Sonkoly Balázs
BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM TÁVKÖZLÉSI ÉS MÉDIAINFORMATIKAI TANSZÉK
Egy IP telefon felépítése BME-TMIT
Menedzsment interfész
[email protected]
Építsünk IP telefont!
2
Hálózati elérés követelményei BME-TMIT
● Operációs rendszer támogatás + ● Hálózati interfész kártya ● Meghajtó (driver) ● Helyes beállítás…
● Beagleboard: USB-n csatolt hálózati interfész ● Linux driver támogatás van a kernelben
● Általánosan hogy működne? ● Dióhéjban…
[email protected]
Építsünk IP telefont!
3
Driver BME-TMIT
● 2 fő feladat ● NIC hardverrel való kommunikáció – Hardver inicializálás, konfigurálás – Csomag küldés fogadás
● Illesztés a Linux kernelbe – Megfelelő struktúrák beregisztrálása – Alapvető függvények megvalósítása – struct net_device – struktúra a Linuxban ● include/linux/netdevice.h
● Kernel modulként szokták implementálni
[email protected]
Építsünk IP telefont!
4
Driver - példa BME-TMIT
● Létrehozás: alloc_netdev() - net_device létrehozása ● Regisztrálás: register_netdev() – az inicializáláskor static const struct net_device_ops mydriver_net_device_ops = { .ndo_open .ndo_stop .ndo_do_ioctl .ndo_get_stats .ndo_start_xmit };
= = = = =
mydriver_open, mydriver_close, mydriver_ioctl, mydriver_get_stats, mydriver_xmit,
● Fogadás: ● Interruptból: alloc skb, adat bemásol, netif_rx(skb)-vel átadja a kernelnek ● NAPI – „New API” – nincs interrupt – Pollozás nagy sebességnél Építsünk IP telefont!
[email protected]
5
sk_buff BME-TMIT
struct sk_buff – hálózati adat kezelésére A felsőbb szintek könnyen tudják használni A csomagon kívül az sk_buff tartalmaz
head, the start of the packet data, the start of the packet payload tail, the end of the packet payload end, the end of the packet len, the amount of data of the packet
Ezeket a mezőket feldolgozás közben módosítja a kernel
A hálózat kezelés architektúrája BME-TMIT
Network stack sk_buff
net_device
Network hardware driver
Bus infrastructure (platform, pci, usb, etc.)
Tipikus kommunikáció a PHY réteggel BME-TMIT
SoC
MII
MAC
PHY
Ethernet connector
MDIO
mii-tool / ethtool – parancs az Ethernet PHY lekérdezésekre
Network Device Interface
BME-TMIT
Higher Protocol Instances dev.c netif_rx
dev_queue_xmit
dev_open
dev_close
Network device (adapter-independent)
Network devices interface net_device
dev->hard_start_xmitdev->open dev->stop
Absztrakció a driverhez
driver.c net_rx
net_start_xmit
net_tx skb
net_interrupt
skb skb
Kártya driver net_opennet_stop (adapter-specifikus)
BME-TMIT
KERNEL
[email protected]
Építsünk IP telefont!
10
Kernel oldal BME-TMIT
● A kernel megvalósítja a felsőbb szintű protokoll stack-ek funkcióit ● A felhasználó számára egy socket interfészt nyújt ● A VoIP alkalmazás a socket interfészt használja User Mode Hardver kezelés részletei
[email protected]
Absztrakció
Kernel Mode
Építsünk IP telefont!
11
Kernel / user mód BME-TMIT
• User mode • • •
Access user-mode memory Illegal attempts will result in faults/exceptions
• Kernel mode • • • •
I/O instructions Access both user- and kernel-mode memory An instruction to change to user mode
12
Kernel – honnan? • Honnan tölthető le a kernel? • •
http://www.kernel.org Az utolsó stabil verzió - 3.5.4
13
BME-TMIT
Kernel BME-TMIT
• Rendszerinformáció
• Linux 2 . 6 . 26 - 2 VERSION
PATCHLEVEL
EXTRAVERSION
SUBLEVEL
14
Kernel architecture BME-TMIT
• Kernel forrás fa .
|-- arch
|-- include
|-- net
|-- block
|-- init
|-- README
|-- COPYING
|-- ipc
|-- REPORTING-BUGS
|-- CREDITS
|-- Kbuild
|-- samples
|-- crypto
|-- kernel
|-- scripts
|-- lib |-- security |-- Documentation |-- MAINTAINERS |-- sound |-- drivers |-- firmware
|-- Makefile
|-- usr
|-- fs
|-- mm
`-- virt
15
Kernel architecture BME-TMIT
• Kernel source tree •
linux/arch – architektúra specifikus források arch |-- alpha |-- arm |-- avr32 |-- blackfin |-- cris |-- frv |-- h8300 |-- ia64 |-- Kconfig |-- m32r |-- m68k |-- m68knommu |-- mips
|-- mn10300 |-- parisc |-- powerpc |-- s390 |-- sh |-- sparc |-- sparc64 |-- um |-- x86 `-- xtensa
16
Kernel architecture • Kernel forrás fa • linux/driver - Device driverek drivers |-- cpuidle |-- message |-- ide |-- accessibility |-- crypto |-- mfd |-- idle |-- acpi |-- dca |-- ieee1394 |-- misc |-- amba |-- dio |-- infiniband |-- mmc |-- ata |-- dma |-- mtd |-- input |-- atm |-- dsp |-- net |-- isdn |-- auxdisplay |-- edac |-- nubus |-- Kconfig |-- base |-- eisa |-- of |-- leds |-- block |-- oprofile |-- lguest |-- bluetooth|-- firewire |-- firmware |-- macintosh |-- parisc |-- cbus |-- gpio |-- Makefile |-- parport |-- cdrom |-- gpu |-- pci |-- mca |-- char |-- hid |-- pcmcia |-- md |-- clocksource |-- pnp |-- media |-- connector|-- hwmon 17 |-- memstick |-- power |-- cpufreq |-- i2c
BME-TMIT
|-- ps3 |-- thermal |-- rapidio |-- uio |-- regulator|-- usb |-- uwb |-- rtc |-- video |-- s390 |-- virtio |-- sbus |-- w1 |-- scsi |-- watchdog |-- serial |-- sh |-- xen |-- sn `-- zorro |-- spi |-- ssb |-- staging |-- tc |-- telephony
Kernel architecture BME-TMIT
• Más alrendszerek Directory
Description
Documentation
Kernel source documentation
init
Kernel boot and initialization
ipc
Interprocess communication code
kernel
Core subsystems
lib
Helper routines
net
Networking subsystem
security
Linux Security Module
sound
Sound subsystem
usr
Early user-space code (called initramfs)
include
header files, H/W independent header files in include/linux
fs
opn() read() write(), ext2, ext3, ext4, nfs, ufs, msdos, vfat, proc, devfs, ntfs, reiserfs, zfs,etc 18
Kernel beállítások •
BME-TMIT
Configuration targets: • • • • • • • • • • •
config - Update current config utilising a line-oriented program menuconfig - Update current config utilising a menu based program xconfig - Update current config utilising a QT based front-end gconfig - Update current config utilising a GTK based front-end oldconfig - Update current config utilising a provided .config as base silentoldconfig - Same as oldconfig, but quietly randconfig - New config with random answer to all options defconfig - New config with default answer to all options allmodconfig - New config selecting modules when possible allyesconfig - New config where all options are accepted with yes allnoconfig - New config where all options are answered with no 19
Kernel konfig BME-TMIT
• host $ make menuconfig Kconfig
20
BME-TMIT
ALAPVETŐ HÁLÓZATI BEÁLLÍTÁSOK
[email protected]
Építsünk IP telefont!
21
Hálózati konfiguráció BME-TMIT
● A beállítások fontosak – különben nincs kommunikáció ● IP telefon esetében biztosítani kell egy felületet a beállításukra
[email protected]
Építsünk IP telefont!
22
Hálózat beállítás lépései BME-TMIT
● Hálózati kártya élesztése ● Modprobe (lsmod, insmod, rmmod) ● Dmesg – ellenőrzésre
● Hálózati kártya konfigurálása ● Ifconfig ● Dhcp
● Routing tábla állítása ● DNS szerver
[email protected]
Építsünk IP telefont!
23
ifconfig BME-TMIT
● ifconfig eth0 addr 192.168.1.100 broadcast 192.168.1.255 netmask 255.255.255.0 up ● Netmask megadja a hálózati címet: a TCP/IP minden más címre küldött csomagot az átjárónak ad ● A broadcast leszűkíti a broadcast tartományt a lokális subnetre ● Up/down – ki-bekapcsolás
[email protected]
Építsünk IP telefont!
24
DHCP BME-TMIT
● Dynamic Host Configuration Protocol ● Lekéri az IP címet (és egyéb beállításokat) az alhálózat szerverétől ● dhclient eth0
● /etc/network/interfaces ● auto eth0 ● iface eth0 inet dhcp - VAGY ● iface eth0 inet static ● address 152.66.247.84 ● netmask 255.255.255.0 ● gateway 152.66.247.254 ● dns 152.66.247.10
[email protected]
Építsünk IP telefont!
25
Routing tábla BME-TMIT
● [root@tmp]# route add default gw 192.168.1.1 eth0
● DHCP-vel ez is beállítódik ● Egyébként kézzel állítandó ● /etc/network/interfaces ● Itt is megadható, statikusan megmarad ● Komplexebb routing tábla is előállítható ● Ellenőrzés: route
● netstat -r
[email protected]
Építsünk IP telefont!
26
DNS BME-TMIT
● /etc/hosts – az ismert hosztok IP címei ● Statikus
● /etc/resolv.conf ● Ellenőrzés ● Nslookup
● Szinte minden beállításra van grafikus tool
[email protected]
Építsünk IP telefont!
27
BME-TMIT
VOIP PROTOKOLL STACK
[email protected]
Építsünk IP telefont!
28
Transzport réteg BME-TMIT
● TCP ● Kapcsolat-orientált ● Megbízható kapcsolat ● Automatikus torlódás vezérlés ● A küldési sebesség automatikus – Az alkalmazás nem tudja vezérelni
● UDP ● Kapcsolat nélküli ● A sebességet az alkalmazás szabja meg
[email protected]
VoIP, 2005 Október 10, Budapest
29
Transzport réteg - Portok BME-TMIT
● Két host között egyszerre több TCP/UDP folyam lehet ● Azonosításra a portokat használják: ● 16 bites számok a transzport fejlécben
● A forrásnál általában a számítógép választja ki ● A cél általában egy ismert szám ● HTTP: 80, FTP: 21, SIP: 5060
● Így egyszerre több kapcsolat lehet ugyanarra a portra – akár ugyanarról a forrás gépről
[email protected]
VoIP, 2005 Október 10, Budapest
30
Transzport réteg – Portok2 BME-TMIT
● Egy kapcsolat azonosításához szükséges: ● Forrás IP, forrás port ● Cél IP, cél port port
port
80 2154 21
5842 1342
1210 2556
[email protected]
Host 1
VoIP, 2005 Október 10, Budapest
Host 2
31
UDP BME-TMIT
● Kapcsolat nélküli protokoll ● Nincs állapot információ
● Nem garantálja a csomagok megérkezését ● Nem küld újra ● Nem állít a küldési sebességen torlódás esetén
● Kis fejléc (8 byte) ● Főleg multimédia alkalmazások használják ● Valós idejű átviteleknél jó választás
[email protected]
VoIP, 2005 Október 10, Budapest
32
UDP kapcsolat kiépülés BME-TMIT
● A kapcsolat kiépülése a portok hozzárendeléséből áll ● A másik számítógép nem kell válaszoljon ● Ha hiba van ICMP üzenettel jelzi
● A protokoll szegmensekre bontja az adatot ● Az UDP szegmensek sorszámot kapnak ● a szegmenseket azonnal küldi
[email protected]
VoIP, 2005 Október 10, Budapest
33
UDP fejléc BME-TMIT
[email protected]
VoIP, 2005 Október 10, Budapest
34
TCP BME-TMIT
● Kapcsolat orientált ● Garantálja a csomagok megérkezését ● Ablakozó algoritmust használ
● Torlódásvezérlő algoritmust használ ● Megpróbálja kihasználni az elérhető sávszélességet ● Visszaveszi a küldési sebességet
[email protected]
VoIP, 2005 Október 10, Budapest
35
TCP BME-TMIT
[email protected]
VoIP, 2005 Október 10, Budapest
36
TCP – Sliding window BME-TMIT
● Advertised Window - ablak ● Az megérkezett adatok nyugtázódnak ● Nyugtára csúszik az ablak
● Elveszett csomag – lejár az időzítő ● Adaptív timeout (Karn algoritmus)
[email protected]
VoIP, 2005 Október 10, Budapest
37
TCP kapcsolat kiépülése/bontás BME-TMIT
● Kiépülés: 3-way handshake ● SYN -> SYN ACK -> ACK ● A fogadónak fogadni kell! ● A SYN üzenetek tartalmazzák a fogadó ablak méretét és a kezdeti szekvenciaszámokat
● Bontás ● FIN-FIN ack ● RST
● TCP - kétirányú
[email protected]
VoIP, 2005 Október 10, Budapest
38
RTP, RTCP BME-TMIT
● Az RTP protokoll: ● kifejezetten multimédia folyamok számára ● Szinkronizációs és folyam azonosításhoz szükséges adatok ● Multicast támogatás
● RTCP – RT Control Protocol ● RTP monitorozás, szabályozás ● visszacsatolás információk
[email protected]
VoIP, 2005 Október 10, Budapest
39
RTP tulajdonságok BME-TMIT
● Adat funkciók (RTP) ● Tartalom címkézés – Forrás azonosítás – Csomagvesztés észrevétele – Sorrendhelyesség ellenőrzése
● Időzítés – intra-media szinkronizáció:a jitter kiszűrése puffereléssel – inter-media szinkronizáció: a hang és kép szinkronizálása
● UDP protokollt használ, RTCP port = RTP+1
[email protected]
VoIP, 2005 Október 10, Budapest
40
RTP csomag fejléce BME-TMIT
V
P
X
CC
M PT Time Stamp SSRC CSRC identifiers …… Payload
Sequence Number
(V) Version; 2 bits
(P) Padding; 1 bit.
(X) Extension; 1 bit.
(CC) CSRC Count; 4 bit.
(M) Marker; 1 bit.
(PT) Payload Type; 7 bit.
Sequence Number; 16 bit.
Time Stamp; 32 bit.
SSRC; 32 bit.
CSRC List;
[email protected]
VoIP, 2005 Október 10, Budapest
41
RTP fejléc... (folytatás) BME-TMIT
● Sequence number mező ● Minden RTP csomagban nő
● Timestamp ● növelve a tartalmazott minták számával
● Synchronization SouRCe (SSRC) mező ● Egyértelműen meghatározza a forrást
● Contributing SouRCe (CSRC) és CC mezők ● A keverő használja a források azonosítására ● A CSRC lista méretét a CC mező adja meg
[email protected]
VoIP, 2005 Október 10, Budapest
42
RTCP BME-TMIT
● Periodikusan küld vezérlő csomagokat ● Főbb feladatai: ● Visszajelzés az átvitel minőségéről ● Mindenki felmérheti a résztvevők adatait ● Perszisztens transzport szintű kanonikus elnevezés forrásonként (CNAME) – tipikusan: user@host – Akkor sem változik ha a SSRC megváltozik!
[email protected]
VoIP, 2005 Október 10, Budapest
43
RTCP csomagok BME-TMIT
● Öt RTCP csomagtípus ● SR
Küldő oldali jelentések tx és rx statisztikák a küldőktől ● RR Vevő oldali jelentések rx statisztikák a résztvevőktől ● SDES Forrás leírás, CNAME ● BYE explicit megszakítás ● APP alkalmazás specifikus kiterjesztések
● Az RTCP használata nem kötelező
[email protected]
VoIP, 2005 Október 10, Budapest
44
VoIP Csomag BME-TMIT
● Ethernet/PPP/stb ● IP réteg ● UDP transzport réteg ● RTP – real time protocol
[email protected]
VoIP, 2005 Október 10, Budapest
45
BME-TMIT
Kérdések?
KÖSZÖNÖM A FIGYELMET!
[email protected]
Építsünk IP telefont!
46
Források BME-TMIT
● http://netlab-mn.unipv.it/insane/
[email protected]
Építsünk IP telefont!
47