Search

소켓이란?

생성일
2023/05/26 08:05
태그

파일 디스크립터

파일 디스크립터란 시스템(운영체제)이 특정 파일에 할당해준 정수값을 의미한다. 이는 파일뿐만 아니라 소켓도 같은 자원을 가지고 있다.
자주 사용되는 표준 입력(0), 표준 출력(1), 표준 에러(2)에 대해서는 이미 값이 할당되어 있다. 이러한 이유로 새로 파일 디스크립터를 할당 받게되면 3번부터 시작하게 된다.

파일 디스크립터 할당

사용자가 원하는 파일을 읽거나 쓰는 경우에는 open() 함수를 이용하여 파일 디스크립터를 할당받을 수 있다. 읽기와 쓰기는 open() 함수의 파라미터에 플래그 형태로 전달하여 호출하면 고유한 파일 디스크립터 값을 반환해준다.
이처럼 파일 디스크립터를 할당 받으면 그를 이용해 파일에 접근할 수 있는데, 소켓에도 동일하게 적용할 수 있다. 소켓으로 프로세스 간 통신하는 경우에도 파일 디스크립터를 이용하는데, c언어에서 소켓을 생성하는 socket()함수과 새로운 소켓을 연결하는 accept() 모두 파일 디스크립터 값을 반환한다.

소켓

소켓이란 다른 네트워크나 다른 프로세스에 정보 전달을 목적으로 하는 통신 방법이다. 소켓을 생성하며 파일 디스크립터에 소켓 정보 구조체를 저장하고, 서버 및 클라이언트의 소켓 정보 구조체에서 IP 주소와 port 번호 등을 참조하여 네트워크 상에서 다른 프로세스를 찾아 데이터를 전달한다.
OSI 7계층 중 응용 계층에 속하는 모든 프로세스는 소켓을 거쳐 데이터 송수신한다. 즉, 소켓은 전송계층과 응용 프로그램 사이의 인터페이스 역할을 하며 떨어져 있는 두 호스트를 연결해준다.

일반적인 소켓의 흐름

서버
1.
소켓 생성
2.
바인딩(IP 주소, port 번호, 프로토콜 체계 설정)
3.
클라이언트 요청 대기(listen)
4.
클라이언트 연결(accept)
5.
데이터 송수신
6.
소켓 닫기(close)
클라이언트
1.
소켓 생성
2.
서버에 설정된 IP 주소, port 번호로 연결 시도
3.
서버에서 accept로 생성된 클라이언트 디스크립터 수신
4.
데이터 송수신
5.
소켓 닫기