네트워크 통신의 기본 구조와 계층 모델
컴퓨터 네트워크는 복잡한 데이터 전송 과정을 단순화하기 위해 계층적 아키텍처를 사용한다. 주로 두 가지 표준 모델이 존재하며, 각각은 통신의 특정 기능을 명확히 정의한다.
- OSI 7계층 모델: 응용계층, 표현계층, 세션계층, 전송계층, 네트워크계층, 데이터링크계층, 물리계층으로 구성되며, 이론적 기준으로 활용된다.
- TCP/IP 4계층 모델: 응용계층, 전송계층, 인터넷계층(네트워크계층), 네트워크인터페이스계층(데이터링크 + 물리계층)으로 나뉘며, 실제 인터넷 구현에 기반한다.
전송계층: TCP의 신뢰성과 제어 메커니즘
전송계층은 애플리케이션 간의 안정적인 데이터 흐름을 보장하는 핵심 역할을 한다. 여기서 가장 중요한 프로토콜인 TCP는 연결 지향형이며, 다음과 같은 특징을 가진다.
3-way Handshake (세 단계 연결 설정)
- Syn: 클라이언트가 서버에 연결 요청을 보내며, 초기 시퀀스 번호를 설정.
- Syn-Ack: 서버가 요청을 수신하고, 자신의 시퀀스 번호를 전달하며 응답.
- Ack: 클라이언트가 서버의 응답을 확인하고 최종 확장을 완료.
이 과정은 양방향 통신 준비 상태를 보장하며, 오래된 패킷이 잘못된 연결을 유도하는 것을 방지한다.
흐름 제어 (Flow Control)
TCP는 슬라이딩 윈도우 기반의 흐름 제어를 통해 수신 측의 처리 능력을 고려해 발신 속도를 조절한다. 수신측은 자신이 처리 가능한 버퍼 용량을 window size 필드로 공개하며, 이를 바탕으로 발신측은 전송 가능 범위를 조정한다.
혼잡 제어 (Congestion Control)
네트워크 과부하를 예방하기 위한 알고리즘들은 다음과 같다:
- Slow Start: 초기에 작은 창 크기로 시작하여 지수 증가.
- Congestion Avoidance: 감속 임계값 도달 후 선형 증가.
- Fast Retransmit / Fast Recovery: 손실 패킷 감지 시 빠른 재전송 및 상태 복구.
오류 탐지 및 복구
TCP는 검사합(Checksum)을 사용해 데이터 무결성을 검증한다. 모든 데이터 섹션(헤더 포함)에 대해 16비트 반대합을 계산하며, 불일치 시 패킷은 버려지고 재전송이 발생한다. 또한 ACK 응답 메커니즘을 통해 누락된 데이터를 식별하고 재전송한다.
소켓 프로그래밍: 네트워크 통신의 실질적 구현
소켓은 전송 계층과 응용 계층 사이의 인터페이스로, 애플리케이션 간의 네트워크 상호작용을 가능하게 한다. 주요 소켓 유형은 다음과 같다.
- TCP 소켓: 연결 기반, 신뢰성 있음, 순서 보장.
- UDP 소켓: 비연결, 저지연, 일부 손실 허용.
주요 소켓 함수
socket(): 소켓 생성.bind(): 주소와 포트에 바인딩.listen(): 수신 대기 상태 진입 (서버).connect(): 연결 요청 (클라이언트).accept(): 연결 수락 (서버).send(),recv(): 데이터 전송 및 수신.
기본 통신 예시 (클라이언트)
#include <sys/socket.h>
#include <arpa/inet.h>
int client_sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);
connect(client_sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
send(client_sock, "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n", 45, 0);
recv(client_sock, buffer, 1024, 0);
close(client_sock);
고성능 처리 전략
고 동시 접속 환경에서는 이벤트 기반 모델이 필수적이다. 다음은 epoll을 활용한 예제이다.
int epfd = epoll_create1(0);
struct epoll_event ev, events[MAX_EVENTS];
ev.events = EPOLLIN | EPOLLET;
ev.data.fd = server_socket;
epoll_ctl(epfd, EPOLL_CTL_ADD, server_socket, &ev);
while (1) {
int nfds = epoll_wait(epfd, events, MAX_EVENTS, -1);
for (int i = 0; i < nfds; ++i) {
if (events[i].data.fd == server_socket) {
int client_fd = accept(server_socket, NULL, NULL);
// 새로운 클라이언트 처리
} else if (events[i].events & EPOLLIN) {
// 데이터 수신 처리
}
}
}
네트워크 계층과 링크 계층의 역할
모든 통신은 세 계층이 협력하여 이루어진다.
- 네트워크 계층 (IP): IP 주소 기반 경로 선택, 데이터 패킷 라우팅.
- 링크 계층 (예: 이더넷): MAC 주소를 사용해 직접 연결된 장치 간 프레임 전송, 오류 검출 (FCS), 프레임 정렬.
- 전송 계층 (TCP): 신뢰성 보장, 흐름 제어, 혼잡 제어.
패킷 래핑 구조
데이터는 아래와 같이 계층적으로 래핑된다:
- 응용계층 → 트랜잭션 데이터
- 전송계층 → TCP 헤더 추가 (시퀀스 번호, 체크섬 등)
- 네트워크계층 → IP 헤더 추가 (원본/목적지 주소)
- 링크계층 → 프레임 헤더/테일 추가 (MAC 주소, FCS)
보안 및 방어 전략
현대 네트워크는 다양한 공격 위협에 노출되어 있으므로 다층적 방어 전략이 필요하다.
- 방화벽: 규칙 기반 트래픽 필터링 (포트, 주소 기반).
- IDS/IPS: 이상 행위 탐지 및 자동 차단.
- 암호화: TLS/SSL을 통한 데이터 전송 보호.
- 인증 및 권한 관리: OAuth, JWT, 이중 인증 등.
- SIEM 시스템: 로그 수집, 분석, 실시간 경고.
AI 기반 보안
머신러닝 기반 행동 분석은 정상 트래픽 패턴을 학습하고, 비정상 활동(예: 내부 공격, 랜섬웨어)을 조기에 탐지한다.