네트워크/네트워크프로그래밍

[네트워크] 소켓 (Socket)

4Legs 2020. 11. 16. 21:16

네트워크 프로그래밍 (Network Programming)

소켓 프로그래밍이라고도 한다.

네트워크로 연결된 둘 이상의 컴퓨터 사이에서의 데이터 송수신 프로그램을 작성하는 것을 의미한다.

 

소켓 (Socket)

네트워크의 연결 도구이며, 운영체제가 제공하는 소프트웨어적 장치이다.

소켓을 통해 운영체제는 프로그래머가 데이터 송수신에 대한 물리적, 소프트웨어적인 깊은 내용을 알 필요 없도록 한다.

소켓은 OSI 모델에서 전송 계층과 세션 계층 사이에 위치하는 것으로 볼 수 있다. 따라서 소켓 위의 계층인 세션 ~ 응용 계층을 소켓 어플리케이션 (Socket Application)이라 하고, 아래 계층인 물리 ~ 전송 계층을 네트워크 시스템이라고 한다.

두 프로세스의 소켓이 연결되면 프로세스 간 통신이 가능하다. 소켓은 이 때 데이터의 통로 역할을 한다.

 

서버와 클라이언트 (Server and Client)

서버 (Server) : 서버는 다수의 클라이언트에게 요청(Request)을 받는다. 잘 알려진 고정 IP 주소를 사용한다.

클라이언트 (Client) : 필요할 때마다 서버에게 요청을 보낸다. 다른 클라이언트와 통신하지 않고, 오직 서버를 통해서만 통신하며, 동적 IP 주소를 가진다.

 

소켓의 생성 과정

서버 소켓 : socket() - bind() - listen() - accept() - Read/Write - close()

 - socket() : 소켓을 생성하는 함수이다.

 - bind() : IP주소, PORT 번호를 통해 소켓의 주소 정보를 할당한다.

 - listen() : listen()을 호출해 서버 소켓이 연결 요청 가능 상태가 되도록 한다. 이 때 연결 대기 큐를 생성한다.

 - accept() : 클라이언트의 연결 요청을 수락한다. 이후 클라이언트와 양방향으로 데이터를 주고받을 수 있다. 수락하는 연결 요청은 연결 대기 큐에서 대기 중인 클라이언트의 연결 요청이다.

클라이언트 소켓 : socket() - connect() - Read/Write - close()

 - connect() : 서버 소켓에 연결을 요청한다.

 

파일 디스크립터 (File Descriptor)

운영체제가 파일(소켓 포함)을 구분하기 위해 부여한 숫자로, 프로세스의 PCB 내의 열린 파일 목록을 관리하는 테이블의 인덱스로 사용된다. 즉, 파일을 대표하는 정수이다.

0 : 표준 입력 (Standard Input)

1 : 표준 출력 (Standard Output)

2 : 표준 에러 (Standard Error)

 

'네트워크 > 네트워크프로그래밍' 카테고리의 다른 글

[네트워크] 프로토콜 (Protocol)  (0) 2020.11.16