socket programozas

Download Socket Programozas

Post on 12-Jul-2015

62 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

TCP/IP szlltsi rteg ( socket programozsi interfsz )

sszelltotta:

Mohcsi Jnos BME Informatikai Kzpont

BME Szmtgphlzatok jegyzet. Csak bels hasznlatra. Minden jog fenn tartva. Copyright 2000, BME Irnytstechnika s Informatika Tanszk

TCP/IP socket programozi interfsz

2

1 TCP/IP

1.1 TCP/IP S SOCKET INTERFSZ VISZONYAA TCP/IP rteges felptse: Alkalmazi program rteg Szlltsi rteg Internet rteg Adaptcis rteg Hordoz hlzat rteg A socket interfszt az 1980-as vek elejn, a University of California at Berkeley (UCB) egyik laborjban dolgoztk ki TCP/IP kezeli felleteknt, UNIX opercis rendszerekhez, azta UNIX szabvnyknt terjedt el, implementlva van a Windowsban is WinSock nven. A socket egy API (Application Program Interface), ami eredetileg Berkeley-UNIX -ban (4.x) jelent meg. System V. Release 4 is tvette, de abban van ms API is erre: TLI = Transport Layer Interface (Lsd szlltsi interfsz vizsglata). A socket processzek kztti kommunikcis eszkz, mely fggetlen attl, hogy a kommunikl processzek azonos, vagy klnbz gpen vannak-e, illetve amennyire lehet, elfedik a kommunikci megvalstsnak alsbb szintjeit. A kommunikci formja kliens-szerver alap, ami azt jelenti, hogy a szerver valamilyen jl definilt szolgltatst nyjt, amit a kliensek ignybe vesznek.

BME Szmtgphlzatok jegyzet. Csak bels hasznlatra. Minden jog fenn tartva. Copyright 2000, BME Irnytstechnika s Informatika Tanszk -2-

TCP/IP socket programozi interfsz

3

A host szerver kliens B host kliens hlzat hlzat

1.2

C host

bra a kliens szerver kommunikcirl.

Lehet kapcsolat-orientlt (connection-oriented) vagy kapcsolat nlkli (connectionless): minden adattviteli krsnl meg kell adni a clcmet. Szerver lehet iteratv (ilyenkor a szerver ciklusban vr, azonnal feldolgozza a berkezett krst, tipikusan akkoralkalmazott, ha minden krs feldolgozs vges s rvid idej), vagy konkurens (ilyenkor a szerver minden kiszolglskor fork()-ol, gyereke dolgozza fel, szl jra vr ciklusban a kvetkez krsre.) Ezek klnbz "kombincija" is megvalsithat (preforked, filedescriptor passing, stb.) ha nem blokkold vagy/s aszinkron rendszerhivsokat alkalmazunk.

1.2.1.1

BSD socket szerkezete:Felhasznli program socket knyvtr felhasznl kernel Stream fej SOCKMOD TPI: Transport Provider Interface Transport provider

1. bra: Socket szerkezet SVR4 UNIX-ban BME Szmtgphlzatok jegyzet. Csak bels hasznlatra. Minden jog fenn tartva. Copyright 2000, BME Irnytstechnika s Informatika Tanszk -3-

TCP/IP socket programozi interfsz

4

a felhasznli program szinte mint egy filedescriptort ltja a socket-et. Br nem minden filedescriptor mvelet mkdik (pl. lseek -> ESPIPE zenet)

1.3 A SOCKET RENDSZERHVSOKA Socket s TLI sszehasonltsa a rendelkezsre ll rendszerhvsok tekintetben: Szerep Funkci Socket TLI Szerver allokci/helyfoglals vgpont ltrehozs cmhez rendels queue mret llts vrakozs kapcsolat krelemre j filedescriptor ltrehozs Kliens allokci/helyfoglals vgpont ltrehozs cmhez rendels szerverhez kapcsolds Mindkettsocket() bind() connect() socket() bind() listen() accept() t_alloc() t_open() t_bind() t_listen()

t_open() t_bind() t_accept() t_alloc() t_open() t_bind() t_connect()

adattvitel (kapcsolat read() write() orintlt)recv() send()

read() write() t_rcv() t_snd() t_rcvudata() t_sndudata()

