IP로 데이터를 전송하는 방법 - Datagram, Fragmentation

 

Datagram

 

IP는 자체적으로 오류 검출 및 수정 기능이 없다.

따라서 오류 검출이나 추적 기능은 상위 프로토콜에 의존하는데, 이에 대하여 데이터그램 방식을 사용한다.

 

 

데이터그램이란, IP 계층에서 데이터를 전송하기 위해 사용하는 단위를 말한다.

이 방식에서 IP의 각 패킷은 목적지 주소와 함께 독립적으로 처리된다.

 

이 때, 데이터그램은 헤더와 데이터로 구성된다.

 

헤더에는 데이터 전송을 위해 필요한 정보(길이 20~60바이트)가 포함되어 있고 (라우팅 전송을 위한)

데이터 부분에는 실제 전송하고자 하는 데이터가 있다.

 

 

 

 

 

 

 

IP의 헤더 (데이터그램의 필드)는 여러가지 필드들로 구성되어 있다.

 

  1. 버전(Version): IP 프로토콜의 버전을 나타낸다 (IPv4 또는 IPv6).
  2. 헤더 길이(Header Length, HLEN): 헤더의 실제 길이를 나타낸다.
    4바이트 단위로 표현되며, 예를 들어 HLEN = 5이면 헤더 길이는 5 × 4 = 20 
  3. 서비스 유형(Service Type): 데이터그램이 네트워크에서 어떻게 처리되어야 하는지 정의한다.
    우선순위와 전송 요구사항을 설정한다.
  4. 전체 길이(Total Length): 헤더와 데이터의 총 길이를 나타낸다.
  5. 식별자(Identification), 플래그(Flags), 조각 오프셋(Fragment Offset): 데이터그램이 분할(프래그먼트)될 때 관련된 정보를 포함한다.
  6. TTL(Time to Live): 데이터그램이 네트워크에서 생존할 수 있는 최대 홉 수를 제한한다.
  7. 프로토콜(Protocol): 상위 계층의 프로토콜(TCP, UDP 등)을 식별한다.
  8. 헤더 체크섬(Header Checksum): 오류 검출을 위한 체크섬 값이다.
  9. 출발지 및 목적지 IP 주소: 데이터그램의 출발지와 목적지 네트워크 주소를 나타낸다.
  10. 옵션 필드(Optional Fields): 선택적으로 추가 정보를 포함할 수 있다.

 

 

 

 

필드 - 서비스 유형

TOS 필드

 

IP 헤더에 포함된 필드 중 하나인 서비스 유형은 데이터그램이 네트워크에서 어떻게 처리되어야 하는지를 정의한다.

이 필드는 우선순위와 서비스 유형이라는 요소로 구성된다.

 

 

우선순위(Precedence)는 데이터그램의 처리 우선순위를 정의한다.

 

서비스 유형(TOS, Type of Service)은 전송 방식의 요구사항을 정의하고, 최대 4비트를 설정할 수 있다.

TOS의 예를 들어보면 딜레이 최소화, 신뢰성 최대화, 처리량 최대화, 비용 최소화와 같은 조건을 선택적으로 설정할 수 있다.

 

 

 

 

위 예시 TOS 필드들의 목적은 다음과 같다.

  • D: 딜레이 최소화 (Minimize Delay)
  • T: 처리량 최대화 (Maximize Throughput)
  • R: 신뢰성 최대화 (Maximize Reliability)
  • C: 비용 최소화 (Minimize Cost)

 

이런 의미를 기반으로 TOS bit를 설정한다. (각 비트에 해당하는 프로토콜 의미를 설정)

이렇게 데이터그램 처리 방식을 최적화할 수 있다.

 

 

예를 들어, 0001은 비용 최소화, 0010은 신뢰성 최대화, 0100은 처리량 최대화를 나타낸다.

이 때 비트는 동시에 하나만 활성화할 수 있다.

 

 

 

 

 

필드 - 전체 길이

 

IP 데이터그램에서 전체 길이 필드는 헤더와 데이터(payload)를 포함한 전체 크기를 의미한다.

즉, Total Length = Header Length + Data Length

 

 

IP 데이터그램은 Ethernet 프레임 내에 캡슐화되며, Ethernet의 MTU(Maximum Transmission Unit)에 따라 데이터그램의 실제 데이터 크기가 제한된다.

 

 

 

만약 데이터그램이 네트워크를 통해 전송될 때 크기가 MTU를 초과하면 분할(Fragmentation)이 발생한다.

이를 제어하는 필드가 FlagsFragmentation Offset 이다.

 

