IP로 데이터를 전송하는 방법3 - IP Design

 

https://guhonga.tistory.com/254

 

IP로 데이터를 전송하는 방법2 - Option, CheckSum, IP Design

데이터그램 이어서https://guhonga.tistory.com/253 IP로 데이터를 전송하는 방법 - Datagram, FragmentationDatagram IP는 자체적으로 오류 검출 및 수정 기능이 없다.따라서 오류 검출이나 추적 기능은 상위 프로

guhonga.tistory.com

 

 

 

IP Design

 

 

IP 패킷은 데이터 링크 계층 또는 상위 계층 프로토콜로부터 수신된다.

 

패킷이 상위 계층 프로토콜(TCP, UDP 등)에서 오는 경우, 해당 패킷은 데이터 링크 계층으로 전달되고

 

패킷이 데이터 링크 계층에서 오는 경우는 

우선 수신한 패킷을 분석하여 목적지 주소가 자신과 일치하는지를 확인한다.

만약 목적지 주소가 자신의 주소와 동일하다면, IP 패킷은 상위 계층 프로토콜로 전달되고

목적지 주소가 다른 주소라면, 패킷은 다음 홉으로 포워딩된다.

 

 

 

 

 

 

IP 패키지 구성 모듈

 

IP 패키지는 다음과 같은 8개의 구성 요소로 이루어져 있다.

 

  1. 헤더 추가 모듈 (Header-adding module)
    • 패킷 전송 시 IP 헤더를 추가하여 데이터그램을 형성한다.
    • 헤더에는 송신자와 수신자의 IP 주소, 프로토콜 정보 등이 포함된다.
  2. 처리 모듈 (Processing module)
    • 수신한 패킷의 헤더를 분석하고 필요한 처리를 수행한다.
    • 이 단계에서 패킷의 유효성을 검증하고 적절한 경로로 전송하는 등의 작업이 이루어진다.
  3. 라우팅 모듈 (Routing module)
    • 패킷을 목적지까지 전달하기 위한 최적의 경로를 결정한다.
    • 라우팅 테이블을 참조하여 패킷의 다음 홉을 선택한다.
  4. 분할 모듈 (Fragmentation module)
    • MTU(Maximum Transfer Unit)를 초과하는 데이터그램을 여러 개의 작은 조각으로 나누어 전송한다.
    • 각 프래그먼트는 독립적으로 전송될 수 있다.
  5. 재조립 모듈 (Reassembly module)
    • 수신된 프래그먼트를 원래의 데이터그램으로 재조립한다.
    • 모든 프래그먼트가 도착해야 정상적으로 재조립된다.
  6. 라우팅 테이블 (Routing table)
    • 네트워크 경로 정보를 저장하는 데이터 구조로, 각 목적지 IP 주소에 대한 다음 홉과 경로 정보를 포함한다.
  7. MTU 테이블 (MTU table)
    • 각 네트워크 인터페이스의 MTU 값을 저장하는 테이블로, 패킷의 최대 크기를 결정하는 데 사용된다.
  8. 재조립 테이블 (Reassembly table)
    • 분할된 데이터그램의 프래그먼트 상태를 추적하는 테이블로, 각 프래그먼트가 도착할 때마다 업데이트되어 원래 데이터그램을 재조립하는 데 필요하다.

 

 

 

 

이러한 모듈들을 통해서 IP 패키지는 데이터 통신 과정에서 효율적이고 신뢰성 있는 전송을 보장한다.

각 모듈들에 대해 알아보기 전에 데이터를 송신지에서 수신지로 전달하는 동안 발생하는 과정을 간단하게 보자.

 

 

먼저, 헤더 추가 모듈은 상위 계층에서 받은 데이터를 IP 데이터그램으로 캡슐화한다.

이 과정에서 송신자와 수신자의 IP 주소, 프로토콜 정보 등을 포함한 IP 헤더가 추가된다.

 

이후, 처리 모듈은 수신된 패킷의 헤더를 분석하여 패킷의 유효성을 검증하고, 목적지에 도달하기 위해 적절한 처리를 수행한다.

 

