소켓은 버클리 대학에서 만들어져 1982년 BSD(Berkeley Software Distribution) UNIX 4.1에서 처음 소개되었으므로 BSD Socket이라고 표현한다.
내가 친구에게 택배를 보낸다고 했을 때, 상자에 보낼 물건을 넣고 나의 이름, 주소 등의 인적사항과 친구의 집 주소를 적어야 한다. 컴퓨터에서는 이 역할을 소켓이 해준다고 보면 된다.
Socket
인터넷에서 정보를 주고 받는 것은 매우 복잡한 매커니즘에 기반한다. 이를 단순화 하기 위해서 *OSI 7계층을 만들고, 다시 이를 단순화 해서 TCP/IP4 계층을 만들어서 인터넷 애플리케이션 개발에 활용하고 있다.
하지만 이 마저도 복잡하다. 그리고 계층만 나누는 것으론 한계가 있다.
why? 계층별 각 프로토콜은 일종의 통신 규약일 뿐, 프로토콜 구현을 위해 안에 들어갈 구체적인 구현부인 함수가 필요하다.
그래서 만든게 소켓이다. 소켓은 몇 개의 간단한 함수만으로도 인터넷 애플리케이션을 만들 수 있도록 도와주는 함수 모음이다.

일반적으로 TCP/IP 프로토콜을 이용한다.
TCP/IP 4계층에서 전송계층 위에 놓인다. 그 위에서 전송계층의 프로토콜 제어를 위한 코드를 제공한다. 즉, 소켓은 엔드포인트다. 통신의 양 끝단 📡 !
소프트웨어와 소프트웨어를 연결하는 소켓
인터넷은 소프트웨어와 소프트웨어의 네트워크다. 따라서 다양한 종류의 인터넷 서비스가 가능하다.

소켓은 운영체제에서 관리하는 객체로 소프트웨어를 인터넷에 연결해주는 접점 역할을 한다. 인터넷과의 점점에 놓여서 인터넷으로 데이터를 전송하거나 또는 인터넷으로부터 전송되는 데이터를 읽는 것이다.
소프트웨어 연결에 필요한 것들
인터넷에 묶여있는 컴퓨터를 찾기 위해서는 IP(인터넷 주소)가 필요하다. 하지만 소켓 프로그래밍은 소프트웨어와 소프트웨어를 연결하는 것이므로 소프트웨어의 위치를 찾을 수 있어야 한다. 소프트웨어의 위치는 port number로 찾을 수 있다.
즉, IP와 port 번호만 있으면 전체 인터넷 상에서 유일한 소프트웨어를 찾아서 연결할 수 있다.
소켓의 3요소
protocol, IP 주소, port number 로 정의된다.
protocolIPport프로세스 간 통신에 사용되는 Socket을 이용한 통신 프로그래밍
Socket API flow
소켓 통신 프로그래밍은 서버와 클라이언트로 나뉜다.

client socket
socket() : 소켓 생성(연결 대상에 대한 정보가 없는 껍데기 소켓)connect() : IP주소와 port number로 통신할 서버를 정하여 연결 요청send() / recv() : 데이터 송수신close() : 소켓 닫기server socket
데이터 송수신 시, 보안이 가장 중요하다.
내가 만약 언니에게 카톡을 보냈다면 우리 언니만 그 카톡을 볼 수 있어야 한다. (당연..)
즉, 내가 어떤 데이터를 보내려고 할 때, 수신측에서 무작정 데이터를 수신하는게 아니라 port 번호를 식별하여 알맞게 들어온 프로세스만을 수신하여야 한다.
socket() : 소켓 생성(연결 대상에 대한 정보가 없는 껍데기 소켓)bind() : ip와 port 번호 설정💡 하나의 프로세스는 동일한 port number를 가진 여러 개의 소켓을 결합할 수 있다.
즉, 호스트가 하나의 port로 여러 개의 소켓을 만들어 다른 호스트들과 데이터를 주고 받을 수 있다.
이러한 특징 덕분에 우리가 하나의 채팅 앱을 사용하더라도 동시에 여러 사람들과 채팅을 주고 받을 수 있는 것인가?
ex) 특정 포트가 소켓을 여러 개 열어서 socket1 - 엄마, socket2 - 아빠 … 와 채팅할 수 있는 것!listen() : 클라이언트의 연결 요청 대기accept() : 클라이언트 연결 수립send() / recv() : 데이터 송수신close() : 소켓 닫기*UDP?
IP를 확장한 프로토콜 중 하나
UDP는 데이터그램 형태의 패킷을 사용하여 데이터를 전송하는 프로토콜로, 주로 IP 네트워크를 통해 데이터를 송수신하는 데 사용된다.
데이터그램 형태의 패킷: UDP는 데이터를 작은 패킷, 즉 데이터그램으로 나누어 전송한다. 이 데이터그램은 독립적으로 처리되며 각각이 목적지 호스트로 전송된다. 이것은 데이터를 나누어 전송하고 다시 조립하는데 사용되는 방식이다.
UDP는 IP 네트워크를 통해 데이터를데이터그램단위로 프로세스에서 프로세스로 전송하는 프로토콜이다.
Client의 요청이 있을때만 Server가 응답하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식
server와 client가 특정 port를 통해 실시간으로 양방향 통신을 하는 방식