Bagaimana cara kerja soket pada koneksi nirkabel?

15

Saya hanya bekerja pada aplikasi sisi klien (khusus, seluler) menggunakan Android, di mana semua jaringan ditangani pada lapisan HTTP menggunakan kerangka yang disediakan komponen seperti HttpUrlConnection.

Tetapi sistem push messaging seperti Websockets / XMPP dll, semuanya mempertahankan koneksi yang persisten ke server. Bahkan Google GCM, yang dimasukkan ke perangkat yang didukung Google Play, mempertahankan koneksi yang persisten ke server.

Pertanyaan saya adalah, bagaimana cara kerjanya tanpa menguras baterai? Jika kami membuat permintaan HTTP terus menerus secara berurutan, pengurasan baterai menjadi signifikan. Bagaimana koneksi persisten ini dipertahankan tanpa mengalami masalah yang sama?

Vinay S Shenoy
sumber
Apakah pertanyaan Anda tentang soket atau soket web? Itu adalah dua hal yang sangat berbeda.
svick
@ svick Pertanyaan saya terkait dengan soket.
Vinay S Shenoy

Jawaban:

23

Koneksi TCP terbuka adalah keadaan logis. Itu tidak menyiratkan bahwa data selalu dikirim bolak-balik. Setelah jabat tangan tiga arah awal, Anda memasuki kondisi "terhubung". Anda berada dalam kondisi itu sampai pemutusan 3 arah terjadi atau keep-hidup gagal.

Selama masa koneksi, sumber daya dari medium "fisik" yang mendasarinya dapat dibentuk untuk melakukan transfer data untuk koneksi itu. Dalam kasus koneksi kabel, ini adalah masalah mentransfer frame ethernet sekitar. Dalam kasus koneksi nirkabel 3G / 4G, ini dilakukan dengan membuat koneksi dengan protokol tingkat rendah sesuai kebutuhan.

Jadi untuk kehidupan koneksi, tidak ada koneksi data yang mendasari fisik yang ada. Sebaliknya itu terbengkalai menunggu salah satu rekan dalam koneksi TCP perlu mengirim data.

Masalah lain adalah TCP berbasis ack . Rekan-rekan TCP dapat dengan cukup efisien menjaga satu sama lain mengetahui apa yang telah diterima secara pasti. Setelah gagal, TCP akan mengirim ulang. Ini berfungsi baik untuk tautan fisik yang cukup andal, tetapi cenderung berantakan di tautan yang sangat bising / putus, seperti koneksi nirkabel Anda. Seperti yang dapat Anda bayangkan, acks / transmisi ulang akan terjadi sangat sering di lingkungan ini.

Jadi biasanya, protokol nirkabel yang mendasari melakukan apa saja untuk mengurangi kebutuhan transmisi ulang TCP. Misalnya, ada banyak pengecekan kesalahan yang dibangun ke dalam lapisan nirkabel. Rekan-rekan di dunia nirkabel (stasiun pangkalan / telepon) juga menggunakan protokol berbasis nak untuk memberi tahu pihak lain ketika mereka tidak menerima sesuatu. Menjadi berbasis nak mengurangi overhead dalam memeriksa kesalahan (kami menganggap semuanya baik-baik saja kecuali pihak lain mengatakan tidak). Ini juga membantu mengatasi kesalahan sebelumnyamereka menggelembung ke lapisan TCP - sehingga menghindari banyak meronta-ronta TCP mencoba mentransmisikan kembali. Selain itu, ini mengurangi ruang lingkup transmisi ulang ke nirkabel rekan - telepon tidak perlu meminta server di suatu tempat di Internet untuk paket lagi, hanya stasiun pangkalan di atas tautan nirkabel.

Doug T.
sumber