adattvitel (kapcsolat recvfrom() sendto() nlkli)recvmsg() sendmsg()

kapcsolat lezrs

close() shutdown()

t_close() t_sndrel()

BME Szmtgphlzatok jegyzet. Csak bels hasznlatra. Minden jog fenn tartva. Copyright 2000, BME Irnytstechnika s Informatika Tanszk -4-

TCP/IP socket programozi interfszt_snddis()

5

Ezenkvl a kvetkez programozskor:ioctl() fcntl() select()

rendszerhvsokat

szoks

hasznlni

hlzati

eszkzvezrl funkci filelert vezrel funkci szinkron/aszinkron multiplexelt I/O belltssa s

vrakozs egy I/O esemnyre Ezekre rszletesen a multiplexelt, aszinkron I/O s nem blokkold I/O fejezetekben trnk ki.

1.4 A SOCKET INTERFSZ LTALNOS LERSA1.4.1.1 A socket egy "communications domain" -hoz kapcsoldik a ltrehozskor:

Loklis vagy UNIX domain (AF_LOCAL vagy AF_UNIX): gpen belli kommunikcihoz Internet domain (AF_INET, AF_INET6): hlzaton t, a kvetkez protokollokkal: TCP: Transmission Control Protocol UDP: User Datagram Protocol IP: Internet Protocol ICMP: Internet Control Message Protocol (Ezeket egytt szoks TCP/IP -nek is nevezni.) Egyb lehetsges protokollok: ATM, IPX, Appletalk, DECNET, XNS, OSI, de egyes esetekben IPSec kulcsmenedzsment (PF_KEY), hlzati krtyaszint (Netlink)1.4.1.2 Az tvitel tpusai:

stream socket (SOCK_STREAM): kapcsolat-orientlt byte-stream: sorrendtart, megbzhat, ismtlds nlkli, nincs zenethatr. Tnyleges adatklds eltt a kapcsolatot fel kell pteni. datagram socket (SOCK_DGRAM) : kapcsolat nlkli, zenet-alap, nem megbzhat egyszer (raw) socket (SOCK_RAW) : kzvetlen hozzfrs a protokollhoz, annak adminisztrcijhoz, gy a felhasznl pthet sajt rtegeket sorrendes socket (SOCK_SEQPACKET) hasonl a streamhez, de BME Szmtgphlzatok jegyzet. Csak bels hasznlatra. Minden jog fenn tartva. Copyright 2000, BME Irnytstechnika s Informatika Tanszk -5-

TCP/IP socket programozi interfsz

6

zenethatrokat is kzvetti, kapcsolat-orientlt, megbzhat megbzhat zenet socket (SOCK_RDM: reliably delivered message socket): megbzhat, kapcsolat nlkli, zenet-orientlt Nem minden domain tartalmaz minden socket tpusra megvalstst. tvitel tpusa SOCK_STREAM SOCK_DGRAM SOCK_RAW SOCK_SEQPACKET SOCK_RDM Kapcsolat -orientlt nlkli -orientlt nlkli sorrendtart megbzhat i n i n i n i i ismtls nlk. i n i n zenethatr n i i i

1.4.1.3

Protokoll-default-ok Internet protokollok (AF_INET s AF_INET6) esetn:

AF_LOCAL SOCK_STREAM SOCK_DGRAM SOCK_RAW SOCK_SEQPACKET1.4.1.4 A kapcsolat-orientlt iddiagram:Kliens socket () bind () connect () Kapcsolat felvtel write () send() sendto() sendmsg() Hlzat

AF_INET TCP UDP Protokolltl fggen TCP UDP

AF_INET6

+ +

Protokolltl fggen

IPv4/ICMPv4/IGMPv4 IPv6/ICMPv6

Szerver socket () bind () listen () accept() Blokkoldik, mg krst nem kap

read () recv() recvfrom() recvmsg() write ()

feldolgozs

read ()

2. bra: Kapcsolatorientlt mkds iddiagramja

BME Szmtgphlzatok jegyzet. Csak bels hasznlatra. Minden jog fenn tartva. Copyright 2000, BME Irnytstechnika s Informatika Tanszk -6-

