History about Packet

패킷 스위칭의 역사에 대해 알아봅니다.

List

  1. 정의
  2. 1. 냉전속에 생겨난 기술
  3. 결론

정의

패킷(packet)이란 패킷 교환 통신에서 사용되는 정보 전달의 단위이다.

패킷 교환 통신은 데이터를 작은 패킷 단위로 분할하여 네트워크 경로를 따라 독립적으로 전송하고, 목적지에서 이를 재조립하는 방식의 통신 방법이다.

참고 : 패킷이 이동하는 네트워크 경로는 방법에 따라 모든 패킷이 동일 할 수도 있고 아닐수도 있다. 아래는 경로가 모두 동일하지 않은 경우이다.

Packet Switching (출처) 네트워크를 가로지르는 데이터 패킷 교환을 보여주는 애니메이션.

현대에 가장 많이 사용되는 통신 방식이다.

자세한 내용은 이후 역사를 설명하며 진행하겠다.

1. 냉전속에 생겨난 기술

1960년대 초 폴란드계 미국인인 폴 베런(Paul Baran)에게는 핵공격에도 통신이 유지 될 수 있는 시스템을 개발해야하는 임무가 주어진다.

폴 베런은 데이터 통신을 메시지 블록 단위로 나누고 여러 경로로 전송 후 재조합하는 store and forwoard 스타일의 분산 네트워크 구조와 hot‑potato routing을 통한 통신 유지 방식을 고안하였다. 이러한 방식은 네트워크 경로상의 노드들 중 일부가 파괴되어도 통신을 계속하여 유지 할 수 있음으로 핵공격에도 통신이 유지되어야 한다는 목표를 완벽히 해결 할 수 있었다. 이렇게 폴 베런이 고안한 내용은 현대 패킷 스위칭 네트워크의 기반이 되었다.

비슷한 시기에 폴 베런과 비슷한 생각을 가졌던 영국인 도널드 데이비스(Donald Watts Davies) 또한 패킷 스위칭(Packet Switching) 방식을 고안했다. Packet 이란 용어도 데이비스가 처음 사용하였었다. 또한 데이비스는 이론에서 그치지 않고 실제 패킷 스위칭을 구현하여 최초의 패킷 스위칭 네트워크를 사용한 사례를 남겼다.

데이비스는 그외에도 여러 업적을 남겼는데 미국의 국방부 산하 고등 연구 계획국(ARPA) 에서 제작한 ARPANET 설계에 큰 영향을 미쳤다.(ARPANET은 데이비스의 설계와 거의 모든 면에서 유사하다.) 또한 종단 간 원칙 제시, 네트워크 보안, 계층적 통신 프로토콜, 고속 라우터 등 현대 컴퓨터 통신의 여러 기반 기술을 만들었다.

여기서 ARPANET는 현대 인터넷의 중요한 프로토콜인 TCP/IP의 전신인 프로토콜을 개발 및 적용하였고 @를 쓰는 이메일 서비스를 최초 설계, 사용한 네트워크이다. 또한 이후 민간에 풀리게되며 전세계에 네트워크가 연결되어 현대의 인터넷으로 발전하게 되는 계기를 마련하였다.

폴 베런과 도널드 데이비스는 비슷한 시기에 이름만 달랐을 뿐 본질은 동일했습니다. 둘 다 짧은 고정 길이의 데이터를 주소/제어 정보(헤더)를 붙여 네트워크 내부에서 독립적으로 라우팅한다는 점이 같다.

2. 패킷 구조의 고도화

데이비스가 고안해낸 초기의 패킷 구조이다.

구분 설명
헤더 (Header) 패킷을 네트워크에서 전달하고 제어하기 위한 정보
├─ 목적지 주소 패킷이 도달해야 하는 최종 노드의 주소
├─ 발신지 주소 (선택적) 응답이나 추적을 위해 발신지 노드를 나타냄
├─ 순서 번호 메시지를 여러 패킷으로 나눈 경우 재조립을 위한 번호
└─ 제어 플래그 오류 처리, 관리, 흐름 제어 등을 위한 비트/필드
데이터 (Payload) 실제 사용자 데이터(메시지 조각). 초기 NPL 네트워크에서는 약 128바이트 단위
에러 검출 (Checksum) 전송 중 손상 여부를 확인하기 위한 단순 오류 검출 코드

현재의 패킷 구조는 아래와 같다 (IPv4 + TCP 기준)

| 구분 | 설명 | | ————————– | ———————————————– | | 링크 계층 (Ethernet Frame) | 물리 네트워크 상에서 전달되는 프레임 구조 | | ├─ 목적지 MAC 주소 | 수신 장치의 물리적 네트워크 카드 주소 (48비트) | | ├─ 발신지 MAC 주소 | 송신 장치의 물리적 네트워크 카드 주소 (48비트) | | ├─ EtherType | 상위 계층 프로토콜 종류 (예: IPv4, IPv6) | | └─ FCS (Frame Check Seq.) | 프레임 오류 검출을 위한 CRC 기반 코드 | | 네트워크 계층 (IP Header) | 패킷이 네트워크를 통해 올바르게 라우팅되도록 제어하는 정보 | | ├─ 버전(IPv4/IPv6) | IP 프로토콜 버전 정보 | | ├─ 출발지 IP 주소 | 패킷을 보낸 호스트의 논리적 주소 (32비트/128비트) | | ├─ 목적지 IP 주소 | 패킷을 받을 호스트의 논리적 주소 (32비트/128비트) | | ├─ TTL (Time To Live) | 패킷이 라우터를 통과할 수 있는 최대 횟수 | | ├─ 프로토콜 번호 | 상위 계층 프로토콜 식별 (예: TCP=6, UDP=17) | | └─ 헤더 체크섬 | IP 헤더 오류 검출용 값 (IPv6에서는 없음) | | 전송 계층 (TCP/UDP Header) | 호스트 내 애플리케이션 간 통신 제어를 담당 | | ├─ 출발지 포트 번호 | 송신 애플리케이션 식별자 | | ├─ 목적지 포트 번호 | 수신 애플리케이션 식별자 | | ├─ 시퀀스 번호 | 데이터 스트림의 순서 지정 (TCP) | | ├─ 확인 응답 번호 | 수신 확인 응답을 위한 번호 (TCP) | | ├─ 제어 플래그 | 연결 관리, 흐름 제어 (예: SYN, ACK, FIN) | | ├─ 윈도우 크기 | 흐름 제어를 위한 수신 버퍼 크기 | | └─ 체크섬 | 전송 계층 데이터 오류 검출 | | 애플리케이션 데이터 (Payload) | 최종적으로 전달되는 사용자 데이터 (예: HTTP 요청, 이메일, 영상 스트리밍 등) | 확실히 복잡해졌다…

최초의 패킷은 목적지 주소, 순서번호, 제어 플래그 등 아주 간단한 구조였다. 데이터 또한 현재는  1400바이트 대 정도인 반면 최초에는 약 128바이트 였다. 오류 검출용 정보도 Checksum 하나만 존재 했을정도로 단순했다.

네트워크가 비약적으로 거대해지고 범용도가 높아지며 현재의 패킷구조가 완성되게 된것이라고 한다. 패킷의 발전에 큰 영향을 미친 사건은 ARPANET이다.

3. ARPANET의 구현

결론