컴퓨터 네트워킹 & 소켓 인터페이스

2025. 5. 7. 15:00개념 공부

CS:APP Chapter 11 – 네트워크 프로그래밍 정리

1. 컴퓨터 네트워킹 기본 개념

  • 컴퓨터 네트워크: 여러 컴퓨터가 연결되어 데이터를 주고받을 수 있는 시스템.
  • 클라이언트-서버 모델:
    • 클라이언트: 서비스를 요청하는 쪽 (예: 웹 브라우저)
    • 서버: 요청을 처리하고 응답하는 쪽 (예: 웹 서버)
  • 인터넷 계층 구조 (4계층):
    1. 애플리케이션 계층 (HTTP, FTP 등)
    2. 전송 계층 (TCP/UDP)
    3. 네트워크 계층 (IP)
    4. 링크 계층 (이더넷, Wi-Fi 등)

2. 소켓 (Socket): 인터넷 통신의 종착지

  • 소켓: 네트워크에서 통신의 출발점이자 도착점. 소켓을 통해 데이터를 송수신한다.
  • IP 주소 + 포트 번호로 소켓이 고유하게 식별된다.

소켓 인터페이스 연결 흐름

[클라이언트 측 흐름]


1. socket()          // 소켓 생성
2. connect()         // 서버에 연결 요청
3. write() / send()  // 데이터 전송
4. read() / recv()   // 데이터 수신
5. close()           // 소켓 종료

[서버 측 흐름]


1. socket()          // 소켓 생성
2. bind()            // IP와 포트를 소켓에 할당
3. listen()          // 클라이언트 연결 요청 대기
4. accept()          // 연결 수락 (새로운 소켓 생성됨)
5. read() / recv()   // 요청 읽기
6. write() / send()  // 응답 전송
7. close()           // 연결 종료

accept()를 호출하면 클라이언트와 통신할 수 있는 새로운 소켓이 만들어진다.


3. 클라이언트-서버 프로그래밍 구조

클라이언트 예시


int clientfd = socket(AF_INET, SOCK_STREAM, 0);
connect(clientfd, (SA *)&serveraddr, sizeof(serveraddr));
write(clientfd, ..., ...);
read(clientfd, ..., ...);
close(clientfd);

서버 예시


int listenfd = socket(AF_INET, SOCK_STREAM, 0);
bind(listenfd, (SA *)&serveraddr, sizeof(serveraddr));
listen(listenfd, SOMAXCONN);

while (1) {
    int connfd = accept(listenfd, (SA *)&clientaddr, &addrlen);
    handle_client(connfd);
    close(connfd);
}

4. Tiny Web Server: 간단한 HTTP 서버

  • Tiny: 책에서 제공하는 최소 기능의 HTTP 서버
  • GET 요청만 처리 가능
  • 정적 콘텐츠 + 동적 콘텐츠 처리

 처리 흐름 요약

  1. 클라이언트가 GET /index.html 요청
  2. doit() 함수가 호출됨
  3. parse_uri()로 정적/동적 콘텐츠 구분
  4. 정적이면 serve_static() 호출
  5. 동적이면 serve_dynamic() 호출 (CGI 실행)

📎 정적 vs 동적

  • 정적 콘텐츠: HTML, JPG, CSS 등 → 그냥 읽어서 클라이언트에게 전송
  • 동적 콘텐츠: adder 같은 CGI 프로그램 → 실행 결과를 클라이언트에 전송

5. 요청 처리 함수 구조 (요약)


void doit(int fd) {
    read_request_line();       // 요청 라인 읽기 (GET /index.html HTTP/1.1)
    parse_uri();               // URI 분석, 정적/동적 구분
    if (정적) serve_static();
    else serve_dynamic();
}

 요약

  • 소켓은 네트워크 통신의 기본 단위이며, 클라이언트와 서버가 이를 통해 연결된다.
  • 책의 Tiny Web Server는 최소한의 HTTP 서버 구조를 보여주는 예시로, 클라이언트 요청을 파싱하고 파일 응답 또는 CGI 실행을 처리한다.
  • 핵심은 소켓 흐름과 정적/동적 콘텐츠 처리 흐름을 이해하는 것!