Socket Programming

nana·2023년 1월 16일
0

네트워크

목록 보기
5/12

Socket

Socket은 transport layer가 상위 layer들과 서로 커뮤니케이션할 수 있도록 해주는 구멍으로 비유할 수 있다.
application이 socket을 열고 socket에게 정보를 주면, 그 정보가 상대방 컴퓨터의 application까지 전달될 수 있고, 반대로 상대방 컴퓨터의 application으로부터 socket을 통해 정보를 받을 수 있다. - bidirectional communication
Socket을 통해서 두 컴퓨터들끼리, 또는 한 컴퓨터 내의 두 프로그램들끼리 정보를 주고 받을 수 있다.

Client와 Server

Socket server : socket을 통해 정보를 요청 받는 쪽 (요청을 듣는 쪽). 예) 웹 서버, 이메일 서버
Socket client : socket을 통해 정보를 요청하는 쪽. 예) 웹 브라우저, 이메일 앱

Berkeley Socket API

Socket API는 inter-process communication(IPC)를 위해서 사용된다
1983년 4.2BSD Unix OS에서 사용되도록 만든 api이다.
POSIX(개방형 컴퓨터 표준)에 따라 진화되었다(Unix, Linux 위에서도 돌아갈 수 있도록 수정됨)

Berkeley Socket API의 함수들

  • socket() : socket api로 통신하기 위해 가장 처음 호출해야하는 함수로, 특정 숫자(포트 넘버 등)로 구별할 수 있는 소켓을 만들고, 시스템 자원을 할당한다.

  • bind() : 통신하고자 하는 컴퓨터의 IP 주소와 포트 넘버를 포함해서 socket을 통해 통신할 것이라고 운영체제에 알려 socket과 운영체제를 연결한다.

  • listen() : 서버에서 사용되는 함수로, UDP에서는 사용되지 않고 TCP에서만 사용되며 서버가 클라이언트의 요청을 듣는 함수이다.

  • connect() : 클라이언트에서 사용되는 함수로, UDP에서는 사용되지 않고 TCP에서만 사용되며 클라이언트가 서버에게 연결을 요청하는 함수이다.

  • accept() : 서버에서 사용되는 함수로, 서버가 클라이언트의 요청을 수락할 때 사용하는 함수이다. 기존의 socket은 상대방을 지정하지 않고 단순히 통신을 하기 위해 만들어진 것이라면, 요청을 수락하면 상대방과의 통신을 위해 새로운 TCP 연결을 만들고, 상대방의 정보와 자신의 정보를 합친 새로운 socket을 만든다.(socket address pair를 가짐)

  • send(), recv(), sendto(), recvfrom() : 양방향 통신에 사용되는 함수로, 데이터를 주고 받을 때 사용된다.

  • write(), read() : socket을 파일로 규정해서 읽고 쓴다는 의미로 사용되는 함수이다.

  • close() : TCP 연결을 해제하는 함수이다.

  • setsockopt() : 특정 socket의 옵션을 설정할 때 사용되는 함수이다.

  • getsockopt() : 특정 socket의 옵션을 확인하고 싶을 때 사용되는 함수이다.

  • gethostbyname(), gethostbyaddr() : 호스트의 도메인 이름과 IP 주소를 확인하고 싶을 때 사용되는 함수이다.

TCP에서의 Berkeley Socket API 함수 순서

(UDP는 connectionless하기 때문에 TCP와 달리 listen, accept, close 과정이 없다.)

1:N Socket programming 방법

  1. Socket API 기반으로 개발 (Socket API만으로도 개발 가능)
  2. 언어별로 제공하는 차별화된 Socket 기능으로 개발 (최신 프로그래밍 언어의 Socket 기능으로 빠른 개발 + 안정적인 성능 제공 가능)

=> Multi-threading / multi-process 기능을 통해 비동기식 socket 서버를 개발할 수 있다.

동기식 동작 vs 비동기식 동작

  • 동기식 처리(synchronous) : 진행중인 작업이 있으면, 다음 작업은 현재 진행중인 작업이 종료된 후에 처리하는 방식(blocking 처리)
  • 비동기식 처리(asynchronous) : 진행중인 작업이 있어도, 작업이 종료되기를 기다리지 않고 다음 작업을 바로 실행하는 방식 (non-blocking 처리)

Multi-Process / Multi-Thread

  • Multi-Process : CPU에 의해 독립적인 프로그램(process)을 실행하는 것이다. fork()로 실행하고, 각 process는 data와 code를 가진다.(공유하지 않음)
  • Multi-Thread : process 안에서 데이터를 공유하는 thread들을 실행하는 것으로, process보다 요구되는 자원이 적다. Multi-threaded process는 data와 thread들을 가진다.
profile
언젠가 개발자

0개의 댓글

관련 채용 정보