Model TCP/IP dan Wireshark
Pernahkah Anda bertanya-tanya bagaimana data yang Anda ketikkan di ponsel atau laptop bisa sampai ke server yang berjarak ribuan kilometer? Proses ini lebih kompleks dan terstruktur dari yang terlihat. Di balik layar, data diubah dari format yang dapat dibaca manusia (seperti teks JSON) menjadi serangkaian angka biner (0s dan 1s) yang dapat dikirim melalui kabel atau gelombang radio. Mari kita bedah bagaimana transformasi luar biasa ini terjadi, selangkah demi selangkah.
1. Konsep Dasar: Protokol sebagai Bahasa Universal
Bayangkan Anda ingin mengirimkan sebuah buku ke teman di luar negeri. Anda tidak bisa hanya melemparkannya. Anda harus membungkusnya, menempelkan label alamat, dan memastikan pengiriman mematuhi aturan tertentu. Dalam dunia jaringan, protokol adalah aturan-aturan ini.
Setiap protokol memiliki peran spesifik:
Protokol Aplikasi (HTTP): Ini adalah "bahasa" yang digunakan oleh aplikasi, seperti peramban web dan server. Aturan ini menentukan bagaimana permintaan (misalnya,
POST) dan respons diformat.Protokol Transport (TCP): Ini adalah "layanan pengiriman" yang menjamin paket Anda tiba dengan utuh dan dalam urutan yang benar.
Protokol Internet (IP): Ini adalah "sistem alamat" yang memastikan setiap paket menemukan jalannya di seluruh jaringan global.
Tanpa aturan-aturan ini, komunikasi data akan menjadi kekacauan yang tidak teratur.
2. Proses Pengiriman: Sebuah Perjalanan Empat Lapisan
Perjalanan data dari komputer Anda ke server mengikuti model berlapis yang dikenal sebagai model TCP/IP. Data melewati empat lapisan utama, dengan setiap lapisan menambahkan informasi atau "amplop" baru. Proses ini disebut enkapsulasi.
Lapisan 1: Lapisan Aplikasi (HTTP)
Semua dimulai di sini. Data Anda, misalnya dalam format JSON yang mudah dibaca, ditempatkan di dalam sebuah permintaan HTTP.
Bentuk Data: Teks atau string yang terstruktur, seperti:
POST /users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 42
{"nama": "Andi", "email": "andi@example.com"}Ini adalah permintaan yang siap dikirim.
Lapisan 2: Lapisan Transport (TCP)
Permintaan HTTP dari lapisan aplikasi diserahkan ke lapisan ini. Di sini, data yang besar dipecah menjadi unit-unit kecil yang disebut segmen. Setiap segmen diberi TCP header yang berisi nomor port sumber dan tujuan, serta nomor urut (sequence number). Nomor urut ini krusial untuk memastikan data dirakit kembali dengan benar di sisi penerima, seperti menyusun ulang potongan puzzle.
Bentuk Data: (Header TCP) + (Data HTTP)
Lapisan 3: Lapisan Internet (IP)
Setiap segmen TCP kemudian dibungkus lagi menjadi sebuah paket IP. Lapisan ini menambahkan IP header yang berisi alamat IP sumber (alamat komputer Anda) dan alamat IP tujuan (alamat server). Ini adalah alamat "fisik" di internet, seperti alamat rumah yang memastikan paket menemukan kota yang tepat.
Bentuk Data: (Header IP) + (Segmen TCP)
Lapisan 4: Lapisan Tautan Data & Fisik
Ini adalah lapisan terakhir sebelum data dikirim. Paket IP dibungkus lagi menjadi sebuah frame (misalnya, Ethernet frame) yang menambahkan alamat fisik perangkat (MAC Address) di jaringan lokal. Pada akhirnya, seluruh frame—bersama semua header yang ada—dikonversi menjadi byte stream.
Bentuk Data: (Header Frame) + (Header IP) + (Header TCP) + (Data HTTP) + (Trailer Frame)
Ini adalah bentuk data yang sesungguhnya melintasi media fisik, baik itu kabel, serat optik, atau gelombang radio.
3. Proses Penerimaan: Dekapsulasi
Di sisi server, prosesnya dibalik. Paket yang datang dibaca dari lapisan paling bawah. Setiap header dilepas satu per satu (proses dekapsulasi), hingga akhirnya data HTTP dan JSON asli terungkap di lapisan aplikasi, siap untuk diproses oleh server.
Membongkar Paket dengan Wireshark
Panduan ini akan menjelaskan secara komprehensif cara menggunakan Wireshark untuk analisis jaringan di Mac, mulai dari instalasi hingga analisis mendalam paket jaringan. Wireshark adalah alat penganalisis protokol jaringan yang paling kuat dan populer, memungkinkan Anda untuk melihat setiap lapisan protokol secara detail.
Bagian 1: Instalasi Wireshark di Mac
1.1 Metode Instalasi
Ada beberapa cara untuk menginstal Wireshark di Mac:
Metode 1: Instalasi Langsung dari Website (Disarankan)
Download Wireshark:
Kunjungi situs web resmi Wireshark: www.wireshark.org
Pilih versi stabil terbaru untuk macOS
Download file .dmg
Proses Instalasi:
Buka file .dmg yang telah di-download
Drag aplikasi Wireshark ke folder
/ApplicationsPENTING: Jangan lupa untuk menginstall ChmodBPF launch daemon
Buka file
Install ChmodBPF.pkgyang ada di dalam .dmgAtau alternatifnya, buka Wireshark → Preferences → Folders tab → double-click "macOS Extras"
Verifikasi Instalasi:
Buka aplikasi Wireshark dari folder Applications
Jika muncul permintaan password, masukkan password admin Anda
Metode 2: Instalasi via Homebrew
Jika Anda sudah memiliki Homebrew terinstal:
# Update Homebrew
brew update
# Install Wireshark via Cask
brew install --cask wireshark1.2 Mengatasi Masalah Permission yang Sering Terjadi
Masalah Umum: Error "You don't have permission to capture on that device"
Solusi:
Pastikan ChmodBPF terinstal:
Cek di System Preferences → Users & Groups → Login Items
Harus ada "ChmodBPF" di daftar
Jika masih error, lakukan langkah berikut:
# Cek username Anda whoami # Ubah ownership file BPF cd /dev sudo chown [username_anda]:admin bp*Contoh:
$ whoami johnappleseed $ cd /dev $ sudo chown johnappleseed:admin bp* Password:Restart Mac Anda (kadang diperlukan agar perubahan permission berlaku)
Verifikasi dengan perintah:
ls -la | grep bpSeharusnya muncul:
crw------- 1 johnappleseed admin 0x17000000 Jan 13 21:48 bpf0 crw------- 1 johnappleseed admin 0x17000001 Jan 14 09:56 bpf1 crw------- 1 johnappleseed admin 0x17000002 Jan 13 20:57 bpf2 crw------- 1 johnappleseed admin 0x17000003 Jan 13 20:57 bpf3 crw------- 1 johnappleseed admin 0x17000004 Jan 13 20:57 bpf4
Bagian 2: Memulai Pengambilan Paket
2.1 Antarmuka Wireshark
Buka Wireshark:
Aplikasi → Wireshark
Mungkin perlu masukkan password admin untuk pertama kali
Pilih Antarmuka Jaringan:
en0: Biasanya untuk Ethernet (kabel)en1: Biasanya untuk Wi-FiAnda bisa melihat deskripsi masing-masing antarmuka di sebelah kanan nama
Mulai Capture:
Klik tombol Start capturing packets (ikon hiu biru)
Atau double-click pada antarmuka yang dipilih
Wireshark akan mulai menampilkan semua paket yang melintas
2.2 Tips Sebelum Memulai Capture
Matikan aplikasi yang tidak perlu untuk mengurangi noise
Gunakan filter sejak awal untuk fokus pada traffic yang relevan
Siapkan aksi yang akan dilakukan (misal: buka browser, jalankan curl, dll)
Bagian 3: Membuat dan Menganalisis Traffic HTTP
3.1 Membuat Permintaan HTTP untuk Testing
Menggunakan Terminal (curl)
# Contoh POST request dengan JSON data
curl -X POST \
-H "Content-Type: application/json" \
-H "User-Agent: MyTestApp/1.0" \
-d '{"nama": "Andi", "email": "andi@example.com", "pesan": "Halo Dunia!"}' \
http://httpbin.org/post
# Contoh GET request
curl -X GET \
-H "Accept: application/json" \
http://httpbin.org/get?param1=value1¶m2=value2Menggunakan Browser
Buka browser (Safari, Chrome, Firefox)
Kunjungi website yang ingin dianalisis
Lakukan aksi (klik link, submit form, dll)
3.2 Menggunakan Filter di Wireshark
Filter Dasar
# Filter hanya HTTP traffic
http
# Filter hanya POST requests
http.request.method == "POST"
# Filter traffic ke domain tertentu
http.host == "httpbin.org"
# Filter traffic dari IP tertentu
ip.src == 192.168.1.100
# Filter kombinasi
http.request.method == "POST" and http.host == "httpbin.org"Filter Lanjutan
# Filter berdasarkan User-Agent
http.user_agent contains "MyTestApp"
# Filter berdasarkan Content-Type
http.content_type == "application/json"
# Filter berdasarkan URL
http.request.uri contains "/post"
# Filter range port
tcp.port >= 80 and tcp.port <= 903.3 Analisis Paket di Wireshark
Setelah menemukan paket yang relevan, klik pada paket tersebut untuk melihat detailnya:
1. Frame Layer (Lapisan Fisik & Data Link)
Frame 1: 598 bytes on wire (4784 bits), 598 bytes captured (4784 bits)
Interface: en1
Arrival Time: Jan 14, 2024 10:30:15.123456 UTC
[Time shift for this packet: 0.000000000 seconds]
Epoch Time: 1705265415.123456000
[Time delta from previous captured frame: 0.000000000 seconds]
[Time delta from previous displayed frame: 0.000000000 seconds]
[Time since reference or first frame: 0.000000000 seconds]
Frame Number: 1
Frame Length: 598 bytes (4784 bits)
Capture Length: 598 bytes (4784 bits)
[Frame is marked: False]
[Frame is ignored: False]
[Protocols in frame: eth:ip:tcp:http]
[Coloring Rule Name: HTTP]
[Coloring Rule String: http]Penjelasan:
Frame Length: Total ukuran frame dalam bytes
Interface: Antarmuka jaringan yang digunakan
Arrival Time: Waktu paket tiba
Protocols in frame: Protokol yang terkandung dalam frame
2. Internet Protocol Version 4 (Lapisan Internet)
Internet Protocol Version 4, Src: 192.168.1.100, Dst: 54.225.154.124
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
Total Length: 584
Identification: 0x1234 (4660)
Flags: 0x02 (Don't Fragment)
Fragment Offset: 0
Time to Live: 64
Protocol: TCP (6)
Header Checksum: 0xabcd [unverified]
Source Address: 192.168.1.100
Destination Address: 54.225.154.124Penjelasan:
Version: Versi IP (4 = IPv4)
Header Length: Panjang header IP
Total Length: Total panjang paket IP
Source/Destination Address: Alamat IP sumber dan tujuan
Protocol: Protokol lapisan transport (6 = TCP)
TTL (Time to Live): Batas hop paket
3. Transmission Control Protocol (Lapisan Transport)
Transmission Control Protocol, Src Port: 54321, Dst Port: 80, Seq: 1, Ack: 1, Len: 540
Source Port: 54321
Destination Port: 80
[Stream index: 0]
[TCP Segment Len: 540]
Sequence Number: 1 (relative sequence number)
Sequence Number (raw): 1234567890
[Next Sequence Number: 541]
Acknowledgment Number: 1 (relative ack number)
Acknowledgment Number (raw): 987654321
Header Length: 32 bytes (8)
Flags: 0x018 (PSH, ACK)
Window: 65535
Checksum: 0x1234 [unverified]
Urgent Pointer: 0
Options: (12 bytes)
NOP
NOP
Timestamps: tsval 123456789, tsecr 987654321
[SEQ/ACK analysis]
[This is an ACK to the segment in frame: 0]
[The RTT to ACK the segment was: 0.000123000 seconds]
[iRTT: 0.000123000 seconds]
[Bytes in flight: 540]Penjelasan:
Source/Destination Port: Port sumber dan tujuan
Sequence Number: Nomor urut untuk pengiriman data
Acknowledgment Number: Nomor ack untuk konfirmasi penerimaan
Flags: Flag TCP (SYN, ACK, PSH, FIN, RST, URG)
Window Size: Ukuran window untuk flow control
Header Length: Panjang header TCP
4. Hypertext Transfer Protocol (Lapisan Aplikasi)
Hypertext Transfer Protocol
POST /post HTTP/1.1\r\n
Host: httpbin.org\r\n
User-Agent: curl/7.88.1\r\n
Accept: */*\r\n
Content-Type: application/json\r\n
Content-Length: 68\r\n
\r\n
[Full request URI: http://httpbin.org/post]
[HTTP request 1/1]
[Prev request in frame: 0]
[Next request in frame: 0]
File Data: 68 bytes
Line-based text data: application/json
{"nama": "Andi", "email": "andi@example.com", "pesan": "Halo Dunia!"}Penjelasan:
Request Line: Method, URI, dan HTTP version
Headers: Informasi tambahan tentang request
Body: Data yang dikirim (dalam hal ini JSON)
Bagian 4: Decrypt HTTPS Traffic (Advanced)
4.1 Mengapa Perlu Decrypt HTTPS?
Sebagian besar traffic web modern menggunakan HTTPS, yang terenkripsi. Tanpa decrypt, Anda tidak bisa melihat:
URL sebenarnya
Header HTTP
Body request/response
Parameter query
4.2 Setup untuk Decrypt HTTPS
Metode 1: Menggunakan Browser (Chrome/Firefox)
Setup Environment Variable:
# Untuk Chrome export SSLKEYLOGFILE=~/sslkeylog.log # Untuk Firefox # Buka about:config, cari security.ssl.enable_false_start, set ke falseJalankan Browser dengan Environment Variable:
# Chrome /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --ssl-key-log-file=~/sslkeylog.log # Firefox /Applications/Firefox.app/Contents/MacOS/firefox
Metode 2: Menggunakan curl
export SSLKEYLOGFILE=~/sslkeylog.log
curl -X POST -H "Content-Type: application/json" -d '{"test": "data"}' https://httpbin.org/post4.3 Setup Wireshark untuk Decrypt HTTPS
Buka Wireshark Preferences:
Menu: Edit → Preferences
Atau shortcut: ⌘ + ,
Konfigurasi TLS/SSL:
Di panel kiri, pilih: Protocols → TLS (untuk Wireshark 3.x) atau SSL (untuk Wireshark 2.x)
Cari field: (Pre)-Master-Secret log filename
Klik Browse dan pilih file key log yang Anda buat
Klik OK
Restart Capture untuk menerapkan perubahan
4.4 Analisis HTTPS Traffic yang Ter-decrypt
Setelah setup, Anda akan melihat:
HTTP requests muncul di bawah HTTPS packets
Bisa melihat URL, headers, dan body yang sebenarnya
Bisa follow HTTP stream seperti traffic HTTP biasa
Bagian 5: Tips dan Trik Lanjutan
5.1 Menggunakan Color Coding
Wireshark memiliki color coding otomatis untuk memudahkan identifikasi:
Hijau: HTTP traffic
Biru: TCP traffic
Merah: Error atau problematic packets
Kuning: DNS traffic
Anda bisa membuat custom color rules di View → Coloring Rules
5.2 Menggunakan Statistics
Protocol Hierarchy:
Statistics → Protocol Hierarchy
Lihat distribusi protokol dalam capture
IO Graphs:
Statistics → IO Graphs
Visualisasi traffic over time
Endpoints:
Statistics → Endpoints
Lihat semua IP/Port yang terlibat
5.3 Export Data
Export Packets:
File → Export Specified Packets
Pilih format (pcap, pcapng, dll)
Export Objects:
File → Export Objects → HTTP
Export file yang dikirim via HTTP (images, documents, dll)
Save as CSV/JSON:
File → Export Packet Dissections → As CSV/JSON
Bagian 6: Troubleshooting Umum
6.1 Tidak Bisa Capture Paket
Masalah: "You don't have permission to capture on that device"
Solusi:
Pastikan ChmodBPF terinstal
Ubah ownership file BPF (lihat Bagian 1.2)
Restart Mac
Coba jalankan Wireshark sebagai sudo:
sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark
6.2 Traffic Tidak Muncul
Masalah: Tidak ada paket yang muncul meskipun ada aktivitas jaringan
Solusi:
Pastikan antarmuka yang benar dipilih
Cek apakah ada firewall yang memblokir
Coba antarmuka lain (en0 vs en1)
Matikan VPN jika aktif
6.3 HTTPS Tidak Ter-decrypt
Masalah: Traffic HTTPS masih terlihat terenkripsi
Solusi:
Pastikan SSLKEYLOGFILE environment variable ter-set
Cek path ke key log file di Wireshark preferences
Pastikan browser/app dijalankan dengan environment variable yang benar
Restart Wireshark setelah mengubah preferences
Bagian 7: Alternatif Wireshark untuk Mac
Jika Anda merasa Wireshark terlalu kompleks, ada beberapa alternatif:
7.1 Proxyman (Recommended untuk Developer)
Keuntungan:
Native macOS app (developed in Swift)
UI/UX yang lebih user-friendly
Fokus pada HTTP/HTTPS debugging
Automatic device setup untuk iOS/Android
Built-in tools untuk modify request/response
Fitur Utama:
Capture HTTP/HTTPS traffic
Multiple Filters (Protocol, Content-Type, URL, etc)
GraphQL Debugging
Map Local/Map Remote
Breakpoint debugging
JavaScript scripting
Website: proxyman.io
7.2 tcpdump (Command Line)
Keuntungan:
Sudah terinstal di macOS
Ringan dan cepat
Bisa di-automate dengan scripts
Contoh Penggunaan:
# Capture semua traffic di interface en1
sudo tcpdump -i en1
# Capture traffic ke port 80 (HTTP)
sudo tcpdump -i en1 port 80
# Save capture ke file
sudo tcpdump -i en1 -w capture.pcap
# Read dari file
tcpdump -r capture.pcap7.3 Charles Proxy
Keuntungan:
UI yang intuitif
Bagus untuk debugging mobile apps
Mendukung SSL Proxying
Website: charlesproxy.com
Bagian 8: Best Practices
8.1 Keamanan
Jangan capture di public network tanpa izin
Hapus capture yang mengandung data sensitif setelah analisis
Gunakan dummy data untuk testing (seperti httpbin.org)
Hati-hati dengan capture yang berisi password/token
8.2 Performance
Gunakan filter sejak awal untuk mengurangi noise
Matikan capture saat tidak digunakan
Save capture secara berkala untuk analisis nanti
Gunakan ring buffer untuk capture jangka panjang
8.3 Etika
Hanya capture traffic yang Anda miliki atau punya izin
Hormati privacy pengguna lain di jaringan
Gunakan pengetahuan untuk tujuan pembelajaran dan troubleshooting
Wireshark adalah alat yang sangat powerful untuk analisis jaringan di Mac. Dengan panduan ini, Anda sekarang memiliki pengetahuan lengkap untuk:
Menginstal Wireshark dengan benar di Mac
Mengatasi masalah permission yang sering terjadi
Melakukan capture dan analisis paket jaringan
Memahami setiap lapisan protokol secara detail
Decrypt HTTPS traffic untuk analisis mendalam
Menggunakan alternatif tools jika diperlukan
Praktikkan langkah-langkah di atas secara bertahap, dan Anda akan mahir dalam analisis jaringan menggunakan Wireshark. Ingatlah untuk selalu menggunakan pengetahuan ini dengan bertanggung jawab dan mengikuti aturan etika yang berlaku.
Cara Baca Laporan Wireshark
Frame 91: Packet, 269 bytes on wire (2152 bits), 269 bytes captured (2152 bits) on interface en0, id 0
Section number: 1
Interface id: 0 (en0)
Interface name: en0
Interface description: Wi-Fi
Encapsulation type: Ethernet (1)
Arrival Time: Oct 13, 2025 15:21:06.942743000 WIB
UTC Arrival Time: Oct 13, 2025 08:21:06.942743000 UTC
Epoch Arrival Time: 1760343666.942743000
[Time shift for this packet: 0.000000000 seconds]
[Time delta from previous captured frame: 180.000 microseconds]
[Time since reference or first frame: 27.325979000 seconds]
Frame Number: 91
Frame Length: 269 bytes (2152 bits)
Capture Length: 269 bytes (2152 bits)
[Frame is marked: False]
[Frame is ignored: False]
[Protocols in frame: eth:ethertype:ip:tcp:http:json]
Character encoding: ASCII (0)
[Coloring Rule Name: HTTP]
[Coloring Rule String: http || tcp.port == 80 || http2]
Ethernet II, Src: 8e:c3:47:d6:f1:01 (8e:c3:47:d6:f1:01), Dst: MS-NLB-PhysServer-02_a5:90:00 (02:02:00:a5:90:00)
Destination: MS-NLB-PhysServer-02_a5:90:00 (02:02:00:a5:90:00)
.... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
Source: 8e:c3:47:d6:f1:01 (8e:c3:47:d6:f1:01)
.... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
Type: IPv4 (0x0800)
[Stream index: 0]
Internet Protocol Version 4, Src: 10.126.79.11, Dst: 52.202.135.65
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x02 (DSCP: CS0, ECN: ECT(0))
0000 00.. = Differentiated Services Codepoint: Default (0)
.... ..10 = Explicit Congestion Notification: ECN-Capable Transport codepoint '10' (2)
Total Length: 255
Identification: 0x0000 (0)
010. .... = Flags: 0x2, Don't fragment
0... .... = Reserved bit: Not set
.1.. .... = Don't fragment: Set
..0. .... = More fragments: Not set
...0 0000 0000 0000 = Fragment Offset: 0
Time to Live: 64
Protocol: TCP (6)
Header Checksum: 0x2463 [validation disabled]
[Header checksum status: Unverified]
Source Address: 10.126.79.11
Destination Address: 52.202.135.65
[Stream index: 14]
Transmission Control Protocol, Src Port: 51324, Dst Port: 80, Seq: 1, Ack: 1, Len: 203
Source Port: 51324
Destination Port: 80
[Stream index: 6]
[Stream Packet Number: 4]
[Conversation completeness: Complete, WITH_DATA (31)]
..0. .... = RST: Absent
...1 .... = FIN: Present
.... 1... = Data: Present
.... .1.. = ACK: Present
.... ..1. = SYN-ACK: Present
.... ...1 = SYN: Present
[Completeness Flags: ·FDASS]
[TCP Segment Len: 203]
Sequence Number: 1 (relative sequence number)
Sequence Number (raw): 1031841318
[Next Sequence Number: 204 (relative sequence number)]
Acknowledgment Number: 1 (relative ack number)
Acknowledgment number (raw): 2386980244
1000 .... = Header Length: 32 bytes (8)
Flags: 0x018 (PSH, ACK)
000. .... .... = Reserved: Not set
...0 .... .... = Accurate ECN: Not set
.... 0... .... = Congestion Window Reduced: Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set
.... ...1 .... = Acknowledgment: Set
.... .... 1... = Push: Set
.... .... .0.. = Reset: Not set
.... .... ..0. = Syn: Not set
.... .... ...0 = Fin: Not set
[TCP Flags: ·······AP···]
Window: 2059
[Calculated window size: 131776]
[Window size scaling factor: 64]
Checksum: 0xff30 [unverified]
[Checksum Status: Unverified]
Urgent Pointer: 0
Options: (12 bytes), No-Operation (NOP), No-Operation (NOP), Timestamps
TCP Option - No-Operation (NOP)
Kind: No-Operation (1)
TCP Option - No-Operation (NOP)
Kind: No-Operation (1)
TCP Option - Timestamps: TSval 2160006692, TSecr 2900989057
Kind: Time Stamp Option (8)
Length: 10
Timestamp value: 2160006692
Timestamp echo reply: 2900989057
[Timestamps]
[Time since first frame in this TCP stream: 330.244000 milliseconds]
[Time since previous frame in this TCP stream: 180.000 microseconds]
[SEQ/ACK analysis]
[iRTT: 330.064000 milliseconds]
[Bytes in flight: 203]
[Bytes sent since last PSH flag: 203]
[Client Contiguous Streams: 1]
[Server Contiguous Streams: 1]
TCP payload (203 bytes)
Hypertext Transfer Protocol
POST /post HTTP/1.1\r\n
Request Method: POST
Request URI: /post
Request Version: HTTP/1.1
Host: httpbin.org\r\n
Accept: */*\r\n
Content-Type: application/json\r\n
User-Agent: MyTestApp/1.0\r\n
Content-Length: 69\r\n
[Content length: 69]
\r\n
[Response in frame: 96]
[Full request URI: http://httpbin.org/post]
File Data: 69 bytes
JavaScript Object Notation: application/json
Object
Member: nama
[Path with value: /nama:Andi]
[Member with value: nama:Andi]
String value: Andi
Key: nama
[Path: /nama]
Member: email
[Path with value: /email:andi@example.com]
[Member with value: email:andi@example.com]
String value: andi@example.com
Key: email
[Path: /email]
Member: pesan
[Path with value: /pesan:Halo Dunia!]
[Member with value: pesan:Halo Dunia!]
String value: Halo Dunia!
Key: pesan
[Path: /pesan]1. Lapisan Frame (Fisik & Tautan Data)
Bagian pertama ini adalah informasi dasar tentang paket yang ditangkap oleh Wireshark.
Frame 91: Ini adalah paket ke-91 yang ditangkap dalam sesi Wireshark.269 bytes on wire: Ukuran total paket saat melintas di jaringan.Interface name: en0: Antarmuka jaringan yang digunakan, yaitu Wi-Fi.Arrival Time: Waktu paket ini ditangkap, lengkap dengan milidetik.[Protocols in frame: eth:ethertype:ip:tcp:http:json]: Ini adalah ringkasan yang paling penting. Urutan ini menunjukkan lapisan-lapisan protokol dari bawah ke atas: Ethernet -> IP -> TCP -> HTTP -> JSON. Ini membuktikan bahwa data JSON Anda dienkapsulasi di dalam setiap lapisan di bawahnya.
2. Lapisan Ethernet (Tautan Data)
Bagian ini menunjukkan informasi dari lapisan Ethernet. Ini adalah "amplop" pertama yang membungkus paket.
Src: 8e:c3:47:d6:f1:01: Alamat MAC (Media Access Control) sumber. Ini adalah alamat fisik unik dari kartu jaringan (Wi-Fi card) komputer Anda.Dst: 02:02:00:a5:90:00: Alamat MAC tujuan. Ini adalah alamat MAC dari perangkat berikutnya di jaringan Anda, kemungkinan router Anda.Type: IPv4 (0x0800): Nilai ini menunjukkan bahwa "amplop" berikutnya yang ada di dalam bingkai Ethernet ini adalah paket IPv4.
3. Lapisan Internet (IP)
Ini adalah informasi alamat logis dari paket.
Source Address: 10.126.79.11: Alamat IP (Internet Protocol) lokal komputer Anda.Destination Address: 52.202.135.65: Alamat IP tujuan, yaitu IP dari serverhttpbin.org.Protocol: TCP (6): Nilai ini mengindikasikan bahwa "amplop" berikutnya yang ada di dalam paket IP ini adalah segmen TCP.
4. Lapisan Transport (TCP)
Bagian ini menunjukkan rincian komunikasi yang andal antara dua aplikasi.
Src Port: 51324: Port sumber, yaitu port yang digunakan oleh aplikasi (misalnya browser ataucurl) di komputer Anda untuk mengirim permintaan.Dst Port: 80: Port tujuan. Ini adalah port standar untuk lalu lintas HTTP di server.Flags: PSH, ACK: Ini adalah flag TCP.PSH(Push) menandakan bahwa paket ini berisi data yang harus segera dikirim ke lapisan aplikasi di atasnya.ACK(Acknowledgement) berarti paket ini juga mengakui penerimaan paket sebelumnya dari server.TCP payload (203 bytes): Ini menunjukkan bahwa ada 203 byte data HTTP yang berada di dalam segmen TCP ini.
5. Lapisan Aplikasi (HTTP & JSON)
Ini adalah bagian paling atas, di mana data asli Anda berada.
POST /post HTTP/1.1: Ini adalah Request Line dari permintaan HTTP. Anda mengirim permintaanPOSTke server.Host: httpbin.org: Header HTTP yang menunjukkan nama domain tujuan.Content-Type: application/json: Header yang memberitahu server bahwa data yang dikirim adalah format JSON.Content-Length: 69: Panjang data JSON yang ada di bagian body.JavaScript Object Notation: application/json: Wireshark secara otomatis mengenali data ini sebagai JSON.Object: Bagian ini memecah struktur data JSON yang Anda kirim.Member: nama:String value: AndiMember: email:String value: andi@example.comMember: pesan:String value: Halo Dunia!
Program Go
Mari kita buat program sederhana untuk menangani berbagai jenis permintaan HTTP (JSON, form data, dan multipart) dan kemudian menangkapnya dengan Wireshark. Program Go ini akan berfungsi sebagai server lokal yang berjalan di localhost:8080.
1. Program Server Golang
Buat file baru bernama main.go. Program ini akan mendengarkan permintaan di port 8080 dan memiliki tiga endpoint yang berbeda untuk setiap jenis data.
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
)
// Endpoint untuk menangani JSON
func handleJSON(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
body, err := ioutil.ReadAll(r.Body)
if err != nil {
http.Error(w, "Error reading request body", http.StatusInternalServerError)
return
}
var data map[string]interface{}
err = json.Unmarshal(body, &data)
if err != nil {
http.Error(w, "Error decoding JSON", http.StatusBadRequest)
return
}
fmt.Printf("Received JSON data: %+v\n", data)
fmt.Fprintf(w, "JSON data received successfully!")
}
// Endpoint untuk menangani Form Data
func handleFormData(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
err := r.ParseForm()
if err != nil {
http.Error(w, "Error parsing form data", http.StatusInternalServerError)
return
}
fmt.Printf("Received Form Data: %+v\n", r.Form)
fmt.Fprintf(w, "Form data received successfully!")
}
// Endpoint untuk menangani Multipart Form Data
func handleMultipart(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
r.ParseMultipartForm(10 << 20) // Batasi ukuran file hingga 10MB
file, handler, err := r.FormFile("myFile")
if err != nil {
http.Error(w, "Error retrieving the file", http.StatusBadRequest)
return
}
defer file.Close()
fmt.Printf("Received file: %s\n", handler.Filename)
fmt.Fprintf(w, "File '%s' received successfully!", handler.Filename)
}
func main() {
http.HandleFunc("/json", handleJSON)
http.HandleFunc("/form", handleFormData)
http.HandleFunc("/multipart", handleMultipart)
fmt.Println("Server is running on http://localhost:8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}2. Menjalankan Program dan Mengirim Permintaan
Buka terminal, navigasi ke direktori tempat Anda menyimpan
main.go, dan jalankan server Go:go run main.goServer akan mulai berjalan dan menunggu permintaan. Biarkan terminal ini tetap terbuka.
3. Menggunakan Wireshark untuk Menangkap Paket
Buka aplikasi Wireshark.
Pilih antarmuka jaringan
Loopback(ataulo0di macOS). Ini adalah antarmuka virtual yang digunakan untuk lalu lintas jaringan lokal (dari komputer ke komputer itu sendiri).Klik tombol Start capturing packets.
Di bilah filter, ketik:
tcp.port == 8080dan tekan Enter. Ini akan memastikan Anda hanya melihat lalu lintas ke server lokal Anda.
4. Simulasi dan Analisis
Sekarang, buka terminal baru untuk mengirim permintaan menggunakan curl dan amati hasilnya di Wireshark.
Simulasi 1: Permintaan JSON
Di terminal, kirim permintaan
POSTdengan data JSON:curl -X POST \ -H "Content-Type: application/json" \ -d '{"nama": "Budi", "umur": 25}' \ http://localhost:8080/jsonKembali ke Wireshark. Anda akan melihat paket TCP yang berisi permintaan HTTP. Klik pada paket tersebut.
Luaskan bagian Hypertext Transfer Protocol. Anda akan melihat header seperti
Content-Type: application/json.Luaskan bagian Line-based text data untuk melihat data JSON asli:
{"nama": "Budi", "umur": 25}. Ini menunjukkan bagaimana data JSON murni terlampir di dalam permintaan HTTP.
Simulasi 2: Permintaan Form Data
Di terminal, kirim permintaan
POSTdengan form data:curl -X POST \ -d "nama=Siti&kota=Jakarta" \ http://localhost:8080/formDi Wireshark, cari paket baru. Klik paket
POSTyang relevan.Di bagian Hypertext Transfer Protocol, perhatikan header
Content-Typeyang akan menjadiapplication/x-www-form-urlencoded.Di bawah header, Anda akan melihat data form dalam format
key=value, yaitunama=Siti&kota=Jakarta.
Simulasi 3: Permintaan Multipart Form Data
Buat file teks sederhana (misalnya,
test.txt) dengan konten apa pun.Di terminal, kirim permintaan
POSTyang berisi file tersebut:curl -X POST \ -F "myFile=@test.txt" \ http://localhost:8080/multipartDi Wireshark, cari paket
POSTyang baru.Di bagian Hypertext Transfer Protocol, Anda akan melihat
Content-Typeyang sangat berbeda, yaitumultipart/form-data; boundary=....Luaskan bagian Multipart Mime Media Encapsulation. Anda akan melihat bagian-bagian terpisah (parts) dari data
multipart. Satu bagian akan berisi headerContent-Dispositiondengan nama file (test.txt), dan di bawahnya, Anda akan menemukan konten dari file tersebut. Ini menunjukkan bagaimana data dan file dipaketkan secara terpisah di dalam satu permintaan.

Simulasi Beberapa Segmen
Ini akan memperjelas bagaimana TCP memecah data HTTP menjadi potongan-potongan yang lebih kecil.
1. Memodifikasi Program Go (Golang)
Kita akan mengirimkan data yang sangat besar. Kita bisa menggunakan endpoint /json karena sangat fleksibel.
2. Menjalankan Program dan Mengirim Permintaan
Jika server Go Anda belum berjalan, jalankan kembali:
go run main.goBuka Wireshark dan mulai menangkap lalu lintas di antarmuka
Loopback(lo0di macOS) dengan filtertcp.port == 8080.Buat file JSON berukuran besar. Anda bisa membuat file ini secara manual atau menggunakan skrip sederhana. Misalnya, buat file
large_data.json.Di terminal, kirim permintaan
POSTdengan file JSON berukuran besar:Bash
curl -X POST \ -H "Content-Type: application/json" \ -d @large_data.json \ http://localhost:8080/jsonPerintah
@large_data.jsonmemberitahucurluntuk membaca konten dari file dan mengirimkannya sebagai body permintaan.

3. Analisis di Wireshark
Setelah perintah
curlselesai, kembali ke Wireshark dan hentikan penangkapan paket.Di bilah filter, gunakan
tcp.port == 8080dan cari paketPOSTyang Anda kirim. Anda akan melihat satu baris untuk permintaanPOSTAnda.Namun, di bawah baris tersebut (atau dengan mengklik panah di sampingnya), Anda akan melihat beberapa paket TCP terpisah. Ini adalah paket-paket yang mewakili setiap segmen.
Klik pada paket pertama (yang memiliki
POSTdi bagian infonya). Di panel bawah, Anda akan melihat header HTTP dan bagian pertama dari data JSON. Perhatikan header TCP. Anda akan melihatSequence Numberyang menandai awal data.Sekarang, klik pada paket kedua (yang akan memiliki "TCP segment of a reassembled PDU" di bagian info).
Perhatikan header TCP-nya. Anda akan melihat
Sequence Numberyang melanjutkan dari paket sebelumnya. Ini membuktikan bahwa paket ini adalah kelanjutan dari data yang sama.Wireshark akan merakit kembali data ini secara otomatis untuk Anda, tetapi Anda bisa melihatnya di panel bawah.
Jika Anda memiliki lebih dari dua segmen, periksa paket-paket berikutnya. Setiap paket akan memiliki
Sequence Numberyang meningkat, menunjukkan urutan pengiriman.
Dengan cara ini, Anda bisa melihat bagaimana data yang secara konseptual adalah satu kesatuan (satu file JSON) dipecah oleh protokol TCP menjadi beberapa segmen yang lebih kecil untuk pengiriman yang lebih efisien dan andal.
Last updated