다음으로, 라우팅 모듈은 패킷을 목적지까지 전달하기 위해 최적의 경로를 결정한다. 이를 위해 라우팅 테이블을 참조하여 목적지 IP 주소에 대한 다음 홉 정보를 확인하고 패킷을 적합한 경로로 전송한다.

 

패킷의 크기가 네트워크의 MTU(Maximum Transfer Unit)를 초과하는 경우, 분할 모듈이 이를 여러 개의 작은 조각(프래그먼트)으로 나눈다.

나뉜 조각들은 독립적으로 전송될 수 있도록 처리되며, 수신 측에서는 재조립 모듈이 이 프래그먼트를 다시 모아 원래의 데이터그램으로 복원한다.

재조립은 모든 프래그먼트가 도착해야만 정상적으로 완료된다.

 

 

이 과정에서 MTU 테이블은 각 네트워크 인터페이스의 MTU 값을 저장하고, 데이터그램의 크기가 이를 초과하지 않도록 보장하는 데 사용된다. 또한, 재조립 테이블은 분할된 데이터그램의 상태를 추적하며, 각 조각의 도착 여부를 기록하고 업데이트하여 데이터그램의 재조립에 필요한 정보를 제공한다.

 

 

이렇게 모든 모듈과 테이블은 유기적으로 작동해서 IP 패키지는 데이터 전송을 관리한다.

 

 

 

 

 

헤더 추가 모듈 (Header-adding Module)

 

상위 계층으로부터 데이터와 해당 데이터가 전송될 목적지 주소를 수신한다.

 

수신된 데이터를 IP 데이터그램 형식으로 캡슐화하고,

이 과정에서 IP 헤더가 추가되어 데이터의 전송을 위한 구조가 형성된다.

 

 

IP 헤더가 생성된 후, 모듈은 헤더의 무결성을 검증하기 위해 체크섬을 계산한다.

계산된 체크섬은 IP 헤더의 체크섬 필드에 삽입된다.

 

캡슐화된 IP 데이터그램은 해당하는 입력 큐로 전송되며, 후속 처리(예: 라우팅 또는 추가 데이터 처리)를 준비한다.

 

 

 

 

 

처리 모듈 (Processing Module)

 

입력 큐 중 하나에서 데이터그램을 제거하여 처리한다.

 

데이터그램의 목적지 주소가 127.X.Y.Z(루프백 주소)이거나 로컬 주소와 일치하는 경우 (목적지 주소 검사)

데이터그램을 재조립 모듈(Reassembly Module)로 전송한다.

 

 

만약 현재 장치가 라우터라면, TTL(Time To Live)을 1 감소시킨다.

 

TTL이 유효한 경우, 데이터그램을 라우팅 모듈(Routing Module)로 전송하고,

TTL 값이 0 이하가 되면 데이터그램을 폐기한다.

 

 

 

 

 

라우팅 모듈 (Routing Module)

 

처리 모듈에서 IP 패킷(데이터그램)을 수신하여,

라우팅 정보를 기반으로 패킷을 분할 모듈(Fragments Module)로 보낸다.

 

이 단계에서 다음 홉 주소에 대한 결정이 이루어지고, 필요에 따라 데이터그램이 분할된다.

 

 

 

라우팅 모듈에서는 라우팅 테이블 (Routing Table)이 사용되며, 패킷의 다음 홉 주소를 결정하는 데 중요한 역할을 한다.

목적지 주소에 따라 패킷이 어떤 경로를 따라 전송되어야 하는지를 결정한다.

 

 

 

 

 

 

MTU 테이블 (MTU Table)

 

 

MTU 테이블은 특정 인터페이스의 최대 전송 단위(Maximum Transfer Unit)를 찾기 위한 데이터 구조이다.

주로 네트워크에서 전송할 수 있는 최대 패킷 크기를 정의한다.

 

 

MTU 테이블은 다양한 네트워크 인터페이스에 대해 각 인터페이스의 MTU 값을 저장하는데,

이 값은 패킷의 분할 및 전송 과정을 최적화하는 데 사용된다.

 

 

 

 

 

