Apakah 2 paket ini milik soket tcp yang sama?
Katakanlah kita memiliki dua paket A
dan B
.
A
: Memiliki IP sumber S1
, IP tujuan D1
, port sumber SP1
, port tujuanDP1
B
: Memiliki IP sumber S2
, IP tujuan D1
, port sumber SP2
, port tujuanDP1
Keduanya adalah TCP. Akankah kedua paket ini memiliki soket yang sama sekarang?
Tentang UDP Saya pernah membaca bahwa socketnya terdiri dari tujuan-IP dan nomor-port-tujuan. Jadi jika ini dilakukan dengan UDP, kedua paket akan diterima oleh soket yang sama.
Tetapi contoh ini untuk TCP dan di sini saya tidak yakin apakah itu juga akan melalui soket yang sama untuk TCP?
Jawaban
Pertama, TCP tidak peduli dengan paket tunggal. Jika ini hanya paket data tanpa pembentukan koneksi sebelumnya maka mereka akan dijatuhkan begitu saja, tidak ada soket yang terlibat. Jadi saya berasumsi bahwa ini tentang koneksi yang mapan, atau paket awal untuk membuat koneksi. Sebuah TCP koneksi didefinisikan setidaknya oleh 4 tuple dari (src-ip, src-port, dst-ip, dst-port). Karena 4 tupel ini jelas berbeda dalam kedua kasus, akan ada soket berbeda yang diperlukan.
Tentang UDP Saya pernah membaca bahwa socketnya terdiri dari tujuan-IP dan nomor-port-tujuan.
Ini hanya berlaku untuk soket UDP yang tidak terhubung . Dengan soket UDP yang terhubung lagi, 4-tupel relevan.
Tentang UDP Saya pernah membaca bahwa ...
Perbedaan utama antara TCP dan UDP adalah bahwa TCP berorientasi pada koneksi sedangkan UDP digunakan untuk mengirimkan paket tunggal.
Soket UDP menangani semua paket UDP yang tiba di port (tujuan) tertentu di komputer.
Soket TCP menangani semua paket milik sambungan TCP tertentu.
Akankah kedua paket ini memiliki soket yang sama sekarang?
Ini lebih rumit dari yang Anda pikirkan:
Situasi yang Anda gambarkan biasanya terjadi di "sisi server" (di komputer yang menggunakan accept()
API untuk menangani koneksi masuk - seperti server web).
Katakanlah dua komputer (menjalankan browser web) ingin terhubung ke server web yang sama. Kedua komputer memilih "port TCP sumber" yang sama. Dalam hal ini paket yang dikirim oleh dua komputer ke server web memenuhi kondisi Anda: Hanya alamat IP sumber yang berbeda dalam paket yang dikirim oleh dua komputer sedangkan alamat IP tujuan, port tujuan, dan port sumber sama.
Namun, di "sisi server", dua soket terlibat dalam menangani satu sambungan TCP :
- Satu soket yang menggunakan
listen()
danaccept()
menunggu koneksi TCP masuk. - Untuk setiap koneksi TCP masuk satu soket yang dikembalikan oleh
accept()
.
Ketika paket TCP adalah paket pertama dari koneksi TCP, paket tersebut "ditangani" oleh soket TCP yang bekerja listen()
di port tujuan.
Soket ini tidak peduli dengan alamat IP sumber atau port TCP sumber - seperti soket UDP. Soket menangani semua paket pertama koneksi TCP yang memiliki alamat IP tujuan tertentu dan port tujuan tertentu.
Ketika paket pertama diterima, soket kedua (menangani koneksi TCP) dibuat dan dikembalikan oleh access()
API.
Soket ini menangani koneksi tertentu (dan karenanya semua paket selanjutnya dari koneksi TCP).
Karena kami memiliki dua koneksi yang berbeda dalam contoh dengan dua komputer yang terhubung ke server yang sama menggunakan "port TCP sumber" yang sama, dua soket yang berbeda akan menangani paket yang berbeda di port TCP tujuan saja.