답변:
HTTP는 애플리케이션 프로토콜입니다. 기본적으로 HTTP 자체를 사용하여 원격 엔드 포인트로 /로부터 정보를 전송할 수 없습니다. 대신 HTTP의 경우 TCP 인 기본 프로토콜에 의존합니다.
관심이있는 경우 OSI 레이어 에 대해 자세히 읽을 수 있습니다 .
반면 소켓은 대부분의 운영 체제에서 네트워크와 통신 할 수 있도록 제공하는 API입니다. 소켓 API는 전송 계층과 그 아래의 다른 프로토콜을 지원합니다.
즉, TCP를 사용하려면 소켓을 사용합니다. 그러나 소켓을 사용하여 HTTP를 사용하여 통신 할 수도 있지만 HTTP 사양 ( RFC2616 ) 에 따라 메시지를 디코딩 / 인코딩해야합니다 . 이는 대부분의 개발자에게 큰 작업이 될 수 있으므로 개발자 프레임 워크 (예 : .NET)에 클라이언트를 준비했습니다 (예 : WebClient
또는 HttpWebRequest
클래스).
HTTP에서는 (소켓 위에서 작동하는) 고수준 HTTP 프로토콜을 사용합니다. 세션 GET google.com
이 없으므로 연결이 닫힌 후 텍스트 요청을 보내고 텍스트 또는 이진 데이터를 수신합니다 (HTTP 1.1에서 영구 연결을 사용할 수 있음).
MSDN 예 :
public static void Main (string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create (args[0]);
HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
Console.WriteLine ("Content length is {0}", response.ContentLength);
Console.WriteLine ("Content type is {0}", response.ContentType);
// Get the stream associated with the response.
Stream receiveStream = response.GetResponseStream ();
// Pipes the stream to a higher level stream reader with the required encoding format.
StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);
Console.WriteLine ("Response stream received.");
Console.WriteLine (readStream.ReadToEnd ());
response.Close ();
readStream.Close ();
}
소켓을 사용하면 레벨이 낮아지고 실제로 연결을 제어하고 원시 바이트를 송수신합니다.
예:
var remoteEndpoint=new IPEndPoint(IPAddress.Loopback, 2345);
var socket = new Socket(remoteEndpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(remoteEndpoint);
socket.Send(new byte[] {1, 2, 3, 4});
Connection
헤더 설정)
HTTP 연결
- HTTP 연결은 소켓에서 실행되는 프로토콜입니다.
- HTTP 연결은 네트워크 연결의 상위 수준 추상화입니다.
- HTTP 연결을 통해 구현은 이러한 모든 상위 수준 세부 정보를 처리하고 단순히 HTTP 요청 (일부 헤더 정보)을 보내고 서버에서 HTTP 응답을받습니다.
소켓 연결
- 소켓은 시스템간에 데이터를 전송하는 데 사용됩니다. 두 시스템을 함께 연결하기 만하면 IP 주소는 IP 기반 네트워크를 통한 시스템의 주소입니다.
- 소켓 연결을 사용하면 두 시스템 간의 네트워크 연결을위한 고유 한 프로토콜을 설계 할 수 있습니다.
- 소켓 연결을 사용하면 TCP / IP 연결의 모든 하위 수준 세부 정보를 처리해야합니다.
HTTP 프로그래밍 또는 HTTP 요청은 시스템에 언어 사양 프로토콜 이있는 소켓 프로그래밍이 사용 되는 경우 느슨하게 결합되고 플랫폼 중립적 인 언어 기술 통신에 사용됩니다.
두 엔드 포인트가 서로 통신 할 수 있으려면 둘 다 규칙 세트를 따라야합니다. 컴퓨터에서는 이러한 규칙 집합을 프로토콜이라고합니다.
예를 들어 브라우저와 같은 엔드 포인트와 웹 서버와 같은 다른 엔드 포인트의 경우 둘 다 http라는 규칙 또는 프로토콜 집합을 따라야 정보를주고받을 수 있습니다. 따라서 월드 와이드 웹과 이러한 종류의 통신에서는이 http 프로토콜을 기반으로 대화하는 사람들 만 서로 성공적으로 대화 할 수 있습니다.
소켓은 끝 점일뿐입니다. http 프로토콜을 따라 www에서 페이지를 요청하는 클라이언트로 통신하거나 연결을 수신하는 서버 역할을 할 수 있습니다. 또는 ssh, ftp와 같은 다른 규칙이나 프로토콜을 따르고 다른 방식으로 통신 할 수 있습니다.
이제 소켓 프로그래밍에서 소켓을 만들고 IP 주소와 포트 번호에 바인딩하여 포트 번호로 작동하고 http, ssh, ftp 또는 사용하려는 통신을 기반으로 원하는 모든 것을 따르도록 지시 할 수 있습니다. 소켓.