패킷의 생성 및 캡슐화 - deveio/Network-study GitHub Wiki
패킷의 정의
-
패킷은 네트워크를 통해 데이터를 반환할 때 데이터를 작은 단위로 묶는 것을 의미하며 OSI 모델의 3계층에서 사용되고 헤더와 페이로드로 구성되어있다.
-
헤더는 출발지 및 목적지 주소, 프로토콜 유형, 시퀀스 번호 등 제어 정보를 포함한다.
-
페이로드는 전송하려는 실제 데이터를 의미한다.
-
일반적으로 패킷의 사이즈는 1500바이트이지만 정해진 고정 값은 아니다.
패킷의 생성 원리
-
프로세스가 소켓에 입출력을 시도하면 메모리에 저장된 스트림 형식의 긴 데이터를 일정 단위로 끊어서 세그먼트화 한 후 패킷 형식으로 인캡슐레이션을 하여 생성된다.
-
스트림데이터란 애플리케이션에서 생성된 데이터는 연속적인 흐름 형태로 메모리에 저장된다.
-
세그먼테이션은 이 스트림 데이터를 네트워크를 통해 전송하기 위해 일정한 크기의 조각으로 나눈다 이는 네트워크의 최대 전송 단위(MTU)에 맞춰서 이루어진다.
-
소켓이란 네트워크 상에서 두 개의 프로그램이 서로 통신할 수 있도록 연결해주는 논리적인 통신 끝점이다.
-
소켓은 연결 설정, 데이터 송수신, 연결 해제 기능을 가진다.
현대 네트워크는 패킷 기반으로 데이터를 작은 단위로 쪼개서 보내진다 네트워크를 이용해 보내진 데이터는 다시 큰 데이터로 결합해 사용된다.
패킷을 나누어 전송하는 이유
효율성 : 큰 데이터를 나누어 전송하면 네트워크 혼잡을 줄이고 전송 속도를 높일 수 있다.
오류 복구 : 만약 전송 중에 일부 데이터가 손실되면 전체 데이터를 다시 보낼필요 없이 손실된 패킷만 다시 전송하면된다.
다양한 경로 활용 : 각 패킷은 서로 다른 경로를 통해 목적지까지 전달될 수 있기에 네트워크 혼잡을 분산시키고 더 빠른 전송이 가능하다.
소켓의 종류
-
TCP 소켓: 신뢰성 있는 데이터 전송을 보장하는 소켓이다 데이터가 순서대로 전송되고 손실된 데이터는 재전송된다.
-
웹 서버와 웹 브라우저 간의 통신에 주로 사용된다.
-
UDP 소켓: 속도를 중시하는 소켓이며 데이터 전송의 신뢰성은 보장하지 않지만 빠른 전송이 필요한 실시간 통신(온라인 게임, 음성 채팅)에 사용된다.
캡슐화
각 세그먼트에 헤더 정보를 추가하여 패킷을 생성한다 헤더에는 목적지 주소, 출발지 주소, 프로토콜 종류 등 패킷 전송에 필요한 정보가 추가되는데 이 과정을 캡슐화라고 한다.