패킷의 생성 및 캡슐화 - deveio/Network-study GitHub Wiki

패킷의 정의

  • 패킷은 네트워크를 통해 데이터를 반환할 때 데이터를 작은 단위로 묶는 것을 의미하며 OSI 모델의 3계층에서 사용되고 헤더와 페이로드로 구성되어있다.

  • 헤더는 출발지 및 목적지 주소, 프로토콜 유형, 시퀀스 번호 등 제어 정보를 포함한다.

  • 페이로드는 전송하려는 실제 데이터를 의미한다.

  • 일반적으로 패킷의 사이즈는 1500바이트이지만 정해진 고정 값은 아니다.

패킷의 생성 원리

  • 프로세스가 소켓에 입출력을 시도하면 메모리에 저장된 스트림 형식의 긴 데이터를 일정 단위로 끊어서 세그먼트화 한 후 패킷 형식으로 인캡슐레이션을 하여 생성된다.

  • 스트림데이터란 애플리케이션에서 생성된 데이터는 연속적인 흐름 형태로 메모리에 저장된다.

  • 세그먼테이션은 이 스트림 데이터를 네트워크를 통해 전송하기 위해 일정한 크기의 조각으로 나눈다 이는 네트워크의 최대 전송 단위(MTU)에 맞춰서 이루어진다.

  • 소켓이란 네트워크 상에서 두 개의 프로그램이 서로 통신할 수 있도록 연결해주는 논리적인 통신 끝점이다.

  • 소켓은 연결 설정, 데이터 송수신, 연결 해제 기능을 가진다.

현대 네트워크는 패킷 기반으로 데이터를 작은 단위로 쪼개서 보내진다 네트워크를 이용해 보내진 데이터는 다시 큰 데이터로 결합해 사용된다.

패킷을 나누어 전송하는 이유

효율성 : 큰 데이터를 나누어 전송하면 네트워크 혼잡을 줄이고 전송 속도를 높일 수 있다.

오류 복구 : 만약 전송 중에 일부 데이터가 손실되면 전체 데이터를 다시 보낼필요 없이 손실된 패킷만 다시 전송하면된다.

다양한 경로 활용 : 각 패킷은 서로 다른 경로를 통해 목적지까지 전달될 수 있기에 네트워크 혼잡을 분산시키고 더 빠른 전송이 가능하다.

소켓의 종류

  • TCP 소켓: 신뢰성 있는 데이터 전송을 보장하는 소켓이다 데이터가 순서대로 전송되고 손실된 데이터는 재전송된다.

  • 웹 서버와 웹 브라우저 간의 통신에 주로 사용된다.

  • UDP 소켓: 속도를 중시하는 소켓이며 데이터 전송의 신뢰성은 보장하지 않지만 빠른 전송이 필요한 실시간 통신(온라인 게임, 음성 채팅)에 사용된다.

캡슐화

각 세그먼트에 헤더 정보를 추가하여 패킷을 생성한다 헤더에는 목적지 주소, 출발지 주소, 프로토콜 종류 등 패킷 전송에 필요한 정보가 추가되는데 이 과정을 캡슐화라고 한다.