web-dev-qa-db-ja.com

HTTP vs TCP / IP、データをWebサーバーに送信

現在、Arduino Nano( http://arduino.cc/en/Main/arduinoBoardNano )を使用して温度センサーからWebサーバーにデータを送信する必要があるプロジェクトに取り組んでいます。

最初は、POST/GETなどを支援する優れたライブラリがたくさんあるので、簡単だと思っていました。しかし、教授は、TCP/IPを使用してサーバーにデータを送信する必要があると言ったので、理解してくださいPOSTとGETはHTTPメソッドです。

HTTPとTCP/IPの違いを誰かに説明してもらえますか?具体的には、Webサーバーへのデータ送信に関連します。私はあまり技術的ではない答えを探しています(私はこのすべてにかなり新しいです)。

最後に、Arduinoに上記で説明したことを実行させた経験のある人がいる場合は、いくつかのポインタに感謝します。

ありがとう!

50
Adam

HTTPは、主にインターネットの閲覧に使用されるプロトコルです(IE、Firefoxなど)。 TCPの上に乗っています。これにより、2台のコンピューター間に信頼性の高いリンクが提供されます(パケットが失われた場合-再送信されます)。TCP TCP/IPはインターネットおよび他のネットワークの99%の基盤です。

基本的には、HTTPを通信している場合、その下でTCP/IPを使用して通信していることを意味します(ただし、これは教授の意図したものではないはずです)。

Arduino Nanoはこれらのすべてをサポートしているわけではないため、間に何かが必要です。これにより、NanoシグナリングがTCP/HTTP通信に変換されます。

一部のオプションは次のとおりです。

  1. Nano over Serialと通信し、PCでシリアルプロトコルをHTTP/TCPに変換する
  2. Ethernet/Wifiシールド拡張(Uno/Mega)をサポートする他のArduinoボードとNanoを切り替えるか、Ethernetを単独で含むカスタムボードを選択します
  3. 別のArduino(Uno/Mega)をイーサネットシールドとともに追加ボードとして使用し、Nano over SerialまたはRFモジュールの助けを借りて通信します(過去にこのオプションを実装しました)
  4. 別の珍しいオプションは、NanoをAndroidオーディオケーブルを使用してスマートフォンに接続し、ソフトモデムライブラリを使用することです( https://code.google.com/p/arms22/issues /detail?id=2 )。Androidの実装を含み、Android用のアプリケーションを記述します

言及したWebサーバーは定義上HTTPのみをサポートしているため、TCPで通信する場合は、TCPサーバーを使用する必要があります。

センサーデータを視覚化するためのグラフを提供する既存のWebサービスの1つは https://xively.com/ です。これは、APIがREST HTTP。しかし、それだけではありません。

65
Miro

要するに:TCPはトランスポート層プロトコルであり、HTTPはTCPで実行されるアプリケーション層プロトコルです。

詳細:違い(および他の多くのネットワークトピック)を理解するには、階層型ネットワークモデルの概念を理解する必要があります。基本的に、異なる距離と異なる抽象化層でコンピューターが会話できるようにするさまざまなプロトコルがあります。

ネットワークスタックの最下部は物理層です。これは、電気信号、光パルス、または電波が実際に場所から場所へ情報を送信する場所です。物理層には実際にはプロトコルはありませんが、代わりに電圧、周波数、およびその他の物理的特性の標準があります。この方法で情報を直接送信できますが、多くの電力または専用回線が必要であり、上位層がないと帯域幅を共有できません。

次の層はリンク層です。この層は、物理的な通信媒体を共有するデバイスとの通信をカバーしています。ここで、イーサネット、802.11a/b/g/n、トークンリングなどのプロトコルは、物理メディアへの複数の同時アクセスを処理する方法と、トラフィックを別のデバイスではなく1つのデバイスに転送する方法を指定します。通常のホームネットワークでは、これがコンピューターがホームの「ルーター」と通信する方法です。

3番目の層はネットワーク層です。ほとんどの場合、これはインターネットプロトコル(IP)によって支配されます。これはインターネットの魔法が発生する場所であり、あなたはそれがどこにあるかを知る必要なく、世界中の途中でコンピューターと話すことができます。ルーターは、ローカルネットワークから他のコンピューターが存在するネットワークへのトラフィックの誘導を処理します。このネットワークでは、独自のリンクレイヤーがパケットを適切なコンピューターに送信します。

今、私たちはどこかに到達しています。世界中のどこかのコンピューターと話すことができますが、そのコンピューターは多くの異なるプログラムを実行しています。メッセージを配信する相手をどのように知る必要がありますか?通常はポート番号を使用して、トランスポート層がこれを処理します。最も人気のある2つのトランスポート層プロトコルは、TCPとUDPです。TCPパケットの並べ替え、失われたパケットの再送信などの通信。UDPはより信頼性が低くなりますが、オーバーヘッドは小さくなります。

ブラウザーをもう一方のWebサーバーソフトウェアに接続しましたが、サーバーはどのページを必要としているのかをどのように認識しますか?質問や回答を投稿するにはどうすればよいですか?これらは、アプリケーション層プロトコルが処理するものです。 Webトラフィックの場合、これはHyperText Transfer Protocol(HTTP)です。何千ものアプリケーション層プロトコルがあります:電子メール用のSMTP、IMAP、およびPOP3。チャット用のXMPP、IRC、ICQ。リモート管理用のTelnet、SSH、RDP。等.

これらはTCP/IPネットワークモデルの5つの層ですが、実際には概念的なものにすぎません。 OSIモデルには7つの層があります。実際には、一部のプロトコルはさまざまなレイヤー間でシムするか、一度に複数のレイヤーで機能します。たとえば、TLS/SSLは、ネットワーク層とトランスポート層の間の暗号化とセッション情報を提供します。アプリケーション層の上で、アプリケーションプログラミングインターフェース(API)がQuora、Twitter、FacebookなどのWebアプリケーションとの通信を管理します。

60
sijo jose

@Miroはテクニカルスピーチで質問によく答えましたが、ネットワーキングのトピックに関する初心者のために、あまり技術的な話ではない説明を提供したいと思います。

TCPまたはUDPは米国郵政公社に相当し、HTTPは1つのビジネスレターテンプレートに相当します。ビジネスレターフォーマットはメッセージの「WHO、HOW、WHAT、WHEN、およびWHERE」を送信するための適切で一般的な方法ですが、USPSで許可されている形式はこれだけではありません。 1つは、手続きを放棄し、代わりに請求書やラブレター、グリーティングカードなどのより効率的な形式を使用することですが、TCPまたはUDP)などのUSPSが引き続き使用されますあなた、手紙を前後に運んでいます。

9
codechimp

IP対TCp対HTTP

IPは、他のプロトコルが他のコンピューターに到達し、他のコンピューターへの道を見つけることを可能にする一種の高速道路と考えてください。 TCPおよびUDPは高速道路の「トラック」であり、それらが運ぶ「負荷」はHTTP、ファイル転送プロトコル(FTP)などのプロトコルです。 。

IPはすべてのネットワークを接続するために必要です。

TCPは、データを安全に転送できるメカニズムです。

HTTP TCP=を使用してデータを転送する)は、Webサーバーおよびクライアントで使用される特定のプロトコルです。

4
Sanaulla

率直に言って、TCP/IPまたはHTTPを優先すべき特別な理由はありませんが、HTTPの方が簡単にコード化できます。 HTTPに関連するオーバーヘッドがいくつかありますが、一般的にレイテンシラグに比べて小さいです。さらに、優れたTCP/IPリンクには、信頼性のために、HTTPが無料で提供するコードが含まれます。

そのため、問題の教授が特別な技術的要件を持たない限り(尋ねる!)、またはこれを何らかの特別な学習体験にしたくない場合(尋ねる!)、POST/GETタイプの相互作用が優れているように思われます。実際、今日の多くのシステムは、この方法でJSONオブジェクトを使用して通信しています。

1
Jan Galkowski

混乱しないでください。Proffが意味することは、Arduino nanoイーサネットシールドを接続し、httpプロトコルを使用して、TCP IPおよび通信手段で応答するWebサーバーに情報を送信することです。

0
OLUFEMI