프로세스는 소켓을 통해 네트워크로 메시지를 주고 받는다. 프로세스는 집이고 소켓은 출입구로 비유할 수 있다.
프로세스가 메시지를 다른 호스트의 프로세스로 보내고 싶을 때, 출입구(소켓)으로 메시지를 밀어낸다. 메시지가 다른 호스트에 도착하면 마찬가지로 출입구(소켓)을 거쳐 수신 프로세스에 닿고 처리된다.

그림에서 보이듯이 소켓은 애플리케이션 계층과 트랜스포트 계층 간의 인터페이스다.
떨어져 있는 두 호스트를 연결해주는 도구로 인터페이스 역할을 함
두 프로세스를 연결(IP와 Port 이용)해서 데이터를 송수신함
Endpoint : IP와 Port 번호의 조합으로, 최종 목적지 역할
TCP/UDP에서 동작하기 때문에, 서버-클라이언트 통신 구조를 갖춤
양방향 통신
socket은 한 쪽에서 데이터를 보내고 반대편에서 이를 수신한 뒤 연결이 끊어지는게 아니라 양쪽에서 실시간으로 데이터를 송수신할 수 있다.
따라서 실시간 스트리밍이나 채팅에 주로 유용하게 사용된다.
TCP/IP 표준이 아닌 네트워크 프로그래밍 인터페이스
소켓이 TCP/IP 프로토콜에서 대부분 사용하므로 TCP/IP 표준으로 오해하는 경우가 있음
TCP/IP 관점에서 소켓은 하나의 네트워크 프로그래밍 인터페이스
운영체제나 언어에 종속적
구성 요소
포트(Port)는 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당받아야 하는 고유한 숫자이다. 한 호스트 내에서 네트워크 통신을 하고 있는 프로세스를 식별하기 위해 사용되는 값이므로, 기본적으로는 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없다. (방법이 있긴 하다.)
하나의 프로세스는 같은 프로토콜, 같은 IP 주소, 같은 포트 넘버를 가지는 수십 혹은 수만 개의 소켓을 가질 수 있다.
서버와 클라이언트의 각 프로세스가 실시간으로 양방향 통신을 하는 방식

socket() : 소켓 생성(TCP는 stream)
bind() : 사용할 IP address와 Port number 등록
listen() : 서버 소켓에서 listen()으로 클라이언트의 요청을 기다림
connect() : 클라이언트 소켓에서 서버의 IP와 port번호로 연결 요청을 한다.
accept() : 연결 요청을 받아들여서 연결을 하고, 데이터를 송수신 하기
위한 연결 소켓을 생성함. 이때 연결 소켓과 서버 소켓은 다른 것이다.
send() & receive() : 데이터 송수신
close() : 연결을 종료한 후에는 모든 소켓이 소멸된다.
HTTP는 단방향적 구조(요청 보내면 응답이 옴)로 통신해서 TCP/IP 프로토콜을 사용하는 소켓처럼 계속 connection이 유지되는 실시간 통신을 할 수 없음. 그러나 이 말이 HTTP가 TCP/IP를 사용하지 않는 다는 뜻은 아님. HTTP도 TCP/IP 프로토콜 위에서 통신하지만, 요청을 보내야 응답이 오는 소켓 통신 방식의 일종
소켓 통신은 HTTP 통신이다 X
HTTP 통신은 소켓 통신이다 O
소켓은 TCP/IP 레이어(4계층)에서 작동하고, 웹 소켓은 HTTP 레이어(7계층)에서 작동함
TCP에 기반한 소켓 통신은 단순히 바이트 스트림을 통한 데이터 전송이므로 바이트로 이루어진 데이터를 다룸, 웹 소켓 통신은 7계층에 기반해 메시지 형식의 데이터 다룸.
--수정할 내역--
송신 프로세스가 데이터의 패킷을 소켓 문 밖으로 밀어내기 전에, 먼저 패킷에 목적지 주소를 붙여 넣어야 한다. 이 패킷이 송신자의 소켓을 통과한 후 인터넷은 이 목적지 주소를 이용하여 그 패킷을 인터넷을 통해 수신 프로세스에 있는 소켓으로 라우트할 것이다.
패킷이 수신 소켓에 도착하면 수신 프로세스는 소켓을 통해 그 패킷을 추출하고 다음에 패킷의 콘텐츠를 조사하고 적절한 동작을 취한다.
패킷에 목적지 주소를 포함함으로써 인터넷의 라우터는 목적지 호스트로 인터넷을 통해 패킷을 라우트할 수 있다.
호스트가 하나 혹은 그 이상의 소켓을 갖는 많은 네트워크 애플리케이션 프로세스를 수행하고 있을 수 있기 때문에 목적지 호스트 내의 특정한 소켓을 식별할 필요가 있다 그래서 나온게 __포트 번호__, 소켓이 생성될 때 __포트 번호(port number)__라고 하는 식별자가 소켓에 할당된다.
요약하자면 송신 프로세스는 목적지 호스트의 IP 주소와 목적지 소켓의 포트 번호로 구성된 목적지 주소를 패킷에 붙인다.