Flags (플래그) 는 다음 3가지 비트를 포함한다.

  • Reserved Bit: 항상 0으로 설정.
  • DF (Don't Fragment): 설정되면 데이터그램이 분할되지 않는다.
    이 비트가 설정되고 데이터가 MTU를 초과하면 전송 실패.
  • MF (More Fragments): 설정되면 데이터그램이 더 많은 조각으로 나뉘어 있음을 나타낸다.

 

 

Fragmentation Offset (조각 오프셋)은 데이터그램이 조각화될 때 각 조각의 위치를 나타낸다.

수신자는 이 정보를 사용해서 데이터그램을 재조립한다.

 

 

 

 

 

Time to Live (TTL) 필드는 데이터그램이 네트워크를 통과할 수 있는 최대 홉(hop) 수를 제한함으로서

루프를 방지하고 데이터그램이 무한히 순환하지 않도록 한다.

 

작동 방식은 다음과 같다.

  1. 각 라우터를 통과할 때 TTL 값이 1씩 감소
  2. TTL 값이 0이 되면 데이터그램은 폐기된다.
  3. 송신자가 로컬 네트워크로만 제한하려는 경우, TTL 값을 1로 설정한다.

 

 

 

 

 

 

Protocol Field (상위 프로토콜 지정)

 

하나의 IP 데이터그램에는 다양한 프로토콜의 데이터가 포함될 수 있으며, 이 프로토콜 필드는 수신자가 어떤 프로토콜을 해석해야 하는지를 알려준다.

 

이를 통해 여러 상위 프로토콜에서 전송되는 데이터를 다중화(Multiplexing)하는 데 사용된다.

 

 

아래는 이 때 지정되는 주요 프로토콜이다.

  1. TCP (Transmission Control Protocol): 신뢰성 있는 연결 기반 데이터 전송.
  2. UDP (User Datagram Protocol): 연결이 없는 비신뢰성 데이터 전송.
  3. ICMP (Internet Control Message Protocol): 네트워크 상태 및 오류 메시지 전송.
  4. IGMP (Internet Group Management Protocol): 멀티캐스트 그룹 관리.

 

 

 

 

 

 

 

 

 

Fragmentation

 

 

데이터그램의 포맷과 크기는 사용되는 물리적 네트워크 프로토콜(예: 이더넷, 토큰 링 등)에 따라 달라진다.

 

예를 들어, 라우터는 이더넷과 토큰 링 간(서로 다른 네트워크 간)의 트래픽을 전달할 때 서로 다른 프레임 형식과 크기를 고려해서 변환해야 한다.

 

 

 

 

 

MTU (Maximum Transfer Unit)는 네트워크에서 전송할 수 있는 최대 데이터 단위의 크기를 의미한다.

데이터그램이 캡슐화되어 프레임으로 전송될 때, 프레임의 총 크기가 MTU를 초과할 수 없다.

 

 

 

MTU를 초과하는 데이터그램은 분할(Fragmentation)되어 전송되며, 이로 인해 추가적인 오버헤드가 발생하고 오류 가능성이 증가하기 때문에 MTU 값이 작으면 데이터 전송이 비효율적일 수 있다.

 

 

 

IP 데이터그램의 최대 길이는 65,535바이트로 정의되어 있는데

이 값을 초과하는 데이터그램은  MTU 제약으로 인해 분할(Fragmentation)되어야 한다.

 

 

데이터그램은 송신자 또는 경로상의 라우터에서 분할되고, 목적지에서 다시 조립(reassembly)된다.

 

 

 

 

 

Fragmentation (분할) 과정

 

분할된 데이터그램은 각 조각(fragment)에 원본 데이터그램의 일부 헤더 정보가 복사되고

헤더 정보 중 Flags, Fragmentation Offset, Total Length 필드가 변경된다.

 

 

 

그 외에 분할된 각 조각(fragment)의 헤더 필드들은 원본 데이터그램의 값과 동일하게 유지된다.

각 조각의 Checksum 필드는 해당 조각의 무결성을 검증하기 위해 재계산되어야 한다.

이를 통해 데이터그램 조각이 손상되었는지 확인할 수 있다.

 

 

 

 

Fragmentation Offset (조각 오프셋)은 조각의 상대적 위치를 나타내는 13비트 필드이며, 8바이트 단위로 측정된다.

( 오프셋이 1이면 8바이트, 2이면 16바이트에 해당하는 위치 )

이 필드는 데이터그램의 전체 데이터 중 조각이 어디에 위치하는지 식별하는 데 사용된다.

 

 

 

 



 

Flags는 3비트로 구성되며, 데이터그램의 분할 및 전송 과정에 대한 정보를 제공한다.

 

D (Don't Fragment)

값이 1인 경우, 데이터그램을 분할하지 않도록 지시한다.

MTU를 초과하면 전송이 실패하며, 송신자에게 ICMP 오류 메시지가 반환된다.

 

M (More Fragments)

값이 1인 경우, 해당 데이터그램 뒤에 추가 조각이 있음을 나타낸다.

값이 0인 경우, 해당 조각이 마지막임을 나타낸다.

 

 

 

 

 

 

 

이렇게 분할된 모든 데이터그램은 수신 측에서 재조립된다.

Identification 필드를 사용해 동일한 데이터그램임을 식별하고

Fragmentation Offset을 통해 조각의 순서를 파악한다.

모든 조각이 도착한 후, 원본 데이터그램으로 조립된다.

 

 

 

 

송신자가 데이터그램을 전송할 때, 각 데이터그램에 고유한 Identification 식별자를 부여한다.

동일한 식별자를 가진 조각들은 같은 데이터그램에 속하며, 수신자는 이를 기반으로 데이터그램을 재조립한다.

식별자는 출발지 IP 주소와 데이터그램 ID의 조합으로 유일성을 유지한다.

 

 

 

 

이와 같은 Fragmentation 방법은 부작용을 야기할 수도 있다.

 

조각화로 인해 전송 및 재조립 시간이 늘어나거나,

조각 중 하나라도 손실되면 전체 데이터그램이 손실될 수 있다.