1. 라이브러리
  2. 여기서 시작하세요

업데이트됨 1개월 전

당신의 메시지는 자신이 어디로 가는지 모릅니다.

인터넷을 통해 이메일을 보낼 때, 당신의 말들은 하나의 완전한 덩어리로 이동하지 않습니다. 수백 개의 조각으로 산산이 부서져, 각각 홀로 네트워크 속으로 전송됩니다. 그 네트워크에서는 어떤 장치도 전체 경로를 알지 못합니다. 각 조각—각 패킷—은 주소 하나만을 가진 채, 다음 라우터가 올바른 판단을 내려줄 것이라 믿습니다.

이것은 혼란스럽게 들립니다. 하지만 사실 이것이 인터넷을 가능하게 만든 핵심 통찰입니다.

패킷의 철학

인터넷의 설계자들은 하나의 문제에 직면했습니다: 아무도 통제하지 않고, 무한히 성장할 수 있으며, 일부가 고장나도 계속 작동하는 통신 시스템을 어떻게 구축할 것인가?

그들의 답은 직관에 어긋났습니다—중앙 통제를 완전히 포기하라. 경로를 미리 계획하지 말라; 패킷들이 스스로 길을 찾게 하라. 대역폭을 예약하지 말라; 모두가 공유하게 하라. 신뢰성을 보장하지 말라; 중복성을 통해 회복력을 구축하라.

데이터를 패킷으로 나누는 것은 단순한 기술적 최적화가 아니었습니다. 그것은 하나의 철학이었습니다: 모든 것을 분산시키고, 아무것도 통제하지 않으며, 자연스럽게 생겨나는 질서를 신뢰하라.

이것이 인터넷을 그 이전의 전화 네트워크와 근본적으로 다르게 만드는 것입니다. 전화 통화는 대화가 지속되는 동안 전용 회선을 예약합니다. 패킷은 모든 것을 공유하고, 아무것도 소유하지 않으며, 그럼에도 불구하고 목적지에 도착합니다.

분할이 효과적인 이유

패킷이 존재하는 것은 분할이 선택지를 만들어내기 때문입니다:

병렬 처리를 통한 효율성: 수백 개의 패킷이 서로 다른 경로를 통해 동시에 이동합니다. 누구도 줄을 서서 기다리지 않아도 네트워크는 계속 활성 상태를 유지합니다.

세분화를 통한 회복력: 패킷 하나가 손상되면 몇 킬로바이트만 재전송하면 됩니다. 전체 파일을 다시 보낼 필요가 없습니다.

공유를 통한 공정성: 당신의 동영상 스트림은 다른 모든 사람의 메시지와 차례를 나눕니다. 대용량 전송은 나머지와 같은 크기의 조각으로 쪼개지기 때문에 네트워크를 독점할 수 없습니다.

독립성을 통한 적응: 각 패킷은 현재 상황에 따라 다른 경로를 선택할 수 있습니다. 네트워크는 누군가의 지시 없이도 장애가 발생한 곳을 피해 스스로 재편됩니다.

패킷의 구조

패킷은 의미의 조각을 감싸는 봉투입니다.

헤더에는 네트워크가 필요로 하는 것이 담겨 있습니다: 출발지 주소, 목적지 주소, 순서 번호(이것은 200개 중 47번째 조각입니다), 그리고 내용이 손상 없이 도착했는지 확인하는 체크섬. 헤더는 작지만 필수적입니다—헤더 없이는 페이로드에 맥락도, 정체성도, 집으로 돌아갈 방법도 없습니다.

페이로드는 실제 데이터입니다: 사진의 한 조각, 이메일의 한 문장, 동영상의 1초 중 일부. 일반적으로 500바이트에서 1,500바이트 사이—빠르게 이동할 수 있을 만큼 작고, 헤더 오버헤드를 감당할 만큼 큰 크기입니다.

라우터는 지도 없이 길을 찾습니다

패킷 라우팅을 놀랍게 만드는 것이 여기 있습니다: 라우터는 목적지까지의 전체 경로를 알지 못합니다. 오직 최선의 다음 한 걸음만 알 뿐입니다.

