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

 

데이터그램 이어서

https://guhonga.tistory.com/253

 

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

Datagram IP는 자체적으로 오류 검출 및 수정 기능이 없다.따라서 오류 검출이나 추적 기능은 상위 프로토콜에 의존하는데, 이에 대하여 데이터그램 방식을 사용한다.  데이터그램이란, IP 계층에

guhonga.tistory.com

 

 

 

Datagram - Option

 

옵션 필드는 데이터그램 헤더의 가변적인 부분으로 최대 40바이트를 차지할 수 있다.

필드는 Code(8비트), Length(8비트), Data(가변 길이)의 세 가지 구성 요소로 이루어져 있다.

 

 

 

 

Code 필드는 특정 기능이나 메세지 유형을 나타낸다. 이 필드는 copy와 class, number 필드로 분류된다.

 

Copy (1비트)

  • 0: 옵션이 첫 번째 조각(fragment)에만 복사됨.
  • 1: 옵션이 모든 조각에 복사됨.

 

Class (2비트)

  • 00: 데이터그램 제어와 관련된 옵션.
  • 10: 디버깅 및 관리용 옵션.
  • 01, 11: 예약됨.

 

Number (5비트)

옵션의 고유 번호를 정의하며, 특정 기능을 식별하는 데 사용된다.

더보기

예시

00000: End of Option (옵션 종료).

00001: No Operation (옵션 사이 간격 유지).

00011: Loose Source Route (느슨한 소스 경로 지정).

00100: Timestamp (라우터 경과 시간 기록).

01001: Strict Source Route (엄격한 소스 경로 지정).

 

 

 

 

Length 필드는 옵션 필드 전체의 길이를 정의한다.

Code와 Data 필드의 크기를 포함한 전체 옵션의 크기를 바이트 단위로 나타낸다.

 

 

Data 필드는 옵션의 주요 데이터를 담고 있는 부분이다.

옵션의 목적에 따라 구조와 내용이 달라지며, 에러 메시지, 제어 정보, 디버깅 데이터를 포함할 수 있다.

 

 

 

 

 

 

 

 

옵션의 여러가지 타입이다. No - Operation부터 하나씩 보자.

 

 

 

No Operation (No-Op)

 

옵션 필드 사이의 간격을 유지하거나 정렬을 목적으로 사용한다.

1바이트 크기로 구성되며, 특정 데이터가 필요하지 않을 때 다른 옵션 사이의 공간을 채우는 역할로 사용된다.

 

위 그림과 같이 정렬함으로서 IP 헤더의 가독성을 향상시키는데 도움된다.

 

 

 

 

 End of Option

 

데이터그램 옵션의 끝을 명확히 하기 위해 사용한다.

1바이트 크기로 구성되며, 추가 옵션이 없을 경우 패딩(padding) 역할을 한다.

 

 

 

 

Record Route

 

데이터그램이 인터넷을 통해 이동하면서 통과하는 라우터의 IP 주소를 기록하기 위해 사용된다.

이를 통해 네트워크 경로를 추적하거나 문제를 진단할 수 있다.

 

 

Record Route는 라우터 IP 주소 목록과 포인터 필드로 구성되어 있다.

 

 

여기에서 포인터 필드는 비어 있는 첫 번째 엔트리의 바이트 번호를 나타내는 오프셋 정수 필드를 말한다.

데이터그램이 출발할 때 포인터 필드는 초기값이 4로 설정되며, 이는 첫 번째 비어 있는 필드를 가리킨다.

이후 라우터를 통과할 때마다 포인터 필드가 증가하면서 다음 기록 가능한 위치를 지정한다.

 

이렇게 네트워크 경로를 추적하며 데이터그램이 라우터에서 지연되거나 문제가 발생하는 위치를 파악할 수 있다.

 

 

 

 

 

Strict Source Route

 

 

송신자가 데이터그램의 경로를 지정하여 반드시 정해진 라우터를 통과하도록 만든다.

 

Strict Source Route의 구조를 보면

IP 주소 목록을 포함하고, 데이터그램은 해당 주소를 순서대로 통과하는 방식으로 설계됐다.

 

 

이렇게 최소 지연(minimum delay) 또는 최대 처리량(maximum throughput)을 고려해서

데이터그램이 통과할 라우터(또는 IP 주소) 목록을 사전에 설정할 수 있다.

하지만 데이터그램은 송신자가 설정한 경로를 반드시 정확한 순서대로 따라가야 하며, 지정된 경로를 벗어나거나 변경할 수 없다. (네트워크 환경이 동적으로 변할 경우 유연하게 대처 불가)

 

이러한 이유로 경로 유연성이 부족하며, 경로 중 문제가 발생하면 데이터그램 전송 실패 가능성이 높아진다.

 

 

 

 

 