TCP/IP socket programozi interfsz1.4.1.5 A kapcsolat-nlkli iddiagram:Kliens socket() bind() sendto() sendmsg() Krs + adat recvfrom() recvmsg() ... sendto() SSI :SocketSer ce I er ace vi nt f Hlzat Szerver socket() bind()

7

recvfrom() SSI

3. bra: Kapcsolat nlkli mkds iddiagramja Minden "kapcsolatot" egy 5-s azonost: {Protokoll, helyi gpcm, helyi processz portszm, tvoli gpcm, tvoli processz portszm} Az 5-s csoport megvltoztatsra a a kvetkez rendszerhvsok llnak rendelkezsre attl fggen, hogy milyen szerepet jtszik a program: protokoll helyi gpcm, helyi tvoli gpcm, tvoli process portszm processz portszm Kapcsolat orientlt szerver Kapcsolat orientlt kliens Kapcsolat nlkli szerver Kapcsolat nlkli klienssocket() socket() socket() socket() bind() bind() bind() bind() listen(),accept() connect() recvfrom() sendto()

Lekrdezsre a getsockname() s a getpeername() rendszerhvsok szolglnak. Az accept() rendszerhvs eltt a szerver socket tvoli gpcme s tvoli processz portszma egy "mindent elfogad rtket" tartalmaz. Az accept() hatsra egy jabb socket keletkezik, s a rgi socket akr kpes lehet jabb krs kiszolglsra.

BME Szmtgphlzatok jegyzet. Csak bels hasznlatra. Minden jog fenn tartva. Copyright 2000, BME Irnytstechnika s Informatika Tanszk -7-

TCP/IP socket programozi interfsz

8

1.5 PROGRAMOZI INTERFSZ1.1.1 Socket ltrehozsa1.5.1.1 Socket

#include #include int socket (int family, int type, int protocol);

= file ler: OK, -1: hiba (kdja: errno) family: communications domain: kt konstans-kszlet adhatja meg, melyek pronknt azonosak: address family: cm formtuma protocol family: hlzati architektra : UNIX/Local domain: PF_UNIX = AF_UNIX Internet domain: PF_INET = AF_INET type: socket tpusa: jelenleg csak SOCK_STREAM, SOCK_DGRAM, SOCK_RAW van. protocol: a hasznland protokoll tpusa: 0: a default a family s a type szerint, vagy IPPROTO_ICMP, IPPROTO_IGMP, IPPROTO_TCP, IPPROTO_UDP,stb. ( -ban) 1.5.2 Socket hozzrendelse hlzati cmhez Ltrehozsa utn, elssorban szervernl kell, e nlkl (pl. a kliensnl) automatikusan egy egyedi cmhez rendeldik.

1.5.2.1

Bindint alen);

int bind (int fd, struct sockaddr *addrp, Fd: File ler, melyet socket() adott, Addrp: Cmler struktra cme:

struct sockaddr { ushort_t char };

sa_family;

/* mint socket()-ben 2 byte */ sa_data [14];

BME Szmtgphlzatok jegyzet. Csak bels hasznlatra. Minden jog fenn tartva. Copyright 2000, BME Irnytstechnika s Informatika Tanszk -8-

TCP/IP socket programozi interfsz vagy BSD4.4-ben:struct sockaddr { u_char sa_len; u_char sa_family; char sa_data [14]; }

9

De igazbl 16 byte-nl hosszabb is lehet, de ilyenn kell a cmt cast-olni. A socket hossznak lekrdezsre s belltsra a BSD 4.4-ben sa_len szolgl.

1.5.3 Socket lezrsa1.5.3.1 Close

close (int fd)

Ekkor a mg t nem adott adatok elveszhetnek, vagy mg tvehetek, lsd SO_LINGER opci.1.5.3.2 Shutdown

Csak kapcsolat-orientlt (connected) socket-re egyirny lezrsa socketnek.int shutdown (int fd, int how); /* =0 :OK, -1 :hiba how = 0: nem lehet tbb adatot tvenni a socket-tl, = 1: nem lehet tbb adatot tadni a socket-nek, = 2: egyik sem megy (ekvivalens a close()-al)

*/

1.5.4 Opcik belltsa ill. lekrdezse Melyeket a socket rteg dolgoz fel, gy protokoll-fggetlenek.int setsocketopt (int fd, i