Skip to content

운영체제와 네트워크 인터페이스

컴퓨터의 3계층 구조

컴퓨터는 하드웨어와 소프트웨어로 이루어지며, 소프트웨어는 다시 **시스템 소프트웨어(운영체제)**와 애플리케이션으로 나뉜다. 이를 네트워크 관점에서 정리하면 3개의 계층이 된다.

  • User Mode(사용자 모드): 애플리케이션이 동작하는 영역. Chrome, 게임 클라이언트 등
  • Kernel Mode(커널 모드): 운영체제가 동작하는 영역. TCP/IP 프로토콜 스택과 디바이스 드라이버가 여기에 위치
  • Hardware: NIC(네트워크 인터페이스 카드) 등 물리 장치

커널과 사용자 모드의 관계를 비유하면, 커널은 신(神)의 영역이고 사용자 모드는 인간의 영역이다. 인간이 신에게 메시지를 전달하려면 신이 정해준 인터페이스(기도 방식)를 따라야 하듯, 애플리케이션이 커널에 접근하려면 커널이 제공하는 인터페이스를 사용해야 한다.

NIC: 네트워크 인터페이스 카드

NIC(Network Interface Card)는 컴퓨터를 네트워크에 연결하는 하드웨어이다. 흔히 랜카드라고 부르지만, 전문적으로는 NIC 또는 네트워크 인터페이스라고 한다.

NIC에 대해 기억할 사항들은 다음과 같다.

  • NIC에는 **MAC 주소(48bit)**가 부여된다
  • 한 컴퓨터에 NIC이 여러 개 있을 수 있다 (유선 + 무선)
  • NIC마다 고유한 MAC 주소를 가진다
  • NIC이 3개면 MAC 주소도 3개

드라이버의 역할

하드웨어(NIC)를 제어하기 위한 소프트웨어가 드라이버이다. NIC를 컴퓨터에 장착하면 해당 드라이버가 설치되어야 NIC이 작동한다. 드라이버는 커널 모드에서 동작한다.

소켓(Socket): TCP/IP의 추상화 인터페이스

커널에 구현된 TCP/IP를 사용자 모드 애플리케이션이 접근할 수 있도록 **추상화(Abstraction)**한 인터페이스가 바로 소켓이다.

소켓을 이해할 때 먼저 잡아 두면 좋은 핵심 사항들이 있다.

  • 소켓은 파일 디스크립터 인터페이스로 다루는 I/O 객체다 -- 디스크 파일과 용도는 다르지만, 읽기/쓰기라는 공통 인터페이스로 접근한다
  • 소켓을 열고 닫는 주체는 프로세스이다 -- "어떤 프로세스가 어떤 소켓을(즉, 파일을) 열었다"라고 표현
  • 소켓에 대한 입출력(I/O)이 곧 네트워크 통신이다
    • 파일에 write = 네트워크에서 send
    • 파일에서 read = 네트워크에서 receive

프로세스와 네트워크

프로그램은 설치된 상태이고, 프로그램이 실행되면 프로세스가 된다. 네트워크를 실제로 사용하는 주체는 컴퓨터가 아니라, 컴퓨터에서 실행 중인 프로세스이다.

각 프로세스는 자신만의 소켓을 열어 독립적으로 네트워크 통신을 수행한다. Chrome이 네이버에 접속하면서 동시에 게임 클라이언트가 게임 서버에 접속할 수 있는 이유가 바로 이것이다.

호스트와 네트워크 구성 요소

컴퓨터가 네트워크에 연결되면 **호스트(Host)**라고 부른다. 호스트는 크게 두 가지로 나뉜다.

구분역할예시
스위치(Switch)네트워크 자체를 이루는 인프라 요소라우터, L2 스위치, 보안 장비
엔드포인트(Endpoint)네트워크를 이용하는 주체 (단말기)PC, 서버, 스마트폰

엔드포인트는 다시 역할에 따라 분류된다.

  • 클라이언트: 서비스를 요청하는 쪽 (주로 PC, 스마트폰)
  • 서버: 서비스를 제공하는 쪽 (웹서버, 게임 서버)
  • 피어(Peer): 클라이언트와 서버 역할을 동시에 수행 (P2P 통신, BitTorrent)

핵심 정리

  1. 컴퓨터는 User Mode - Kernel Mode - Hardware 3계층
  2. NIC는 네트워크 인터페이스 카드이며, 각각 MAC 주소를 가진다
  3. 소켓 = 파일 -- TCP/IP를 추상화한 인터페이스
  4. 소켓을 열고 닫는 주체는 프로세스이다
  5. 호스트는 스위치(인프라)와 엔드포인트(이용 주체)로 나뉜다
  6. ipconfig /all (Windows) 또는 ifconfig (Linux)로 NIC 정보를 확인할 수 있다
bash
# Windows에서 네트워크 인터페이스 정보 확인
ipconfig /all

# Linux/macOS에서 네트워크 인터페이스 정보 확인
ifconfig