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
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 ...