Http通信とSocket通信の違い

一般的に、デバイスで必要とされるデータはサーバーで管理します。 ネットワークを通じてサーバからデータを取得するための通信方式には、大きく分けて Http 通信と Socket 通信の 2 種類がありますが、今日はこの 2 つの通信方式の違いについて見ていきたいと思います。


Http 通信


クライアントのリクエストがある場合のみ、サーバーが応答(Response)して当該情報を送信し、すぐに接続を終了する方式

Http 通信は Client の要請があるときだけ Server が応答して処理をした後に連結を絶つ方法です。 このような接続方法はClientが要請を送る場合にのみServerが応答するワン・ウェイ・コニュニケーションで、Server が Client で要請を送ることはできません。 理解を助けるために皆さんがこのブログの内容を見るためにブログに入ってくる状況を例に挙げてみます。 皆さんがこのブログのためのリンクをクリックした瞬間に Client(ウェブ)は Server(ウェブサーバ)にこの文に対する内容を送ってほしいと要請をしたのです。 この文に対する内容を受けた後は、連結が終了されます。 そのために要請を送るとき、内容を待つ時間と共に連結する時間が入るようになります。 このような Http 通信は、リアルタイム接続がなく、必要な場合のみServerにアクセスするコンテンツ中心のデータを使用するとき用意です。 もしブログに対する内容を要請するため、リアルタイムでつなぐを維持する Socket 通信を使用することになると、ブログの内容を受けた後も、引き続き通信のための連結が成立しており、負荷がかかります。 一般的にモバイルアプリケーションは必要な場合のみ Server で情報を要請する場合が多いが、このような Web Server で Http 通信を主に使用して費用や保守などほとんどの方面でいいです。

http 通信

Http 通信の特徴
  • クライアントがリクエストを送信した場合にのみ、サーバーが応答するワン・ウェイ・コニュニケーションである。
  • サーバーからの応答を受けた後は、接続がすぐに終了する。
  • リアルタイムの接続ではなく、必要な場合にのみサーバーに要請を送る状況に有用である。
  • 要請を送ってサーバーの応答を待つアプリケーション(Android or Ios)の開発に主に使われる。

Socket 通信

サーバーとクライアントが特定ポートを通じてリアルタイムでツーウエー・コミュニケーションする方式

Socket 通信は Http 通信とは違って、ServerとClientが特定Portを通じて連結を成立しており、リアルタイムでツーウエー・コミュニケーションする方式です。 Client のみ必要な場合に要請を送る Http 通信とは違って、Socket 通信は Server も Client で要請を送ることができ、ずっとつながりを維持する連結志向型通信であるため、リアルタイムの通信が必要な場合によく使用されます。 例えば、リアルタイム Streaming の中継やリアルタイムでチャットと一緒に即座に情報をやり取りする場合に使用します。 例えば、リアルタイム動画 Streaming サービスを Http 通信で具現したと仮定します。 このような場合に使用者がサーバに動画を要請するためには動画が終了される瞬間まで継続して Http 通信を送らなければならない、このような構造は引き続き連結を要請するために負荷がかかります。 従って、このような場合には Socket を通じて具現することが適しています。

socket 通信

Socket 通信の特徴

-Server と Client がずっとつながりを維持するツーウエー・コミュニケーションである。
-Server と Client がリアルタイムでデータをやり取りする状況が必要な場合に使用される。 -リアルタイム動画 Streaming やオンラインゲームなどのような場合によく使用される。

(통신 방식) Http 통신과 Socket 통신 차이

일반적으로 단말기에서 필요로 하는 데이터들은 Server에서 관리합니다. 네트워크를 통해 서버로부터 데이터를 가져오기 위한 통신 방식은 크게 Http 통신과 Socket 통신 2가지가 있는데, 오늘은 이 2가지 통신 방식의 차이에 대해 알아보도록 하겠습니다.


Http 통신


Client의 요청(Request)이 있을 때만 서버가 응답(Response)하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식