패킷이 도착하면, 라우터는 목적지 주소를 읽고 라우팅 테이블을 참조합니다—인접 라우터들과 정보를 주고받으며 구축한 부분적인 지도입니다. 지금 알고 있는 것을 바탕으로 로컬 결정을 내립니다: "그 주소로는 라우터 47을 통해 가는 것이 최선의 다음 홉입니다."

그것이 전부입니다. 라우터는 패킷이 어디서 왔는지, 어디로 갈지 추적하지 않습니다. 하나의 결정을 내리고 패킷을 전달합니다. 다음 라우터도 마찬가지입니다. 그다음 라우터도.

이러한 로컬 의사결정 방식은 중앙 집중식 계획이 절대 따라올 수 없는 방식으로 확장됩니다. 어떤 라우터도 인터넷의 완전한 지도가 필요하지 않습니다. 어떤 단일 장애 지점도 전체 시스템을 무너뜨릴 수 없습니다. 각 라우터는 자신이 볼 수 있는 것을 최적화하고, 패킷은 누군가가 계획해서가 아니라 아무도 계획하지 않았기 때문에 축적된 로컬 지식을 통해 세계 어디든 도달합니다.

서로 다른 패킷, 서로 다른 경로

같은 메시지의 패킷들은 함께 이동하는 경우가 거의 없습니다. 그들은 실시간 상황에 따라 독립적인 경로를 택하는 개별 에이전트입니다.

뉴욕에서 로스앤젤레스로 사진을 보내면 패킷들로 분할됩니다. 패킷 1은 시카고를 경유합니다. 패킷 2는 댈러스를. 패킷 3은 덴버를. 그들은 한 번도 함께 이동하지 않은 채 로스앤젤레스에 도착합니다.

시카고 경로가 혼잡해지면, 다음 패킷은 대신 애틀란타를 통해 갑니다. 텍사스의 광케이블 연결이 끊어지면, 패킷은 자동으로 그 주위를 돌아 흐릅니다. 아무도 새로운 계획을 선언하지 않습니다. 네트워크가 알아서 흐름을 바꿉니다.

이것이 다양성을 통한 회복력입니다. 단일 경로는 단일 장애 지점을 의미합니다. 여러 경로는 네트워크가 전체 구간을 잃어도 계속 기능할 수 있음을 의미합니다.

혼돈에서 질서로

패킷은 순서 없이 도착합니다. 서로 다른 경로를 거쳐, 서로 다른 지연을 겪었습니다. 패킷 47이 패킷 2보다 먼저 도착합니다. 패킷 100은 아예 오지 않습니다.

수신 컴퓨터는 각 헤더의 순서 번호를 사용해 순서를 재구성합니다. 조각들이 무작위로 도착하지만 각각에 번호가 매겨진 직소 퍼즐을 맞추는 것과 같습니다. 47번 조각이 도착하면, 언제 도착했든 상관없이 47번 자리에 놓입니다.

누락된 조각은 재전송을 유발합니다. 수신 컴퓨터는 패킷 100이 오지 않았음을 인식하고 메시지를 되돌려 보냅니다: "100번을 다시 보내주세요." 전체 메시지가 아닌 그 패킷 하나만 재전송됩니다.

각 헤더에는 체크섬—페이로드의 수학적 지문—이 포함됩니다. 수신된 데이터가 체크섬과 일치하지 않으면, 해당 패킷은 손상된 것이므로 교체가 필요합니다.

모든 패킷이 도착하고, 체크섬을 통과하고, 제 순서에 맞게 자리를 잡으면, 원래 데이터로 다시 이어집니다. 이메일이 완전하게 나타납니다. 사진이 화면에 펼쳐집니다. 분할과 재조합은 밀리초 단위로, 눈에 보이지 않게 일어났습니다.

패킷이 사라질 때

네트워크는 완벽하지 않습니다. 라우터가 넘칩니다. 케이블이 끊어집니다. 패킷이 사라집니다.

신뢰성이 필요한 애플리케이션—이메일, 파일 전송, 웹 페이지—에서 인터넷은 TCP(전송 제어 프로토콜)를 사용합니다. TCP는 모든 패킷을 추적하고, 손실을 감지하며, 자동으로 재전송을 요청합니다. 이것은 데이터 손실이 아닌 약간의 지연으로 경험됩니다.

