1. 핵심 개념 복습
- TCP 통신 예시: 파일 전송
- 클라이언트와 서버가 파일을 주고받는 과정을 통해 TCP 동작 원리를 이해합니다.
- 서버 프로세스와 소켓
- 서버는 하나의 프로세스로 실행되며, 네트워크 통신을 위해 소켓(Socket) 을 생성합니다.
- 소켓은 운영체제 상에서 파일처럼 동작하며,
recv()(읽기)와 send()(쓰기) 연산으로 데이터를 주고받습니다.
- 버퍼 흐름: 파일 IO → TCP 버퍼
- 파일 IO 버퍼(File IO Buffer)
- 서버가 전송할 파일을 한 번에 메모리에 올리지 않고, 개발자가 정한 일정 크기(예: 64KB)로 나누어 파일 IO 버퍼에 적재합니다.
- TCP 버퍼(TCP Buffer)
- 파일 IO 버퍼에서 읽어온 데이터가 TCP 송신 버퍼(버퍼 1)에 복사됩니다.
- 수신 측에서는 네트워크를 통해 들어온 데이터가 TCP 수신 버퍼(버퍼 2)에 쌓입니다.
- 세그먼트 분할 (TCP → IP)
- TCP 버퍼에 저장된 데이터는 IP 계층으로 전달되기 전 세그먼트(Segment) 단위로 분할됩니다.
- 비유: 세그먼트는 “택배 박스”와 같습니다.
- 패킷·프레임 생성 (IP → 데이터 링크)
- 패킷(Packet)
- IP 계층에서는 세그먼트에 IP 헤더를 붙여 패킷을 생성합니다.
- 프레임(Frame)
- 데이터 링크 계층에서는 패킷에 MAC 주소 등 헤더·트레일러를 추가하여 프레임을 생성합니다.
- 비유: 프레임은 “트럭”에 실린 화물로 볼 수 있습니다.
- 프레임은 네트워크 인터페이스와 중간 라우터를 거치며 전달되고, 각 홉마다 프레임 헤더·트레일러가 갱신될 수 있습니다.
- 수신 측 디캡슐레이션(Decapsulation)
- 물리 계층에서 프레임을 수신
- 데이터 링크 계층에서 프레임 헤더·트레일러 제거 → 패킷 추출
- IP 계층에서 패킷 헤더 제거 → 세그먼트 추출
- TCP 계층에서 세그먼트 헤더 제거 → TCP 버퍼에 데이터 저장
- TCP 버퍼 → 파일 IO (상위 계층 전달)
- 수신 측 TCP 버퍼에 쌓인 데이터는 순서대로 재조립되어 파일 IO 버퍼로 복사됩니다.
- 클라이언트 애플리케이션은 소켓
recv()를 호출하여 파일 IO 버퍼의 데이터를 읽습니다.
- ACK(응답)과 흐름 제어
- 수신 측은 세그먼트를 제대로 받으면 ACK(Acknowledgement) 메시지를 서버에 전송합니다.
- ACK 메시지에 포함된 정보:
- 다음에 받을 세그먼트 번호
- 수신 측 TCP 버퍼의 여유 공간(윈도우 사이즈, Window Size)
- 서버는 ACK를 받은 뒤 다음 데이터를 전송.
- ACK를 기다리는 동안 송신은 일시 중단되어 속도 지연이 발생할 수 있습니다.
- 윈도우 사이즈(Window Size)
- 수신 측 TCP 버퍼의 남은 여유 공간(바이트 단위).
- 수신 측이 ACK로 알려준 윈도우 사이즈만큼만 서버가 보낼 수 있도록 흐름을 제어합니다.
- 애플리케이션(클라이언트)이 데이터 읽기 속도(
Read Speed)가 느리면 윈도우가 좁아져 송신이 지연됩니다.
- 지연 원인 구분
- \*\네트워크 수신 속도(Network Receive Speed)\\*와 애플리케이션 리드 속도(Read Speed) 중 어느 쪽이 병목인지 파악해야 합니다.
- 네트워크 자체 지연인지, 애플리케이션 처리 속도 문제인지 구분하여 적절히 최적화합니다.
2. 핵심 용어
- TCP/IP 통신
- TCP(Transmission Control Protocol)와 IP(Internet Protocol)의 조합으로 이루어진 통신 프로토콜 집합.
- TCP: 신뢰성 있는 연결 지향 통신, 흐름 제어, 오류 제어 수행
- IP: 주소 지정, 라우팅 기능 수행
- 클라이언트(Client)
- 서버에 특정 서비스나 자원을 요청하는 프로그램 또는 시스템.
- 예: 웹 브라우저, FTP 클라이언트
- 서버(Server)
- 클라이언트의 요청에 응답하여 데이터 또는 서비스를 제공하는 프로그램 또는 시스템.
- 예: 웹 서버, 파일 서버
- 소켓 (Socket)
- 애플리케이션과 네트워크를 연결하는 끝점.
- 운영체제에 의해 관리되며, 파일처럼
read()/write() 연산으로 TCP 데이터 송수신
- 프로세스 (Process)
- 실행 중인 프로그램의 인스턴스.
- 서버나 클라이언트는 각각 하나 이상의 프로세스로 동작
- 파일 IO 버퍼 (File IO Buffer)
- 파일 시스템에서 데이터를 읽거나 쓸 때 사용하는 메모리 영역.
- 대량 데이터를 한 번에 처리하지 않고 일정 크기로 나눠 임시 저장하여 입출력 성능 향상