파일 디스크립터(TCP/IP 측면)

Devkty·2025년 5월 5일
1

파일 디스크립터(TCP/IP 측면)

리눅스/유닉스 계열 OS에서 열린 파일, 소켓, 파이프 등의 리소스를 식별하기 위한 정수형 번호이다.

Ex)

  • 0: 표준 입력(stdin)
  • 1: 표준 출력(stdout)
  • 2: 표준 에러(stderr)

그 외의 3부터는 프로세스에서 새로 연 리소스 들이다.

UNIX 철학

UNIX 철학에는 ‘모든 것이 파일’이라는 원칙이 있습니다.

파일, 소켓 모두 내부적으로 커널 레벨에서 I/O 버퍼와 디스크럽터 테이블을 통해 이뤄집니다. 그래서 소켓도 파일처럼 read(), write(), close() 등의 시스템 콜을 사용할 수 있습니다.

해당되는 파일 디스크럽터를 TCP/IP 소켓과 연관지어서 설명하면 다음과 같습니다.

1. 서버 소켓 생성

int listenfd = socket(AF_INET, SOCK_STREAM, 0);
  • socket() 호출의 리턴 값이 파일디스크립터입니다.
    ex) listenfd == 3 이면, 3번 디스크립터가 TCP 연결을 수신 대기하는 소켓을 의미합니다.

2. 클라이언트 접속 누락

int connfd = accept(listenfd, ...);
  • connfd도 파일 디스크립터입니다. 클라이언트가 접속하면 새 디스크립터가 생성되어 해당 연결을 담당합니다.
  • connfd는 일반 파일처럼 read, write, close 등에 사용 가능합니다.

3. 데이터 송수신

read(connfd, buf, MAXLINE);
write(connfd, buf, n);
  • 마치 파일에서 읽고 쓰듯이, 소켓 디스크립터를 통해 네트워크 입출력을 수행합니다.

실생활 속 예시

  • 식당에서 대기표를 뽑으면 번호가 주어지듯, 커널이 소켓을 만들면 번호(디스크립터)를 줍니다.
  • 우리는 그 번호를 통해 데이터 송수신 창구(소켓)를 다루는 것입니다.

자세한 내용은 컴퓨터 시스템 10장 정리 내용을 참고해주세요.

profile
모든걸 기록하며 성장하고 싶은 개발자입니다. 현재 크래프톤 정글 8기를 수료하고 구직활동 중입니다.

0개의 댓글