Http통신은 Client의 요청이 있을 때만 Server가 응답하여 처리를 한 후에 연결을 끊는 방식입니다. 이러한 연결 방식은 Client가 요청을 보내는 경우에만 Server가 응답하는 단방향적 통신으로, Server가 Client로 요청을 보낼수는 없습니다. 이해를 돕기 위해 여러분들이 이 글을 보기 위해 블로그에 들어오는 상황을 예로 들어보겠습니다. 여러분들이 이 글을 위한 링크를 클릭한 순간에 Client(웹)는 Server(웹서버)로 이 글에 대한 내용을 보내달라고 요청을 한 것입니다. 이 글에 대한 내용들을 받은 후에는 바로 연결이 종료됩니다. 그렇기 때문에 요청을 보낼때, 내용을 기다리는 시간과 함께 연결하는 시간이 들어가게 됩니다. 이러한 Http 통신은 실시간 연결이 아닌, 필요한 경우에만 Server로 접근하는 콘텐츠 위주의 데이터를 사용할 때 용이합니다. 만약 게시물에 대한 내용을 요청하기 위해 실시간으로 연결을 유지하는 Socket통신을 사용하게 되면, 게시물을 받은 후에도 계속 통신을 위한 연결이 성립되어 있어 부하가 걸리게 됩니다. 일반적으로 모바일 어플리케이션은 필요한 경우에만 Server로 정보를 요청하는 경우가 많은데, 이러한 Web Server로 Http 통신을 주로 사용하며 비용 및 유지보수 등 대부분의 방면에서 좋습니다.

http 통신

Http 통신의 특징
  • Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신이다.
  • Server로부터 응답을 받은 후에는 연결이 바로 종료된다.
  • 실시간 연결이 아니고, 필요한 경우에만 Server로 요청을 보내는 상황에 유용하다.
  • 요청을 보내 Server의 응답을 기다리는 어플리케이션(Android or Ios)의 개발에 주로 사용된다.

Socket 통신


Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식

Socket통신은 Http 통신과 달리 Server와 Client가 특정 Port를 통해 연결을 성립하고 있어 실시간으로 양방향 통신을 하는 방식입니다. Client만 필요한 경우에 요청을 보내는 Http 통신과 달리 Socket 통신은 Server 역시 Client로 요청을 보낼 수 있으며, 계속 연결을 유지하는 연결지향형 통신이기 때문에 실시간 통신이 필요한 경우에 자주 사용됩니다. 예를 들면, 실시간 Streaming 중계나 실시간 채팅과 같이 즉각적으로 정보를 주고받는 경우에 사용합니다. 예를 들어 실시간 동영상 Streaming 서비스를 Http 통신으로 구현하였다고 가정하겠습니다. 이러한 경우에 사용자가 서버로 동영상을 요청하기 위해서는 동영상이 종료되는 순간까지 계속해서 Http 통신을 보내야 하고 이러한 구조는 계속 연결을 요청하기 때문에 부하가 걸리게 됩니다. 그러므로 이러한 경우에는 Socket을 통해 구현하는 것이 적합합니다.

socket 통신

Socket 통신의 특징
  • Server와 Client가 계속 연결을 유지하는 양방향 통신이다.
  • Server와 Client가 실시간으로 데이터를 주고받는 상황이 필요한 경우에 사용된다.
  • 실시간 동영상 Streaming이나 온라인 게임 등과 같은 경우에 자주 사용된다.

TCP/IPとは?


TCP/IP

インターネットプログラムが通信をするにあたって、HTTP、SFTP、FTP など様々なプロトコルがあります。 インターネットプロトコルで最も多く使用される代表的なプロトコルは、皆さんご存知の通り IP です。 ここで重要なことはTCPIPは階層ではなくプロトコルであることです。
TCPIPは OSI7 階層とは少し異なるTCPIPの構造的な階層の上で動作します。


tcp/ip
OSI7 階層とは少し異なる様子です。
階層の個数も違って OSI は 7 階層であるのに対し、TCPIP 階層は 4 階層全てであることが分かります。


1. ネットワークインタフェース階層 (Network Interface Layer)

この階層は、Node-To-Node 間の信頼性のあるデータ伝送を担う階層です。
OSI7 階層の物理階層とデータリンク階層の役割を、同ネットワークインタフェース階層が担っています。
したがって、MAC アドレスがこの階層で使用されます。
ネットワークインタフェース階層がデータリンク階層まで担当するので、MAC アドレスが使用されます。
LANカード
上の装備はランカードです。 正確な名称は NIC といいNetwork Interface Cardです。
LAN カードがないとネットワーク通信はできません。ネットワークインタフェース階層で動作するデバイスです。

