HTTP 에 대해서 구글링하면 무수히 많이 나오는 내용
★☆HTTP 통신 vs 소켓 통신 차이점★☆
결론만 말하면 HTTP 통신은 소켓 통신이다.
" 1990년대 초에 설계된 HTTP는 거듭하여 진화해온 확장 가능한 프로토콜입니다. HTTP는 애플리케이션 계층의 프로토콜로, 신뢰 가능한 전송 프로토콜이라면 이론상으로는 무엇이든 사용할 수 있으나 TCP 혹은 암호화된 TCP 연결인 TLS를 통해 전송됩니다. "
" 연결은 전송 계층에서 제어되므로 근본적으로 HTTP 영역 밖입니다. HTTP는 연결될 수 있도록 하는 근본적인 전송 프로토콜을 요구하지 않습니다; 다만 그저 신뢰할 수 있거나 메시지 손실이 없는(최소한의 오류는 표시) 연결을 요구할 뿐입니다. 인터넷 상의 가장 일반적인 두 개의 전송 프로토콜 중에서 TCP는 신뢰할 수 있으며 UDP는 그렇지 않습니다. 그러므로 HTTP는 연결이 필수는 아니지만 연결 기반인 TCP 표준에 의존합니다."
출처 : developer.mozilla.org/ko/docs/Web/HTTP/Overview
HTTP는 TCP에 의존하여 만들어졌다.(= 상위 레이어에 만들어졌다.)
그럼 Socket 이란 무엇이냐?
What Is a Socket?
Normally, a server runs on a specific computer and has a socket that is bound to a specific port number. The server just waits, listening to the socket for a client to make a connection request.
일반적으로, 서버는 특정 컴퓨터 위에서 돌아가고 특정 포트넘버에 할당된 소켓을 갖는다. 이 서버는 클라이언트가 커넥션 요청을 만들기 위한 소켓을 리스닝하며 기다립니다. (후략)
On the client side, if the connection is accepted, a socket is successfully created and the client can use the socket to communicate with the server.
클라이언트 쪽에서, 커넥션이 성립된 경우, 소켓이 성공적으로 생성되며 클라이언트는 소켓을 서버와 상호작용하기 위해 사용할 수 있습니다.
Definition:
A socket is one endpoint of a two-way communication link between two programs running on the network. A socket is bound to a port number so that the TCP layer can identify the application that data is destined to be sent to. An endpoint is a combination of an IP address and a port number.
소켓이란 네트워크 위에서 돌아가는 두 프로그램 간의 양방향 통신링크의 엔드포인트입니다. 소켓은 포트 넘버를 할당받아 TCP 레이어가 데이터의 목적지인 애플리케이션을 식별하도록 합니다. 엔드포인트는 IP 주소와 포트넘버의 조합입니다.
출처 : docs.oracle.com/javase/tutorial/networking/sockets/definition.html
즉 소켓은 엔드포인트. 즉 IP와 포트 넘버를 활용하여 만들어진 통신의 양끝단입니다. 우리가 보통 웹서버를 만들때 80포트를 이용해서 만드는데, 이때 쓰는 엔드포인트도 IP + 포트 의 조합입니다. 그리고 소켓 통신은 소켓을 활용한 통신 방식인거죠.
근데 HTTP 란 TCP 위에서 만들어집니다. 즉 소켓을 양끝단으로 하는 TCP 레이어 위에 존재하는 프로토콜입니다.
HTTP가 TCP 위에 만들어졌으니, 즉 HTTP 또한 소켓 통신을 활용한 방식이라고 볼 수 있습니다!
그럼 20000
'컴퓨터 공학' 카테고리의 다른 글
👉 [CS] Join (0) | 2021.02.14 |
---|---|
👉 [네트워크] 나는 왜 SocketIO 대신 Websocket 서버를 구축하였는가? (0) | 2021.01.12 |
👉 [Python] String 값으로 함수 호출하기 (0) | 2019.12.05 |
👉 [Linux] unsupported class file major version 55 해결 방법 (0) | 2019.11.03 |
👉 [Spark] java.net.BindException : Service 'sparkDriver' failed after 16 retries 오류 해결 방법 (0) | 2019.11.01 |