Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Elementary SCTP Sockets Tietoliikennetekniikan jatko- opintojakso 2.

Samankaltaiset esitykset


Esitys aiheesta: "Elementary SCTP Sockets Tietoliikennetekniikan jatko- opintojakso 2."— Esityksen transkriptio:

1 Elementary SCTP Sockets Tietoliikennetekniikan jatko- opintojakso 2

2 one-to-one socket Kehitetty, jotta TCP:tä käyttävät ohjelmat voidaan helpommin kirjoittaa SCTP:tä käyttäviksi. Joitain eroja kuitenkin otettava huomioon 

3 one-to-one socket Socket-optiot muutettava TCP -> SCTP, esim. –TCP_NODELAY  SCTP_NODELAY –TCP_MAXSEG  SCTP_MAXSEG Jos lähettäjä tekee kahdesti write() niin lukeakseen nämä vastaanottajan täytyy myös tehdä read() kahdesti. (kirjan esimerkki s. 269) send(), sendto() ja sendmsg() toimivat kuten TCP:ssä. Half-close: Kun TCP:ssä kirjoittava pää kutsuu close() niin send bufferi puretaan vastaanottajalle ja normaali connection terminointi alkaa. –SCTP:n one-to-one tapauksessa sovelluskerroksen protokollaan joudutaan ehkä lisäämään viesti vastaavalle toiminnolle.

4 bind() listen() accept() read()write() read() close() socket() connect() write() close() socket() Yhteys luodaan client lähettää viestin server vastaa clientille SCTP Client SCTP Server read() EOF one-to-one socket

5 one-to-many socket Palvelinohjelmassa yhden descriptorin takana voi olla monta SCTP-assosiaatiota. (Toiminta voi kaukaisesti muistuttaa UDP:ta.) Association identifier ( sctp_assoc_t ) yksilöi kunkin assosiaation. Kun client sulkee assosiaation, server tekee saman. sendto(), sendmsg() tai sctp_sendmsg() osoitteeseen, johon assosiaatiota ei vielä ole, aiheuttaa uuden assosiaation avausyrityksen ko. osoitteeseen.

6 one-to-many socket send() ja write() ovat one-to-one socketia varten, one-to-many:ssa käytettävä sendto(), sendmsg() ja sctp_sendmsg().

7 one-to-many socket bind() listen() sctp_recvmsg() sctp_sendto() sctp_recvmsg() close() socket() sctp_sendmsg() socket() Yhteys luodaan, client lähettää viestin client vastaa serverille SCTP Client Assosiaatiolle shutdown SCTP Server serverin ei tarvitse välittää enää.

8 #include int sctp_bindx(int sockfd, const struct sockaddr *addrs, int addrcnt, int flags) 0: OK -1: ERROR sctp_bindx sitoo annetut osoitteet palvelinsocketiin. sockfd:socketin descriptori addrs : (paikalliset) osoitteet joihin bindataan addrcnt:osoitteiden määrä flags:SCTP_BINDX_ADD_ADDR(lisäys) SCTP_BINDX_REM_ADDR(poisto)

9 #include int sctp_connectx(int sockfd, const struct sockaddr *addrs, int addrcnt) 0: OK -1: ERROR sctp_connectx yhdistää etäpäähän. sockfd:socketin descriptor addrs:(etä)osoitteet joihin yhdistetään addrcnt:osoitteiden määrä

10 #include int sctp_getpaddrs(int sockfd, sctp_assoc_t id, struct sockaddr **addrs) number of peer addresses stored in addrs -1: ERROR sctp_getpaddrs, ”get peer addresses”, käytännössä korvaa getpeername – funktion, ja kertoo annetun assosiaation etäpään osoitteet. sockfd:socketin desriptor sctp_assoc_id:assosiaation id (1-to-1 tapauksessa tästä ei välitetä) addrs:sijainti johon osoitelista tehdään

11 #include void sctp_freepaddrs(struct sockaddr *addrs) Siivoaa osoitelistan annetusta sijainnista