LAN 上では Ethernet、TokenRing、FDDI などがあり、WAN 上では X.25、FrameRelay、PPP などがあります。


2. インターネット階層 (Internet Layer)

OSI7 階層のネットワーク階層を担う階層です。 OSI7 階層のようにホスト間のルーティングを担当することになります。
インターネット階層で動作するプロトコルは以下の通りです。

  • IP(Internet Protocol):非信頼性、非連結指向データグラムプロトコル

  • ARP(Address Resolution Protocol):アドレス変換プロトコルです。 IP アドレスを MAC アドレスに変換するプロトコル

  • RARP(Reverse ARP):逆に MAC アドレスで IP アドレスを探すプロトコル

  • ICMP(Internet Control Message Protocol):状態診断メッセージプロトコル。 このプロトコルを利用する代表的なプログラムが ping

  • IGMP(Internet Group Message Protocol):マルチキャスト用プロトコル


3. 伝送階層 (Transport Layer)

OSI7 階層の伝送階層と同じです。 プロセス間の信頼性のあるデータ伝送を担う階層です。
process-to-process 転送を担当するためには論理的アドレスが必要ですが、process が使用するポート番号をその論理的アドレスとして使います。
転送階層で動作するプロトコルは下記の通りです。

  • TCP (Transmission Control Protocol):信頼性のある接続指向型プロトコル。 信頼性があるというのは、そのペケットのエラー処理や再送信などでエラーを復旧することです。 そのため TCP のヘッダーに付く情報が多いです。

  • UDP (User Datagram Protocol):非信頼性非接続型プロトコルです。 ペケットを失ったりエラーがあっても対処しないことです。 したがって、UDP ヘッダーは簡単な構造を持っています。


4. 応用階層 (Application Layer)

ユーザーと最も近い階層です。 OSI7 階層の 5 階層から 7 階層までの機能を担っています。
サーバやクライアントアプリケーションがこの階層で動作します。 私たちが知っているブラウザやテルネットのようなサービスがこの階層で動作し、動作するためには転送階層のアドレス、つまりポート番号を使用します。 例えば、http が 88 番ポートを使用することと同じです。
応用階層で動作するプロトコルは以下の通りです。

  • HTTP(Hyper-Text Transfer Protocol):TCP ベースのプロトコルでポート番号 80 番を使用

  • Telnet :TCP ポート番号 23 番を使用します。 遠隔ターミナルを接続する際にこのプロトコルを使用

  • SSH(Secure Shell):テルネットのようなサービスはセキュリティに脆弱。 パスワードが暗号化されていないため、そのまま表示されます。 これを補完したものが SSH です。 ポート番号 22 番を使用します。 SFTP のようなプロトコルも 22 番ポートで主要使用します。

  • FTP(File Transfer Protocol): ファイル転送プロトコル。 ファイルのダウンロードやアップロードに FTP を使用。 FTP は、ファイルのアップロードやダウンロードの際、信頼性を重要視するため、TCP で動作します。 2 つのポートを使用します。

TCP ポート 20 番はデータ転送のための用途、TCP ポート 21 番は制御用として使用します。

  • SMTP (Simple Mail Transfer Protocol):メール転送プロトコルです。 TCP 上で動作し、ポートは 25 番を使用します。

  • POP3(Post Office Protocol Version 3):メール受信用プロトコルです。 アウトルックのようなプログラムは POP3 というプロトコルを使って動作します。 TCP ポート 110 番を使用します。

  • DNS (Domain Name System):ドメイン名に対するホスト情報を提供します。 基本的に UDP 上で動作します。 基本的に失敗したらもう一度要請すればいいですし、それほど重要な情報ではないからです。 しかし、信頼性を要する場合には TCP 上でも動作します。 データが長い場合、同じ時に TCP ベースで動作できます。

UDP、TCP ポート 53 番を使用します。

このように、ポート番号が特定のプロトコルが使用していては使えないポートがあります。 このようなポートを well-known port といいます。

