Jumat, 22 Mei 2020

Struktur dan Pemrograman untuk Layer Aplikasi


Haii sobat math, kembali lagi nih ketemu mimin di blog Math is Easy. 
Nah, pada kesempatan kali ini, mimin mau ngeshare artikel nih, tapi di artikel kali ini agak beda dengan artikel sebelum-sebelumnya, karena di artikel kali ini mimin mau ngebahas tentang jaringan komputer, di dalamnya nanti bakalan diulas mengenai "Struktur dan Pemrograman untuk Layer Aplikasi". Dalam pembahasan kali ini akan ada 3 Sub Bab utama, yaitu
A. Karakteristik Layer Aplikasi
B. Pemrograman dengan Socket API
1. Struktur dan Penanganan Data
2. System Call
3. Skenario Penggunaan Pemrograman Socket
4. Socket Lanjutan
C. Remote Procedure Call (RPC)

Kuy, langsung aja cekidoottt !!!

A. Karakteristik Layer Aplikasi
Perlu sobat math tahu, dalam jaringan komputer itu, layer aplikasi merupakan layer tertinggi dalam model OSI maupun TCP/IP. Pada layer aplikasi sendiri terdapat beberapa karakterisik yang sama yaitu :
·     Merupakan aplikasi yang ditulis oleh user (user-written) atau aplikasi sudah merupakan standar dengan didalamnya sudah terdapat produk TCP/IP.  Aplikasi TCP/IP set yang terdapat antara lain : 1) TELNET, digunakan untuk mengakses remote host melalui terminal yang interaktif. 2) FTP (File Transfer Protocol) digunakan untuk transfer file antar disk. 3) SMTP (Simple Mail Transfer Protocol) digunakan sebagai sistem surat di internet.
·      Menggunakan sistem transpor UDP atau TCP. 
·      Menggunakan model client-server
B. Pemrograman dengan Socket API
Application Programming Interface (API) dapat digunakan oleh user untuk dapat membuat suatu aplikasi. Sedangkan untuk fasilitas jaringannya dapat menggunakan API bagian SOCKET. Dalam bagian ini akan dijelaskan contoh API yang digunakan untuk jaringan.
Pada bab ini dijelaskan bagaimana menggunakan bahasa pemrograman C untuk kepentingan jaringan pada mesin linux. Contoh kompilasi dan menjalankan program :
#gcc –o program source.c
#./program 
1. Struktur dan Penanganan Data
Sebelum menggunakan pemrograman socket diperlukan suatu variable struktur untuk menyimpan informasi tentang jaringan. Struktur yang diperlukan antara lain :
•   sockaddr
•   sockaddr_in
Contoh penggunaannya yaitu :
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
Dimana, sa_family digunakan untuk penentuan jenis family yang digunakan pada bab ini menggunakan AF_INET artinya menggunakan family INTERNETWORKING. Sedangkan untuk sa_data digunakan untuk informasi tujuan dan port yang digunakan. Untuk menggunakan struktur tersebut diperlukan 1 lagi struktur yaitu sockadd_in dimana arti “in” adalah internet.
struct sockaddr_in {
short int sin_family; // Address family
unsigned short int sin_port; // Port number
struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8]; // Same size as struct sockaddr
};
Dengan struktur ini maka programmer akan dengan mudah mengontrol data. Untuk menggunakan alamat IP perlu juga sebuah variabel struktur yaitu struktur in_addr, dimana struktur in_addr adalah sebagai berikut :
// Internet address (a structure for historical reasons)
struct in_addr {
unsigned long s_addr; // that’s a 32-bit long, or 4 bytes
};
Sehingga untuk penggunanya dapat dilakukan dengan cara, membuat sebuah variable contoh ina dan bertipe struct sockaddr_in maka ina.sin_addr.s_addr dapat digunakan sebagai objek untuk alamat IP.
a. Perubahan Variabel
Perubahan variable yang dapat digunakan adalah perubahan dari short (2 byte) menjadi long (4 byte). Selain itu, perubahan lainnya adalah host menjadi network. Masing-masing disingkat s untuk short, l untuk long, h untuk host, dan n untuk network.
Berikut fungsi dari perubahan-perubahan tersebut :
·      htons : perubahan dari host ke network dengan system short
·      htonl : perubahan dari host ke network dengan system long
·      ntohs : perubahan dari network ke host dengan system short
·      ntohl : perubahan dari network ke host dengan system long
b. Penanganan Alamat IP
Ada beberapa cara untuk memasukkan alamat IP ke dalam suatu variable pada pemrogaman socket. Apabila kita sudah memiliki variable struct sockadd_in ina, dan kita memiliki alamat IP “10.252.102.23”. Maka dengan fungsi inet_addr(“alamat IP”), akan dapat merubah alamat IP menjadi unsigned long.
Contoh penggunaan :
ina.sin_addr.s_addr = inet_addr("10.252.102.23");
Selain itu, ada cara yang lainnya, yaitu dengan menggunakan inet_aton :
Penggunaaannya : 
#include < sys/socket.h >
#include < netinet/in.h >
#include < arpa/inet.h >
int inet_aton(const char *cp, struct in_addr *inp);
 2. System Call
