컴퓨터 네트워크에서 두대의 컴퓨터가 통신할 수 있도록하는 소프트웨어 인터페이스
운영 체제의 네트워킹 API의 일부로 제공되며
응용프로그램이 네트워크 서비스를 사용하도록 지원한다.
소켓은 각각의 끝에 IP 번호와 포트번호를 할당하여 네트워크 상에서 유일한 식별자를 가진다.
즉, 소켓을 통해 특정 컴퓨터의 특정 프로세스와 통신할 수 있다.
클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 한다
1)
socket() 함수
를 이용하여 소켓을 생성
2)bind() 함수
로 ip와 port 번호를 설정하게 됩니다.
3)listen() 함수
로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정
4)accept() 함수
를 사용하여 클라이언트와의 연결을 기다림
실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓이다.
1)
socket() 함수
로 가장 먼저 소켓을 연다.
2)connect() 함수
를 이용하여 통신 할 서버의 설정된 ip와 port 번호에 통신을 시도
3) 통신을 시도 시, 서버가accept() 함수
를 이용하여 클라이언트의 socket descriptor를 반환
4) 이를 통해 클라이언트와 서버가 서로read()
,write()
를 하며 통신 (이 과정이 반복)
socket descriptor
소킷번호. 소켓을 만들고 얻은 파일 디스크립터. 프로그램이 네트워킹할 때 소켓 디스크립터 사용file descriptor
리눅스에서 파일은 open과 같은 함수로 열면 파일 디스크립터 리턴.
프로그램이 파일을 액세스 할 때 할당된 파일 디스크립터를 사용
리눅스에서는 모든 파일, 하드웨어 장치, 파이프, 소켓 등을 파일로 취급
- 양방향으로 바이트 스트림을 전송, 연결 지향성
- 오류 수정, 흐름제어 보장
- 송신된 순서에 따라 중복되지 않게 데이터를 수신 → 오버헤드가 발생
- 소량의 데이터보다 대량의 데이터 전송에 적합 → TCP를 사용
- 비연결형소켓
- 데이터의 크기에 제한이 있음
- 확실하게 전달이 보장되지 않음, 데이터가 손실돼도 오류가 발생하지 않음
- 실시간 멀티미디어 정보를 처리하기 위해 주로 사용 ex) 전화
Client의 요청(Request)이 있을 때만 서버가 응답(Response)하여
해당 정보를 전송하고 곧바로 연결을 종료하는 방식
- Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신이다.
- Server로부터 응답을 받은 후에는 연결이 바로 종료된다.
- 실시간 연결이 아니고, 필요한 경우에만 Server로 요청을 보내는 상황에 유용하다.
- 요청을 보내 Server의 응답을 기다리는 어플리케이션의 개발에 주로 사용된다.
Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식
- Server와 Client가 계속 연결을 유지하는 양방향 통신이다.
- Server와 Client가 실시간으로 데이터를 주고받는 상황이 필요한 경우에 사용된다.
- 실시간 동영상 Streaming이나 온라인 게임 등과 같은 경우에 자주 사용된다.