TCP/IP란?


TCP/IP

인터넷 프로그램들이 서로 통신을 하는데 있어서 HTTP, SFTP, FTP 등 다양한 프로토콜이 있습니다. 인터넷 프로토콜에서 가장 많이 사용하는 대표적인 프로토콜은 여러분들도 많이 아시다시피 IP입니다. 여기서 중요한 것은 TCP/IP는 계층이 아니라 프로토콜이라는 점 입니다.
TCP/IP는 OSI7 계층과는 조금은 다른 TCP/IP의 구조적인 계층 위에서 동작합니다


tcp/ip
OSI7 계층과는 조금은 다른 모습입니다.
계층의 갯수 부터가 다르고. OSI는 7계층인데 반해 TCP/IP 계층은 4계층이 전부라는 것을 알 수 있습니다.


1. 네트워크 인터페이스 계층 (Network Interface Layer)

이 계층은 Node-To-Node간의 신뢰성 있는 데이터 전송을 담당하는 계층입니다.
OSI7 계층의 물리 계층과 데이터링크 계층의 역할을 이 네트워크 인터페이스 계층이 담당합니다.
따라서 MAC주소가 이 계층에서 사용됩니다.
네트워크 인터페이스 계층이 바로 데이터링크 계층까지 담당하니까 MAC 어드레스가 사용됩니다.
랜카드
위의 장비는 랜카드 입니다. 정확한 명칭은 NIC라고 하여 Network Interface Card입니다.
바로 이 랜카드가 있어야만 네트워크 통신을 할 수 있는데, 네트워크 인터페이스 계층에서 동작하는 장비입니다.

LAN상에서는 Ethernet, TokenRing, FDDI 등이 있으며 WAN 상에서는 X.25, Frame Relay, PPP 등이 있습니다.


2. 인터넷 계층 (Internet Layer)

OSI7계층의 네트워크 계층을 담당하는 계층입니다. OSI7 계층처럼 호스트간의 라우팅을 담당하게 됩니다.
인터넷 계층에서 동작하는 프로토콜에는 아래와 같습니다.

  • IP(Internet Protocol) : 비신뢰성, 비연결지향 데이터그램 프로토콜

  • ARP(Address Resolution Protocol) : 주소변환 프로토콜입니다. IP주소를 MAC주소로 변환하는 프로토콜

  • RARP(Reverse ARP) : 반대로 MAC주소로 IP주소를 찾는 프로토콜

  • ICMP(Internet Control Message Protocol) : 상태 진단 메시지 프로토콜. 이 프로토콜을 이용하는 대표적인 프로그램이 ping

  • IGMP(Internet Group Message Protocol) : 멀티캐스트용 프로토콜


3. 전송 계층 (Transport Layer)

OSI7 계층의 전송계층과 같습니다. 프로세스간의 신뢰성 있는 데이터 전송을 담당하는 계층입니다.
process-to-process 전송을 담당하기 위해서는 논리적 주소가 필요한데 process가 사용하는 포트 번호를 그 논리적 주소로 사용합니다.
전송 계층에서 동작하는 프로토콜은 아래와 같습니다.

  • TCP (Transmission Control Protocol) : 신뢰성있는 연결지향형 프로토콜. 신뢰성있다는 말은 그 페킷에 대한 오류처리나 재전송따위로 에러를 복구하는 것을 말합니다. 그때문에 TCP의 헤더에 붙는 정보가 많습니다.

  • UDP (User Datagram Protocol) : 비신뢰성 비연결형 프로토콜입니다. 페킷을 잃거나 오류가 있어도 대처하지 않는 것을 말합니다. 따라서 UDP헤더는 간단한 구조를 갖고 있습니다.


4. 응용 계층 (Application Layer)

