정의
패킷(Packet)은 인터넷이나 컴퓨터 네트워크에서 데이터를 주고받을 때 쓰는 가장 기본적인 전송 단위예요. 크기가 큰 파일이나 동영상을 잘게 쪼개어 작은 상자에 담아 보낸 뒤, 목적지에서 원래대로 다시 합치는 방식으로 작동해요.
거대한 파일도 잘게 쪼개면 빠르게 지나가요
인터넷에서 고화질 영화 한 편을 내려받을 때, 그 거대한 파일이 통째로 전선 하나를 타고 한 번에 쏟아져 들어오는 것은 아니에요. 만약 큰 데이터 덩어리를 통째로 보낸다면, 그 데이터가 지나가는 동안 다른 모든 사람의 인터넷 통신이 꽉 막히고 말 거예요. 도로에 거대한 초대형 트럭 한 대가 길을 전부 가로막고 달리는 상황과 같아요.
그래서 컴퓨터는 커다란 데이터를 잘게 나눈 다음 각각의 상자에 나누어 담아요. 이렇게 쪼갠 작은 데이터 묶음을 패킷이라고 불러요. 크기가 작아진 패킷들은 다른 사람의 패킷과 번갈아 가며 같은 선로를 나누어 쓸 수 있어요. 어떤 길이 끊기면 라우터가 다른 길로 돌려 보내기도 해요.
덕분에 네트워크 선로 하나를 수많은 사용자가 사이좋게 나누어 쓸 수 있어요. 동영상을 보는 도중에도 옆 방 사람이 웹 서핑을 막힘없이 할 수 있는 이유가 바로 데이터를 잘게 쪼개어 보내는 방식 덕분이에요.
패킷의 앞머리에는 운송장이 붙어 있어요
택배 상자를 보낼 때 상자 겉면에 보내는 사람, 받는 사람 주소, 상자 번호가 적힌 송장을 붙여요. 패킷도 이와 똑같이 구성되어 있어요. 패킷은 크게 실제 전달할 데이터가 담긴 몸체와, 안내 정보가 적힌 머리 부분으로 나뉘어요.
컴퓨터 분야에서는 이 머리 부분을 '헤더(Header)', 실제 내용물을 '페이로드(Payload)'라고 불러요. 헤더는 여러 겹으로 되어 있어요. IP 헤더에는 출발지 IP 주소와 목적지 IP 주소가, TCP 같은 전송 방식의 헤더에는 데이터 순서를 알려주는 번호가 적혀 있어요.
이 운송장 정보가 있기에 인터넷 공유기와 라우터(네트워크 중계기)가 패킷을 보고 어느 길로 보내야 할지 판단할 수 있어요. 또한 목적지 컴퓨터는 흩어져 도착한 패킷들을 TCP 헤더의 순서 번호를 보고 원래 파일로 조립해 내요.
조금 더 정확히 말하면: 길을 잃어도 다시 받아요
조금 더 정확히 말하면, 패킷 하나하나는 독립적으로 전달돼요. 라우터는 목적지 주소를 보고 정해진 다음 길로 패킷을 넘기기 때문에 대부분은 같은 길로 가지만, 경우에 따라 서로 다른 경로를 거치거나 보낸 순서와 다르게 도착할 수도 있어요. 먼저 출발한 1번 패킷보다 나중에 출발한 2번 패킷이 먼저 도착하는 일도 생길 수 있어요.
게다가 통신 상태가 나쁘면 도중에 패킷이 사라지는 '패킷 손실'이 생기기도 해요. 이때 TCP처럼 신뢰성을 보장하는 방식에서는 헤더에 적힌 순서 번호를 대조해 중간에 빠진 부분이 있는지 확인해요. 만약 3번 패킷이 빠졌다면 보내는 쪽에 '3번만 다시 보내줘'라고 요청해서 빈틈을 메워요.
물론 실시간 음성 통화나 온라인 게임처럼 아주 빠른 속도가 더 중요한 상황에서는 손실된 패킷을 다시 받지 않고 그냥 넘어가는 통신 방식을 쓰기도 해요. 상황에 맞게 규칙을 바꾸며 데이터를 안전하고 빠르게 주고받는 것이죠.
흔한 오해
인터넷으로 파일을 보낼 때는 하나의 선로를 통해 파일 전체가 일직선으로 한 번에 전송된다.
데이터는 수많은 패킷으로 쪼개져 각각 독립적으로 전송되고(때로는 서로 다른 경로를 거치기도 해요), 목적지에서 다시 조립돼요.
일상에서 만나요
유튜브 영상을 스트리밍할 때, 화면이 끊기지 않고 계속 재생되는 것은 영상 패킷들이 쉼 없이 도착해 조립되고 있기 때문이에요.
온라인 게임에서 렉이 걸리거나 캐릭터가 순간 이동하는 현상은 패킷이 제시간에 도착하지 못하거나(지연) 중간에 사라질 때(손실) 주로 발생해요.
그러니까 한마디로
패킷은 데이터를 잘게 쪼갠 택배 상자로, 주소와 순서가 적힌 헤더 덕분에 여러 사람이 선로를 나눠 쓰며 이동하고, 신뢰성 있는 방식에서는 목적지에서 빠짐없이 다시 조립돼요.