Anda di halaman 1dari 7

PERTEMUAN 3

TCP (Transmission Control Protocol)


PJ: Cincin Farah

I. Pengertian TCP
TCP (Transmission Control Protocol) adalah bagian inti penting dari Internet Protocol (IP) yang
kemudian sering disebut sebagai TCP/IP.
TCP adalah suatu protokol yang berada di lapisan Transport yang berorientasi sambungan
(connection oriented) dan dapat diandalkan (reliable) dengan mengirimkan paket datagrams per
kelompok antar server dan client dengan pemeriksaan.
II. Karakteristik TCP
 Berorientasi sambungan (connection oriented)
Sebelum data dapat ditransmisikan antara dua host, dua proses yang berjalan pada lapisan
aplikasi harus melakukan negosiasi untuk membuat sesi koneksi terlebih dulu.
 Full Duplex
Koneksi yang terjadi antara dua host terdiri dari dua jalur yaitu jalur masuk dan keluar. Header
TCP berisi nomor urut dari data yang ditransmisikan dan sebuah acknowledgment dari data yang
masuk.
 Reliable
Data yang dikirimkan ke sebuah koneksi TCP akan diurutkan dengan sebuah nomor urut paket
dan akan mengharapkan paket positive acknowledgment dari penerima. Jika tidak ada paket
acknowledgment dari penerima, maka segmen TCP akan ditransmisikan ulang.
 Memiliki layanan flow control
Untuk mencegah data yang terlalu banyak dikirimkan pada satu waktu yang akhirnya membuat
“macet” jaringan internetwork IP maka TCP mengimplementasikan flow control yang dimiliki
oleh pihak pengirim yang secara terus menerus memantau dan membatasi jumlah data yang
dikirim.
III. Kelebihan TCP
 Mampu menangani paket yang hilang
 Kedatangan paket yang ganda
 Dapat mengatasi penerimaan paket secara bersamaan
 Menyediakan alur penerimaan paket
 Data yang diterima dapat dipercaya atau diandalkan
IV. Kekurangan TCP
 Waktu pengiriman paket lebih lama
 Paket yang dikirimkan relatif berjumlah besar
V. Contoh pemrograman socket dengan TCP
Hal berikut dapat dianalogikan seperti dalam komunikasi telepon. Jika sambungan telepon di
salah satu titik putus, maka komunikasi tidak dapat terjadi. Koneksi model seperti ini akan
menjamin data dapat dipertukarkan dengan baik, namun memiliki kelemahan dalam hal
penggunaan jalur data yang relatif besar dan tidak boleh terputus.
VI. Socket Protocol TCP
Fungsi socket protocol TCP
socket(AF_INET, SOCK_STREAM, 0)
Berfungsi untuk membuat socket dan parameter family yang digunakan adalah AF_INET yaitu
internet protocol dan socket yang digunakan adalah SOCK_STREAM yang berfungsi untuk
membuka socket pada TCP.
htonl()
meng-convert unsigned integer ke network byte order.
inet_ntoa()
ntoa singkatan 'network to ascii', nilai return-nya berupa string dari alamat yang dilewatkan.
inet_addr()
meng-convert string menjadi network byte order.
bind()
digunakan pada pihak server, untuk membuka 'port' komunikasi.
write(), send()
bertugas mengirimkan data.
read(), recv()
bertugas menerima data.
connect()
digunakan pada pihak client, untuk mengadakan koneksi ke server.
listen()
menunggu koneksi socket.
accept()
menerima koneksi socket.
close() dan shutdown()
digunakan untuk menutup atau mengakhiri koneksi.

Diagram Alur TCP

Langkah mengerjakan tugas Activity 3

 Gunakan editor VMWare


 Untuk masuk ke editor ketikkan gedit namafile.c
 Ketikkan listing program yang ada di lampiran materi 3
 Simpan file menggunakan extention .c
 Compile file dengan cara ketikkan gcc namafile -o file source
 File source bisa menggunakan apa saja (tidak harus sama dengan nama file)
 Untuk menjalankan program server ketikkan ./file source <port>
 Kemudian jalankan program client dengan mengetikkan ./ file source <ip server> <port>
 Port bisa didefinisikan bebas, sesuaikan dengan yang ada pada listing program. Port di
definiskan dalam 4 digit angka
 Untuk cek alamat IP (IP address) gunakan perintah ifconfig
Listing TCP Client
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>