사용자와 가장 가까운 계층입니다. OSI7계층의 5계층부터 7계층까지의 기능을 담당하고 있습니다.
서버나 클라이언트 응용 프로그램이 이 계층에서 동작합니다. 우리가 알고 있는 브라우저나 텔넷같은 서비스가 이 계층에 동작하며, 동작하기 위해서는 전송계층의 주소, 즉 포트번호를 사용합니다. 예를들어 http가 88번 포트를 사용하는 것과 같습니다.
응용 계층에서 동작한느 프로토콜은 아래와 같습니다.

  • HTTP (Hyper-Text Transfer Protocol) : TCP기반의 프로토콜로 포트번호 80번을 사용

  • Telnet : TCP 포트번호 23번을 사용합니다. 원격 터미널을 접속할때 이 포로토콜을 사용

  • SSH (Secure Shell) : 텔넷과 같은 서비스는 보안에 취약. 비밀번호가 암호화되지 않아 그대로 노출됩니다.. 이것을 보완한것이 SSH입니다. 포트번호 22번을 사용합니다. SFTP 같은 프로토콜도 22번 포트로 주요 사용합니다.

  • FTP(File Transfer Protocol) : 파일 전송 프로토콜. 파일을 받거나 올릴때 FTP를 사용. FTP는 파일을 올리거나 내려받을때 신뢰성을 중요시하기 때문에 TCP에서 동작합니다. 2개의 포트를 사용합니다.

TCP 포트 20번은 데이터 전송을 위한 용도, TCP 포트 21번은 제어용으로 사용합니다.

  • SMTP (Simple Mail Transfer Protocol) : 메일 전송 프로토콜입니다. TCP 상에서 동작하며 포트는 25번을 사용합니다.

  • POP3 (Post Office Protocol Version3) : 메일 수신용 프로토콜입니다. 아웃룩같은 프로그램이 POP3라는 프로토콜을 사용하여 동작합니다. TCP 포트 110번을 사용합니다.

  • DNS (Domain Name System) : 도메인명에 대한 호스트 정보를 제공해줍니다. 기본적으로 UDP상에서 동작합니다. 기본적으로 실패하면 다시 한번 요청하면 되며 그렇게 중요한 정보가 아니기 때문이죠. 하지만 신뢰성을 요할 경우에는 TCP상에서도 동작합니다. 데이터의 길이가 길 경우같은 때 TCP 기반으로 동작할 수 있습니다.

UDP, TCP 포트 53번을 사용합니다.

이와 같이 포트번호가 특정 프로토콜이 사용해서 우리가 쓸 수 없는 포트들이 있습니다. 이런 포트들을 well-known port라고 합니다.

RTSPとは?

RTSP(real time streaming protocol) はリアルタイムマルチメディアストリームを制御するためのプロトコルである。
RealNetwork 社、Netscape 社、IBM 社などが共同開発を行った。

RTSP の特徴

  • 多地点ストリーミング応用のための基盤構造

    • 応用階層でユニキャストまたはマルチキャスト接続の両方を使用する多地点応用で、マルチメディアストリーム制御のためのプロトコル提供という目的を持つが、プロトコルというより基盤構造と見ることができる。

  • クライアント/サーバーの形で動作

    • 構造、文法、動作方式が HTTP と非常に似ている。

  • セッション管理

    • 多地点多数のマルチメディアセッションの設定と制御が RTSP によって制御される。
    • RTSP のリソース管理セットアップ及び予約は RSVP で使用可能

  • 複数のプロトコルが関連する

    • 実際のマルチメディア情報のリアルタイム転送メカニズムは、RTP/RTCP に基本基本としている。

      • RTP/RTCP:オーディオ、ビデオなどで時間同期化されたストリームを生成·制御する。
    • 信頼性のない TCP、非信頼的な UDP など、様々な伝送プロトコルの上で動作可能。主に UDP 上で動作

      • このようなプロトコルの助けを受けて RTSP/RTP(RTCP)リアルタイムパケットが配信される。
    • RTP、RTCP とは異なるチャンネルを使用(データ転送ポートとは異なるポート番号として 554 番を使用)

      • RTP、RTCP は同一チャンネルを通じて転送されますが、
      • RSTP は、RTPRTCP とは異なるチャネルを使用して全体ストリーミング制御を行う。

ストリーミング再生に関する制御コマンド

ㅇ Setup(接続設定)、Play(再生)、Forward、Rewind、Pause(一時停止)、Stop(完全停止)、Resume(再起動)、Record、Teardown(接続解除)など、 - 家庭用 VCR をインターネットに適用したもの

インターネットウェブによる実装例
RTSP