속도가 필요한 애플리케이션—화상 통화, 라이브 스트리밍, 게임—에서는 일부 패킷 손실이 허용됩니다. 이런 경우에는 UDP(사용자 데이터그램 프로토콜)를 사용하며, 확인 응답을 기다리지 않고 패킷을 보냅니다. 화상 통화에서 패킷이 손실되면 화면이 멈추는 것이 아닌 순간적인 끊김이 발생합니다. 대화를 멈추는 것보다 프레임 하나를 건너뛰는 편이 낫습니다.

이 절충—신뢰성이냐 속도냐—은 근본적인 선택입니다. TCP는 신뢰성을 선택합니다. UDP는 속도를 선택합니다. 어느 것이 더 중요한지는 애플리케이션이 결정합니다.

원자 단위

패킷은 인터넷이 모든 것을 처리하는 기본 방식입니다.

데이터 전송만이 아닙니다—신원 확인, 라우팅, 이름 지정, 보안. 모든 것이 더 높은 구조로 조합되는 독립적인 조각들로 분할됩니다. DNS 쿼리는 패킷입니다. 라우팅 광고는 패킷입니다. 보안 인증서는 다른 패킷을 검증하는 키가 담긴 패킷으로 도착합니다.

패킷은 원자 단위입니다. 그 외 모든 것은 패킷에 대해 이야기하는 패킷들입니다.

이 프랙탈적 특성—모든 규모에서 동일한 패턴—이 인터넷을 그 방대한 규모에도 불구하고 이해 가능하게 만드는 것입니다. 패킷 하나의 여정을 이해하면 수십억 개를 이해하는 것입니다. 이메일을 보내든 영화를 스트리밍하든 원리는 변하지 않습니다. 끝까지 내려가도 패킷뿐입니다.

그리고 그 근본에는: 특정 목적지로 주소가 적힌, 네트워크가 어떻게든 전달해줄 것을 믿는 의미의 한 조각이 있습니다. 중앙 권위 없음. 보장된 경로 없음. 전 지구적 연결성으로 쌓여가는 로컬 결정들만 있을 뿐.

당신의 메시지는 자신이 어디로 가는지 모릅니다. 그러나 어쨌든 도착합니다.

그것이 인터넷입니다.

데이터 패킷에 관한 자주 묻는 질문

패킷이 손실되면 어떻게 되나요?

프로토콜에 따라 다릅니다. TCP 기반 애플리케이션(웹 브라우징, 이메일, 파일 다운로드)은 손실을 감지하고 자동으로 재전송을 요청합니다—약간의 지연은 있지만 완전한 데이터를 받게 됩니다. UDP 기반 애플리케이션(화상 통화, 게임)은 손실을 감수하고 계속 진행합니다—잠깐의 끊김이 있을 수 있지만 스트림은 멈추지 않고 이어집니다.

인터넷이 데이터를 하나의 조각으로 보낼 수 없는 이유는 무엇인가요?

데이터를 하나의 조각으로 보내면 단일 장애 지점이 생기고, 전송하는 동안 다른 트래픽을 차단하며, 변화하는 네트워크 상황에 적응할 수 없습니다. 패킷은 병렬 전송, 세분화된 오류 복구, 네트워크 자원의 공정한 공유, 그리고 문제를 피하는 동적 라우팅을 가능하게 합니다.

컴퓨터는 순서 없이 도착하는 패킷을 어떻게 재조합할 수 있나요?

각 패킷 헤더에는 원본 데이터에서의 위치를 나타내는 순서 번호가 포함됩니다. 수신 컴퓨터는 이 번호를 사용해 도착 순서에 관계없이 패킷을 올바른 위치에 배치합니다. 모든 조각에 번호가 매겨진 직소 퍼즐과 같습니다.

패킷 크기는 무엇이 결정하나요?

패킷 크기는 네트워크 경로의 최대 전송 단위(MTU)에 의해 제한됩니다—대부분의 인터넷 연결에서 일반적으로 약 1,500바이트입니다. MTU보다 큰 패킷은 추가로 분할되어야 하며, 이는 오버헤드를 증가시킵니다. 표준 크기는 효율성(더 큰 페이로드)과 신뢰성(더 작은 패킷이 재전송하기 더 쉽습니다) 사이의 균형을 나타냅니다.

이 페이지가 도움이 되었나요?

😔
🤨
😃