분할 모듈 (Fragmentation Module)

 

분할 모듈은 라우팅 모듈로부터 IP 패킷을 받아서, MTU(Maximum Transfer Unit) 크기 제한에 맞추어 데이터그램을 분할하는 역할을 한다.

 

먼저, 분할 모듈은 라우팅 모듈로부터 IP 패킷을 수신하고, 수신된 데이터그램의 크기를 확인한다.

이후 데이터그램의 크기가 네트워크의 MTU보다 큰지 여부를 판단한다.

 

만약 데이터그램이 MTU보다 큰 경우, D 비트(Do not fragment)의 설정 상태를 확인하여 일련의 처리를 한다.

 

 

D 비트가 설정된 경우

데이터그램을 분할하지 말라는 요청이 포함된 상태이므로, 데이터그램을 폐기(discard)하고 ICMP 오류 메시지를 전송한다.

 

 

D 비트가 설정되지 않은 경우

데이터그램을 MTU 크기에 맞게 조각(fragment)으로 나눈다.

각 조각에 IP 헤더를 추가하고 필요한 옵션을 적용하여 데이터 전송에 필요한 형태로 만든다.

조각화된 데이터그램은 개별적으로 전송된다.

 

 

 

반면, 데이터그램의 크기가 MTU 이내라면 별도의 조각화 과정 없이 데이터그램을 그대로 전송한다.

 

 

 

 

 

재조합 테이블 (Reassembly Table)

 

재조합 테이블은 분할된 IP 데이터그램의 조각을 관리하고, 수신된 모든 조각이 도착하여 원래의 데이터그램을 재구성하기 위한 정보를 저장하는 구조다.

 

 

구성 요소

  • 상태 필드 (State Field)
    • FREE: 재조합 테이블이 비어있고 사용 가능한 상태
    • IN-USE: 테이블이 현재 재조합 프로세스 중에 사용되고 있음을 나타낸다.
  • 소스 IP 주소 (Source IP Address)
    • 데이터그램의 원래 송신자의 IP 주소
  • 데이터그램 ID (Datagram ID)
    • 원래 데이터그램을 식별하는 16비트 식별자
  • 타임아웃 (Time-out)
    • 모든 조각이 도착해야 하는 사전 결정된 시간
  • 조각 필드 (Fragment Field)
    • 조각의 연결 리스트를 가리키는 포인터

 

 

 

 

 

 

 

재조합 모듈 (Reassembly Module)

 

재조합 모듈은 분할된 IP 데이터그램의 조각들을 모아서 원래의 데이터그램을 재구성하는 역할을 한다.

 

먼저, IP 패킷 수신 단계에서 재조합 모듈은 처리 모듈로부터 분할된 IP 패킷 조각을 수신하고, 각 조각의 오프셋 값과 M 비트를 확인한다.

만약 오프셋 값이 0이고 M 비트가 0이라면, 이는 패킷이 더 이상 분할되지 않았음을 의미하므로 데이터그램을 적절한 출력 큐로 전송하고 처리를 종료한다.

 

 

분할된 패킷인 경우, 재조합 테이블에서 해당 데이터그램에 대한 엔트리를 검색한다.

기존 엔트리가 없을 경우 새로운 엔트리를 생성하며, 이후 수신된 조각을 엔트리에 추가하여 재조합 작업을 진행한다.

이 과정에서 조각은 조각 연결 리스트에 삽입되며, 각 조각의 오프셋 정보를 기반으로 올바른 순서대로 배치된다.

 

 

모든 조각이 도착했는지 확인한 후, 조각이 모두 도착하면 재조합된 데이터그램을 생성하여 상위 프로토콜에 전달한다.

이 단계에서 작업이 정상적으로 종료된다.

 

 

그러나 모든 조각이 일정 시간 내에 도착하지 않는 경우, 타임아웃 처리가 발생한다.

이때 해당 엔트리는 시간 초과로 간주되어 폐기되며, 송신자에게 ICMP 오류 메시지를 전송하여 데이터 재전송을 요청할 수 있다.