Adakah yang bisa menjelaskan perbedaan antara mode Pasif FTP (PASV) dan Extended Passive mode FTP (EPSV)?
Adakah yang bisa menjelaskan perbedaan antara mode Pasif FTP (PASV) dan Extended Passive mode FTP (EPSV)?
Jawaban:
Satu-satunya perbedaan adalah yang PORT/PASV
terbatas pada IPv4 , sementara EPRT/EPSV
bekerja dengan protokol jaringan apa pun (meskipun hanya IPv6 yang digunakan dalam praktiknya).
Perintah standar PORT
(aktif) dan PASV
(pasif) dalam protokol FTP bertukar alamat & informasi port sebagai enam desimal 1-byte , di mana ujung lainnya harus merekonstruksi alamat IP empat-byte dan nomor port TCP dua-byte.
PORT <address[4]>,<port[2]>
PORT 132,235,1,2,24,131
Tetapi kemudian protokol lain mulai muncul. IPv4 akan segera diganti dengan "IPng", yang memiliki beberapa proposal pengganti yang bersaing (OSI CLNP, TUBA, SIP, SIPP, CATNIP - pada berbagai waktu dalam sejarah), beberapa dengan ukuran alamat host yang lebih pendek, lebih panjang, bahkan variabel , sampai IPv6 dengan alamat 16 byte akhirnya ditetapkan.
Hanya mengirim lebih banyak byte tidak akan berhasil - server dan klien tidak dapat diharapkan untuk mengetahui protokol yang benar berdasarkan murni pada panjang alamat. (Misalnya, bagaimana jika Anda memiliki satu protokol dengan alamat 16 byte + port 4 byte, yang lain dengan alamat 12 byte + port 12 byte?)
Selain itu - meskipun ini kurang penting 20 tahun yang lalu - hari ini ada jutaan perangkat NAT di Internet, yang memeriksa dan memotong koneksi kontrol FTP sehingga host "luar" hanya akan melihat alamat IPv4 global bahkan jika "dalam" Tuan rumah mengirim RFC1918 lokal. Bahkan tanpa NAT, firewall stateful sering menonton perintah kontrol untuk secara otomatis memungkinkan koneksi data tanpa aturan manual.
Ini pada dasarnya berarti bahwa hanya mengirim lebih banyak nomor dengan PORT
atau PASV
dijamin untuk banyak orang. Mungkin beberapa firewall diam-diam akan salah mengartikan beberapa byte alamat sebagai port dan diam-diam membuang sisanya; orang lain mungkin menjatuhkan koneksi, atau hanya crash.
Untuk menghindari berbagai masalah seperti di atas, perintah baru harus diperkenalkan untuk dukungan multi-protokol di FTP.
Pada tahun 1993, RFC 1639 (awalnya RFC 1545 ) memperkenalkan "alamat panjang" LPRT
danLPSV
perintah, yang seperti PORT
& PASV
tetapi dengan panjang alamat variabel ; mereka termasuk pengenal tipe protokol juga. (Namun itu tidak mengubah sintaks - alamat IPv6: port hanya akan dikirim sebagai 21 angka daripada enam.)
LPRT <protocol>,<addr-length>,<address...>,<port-length>,<port...>
LPRT 4,4,132,235,1,2,2,24,131
LPRT 6,16,16,128,0,0,0,0,0,0,0,8,8,0,32,12,65,122,2,20,162
Namun, itu masih belum memperbaiki beberapa masalah, seperti meminta server untuk menggunakan protokol yang berbeda daripada untuk koneksi kontrol. RFC juga dengan cepat menjadi ketinggalan zaman; ketika IPv6 keluar hanya setahun kemudian, itu tidak dapat digunakan dengan LPRT karena tidak ada pengidentifikasi protokol LPRT ditugaskan untuk itu (hanya untuk berbagai proposal awal).
Untuk memperbaikinya, RFC 2428 pada tahun 1998 menambahkan EPRT
dan EPSV
, alias "extended port" dan "extended pasif" , yang juga memiliki metode untuk menegosiasikan protokol yang keduanya mendukung. Perintah "extended" juga mengirim alamat dalam bentuk yang dapat dibaca manusia - untuk IPv6, yang berarti menggunakan notasi hex & titik dua, daripada serangkaian angka desimal terpisah.
EPRT x<protocol>x<address>x<port>x
EPRT |1|132.235.1.2|6275|
EPRT |2|1080::8:800:200C:417A|5282|
Kesimpulannya, dukungan IPv6 adalah satu-satunya perbedaan.
EPSV
respons tidak menyertakan alamat IP (apa PASV
tanggapannya). Ini untuk menghindari masalah umum ketika server FTP yang terletak di belakang NAT tidak mengetahui alamat IP eksternal dan membingungkan klien FTP dengan mengirimkannya alamat internal.
Perbedaan antara aktif dan pasif sudah dijawab. Extensive Passive (EPSV) hanya pasif dengan IPv4 dan IPv6, karena sintaksis respons terhadap PASV khusus untuk IPv4 dan dengan demikian diperlukan perintah baru untuk IPv6. Sama dengan EPTR vs. PORT dalam mode aktif. Ada perilaku yang sedikit berbeda dengan EPRT dan EPSV di mana mereka hanya dapat berisi port, bukan IP dan port seperti PORT dan PASV lakukan. Dengan demikian transfer data hanya dapat dilakukan antara sistem yang memiliki koneksi kontrol. Dengan PORT dan PASV dimungkinkan untuk membuat koneksi data antara sistem lain (meskipun saat ini dianggap desain yang buruk dan risiko keamanan).