ワイヤレス接続でソケットはどのように機能しますか?


15

私はAndroidを使用するクライアント側(特にモバイル)アプリケーションでのみ作業しました。このアプリケーションでは、HttpUrlConnectionなどのフレームワークが提供するコンポーネントを使用して、すべてのネットワークがHTTPレイヤーで処理されます。

ただし、Websockets / XMPPなどのプッシュメッセージングシステムはすべて、サーバーへの永続的な接続を維持します。Google Play対応デバイスに組み込まれているGoogleのGCMでさえ、サーバーへの永続的な接続を維持します。

私の質問は、バッテリーを消耗させずにこれがどのように機能するのですか?HTTPリクエストを連続して連続して送信すると、バッテリーの消耗が大きくなります。同じ問題に遭遇することなく、これらの永続的な接続はどのように維持されますか?


ソケットまたはWebソケットに関する質問ですか?これらは2つの非常に異なるものです。
svick 14

@svick私の質問はソケットに関連していました。
ヴィネイSシェノイ14

回答:


23

オープンTCP接続は論理的な状態です。そのデータが常にやり取りされることを意味するものではありません。最初の3ウェイハンドシェイクの後、「接続済み」状態になりました。3ウェイ切断が発生するか、キープアライブが失敗するまで、その状態になります。

接続の存続期間中、基礎となる「物理」メディアからのリソースを確立して、その接続のデータ転送を行うことができます。有線接続の場合、これはイーサネットフレームを転送する問題です。3G / 4Gワイヤレス接続の場合、これは必要に応じて低レベルのプロトコルとの接続を確立することにより行われます。

そのため、接続の存続期間中、物理的な基礎となるデータ接続は存在しません。代わりに、TCP接続のいずれかのピアがデータを送信する必要があるのを待機して休止しています。

もう1つの問題は、TCPがackベースであることです。TCPピアは、確実に受信されたことを互いに効率的に通知することができます。失敗すると、TCPは再送信します。これは、かなり信頼性の高い物理リンクには適していますが、ワイヤレス接続のように非常にノイズの多い/壊れたリンクではバラバラになる傾向があります。ご想像のとおり、これらの環境では、ACK /再送信が非常に頻繁に発生します。

そのため、通常、基礎となるワイヤレスプロトコルは、TCP再送信の必要性を減らすために、できる限りのことを行います。たとえば、ワイヤレスレイヤーには多くのエラーチェックが組み込まれています。ワイヤレスレルム(ベースステーション/電話)のピアは、nakベースのプロトコルを使用して、相手に何かを受信しなかったことを通知します。されているNAKベースは(相手側がそのないと言うしない限り、私たちはすべての罰金を想定)エラーのチェックにオーバーヘッドを軽減します。また、前にエラー対処するの役立ちますそれらはTCP層までバブルアップするため、再送信を試みるTCPスラッシングの多くを回避できます。さらに、ワイヤレスピアへの再送信の範囲を縮小します。電話は、インターネット上のどこかでサーバーにパケットを再度要求する必要はなく、ワイヤレスリンクを介してベースステーションだけを要求します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.