Tujuan Instruksional
Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk:
- Memahami socket TCP
- Membuat implementasi program.
1. Socket TCP
Transmission Control Protocol (TCP) adalah suatu protokol yang berada di lapisan transpor yang berorientasi sambungan (connection-oriented) dan dapat diandalkan (reliable). TCP memiliki karakteristik sebagai berikut:
gis antara dua buah protokol lapisan aplikasi agar saling dapat berkomunikasi
TCP tidak menyediakan layanan pengiriman data secara one-to-many.
- 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 dahulu
Koneksi TCP ditutup dengan menggunakan proses terminasi koneksi TCP (TCP connection termination)
- Full-duplex: Untuk setiap host TCP, koneksi yang terjadi antara dua host terdiri atas dua buah jalur, yakni jalur keluar dan jalur masuk
Dengan menggunakan teknologi lapisan yang lebih rendah yang mendukung full-duplex, maka data pun dapat secara simultan diterima dan dikirim
Header TCP berisi nomor urut (TCP sequence number) dari data yang ditransmisikan dan sebuah acknowledgment dari data yang masuk
- Dapat diandalkan (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 (protocol data unit dalam protokol TCP) akan ditransmisikan ulang
Pada pihak penerima, segmen-segmen duplikat akan diabaikan dan segmen-segmen yang datang tidak sesuai dengan urutannya akan diletakkan di belakang untuk mengurutkan segmen-segmen TCP
Untuk menjamin integritas setiap segmen TCP, TCP mengimplementasikan penghitungan TCP Checksum
- Byte stream: TCP melihat data yang dikirimkan dan diterima melalui dua jalur masuk dan jalur keluar TCP sebagai sebuah byte stream yang berdekatan (kontigu)
Nomor urut TCP dan nomor acknowlegment dalam setiap header TCP didefinisikan juga dalam bentuk byte
Meski demikian, TCP tidak mengetahui batasan pesan-pesan di dalam byte stream TCP tersebut
Untuk melakukannya, hal ini diserahkan kepada protokol lapisan aplikasi (dalam DARPA Reference Model), yang harus menerjemahkan byte stream TCP ke dalam "bahasa" yang ia pahami.
- Memiliki layanan flow control: Untuk mencegah data terlalu banyak dikirimkan pada satu waktu, yang akhirnya membuat "macet" jaringan internetwork IP, TCP mengimplementasikan layanan flow control yang dimiliki oleh pihak pengirim yang secara terus menerus memantau dan membatasi jumlah data yang dikirimkan pada satu waktu
Untuk mencegah pihak penerima untuk memperoleh data yang tidak dapat disangganya (buffer), TCP juga mengimplementasikan flow control dalam pihak penerima, yang mengindikasikan jumlah buffer yang masih tersedia dalam pihak penerima
- Mengirimkan paket secara "one-to-one": hal ini karena memang TCP harus membuat sebuah sirkuit logis antara dua buah protokol lapisan aplikasi agar saling dapat berkomunikasi. TCP tidak menyediakan layanan pengiriman data secara one-to-many.
2. Program Server
import java.io.*
import java.net.*
public class simpleServer {
public final static int TESTPORT = 1234
public static void main(String args[]) {
ServerSocket checkServer = null
String line
BufferedReader is = null
DataOutputStream os = null
Socket clientSocket = null
try {
checkServer = new ServerSocket(TESTPORT)
System.out.println("Server Ready ...")
} catch (IOException e) {
System.out.println(e)
}
try {
clientSocket = checkServer.accept()
is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))
os = new DataOutputStream(clientSocket.getOutputStream())
} catch (Exception ei) {
ei.printStackTrace()
}
try {
line = is.readLine()
System.out.println("From Client : " + line)
os.writeBytes(line)
if (line.compareTo("unisbank") == 0) {
os.writeBytes("Welcome To Unisbank.")
} else {
os.writeBytes("Sorry, this is private area.")
}
} catch (IOException e) { System.out.println(e)
}
try {
os.close()
is.close()
clientSocket.close()
} catch (IOException ic) {
ic.printStackTrace()
}
}
}
3. Program Client
import java.io.*;
import java.net.*;
public class simpleClient {
public final static int REMOTE_PORT = 1234;
public final static String host = "localhost";
public static void main(String args[]) throws Exception {
Socket cl = null;
BufferedReader is = null;
DataOutputStream os = null;
B ufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String userInput = null;
String output = null;
try {
cl = new Socket(host, REMOTE_PORT);
is = new BufferedReader(new InputStreamReader(cl.getInputStream()));
os = new DataOutputStream(cl.getOutputStream());
} catch(UnknownHostException e1) {
System.out.println("Unknown Host: " + e1);
} catch (IOException e2) {
System.out.println("Erorr io: " + e2);
}
try {
System.out.print("Your University ? ");
userInput = stdin.readLine();
os.writeBytes(userInput + "\n");
} catch (IOException ex) {
System.out.println("Error writing to server..." + ex);
}
try {
output = is.readLine();
System.out.println("From server: " + output);
} catch (IOException e) {
e.printStackTrace();
}
try {
is.close();
os.close();
cl.close();
} catch (IOException x) {
System.out.println("Error writing...." + x);
}
}
}