컴퓨터 네트워킹 & 소켓 인터페이스
2025. 5. 7. 15:00ㆍ개념 공부
CS:APP Chapter 11 – 네트워크 프로그래밍 정리
1. 컴퓨터 네트워킹 기본 개념
- 컴퓨터 네트워크: 여러 컴퓨터가 연결되어 데이터를 주고받을 수 있는 시스템.
- 클라이언트-서버 모델:
- 클라이언트: 서비스를 요청하는 쪽 (예: 웹 브라우저)
- 서버: 요청을 처리하고 응답하는 쪽 (예: 웹 서버)
- 인터넷 계층 구조 (4계층):
- 애플리케이션 계층 (HTTP, FTP 등)
- 전송 계층 (TCP/UDP)
- 네트워크 계층 (IP)
- 링크 계층 (이더넷, 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 요청만 처리 가능
- 정적 콘텐츠 + 동적 콘텐츠 처리
처리 흐름 요약
- 클라이언트가
GET /index.html요청 doit()함수가 호출됨parse_uri()로 정적/동적 콘텐츠 구분- 정적이면
serve_static()호출 - 동적이면
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 실행을 처리한다.
- 핵심은 소켓 흐름과 정적/동적 콘텐츠 처리 흐름을 이해하는 것!
'개념 공부' 카테고리의 다른 글
| 운영체제 아주 쉬운 세가지 이야기- 2주차 (0) | 2025.09.09 |
|---|---|
| 운영체제 아주 쉬운 세가지 이야기- 1주차 스터디 (1) | 2025.09.02 |
| 컴퓨터 시스템 8장 시그널 (0) | 2025.04.21 |
| 컴퓨터 시스템 7장-링커(Linking) 1-2 (0) | 2025.04.19 |
| 컴퓨터 시스템 7장-링커(Linking) 1-1 (0) | 2025.04.19 |