int main(int argc, char *argv[]){


struct sockaddr_in alamat_ku;
struct sockaddr_in tujuan;
struct hostent *host_server;
int socketfd, connect_status, baca;
int no_port;
char buffer[256];

if(argc != 3){
fprintf (stderr, "Gunakan: %s <alamat server> <nomor port>\n",
argv[0]);
exit(1);
/* fprintf berfungsi untuk menginput string kedalam sebuah
file,
baik berupa tulisan normal ataupun kode format.
bentuk umum: fprintf(pointerfile, "statement"); */
}

if((socketfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){


fprintf (stderr, "Tidak bisa memasang socket!\n");
exit(1);
}

if((host_server = gethostbyname(argv[1])) == NULL){


fprintf(stderr, "Nama host mungkin salah :\n");
exit(1);
}

no_port = atoi(argv[2]);

bzero(&tujuan, sizeof(tujuan));
tujuan.sin_family = AF_INET;
tujuan.sin_port = htons(no_port);
memcpy((char *)&tujuan.sin_addr.s_addr, host_server->h_addr_list[0],
host_server->h_length);

if((connect_status = connect(socketfd, (struct sockaddr *)&tujuan,


sizeof(tujuan))) < 0){
fprintf(stderr, "%s: tidak dapat melakukan koneksi\n", argv[0]);
exit(1);
}
while((baca = recv(socketfd, buffer, strlen(buffer), 0)) > 0){
printf("%s", buffer);
}

close(socketfd);
return 0;
}

Listing TCP Server


#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define KONEKSI_MAKSIMAL 10

int main(int argc, char *argv[]){


struct sockaddr_in alamat_serv;
struct sockaddr_in alamat_clie;
unsigned no_port;
int socketfd;

if(argc != 2){
fprintf (stderr, "Gunakan: %s <nomor port>\n", argv[0]);
exit(1);
}

no_port = atoi(argv[1]);

socketfd = socket(AF_INET, SOCK_STREAM, 0);

/* untuk membersihkan child process, yang telah selesai*/


signal(SIGCHLD, SIG_IGN);

// blok program ini untuk reset variabel alamat_serv


bzero(&alamat_serv, sizeof(alamat_serv));
alamat_serv.sin_family = AF_INET;
alamat_serv.sin_port = htons(no_port);
alamat_serv.sin_addr.s_addr = htonl(INADDR_ANY);
// macro INADDR_ANY menghasilkan current ip

// blok di bawah ini adalah sintaks untuk buka port


if(bind (socketfd, (struct sockaddr *)&alamat_serv, sizeof(struct
sockaddr)) < 0){
fprintf(stderr, "maaf ya tidak bisa memasang port\n");
exit(1);
}
printf("server teman menunggu teman datang...\n");

/* menunggu koneksi yang masuk,


koneksi maksimal dilayani sebanyak data pada KONEKSI_MAKSIMAL*/
listen (socketfd, KONEKSI_MAKSIMAL);

while(1){
int client_size = sizeof(struct sockaddr_in);
int newfd;

// menerima koneksi yang datang


newfd = accept(socketfd, (struct sockaddr *)&alamat_clie,
&client_size);
if (newfd == -1){
perror("accept");
continue;
// jika terjadi error akan looping lagi
}

// sintaks untuk mengetahui siapa yang melakukan koneksi


printf("Teman dari %d telah datang \n",
inet_ntoa(alamat_clie.sin_addr));

/* fork () digunakan untuk membuat proses baru


dengan menduplikasi proses yang ada dari mana ia dipanggil.
fork menghasilkan nilai return 0 pada child process
pada parent process, fork() menghasilkan nilai pid dari
child yang diciptakan */
if(!fork()){
//child process
// variabel buffer menampung 255 karakter
char buffer[256];

sprintf(buffer, "Halo Teman, selamat datang di


Server.Teman\n");

// untuk mengirim pesan


if(send(newfd, buffer, strlen(buffer), 0) == -1){
perror("send");
continue;
}
close(newfd);
exit(0);
}else
/* parent process, disini tidak dibutuhkan newfd,
jadi sebaiknya ditutup.
parent process akan looping lagi untuk menerima
client yang lain*/
close(newfd);
}
return 0;
Tambahan Listing
 Pada listing client tambahkan library #include
 Pada listing server tambahkan Argv [0]
 Jika ada coding yang tidak terbaca atau ada simbol (?) diganti dengan tanda petik satu (‘)

Anda mungkin juga menyukai