System Call adalah fungsi-fungsi dalam pemrograman yang digunakan untuk menjalankan dan mengakses jaringan. Di dalam System Call terdapat 11 fungsi, yaitu sebagai berikut :
a. Socket
Fungsi ini digunakan untuk inisialisasi dalam penggunaan socket. Dimana domain berisikan AF_INET, sedangkat type berisikan SOCK_STREAM atau SOCK_DGRAM dan protocol  berisikan angka 0. SOCK_STREAM digunakan apabila menggunakan protokol TCP dan SOCK_DGRAM digunakan untuk protokol UDP.
Penggunaannya :
#include < sys/types.h >
#include < sys/socket.h >
int socket (int domain, int type, int protocol);
b. Bind
Fungsi bind digunakan untuk melakukan asosiasi terhadap alamat IP dan port. Variabel sockfd didapat dari fungsi socket().
Penggunaannya :
#include < sys/types.h >
#include < sys/socket.h >
int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
c. Connect
Fungsi connect digunakan untuk mengakses suatu remote host.
Penggunaannya:
#include < sys/types.h >
#include < sys/socket.h >
int connect (int sockfd, struct sockaddr *serv_addr, int addrlen);
d. Listen
Fungsi dari perintah listen digunakan untuk menunggu koneksi dari suatu host.
Penggunaannya :
int listen (int sockfd, int backlog);
e. Accept
Fungsi dari accept digunakan setelah fungsi listen. Dimana socket akan meneruskan ke variable socket yang baru setelah suatu host menghubungi. Accept akan membentuk socket baru dan bisa diproses untuk send atau recv.
Penggunaannya:
#include < sys/socket.h >
int accept (int sockfd, void *addr, int *addrlen);
f. Close dan Shutdown
Fungsi close() dan shutdown() digunakan untuk menutup koneksi setelah melakukan pertukaran data. Shutdown digunakan apabila diinginkan suatu kondisi tertentu, variabel tersebut ditambahkan pada variable how.
Penggunaannya :
close (sockfd);
int shutdown (int sockfd, int how);
g. Getpeername()
Fungsi getpeername() digunakan untuk mengetahui informasi tentang tujuan.
Pengguaannya : 
#include < sys/socket.h >
int getpeername (int sockfd, struct sockaddr *addr, int *addrlen);
h. Send() dan Recv()
Fungsi dari send dan recv adalah untuk pertukaran data. Fungsi send() dan recv() digunakan untuk data dengan protokol yang berbasis connection-oriented, sedangkan untuk protokol yang berbasis connectionless-oriented menggunakan sendto() dan recvfrom().
Penggunaannya :
nt send (int sockfd, const void *msg, int len, int flags);
int recv (int sockfd, void *buf, int len, unsigned int flags);
i. Sendto() dan Recvfrom()
Fungsi dari sendto dan recvfrom adalah untuk pertukaran data dengan protokol DGRAM. Fungsi tersebut hampir sama dengan fungsi send dan recv dimana terdapat variabel tambahan yaitu struct sockaddr *to, dan int toleni.
Penggunaannya :
int sendto (int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen);
int recvfrom (int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);
j. Gethostname()
Fungsi gethostname() digunakan untuk mengetahui informasi tentang mesin jaringan kita.
Penggunaannya :
#include < unistd.h >
int gethostname (char *hostname, size_t size);
k. DNS – Mengirim ke “whitehouse.gov”, Dijawab “198.137.240.92”
Untuk mendapatkan hasil dari struktur hostent
Penggunaannya :
#include < netdb.h >
Struct hostent *gethostbyname (const char *name);
Struktur hostent memiliki objek didalam antara lain :
struct hostent {
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list; 
};
#define h_addr h_addr_list[0]
Dimana :
·       h_name – nama resmi dari suatu host
·       h_aliases – NULL , nama alternatif dari suatu host
·       h_addrtype – type dari alamat, contoh AF_INET
·       h_length – panjang dari data alamat IP
·       h_addr_list – ZERO, sekumpulan IP dengan nama tersebut
·       h_addr – alamat pertama dari h_addr_list
Untuk mendapatkan hasil dari struktur hostent digunakan fungsi gethostbyname(). Cara penggunaan dapat dilihat pada contoh program.
Contoh Program :
/*
** getip.c – a hostname lookup demo
*/
#include < stdio.h >
#include < stdlib.h >
#include < errno.h >
#include < netdb.h >
#include < sys/types.h >
#include < sys/socket.h >
#include < netinet/in.h >
#include < arpa/inet.h >
int main (int argc, char *argv [ ] )
{
struct hostent *h;
if (argc ! = 2) { // error check the command line
fprintf (stderr, “usage:getip address\n”);
exit(1);
}
if ((h=gethostbyname(argv[1])) = = null) { // get the host info
herror (“gethostbyname”);
exit(1);
}
printf (“Host name : %s\n”, h->h_name);
printf (“IP Address : %s\n”, inet_ntoa(*((struct in_addr *) h->h_addr)));
return 0;

}
3. Skenario Penggunaan Pemrograman Socket
Pemrograman socket menggunakan sistem client-server, dimana proses client berbicara dengan proses server dan sebaliknya. Contoh, client dengan aplikasi telnet akan menghubungi server yang menjalankan aplikasi telnetd.

