개발하는 뚱이
[네트워크]소켓(Socket)이란?!? 본문
소켓이란?
컴퓨터 네트워킹에서 프로세스 간 통신을 위해 사용되는 종단점
이러한 소켓은 소켓 주소로 다른 호스트에 외부적으로 식별되며, 소켓 주소는 프로토콜, IP주로, 포트 번호의 3 요소이다.
- 프로토콜 : 데이터를 주고 받을 때 어떤 형식으로 , 어떤 절차에 따라 통신할지 정함
- TCP : 연결 지향적 통신, 신뢰성
- UDP : 비열결 지향적, 빠른 전송 속도
- IP : 네트워크 상에서 각 장치의 고유한 주소
- 포트 번호 : 프로세스와 연결된 데이터 통로
- 0 ~ 65535 사이의 숫자 사용 가능
소켓은 어떻게 연결이 될까??(TCP/IP 4계층)
- 응용 계층(Application Layer)
- 애플리케이션이 소켓을 사용해 데이털르 주고 받음
- 전송 계층(Transport Layer)
- TCP 또는 UDP 프로토콜을 사용해 데이터 전송 방식을 결정
- 소켓은 전송 계층에서 포트 번호를 통해 어떤 애플리케이션과 통신할지 정함
- 인터넷 계층(Internet Layer)
- IP주소를 통해 데이터가 어느 컴퓨터로 가야하는지 정함
- 소켓은 인터넷 계층에서 IP주소를 사용해 원격 호스트를 식별
- 네트워크 계층(Network Interface Layer)
- 실제 네트워크를 통해 데이터 패킷을 물리적으로 전송
소켓 통신의 흐름
프로세스 간 통신에 사용되는 소켓을 이용한 프로그래밍을 소켓 프로그래밍(Socket Programming)이라 한다.
이 때 클라이언트 소켓(Client Socket)과 서버 소켓(Server Socket)으로 구분되는데,
통신 요청을 받는 소켓은 클라이언트 소켓,
통신 연결 요청을 보내는 소켓은 서버소켓이라 한다.
서버
클라이언트 소켓의 연결 요청을 대기하다, 연결 요청이 들어오면 소켓이 생성하여 통신을 가능하게 함
- socket() 함수로 소켓 생성
- bind() 함수로 IP주고와 port number를 설정
- listen() 함수로 클라이언트 요청에 대기열을 만들어 몇개의 클라이언트를 대기시킬지 결정
- accept() 함수로 소켓 연결 요청이 오면, 3way-handshake 과정이 진행되고 클라이언트와 연결
3way-handshake : 신뢰할 수 있는 연결을 수립하기 위해 사용하는 3단계 절차
- 클라이언트는 서버 요청
- 서버는 SYN패킷을 받았다고 알린 후 클라이언트 연결 요청을 수락
- 클라이언트는 서버의 SYN + ACK 응답을 받고 정상 수신을 확인
클라이언트
실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓임
- socket() 함수로 소켓을 생성
- connect() 함수로 통신할 서버의 설정된 IP와 port 번호에 통신을 시도
- 통신을 시도 시, accept()함수가 클라이언트의 socket descriptor를 반환하는데, 이를 통해 클라이언트와 서버가 read(), write()를 통해 통신을 할 수 있음
소켓의 종류
스트림(TCP)
- TCP를 사용하여 연결지향적인 소켓
- 송수신자의 연결을 보장하여 신뢰성있는 데이터 송수신 가능
- 데이터의 순서 보장
- 송신된 순서에 따라 중복되지 않게 데이터를 수신 -> 오버 헤드가 발생
- 소량의 데이터보다 대량의 데이터 전송에 적합 -> TCP를 사용
데이터그램(UDP)
- UDP를 사용하여 비연결형 소켓
- 데이터의 순서와 신뢰성을 보장하기 어려움
- 실시간 정보를 처리하는데 주로 사용