Saya memiliki penyedia (A) yang ingin mengirimkan data kepada kami melalui koneksi TCP yang masuk. Sayangnya layanan yang dikonsumsi (B) tidak dapat menerima koneksi TCP masuk. Juga tidak memiliki IP statis, persyaratan lain.
Salah satu cara untuk menyelesaikannya adalah layanan yang menghubungkan port TCP A yang masuk ke port TCP B lainnya, sehingga konsumen dapat membuat koneksi outbound ke B.
Ini bukan masalah unik [1] [2] , dan dengan socat saya dapat membuat sesuatu yang sangat dekat dengan apa yang saya inginkan:
socat -d -d -d -u TCP4-LISTEN:PORT-A,reuseaddr TCP4-LISTEN:PORT-B,reuseaddr
Namun, ini memiliki masalah berikut:
- Jika B terputus, ia tidak dapat terhubung kembali. Dengan
TCP4-LISTEN:PORT-B,reuseaddr,fork
, itu dapat terhubung tetapi tidak menerima data. - B tidak dapat terhubung sebelum A membuat koneksi (dapat diatasi)
- Hanya satu koneksi yang dapat dibuat
PORT-B
(dapat diatasi)
Apakah ada cara untuk menyesuaikan perintah sehingga menjadi "permament" dan tahan terhadap kegagalan?
Dunia nyata itu berantakan.
Dalam dunia nyata kadang-kadang koneksi TCP mati, ini dapat terjadi misalnya jika firewall stateful atau NAT di-reboot, jika koneksi berjalan terlalu lama tanpa lalu lintas, jika koneksi yang mendasarinya turun terlalu lama.
Lebih jauh lagi kadang-kadang ketika koneksi mati mereka tidak mati secara simetris. Jika koneksi yang membawa banyak data mati, maka kemungkinan pengirim akan mengetahui bahwa itu sudah mati jauh sebelum penerima melakukannya. Ini memiliki beberapa efek samping.
Selanjutnya koneksi TCP adalah aliran byte, BUKAN aliran pesan, jadi ketika koneksi Anda mati, Anda mungkin menerima sebagian pesan.
Hasil bersih dari ini membuat saya menyimpulkan bahwa solusi yang kuat membutuhkan pemahaman tentang protokol aplikasi sehingga solusi Anda dapat mengerti.
sumber