Diagram alir yang digunakan tampak pada

4. Socket Lanjutan
Pada bagian ini dijelaskan tentang penggunaan beberapa fungsi yang dapat mendukung kerja dari program jaringan menggunakan pemrograman socket.
a. Blocking
Suatu aplikasi server dapat menerima paket data secara bersamaan, untuk itu perlu dilakukan pelepasan suatu pembatas atau yang disebut non-blocking.  Sehingga server bisa menerima data secara bersamaan. Pada initialisasi socket(), socket secara awal memiliki nilai awal blocking.  Untuk membuat mejadi bersifat non-blocking dilakukan dengan cara memanggil fungsi fcntl(). Hal ini dapat dilihat pada contoh berikut :  
#include < unistd.h >
#include < fcntl.h >
.
.
sockfd = socket(AF_INET,  SOCK_STREAM,  0);
fcntl(sockfd,  F_SETFL, O_NONBLOCK);
.
.
b. Select
Dengan fungsi select, aplikasi akan dapat memilah dan memroses data pada waktu yang bersamaan.
Contoh penggunaan select() yaitu:
#include < sys/time.h >
#include < sys/types.h >
#include < unistd.h >
 int select(int numfds,  fd_set *readfds,  fd_set *writefds,  fd_set *exceptfds,  struct timeval *timeout);

C. Remote Procedure Call (RPC)
RPC adalah suatu protokol yang memperbolehkan suatu program komputer yang memberikan suatu subroutin kepada komputer yang lain untuk menjalankan suatu perintah tanpa melalui programmner membuat program terlebih dahulu. 


NB : Setiap kode yang ada simbol < dan > itu aslinya tanpa spasi semua ya sobat math, sengaja mimin kasih spasi antara simbol <  dan > sama kode di dalamnya , soalnya kalau ngga dikasih spasi ngga muncul kode-kode nya. hihi :)

Itulah materi mengenai Struktur dan Pemrograman untuk Layer Aplikasi yang mungkin dapat berguna bagi sobat math sekalian.
Mimin menyadari, materi yang mimin sampaikan masih jauh dari kata sempurna. Oleh karena itu, mimin mohon krisan nya yang membangun ya sobat math. Silahkan komentar jika ingin berkomentar mengenai materi yang mimin sampaikan di kolom komentar di bawah yaaa ...

Sampai ketemu lagi dengan mimin di artikel-artikel matematika lainnya sobat math ..
See you ...

Tidak ada komentar:

Posting Komentar