server
Sebuah FTP client menjemput sebuah file dari sebuah FTP
server
Sebuah Telnet client yang digunakan untuk login ke sebuah
host jauh melalui sebuah Telnet server pada host jauh tsb.
Hubungan komunikasi
client server
client
---
client server
---
client
Gambar 1.2. Server Menangani Client Jamak pada Saat yang Sama
Application protocol
User web web
process client server application
layer
TCP protocol
TCP TCP transport layer
Protocol
stack
within IP protocol
kernel network
IP IP layer
Ethernet protocol
Ethernet Ethernet
driver driver
datalink
layer
Actual flow between
client and server
Ethernet
Client Server
application application
LAN LAN
Router Router
WAN
Router Router Router Router
Gambar 1.4. Client dan Server pada LAN Berbeda Terhubung Melalui
WAN
MODEL JARINGAN
Application
detail
Application Soket User
Presentation Application XTI process
Session
Transport TCP UDP
Network IPv4, IPv6 Kernel
Data Link Device driver Communications
Physical & hardware details
STANDARD-STANDAR UNIX
POSIX (Portable Operating System Interface)
IEEE Standard 1003.1 – 1988
Menspesifikasikan antarmuka bahasa C ke dalam sebuah kernel
serupa-UNIX, meliputi area-area sbb :
Primitif-primitif proses (fork, exec, signals, timers)
Lingkungan dari sebuah proses (User IDs, process groups)
File & direktori (semua fungsi I/O)
Basisdata-basisdata sistem (password file & group file)
Format archieve tar & cpio
IEEE Std 1003.1 – 1990
Juga dikenal sbg standard Internasional ISO/IEC 9945-1 : 1990.
Terdapat perubahan-perubahan minimal. Standard ini adalah API
bahasa C.
IEEE Std 1003.2 – 1992
Judulnya berisikan : “Part 2 : Shell & Utilities”. Bagian ini
mendefinisikan Shell (berdasarkan pada Shell V Bourne System) &
sekitar 100 Utilitas.
Dalam bahasan kita, kita merujuk ke standard ini sbg Posix.2.
IEEE Std 1003.1b – 1993
Dulunya dikenal sbg IEEE P1003.4 . Pembaharuan : memasukkan
ekstensi-ekstensi real-time yg dibangun oleh kelompok kerja
P1003.4. Item-item yg ditambahkan :
Sinkronisasi File
I/O asinkron
Semaphore
Manajemen memori (mmap & memori bersama)
Penjadwalan eksekusi
Clock & timers
& antrian pesan
IEEE Std 1003.1, edisi 1996 [IEEE 1996]
Juga disebut ISO/IEC 9945-1: 1996
Berisikan :
1003.1 – 1990 (API dasar)
1003.1b – 1993 (ekstensi-ekstensi real-time)
1003.1c – 1995 (pthreads)
1003.1i – 1995 (koreksi-koreksi teknis terhadap 1003.1b)
Dalam bahasan kita, kita merujuk ke standard ini sbg Posix.1.
Intro/daytimetcpcli.c
1 #include “unp.h”
2 int
3 main(int argc, char **argv)
4 {
5 int sockfd, n;
6 char recvline[MAXLINE + 1];
7 struct sockaddr_in servaddr;
8 if (argc != 2 )
9 err_quit(“usage: a.out <IPaddress>”);
26 exit(0);
27 }
Intro/daytimetcpcli.c
Menyertakan Header Kita Sendiri
1 Kita menyertakan header kita sendiri unp.h. Header ini berisikan
bermacam-macam header sistem yg dibutuhkan oleh sebagian
besar program-program jaringan & mendefinisikan bermacam-
macam konstanta yg kita gunakan (misal : MAXLINE)
Mengakhiri Program
26 Exit mengakhiri program. UNIX selalu menutup seluruh
descriptor yg terbuka ketika sebuah proses berakhir, jadi soket
TCP kita sekarang ditutup.
Bahasan kita menuju detail-detail yang lebih banyak lagi, pada semua
point yang baru kita bahas tadi.
Lib/wrapsock.c
172 Int
173 Socket(int family, int type, int protocol)
174 {
175 int n;
Program :
int n;
if ((n = pthread_mutex_lock(&ndone_mutex)) != 0)
errno = n, err_sys(“pthread_mutex_lock error’);
Lib/wrappthread.c
72 void
73 Pthread_mutex_lock(pthread_mutex_t *mptr)
74 {
75 int n;
76 if ( (n = pthread_mutex_lock(mptr)) == 0)
77 return;
78 errno = n;
79 err_sys (“pthread_mutex_lock error”);
80 }
Pthread_mutex_lock(&ndone_mutex);
Mengakhiri Koneksi
22 Server menutup koneksinya dgn client dgn memanggil close.
Ini mengawali urutan terminasi koneksi TCP : sebuah FIN
dikirimkan dalam setiap arah & setiap FIN disahkan (ack) oleh
pihak ujung lainnya.
Intro/daytimetcpsrv.c
1 #include “unp.h”
2 #include <time.h>
3 int
4 main (int argc, char **argv)
5 {
6 int listenfd, connfd;
7 struct sockaddr_in servaddr;
8 char buff[MAXLINE]
9 time_t ticks;
17 for ( ; ; ) {
18 connfd = Accept(listenfd, (SA *) NULL,
NULL);
19 ticks = time(NULL);
20 snprintf(buff, sizeof(buff), “%.24s\r\n”,
ctime(&ticks));
21 Write(connfd, buff, strlen(buff));
22 Close(connfd);
23 }
24 }
Intro/daytimetcpsrv.c