Loose Source Route

 

Strict Source Route 구조와 비슷하게

데이터그램이 통과해야 하는 라우터 목록을 지정하되, 경로 선택에 더 많은 유연성을 제공한다.

 

따라서 지정된 라우터를 방문하면서도, 경로상의 다른 라우터를 거칠 수 있고

네트워크의 상태 변화에 적응하기 쉽다.

 

하지만 반대로 경로의 신뢰성이 상대적으로 낮아질 수 있다.

 

 

 

 

 

Timestamp

 

 

데이터그램이 각 라우터를 통과할 때의 시간을 기록한다.

 

32비트 또는 64비트 형식으로 시간 정보를 포함하며,

각 라우터에서 데이터그램을 처리한 시간을 기록해 네트워크 성능 분석과 문제 진단에 활용한다.

 

 

 

 

 


Overflow와 Flag 필드

 

 

Overflow 필드는 타임스탬프 옵션에서 기록할 수 없는 라우터의 수를 기록한다.

만약 IP 데이터그램의 크기 제한으로 인해 모든 라우터가 타임스탬프를 추가하지 못할 경우, 해당 상황을 처리하기 위해 사용된다.

 

 

위 그림과 같은 상황에서 몇 개의 라우터가 기록되지 못했는지 추적하며, 네트워크 성능 진단과 문제 해결에 필요한 데이터를 제공한다.

 

 

 

Flag 필드는 조건에 따라 타임스탬프 필드의 동작을 제어하거나 특정 동작을 활성화 또는 비활성화한다.

 

예를 들어, 특정 라우터에서만 타임스탬프를 기록할 수 있다.

 

 

이렇게 네트워크 관리자가 필요에 따라 타임스탬프 동작을 조정할 수 있도록 설계되어 있으며, 데이터그램의 유연성과 효율성을 높이는 데 기여한다.

 

 

 

 

 

 

 

 

CheckSum

 

Checksum은 TCP/IP 프로토콜에서 사용하는 오류 감지 방법으로, 데이터 전송 중에 발생할 수 있는 손상을 탐지하는 데 도움을 준다.

 

 

송신 측에서는 다음의 계산 과정을 따른다.

  1. 패킷 분할
    데이터를 여러 섹션으로 나누고 각 섹션은 일반적으로 16비트 단위로 처리된다.
  2. 합산
    모든 섹션을 1의 보수 산술 방식으로 더한다. 이 과정에서 오버플로우가 발생하면 초과 비트를 다시 결과에 추가한다.
  3. 보수
    합산 결과를 보수 처리하여 최종 Checksum 값을 생성한다. 이 Checksum은 패킷과 함께 전송된다.

 

 

 

 

 

수신 측에서의 검증 과정

  1. Checksum 계산
    수신자는 송신자와 동일한 계산 과정을 통해 Checksum을 다시 계산한다.
  2. 비교
    수신 측에서 계산한 Checksum과 송신자가 전송한 Checksum을 비교한다.
    두 값이 같다면 데이터가 손상되지 않았음을 의미하며, 다르다면 오류를 나타낸다.

 

 

 

 

간단하게 얘기하면

송신자는 데이터를 나누고 모든 섹션의 합계를 계산한다.

그 이후에 보수를 적용하여 최종 Checksum을 생성한 후, 패킷과 함께 전송한다.

 

수신자는 동일한 과정으로 Checksum을 다시 계산하고, 수신된 Checksum과 비교한다.

결과가 0이면 패킷을 수락하고, 그렇지 않으면 폐기한다.

 

 

 

 

 

이 과정은 헤더에 대해서만 계산된다. 데이터 부분은 변하지 않으므로 계산 대상에서 제외된다.

하지만 TCP, UDP와 같은 상위 프로토콜에서는 데이터와 헤더를 모두 포함하여 별도의 Checksum을 생성한다.

 

또한 라우터를 통과할 때마다 헤더 정보가 변경되므로 Checksum을 다시 계산해야 한다. 이 과정은 추가적인 처리 시간을 요구한다.

 

 

 

 

이것은 checksum을 계산하는 과정이다.

  1. 데이터를 섹션별로 나누어 16비트 단위로 표현
  2. 각 섹션을 1의 보수로 더한다.
  3. 오버플로우 발생 시 상위 비트를 다시 결과에 더한다.
  4. 최종 Checksum은 보수 값으로 표현된다.

 

 

 

이렇게 Checksum은 비교적 간단하게 오류를 탐지할 수 있는 방법이지만, 모든 오류를 탐지할 수 있는 것은 아니다.

주로 작은 오류나 단일 비트 변화를 감지할 수 있으며, 더 복잡한 데이터 손상을 탐지하려면 CRC(Cyclic Redundancy Check)와 같은 다른 방법이 필요할 수 있다.