12 #include int sctp_getladdrs(int sockfd, sctp_assoc_t id, struct sockaddr **addrs) Returns the number of local addresses stored in addrs -1:ERROR sctp_getladdrs kertoo annetun assosiaation paikalliset osoitteet. sockfd:descriptori id:assosiaation tunnus addrs:sijainti johon osoitteet sijoitetaan

13 #include void sctp_freeladdrs(struct sockaddr *addrs) tyhjentää osoitelistan annetusta sijainnista

14 sctp_sendmsg(int sockfd, const void *msg, size_t msgsz, const struct sockaddr *to, socklen_t tolen, uint32_t ppid, uint32_t flags, uint16_t stream, uint32_t timetolive, uint32_t context) Returns the number of bytes written. -1:ERROR The sctp_sendmsg() function enables advanced SCTP features while sending a message from an SCTP endpoint. sockfd:socketin descriptor msg:etäpäälle lähetettävä data msgsz:lähetettävien tavujen määrä to:etäpään osoite tolen:etäpään osoitteen pituus ppid:payload protocol id flags:SCTP optiot stream:SCTP stream number timetolive:lifetime on milliseconds, 0 = inf. context:SCTP context number

15 Esim. ret = sctp_sendmsg(sockfd, data, datasz, &dest, sizeof(dest), 24, MSG_PR_SCTP_TTL, 1, 1000, 52) Lähettää viestin data etäpäähän jonka osoite dest, MSG_PR_SCTP_TTL – optio asetettuna, streamiin 1, TTL asetettuna 1000 millisekuntiin. Payload protocol id on 24 ja context 52. --- sctp_sendmsg mahdollistaa helposti viestin lähettämisen yhdellä funktiolla.

16 ssize_t sctp_recvmsg(int sockfd, void *msg, size_t msgsz, struct sockaddr *from, socklen_t *fromlen, struct sctp_sndrcvinfo *sinfo, int *msg_flags) Returns number of bytes read. -1:FAILURE Vastaa sctp_sendmsg –funktiota, mutta kyse vastaanottamisesta. sockfd:socketin desctiptori msg:sijainti johon viesti luetaan msgsz:viestin koko from:lähettäjän osoite fromlen:osoitteen pituus sinfo:detailed information about the message (vain jos SCTP_EVENTS socket option asetettu) flags:SCTP optiot

17 int sctp_opt_info(int sockfd, sctp_assoc_t assoc_id, int opt, void *arg, socklen_t *siz) 0: SUCCESS -1: ERROR sctp_opt_info –funktiolla voidaan selvittää ja asettaa sctp socket optioita tietystä socketista ja assosiaatiosta. Voidaan käyttää järjestelmissä joissa in/out –muuttujia ei voi välittää getsockopt –funktiolle.

18 int sctp_peeloff(int sockfd, sctp_assoc_t id) Returns a new socket descriptor -1:ERROR sctp_peeloff –funktiolla voidaan ottaa one-to-many socketista yksittäinen assosiaatio one-to-one socketiksi.

19 #include int shutdown(int sockfd, int howto) 0:OK -1:ERROR shutdown –funktiota voidaan käyttää sulkemaan one-to-one socket joillain poikkeuksin... 

20 shutdown SCTP:ssä ei half-closed –tilaa: Kun shutdown kutsuttu, molempien päiden pitää purkaa lähetyspuskurista data toisilleen ja sulkea socket. funktion int howto –parametriksi SCTP:n tapauksessa: –SHUT_RD: estää assosiaatiolta lukemisen –SHUT_RW: estää assosiaatioon kirjoittamisen –SHUT_RDWR: estää molemmat

21 SCTP notifications SCTP:tä käyttävä ohjelma voi liittyä (subscribe) odottamaan tiettyä notificationia. Eventit ja notificationit Vain sctp_data_io_event:iin on oletuksena subscribattu. Kun event saapuu, msg_flags:iin on sijoitettu MSG_NOTIFICATION

22 SCTP notifications Notificationien data ( union sctp_notification ) - voidaan lukea socketista. Erotetaan varsinaisesta datasta recvmsg tai sctp_recvmsg -funktioilla.


Lataa ppt "Elementary SCTP Sockets Tietoliikennetekniikan jatko- opintojakso 2."

Samankaltaiset esitykset


Iklan oleh Google