[Network] CH09. IP(Internet Protocol)

chxxrin·2022년 6월 23일
0

컴퓨터네트워크

목록 보기
10/15

인터넷 프로토콜(IP)

  • 네트워크 계층에서 작동하는 프로토콜(network layer protocol)
  • 이기종(heterogeneous) 시스템 간에 패킷을 전달

IP는 패킷을 전송하고 수신하는 동안에 발생하는 주소화, 경로 선택, 패킷 조립 등의 작업을 처리하여 데이터의 안정적인 전송을 가능하게 합니다. 이를 통해 IP는 인터넷을 비롯한 다양한 네트워크에서 호스트 간 통신을 지원하며, 이기종 시스템들 사이에서도 데이터를 교환할 수 있습니다.

IP는 패킷 스위칭 네트워크에서 주소 지정과 라우팅을 담당하며, 데이터를 작은 패킷 단위로 나누어 전송합니다. 각 패킷은 출발지와 목적지의 IP 주소를 포함하고 있어서 목적지로의 정확한 전송이 가능합니다. 이러한 IP 주소는 전 세계적으로 고유하게 할당되며, 네트워크 상에서 패킷이 올바른 경로로 전달되도록 합니다.

IP는 네트워크에서 데이터의 전송을 신뢰성 있게 처리하며, 인터넷과 같은 대규모 네트워크에서도 확장성을 가지고 동작합니다. 이를 통해 다양한 이기종 시스템들이 연결되어 있는 현대의 인터넷에서 웹 페이지, 이메일, 파일 전송 등의 다양한 서비스를 가능하게 합니다.

Packet flow without Network layer 네트워크 계층이 없는 경우의 패킷의 전송

호스트 간의 직접적인 연결로 인해 패킷의 전송

→ communication only possible between physically connected hosts

(물리적으로 연결된 호스트들끼리만 통신이 가능합니다.)

네트워크 계층은 데이터 통신에서 중요한 역할을 수행합니다. 그러나 네트워크 계층이 없다면 패킷의 전송은 직접적으로 이웃한 노드 간에 이루어지게 됩니다. 이러한 경우에는 패킷이 호스트로부터 출발하여 노드 간의 링크를 통해 직접적으로 수신 호스트에 도달하게 됩니다.

패킷은 출발 호스트에서 목적 호스트로 전달되는 동안에는 상위 계층에서 제공되는 주소와 식별 정보를 사용하여 목적지를 식별하고 전송 경로를 결정합니다. 그러나 네트워크 계층이 없는 경우에는 패킷의 전송 경로를 결정할 수 있는 정보가 없으므로, 패킷은 출발 호스트로부터 수신 호스트로의 직접적인 경로를 따라 전달`됩니다.

이렇게 네트워크 계층이 없는 경우에는 호스트 간의 직접적인 연결로 인해 패킷의 전송이 이루어지기 때문에, 전체 네트워크에서의 확장성과 유연성이 제한될 수 있습니다. 네트워크 계층의 역할은 이러한 제한을 극복하여 다양한 네트워크 환경에서 데이터의 안정적이고 효율적인 전송을 가능하게 하는 것입니다.

네트워크에서는 호스트 간의 통신을 위해 물리적인 연결이 필요합니다. 호스트들은 네트워크 케이블, 스위치, 라우터 등을 통해 직접적으로 연결되어야만 데이터를 주고받을 수 있습니다. 이러한 물리적인 연결을 통해 호스트들은 데이터를 전송하고, 이동한 데이터를 수신하는 것이 가능합니다.

물리적인 연결이 없는 호스트들은 서로 직접적인 통신이 불가능합니다. 예를 들어, 호스트 A와 호스트 B가 서로 다른 네트워크에 위치하고 있고, 두 네트워크 사이에는 물리적인 연결이 없다면 호스트 A와 호스트 B는 직접적인 통신이 불가능합니다. 이 경우에는 두 호스트 사이에 중간에 위치한 라우터나 게이트웨이 등을 통해 데이터가 라우팅되어야만 통신이 이루어질 수 있습니다.

따라서, 네트워크에서는 물리적인 연결을 통해 호스트들을 서로 연결하고, 이를 통해 데이터의 전송과 통신이 가능하게 됩니다. 네트워크 계층은 이러한 호스트 간의 통신을 관리하고, 데이터를 목적지까지 안전하고 효율적으로 전달하는 역할을 수행합니다.

Packet flow with Network layer 네트워크 계층을 통한 패킷 흐름

네트워크 계층은 인터넷 프로토콜 (IP)을 사용하여 패킷의 전송을 관리하는 역할을 수행합니다. 이를 통해 패킷은 송신 호스트에서 수신 호스트로 전달될 수 있습니다.

→ 라우터를 사용하면 다중 홉(multi-hop) 통신이 가능해집니다.

패킷의 흐름은 다음과 같은 단계로 이루어집니다:

  1. 패킷 생성: 송신 호스트에서 전송할 데이터를 패킷으로 나눕니다. 각 패킷은 헤더와 페이로드로 구성되며, 헤더에는 출발지 및 목적지 IP 주소 등의 정보가 포함됩니다.
  2. 라우팅: 송신 호스트는 패킷을 네트워크로 보냅니다. 패킷은 여러 개의 라우터를 거치면서 목적지로 향합니다. 라우터는 패킷의 헤더 정보를 확인하고 적절한 다음 홉 (next hop)으로 패킷을 전달합니다. 이 과정은 라우팅 테이블을 참조하여 수행됩니다.
  3. 패킷 전송: 각 라우터는 수신한 패킷을 다음 홉으로 전달합니다. 이때, 패킷의 헤더 정보를 업데이트하여 다음 목적지를 표시합니다. 패킷은 목적지에 도달할 때까지 이러한 과정을 반복합니다.
  4. 수신 및 재조립: 목적지 호스트는 패킷을 수신하고, 패킷의 페이로드를 추출하여 데이터를 복원합니다. 이때, 패킷은 순서대로 재조립되어 원래의 데이터로 복구됩니다.

네트워크 계층은 패킷의 전송과 라우팅을 관리함으로써 다양한 네트워크 간의 통신을 지원합니다. 이를 통해 패킷은 여러 개의 네트워크를 통과하며 목적지에 안전하고 효율적으로 전달됩니다. 또한, 네트워크 계층은 패킷의 경로 선택, 라우팅 프로토콜, IP 주소 할당 등과 같은 중요한 기능을 제공하여 전체 인터넷의 원활한 동작을 보장합니다.

다중 홉 통신송신 호스트와 수신 호스트 사이에 여러 개의 라우터가 연결되어 있는 경우를 의미합니다. 데이터는 송신 호스트에서 출발하여 라우터를 거쳐 수신 호스트에 도달하는 과정을 거치게 됩니다. 각 라우터는 도착지로 데이터를 전달하기 위해 최적의 경로를 선택하고 패킷을 전달합니다.

다중 홉 통신을 가능하게 하는 것은 인터넷 프로토콜(IP)입니다. IP는 패킷을 여러 개의 호스트와 라우터를 거쳐 목적지에 전달하는 역할을 수행합니다. 각 라우터는 패킷을 받아 최적의 경로를 선택하고 다음 라우터에게 전달합니다. 이 과정을 반복하여 패킷은 최종적으로 수신 호스트에 도달하게 됩니다.

라우터는 패킷을 받고 도착지 주소를 확인하여 다음 라우터로 전달하는 중개 역할을 합니다. 이를 통해 다중 홉 통신이 가능해지며, 데이터는 여러 라우터를 거쳐 목적지에 도달할 수 있습니다. 이렇게 다중 홉 통신은 네트워크의 확장성과 유연성을 제공하며, 멀리 떨어진 호스트들 간의 통신을 가능하게 합니다.

Hourglass 모델

  • IP모든 라우터가 구현해야하는 통합 프로토콜입니다.
  • 네트워크는 서로 다른 전송, 데이터 링크 및 물리 계층 프로토콜을 구현할 수 있지만, 모두 IP를 구현해야 합니다.

IP: Service Model

  • 패킷 전달 모델(Packet delivery model)
    • 비연결성(connectionless)
    • 최선의 노력 Best Effort (신뢰성 없음 unreliable) •
      • 패킷이 손실될 수 있음 (lost)
      • 패킷이 순서가 바뀌어 전달될 수 있음 (out-of-order)
      • 중복된 패킷이 전달될 수 있음 (duplicate copies)
      • 패킷이 오랜 시간 동안 지연될 수 있음 (delay)
  • 전역 주소 체계 Global Addressing Scheme
    • 네트워크 내 모든 호스트를 식별하는 방법을 제공합니다.

IP: Packet Format

  • 패킷 앞에 IP Header가 첨부됩니다.
  • 옵션이 없는 경우 20바이트이며, 옵션이 있는 경우 최대 60바이트까지입니다.

IP Header

  • VER: IPv4 또는 IPv6
  • HLEN: 헤더의 길이
    • 단위: word = 4 bytes
    • 헤더가 20바이트인 경우, HLEN = 5 (20bytes / xHLEN = 4 bytes → xHLEN = 5 )
  • Service: 패킷의 service class
    • 패킷은 서비스 클래스에 따라 라우터에서 처리됩니다.
  • 전체 길이 (Total Length): 패킷의 전체 길이 (header + data)
    • 바이트 단위로 표현되며, 헤더와 데이터를 모두 포함한 패킷의 전체 길이를 나타냄
  • 식별자 (Identification), 플래그 (Flags), 조각화 오프셋 (Fragmentation Offset)
  • 조각화(fragmentation)와 조립(assembly)과 관련된 정보
  • 생존 시간 (Time to Live): 패킷의 수명
    • 단위: 호프 수 (Number of hops)
    • 라우터를 통과할 때마다 감소
    • TTL이 0이 되면 패킷은 더 이상 전달되지 않음
    • 목적지에 도달하지 않았다면 폐기됨
  • 프로토콜 (Protocol): 상위 계층(전송)의 프로토콜
  • 헤더 체크섬 (Header Checksum): 오류 감지를 위해 사용됩니다.
  • Source IP address(32비트): 패킷의 출발지 IP 주소입니다.
  • Destination IP address(32비트): 패킷의 목적지 IP 주소입니다.
  • Option: 옵션 필드로 선택적으로 포함될 수 있습니다.
    • 다른 20바이트는 필수 필드입니다.
    • 따라서, 최소 HLEN은 5입니다.
    • 옵션 필드가 존재할 경우, HLEN은 5보다 크게 됩니다.

Service Class (서비스 클래스)

  • Precedence: 우선순위 (0-7)
    • 7: 가장 높은 우선순위를 가짐
    • 라우터가 패킷을 삭제해야 할 때, 우선순위가 가장 낮은 패킷부터 삭제
  • TOS bits (Type of Service): 서비스 유형
    • 비트 중 하나만 1로 설정 가능하거나, 전부 0으로 설정됨

- DSCP (Differentiated Service Code Point): 서로 다른 서비스 유형 코드 포인트

- 이전의 우선순위와 서비스 유형을 대체하는 업데이트된 필드
- 패킷의 서비스 요구 사항을 나타내는데 사용됨

- ECN (Explicit Congestion Notification): 명시적 혼잡 통지

- 혼잡 상태를 감지하고 네트워크에서 명시적으로 통지하는 기능
- 패킷의 전송 지연과 패킷 손실을 줄이기 위해 사용됨

IP Header

Exercise 1.

IPv4 packet의 처음 8비트는 0100 0010 이다. 라우터는 잘못된 패킷이므로 해당 패킷을 삭제한다. Why?

Answer.

이 패킷은 잘못된 패킷으로 간주되어서 라우터가 해당 패킷을 삭제합니다. 이는 초기 8비트 "01000010"이 IPv4 패킷의 올바른 버전 값이 아니기 때문입니다. `IPv4 프로토콜에서는 버전 필드가 "0100"`로 설정되어야 하지만, 이 경우 `값이 "0100 0010"으로 잘못`되었습니다. 따라서 `라우터는 패킷을 잘못된 패킷으로 인식하고 삭제`합니다.

Exercise 2.

IPv4 패킷의 HLEN 값이 이진수로 1000이다. IP 헤더의 옵션 필드의 길이는 얼마인가?

Answer.

`HLEN 값은 IP 헤더의 길이`를 나타내는 값입니다. 이 값은 `4바이트 단위`로 표현되며, `이진수로 표현할 경우 1000은 8`을 의미합니다. 따라서 `옵션 필드의 길이는 8바이트`입니다.

Exercise 3.

패킷의 HLEN 값이 5이고, 총 길이 필드(total length field)의 값이 0x0028입니다. 이 IP 패킷의 데이터(data)의 길이는 얼마인가요?

Answer.

1. `HLEN 값이 5는 헤더의 길이`를 나타내며, `4바이트(32비트) 단위`로 표현됩니다. `HLEN 값이 5`이므로 `헤더의 길이는 5 x 4 = 20바이트`입니다.
2. 총 길이 필드의 값인 0x0028은 16진수로 표현된 값으로, 이를 10진수로 변환하면 `40`입니다. 이 값은 `헤더와 데이터를 합친 전체 패킷의 길이`를 나타냅니다.
3. `전체 패킷의 길이에서 헤더의 길이를 뺀 값`을 계산하면 `데이터의 길이`를 구할 수 있습니다.
4. `데이터의 길이 = 총 길이 - 헤더의 길이 = 40 - 20 = 20바이트`입니다.

Exercise 4.

주어진 IPv4 패킷의 초기 부분은 다음과 같습니다: 0x45000028000100000102
이 패킷의 Time-to-Live (TTL) 값은 무엇인가요?

Answer.

`IPv4 패킷의 Time-to-Live (TTL)은 패킷이 네트워크를 통해 전달될 수 있는 최대 라우터 수`를 의미합니다. `TTL은 패킷의 IP 헤더의 9번째 바이트` 에 위치하고 있습니다.

IPv4 패킷의 초기 부분은 0x45000028000100000102로 주어졌습니다. 이는 16진수로 표현된 값입니다. IPv4 패킷의 Time-to-Live (TTL) 값은 패킷이 네트워크를 통해 전달되는 동안 생명 주기를 나타내는 값입니다.

TTL 값은 이진수로 표현된 32비트 값에서 `9번째 비트부터 16번째 비트`까지의 비트 그룹입니다. 따라서, 주어진 패킷의 이진 표현은 다음과 같습니다:

주어진 IPv4 패킷의 Time-to-Live (TTL) 값을 찾아보겠습니다.

주어진 패킷의 32자리 16진수 표현은 다음과 같습니다: 0x45000028000100000102

TTL 값은 9번째와 10번째 바이트에 위치하며, 이 값은 패킷이 네트워크를 통과할 수 있는 최대 라우터 수를 나타냅니다.

따라서, 해당 패킷의 TTL 값은 0x01 (16진수)이며, 1 (10진수)로 해석됩니다.

즉, 이 패킷의 Time-to-Live (TTL) 값은 1입니다.

따라서, 이 `패킷의 Time-to-Live (TTL) 값은 1`입니다. 이 값은 `패킷이 네트워크를 통과하는 동안 최대 1개의 라우터를 거치고 지나가야 함`을 나타냅니다.

MTU (최대 전송 단위, Maximum Transfer Unit)

  • 각 데이터 링크 계층 프로토콜이 전송할 수 있는 IP 패킷의 상한값
  • 다른 프로토콜은 서로 다른 MTU를 가지고 있습니다. MTU는 전달 및 오류 감지 방법에 따라 달라집니다.
  • 각 프로토콜은 자체적인 패킷 전송 제한을 가지고 있으며, 이는 MTU로 표현됩니다. 예를 들어, 이더넷은 일반적으로 1500바이트의 MTU를 가지고 있습니다. 반면에, 다른 프로토콜들은 더 작거나 큰 MTU를 가질 수 있습니다.

Fragmentation (조각화)

  • IP 패킷의 크기가 MTU보다 크면 패킷을 여러 조각으로 나누어야 합니다.
    • 각 조각에는 IP 헤더가 첨부됩니다.

Fragmentation과 관련된 필드들

- Identification: 패킷 식별자

- `동일한 패킷의 모든 조각은 동일한 식별자 번호`를 가집니다.

- Flag

- `'D' 비트가 1`이면: 이 패킷은 `조각화되지 않아야 함`
• 패킷의 크기가 MTU보다 크면 패킷이 폐기됨
- `'M' 비트가 1`이면: `이후에 더 많은 조각`이 있음
• `'M'이 0`이면, 이것은 `마지막 조각`이거나 `유일한 조각`입니다.

→ D: Do not fragment

→ M: More fragment

- Fragmentation offset

- 원래 패킷에서 해당 조각의 위치를 나타냄
• 단위: 8 byte
• 데이터 바이트만을 고려함

  • Fragmentation & reassembly
    • 패킷 조각화는 어떤 노드에서든지 발생할 수 있습니다.
    • 패킷의 재조립은 최종 목적지에서만 이루어집니다.
    • 중간 노드에서 패킷을 재조립하면 다시 조각화해야 할 수도 있습니다.
    • 하나의 조각이 목적지에 도달하지 않으면 전체 패킷은 폐기됩니다.

→ 패킷의 모든 조각이 정확하게 도착해야만 패킷이 완전하게 재조립될 수 있습니다.

Fragmentation & reassembly

Exercise 1.

한 패킷이 도착했고, 해당 패킷의 'M' 비트가 0인 경우의 의미는 다음 중 하나입니다:

  1. 이 패킷은 조각나지 않은 패킷입니다: 'M' 비트가 0이면, 패킷이 조각으로 나뉘어지지 않았음을 나타냅니다. 이는 완전한 패킷이거나 패킷의 유일한 조각일 수 있습니다.
  2. 이 패킷은 조각화되었고, 이 조각이 마지막 조각입니다: 경우에 따라, 패킷이 조각으로 나뉘어져 있더라도 마지막 조각의 'M' 비트는 0으로 설정될 수 있습니다. 이는 수신측이 모든 조각을 받았고 패킷을 재조립할 수 있다는 것을 나타냅니다.

→ 따라서 주어진 정보를 기반으로 하면, 해당 패킷은 조각화되지 않은 패킷이거나 조각화된 패킷이며 이 조각이 마지막 조각인 것입니다.

  1. 조각화되지 않은 패킷
  2. 조각화되었으나, 마지막 조각

Exercise 2.

한 패킷이 도착했고, 해당 패킷의 'M' 비트가 1인 경우의 의미는 다음과 같습니다:

  1. 이 패킷은 조각화된 패킷이며, 현재 조각은 마지막 조각이 아닙니다: 'M' 비트가 1인 경우, 패킷이 조각으로 나뉘어져 있고 현재 조각은 마지막 조각이 아니라는 것을 나타냅니다. 즉, 추가적인 조각이 이어서 전송될 것으로 예상됩니다.

따라서 주어진 정보를 기반으로 하면, 해당 패킷은 조각화된 패킷이며 현재 조각은 마지막 조각이 아닙니다. 추가적인 조각이 이어서 전송될 것으로 예상됩니다.

Exercise 3.

한 패킷이 도착했고, 해당 패킷의 'M' 비트가 1이며, fragment offset 이 0인 경우의 의미는 다음과 같습니다:

  • 이 패킷은 조각화된 패킷이며, 이것은 첫 번째 조각입니다: 'M' 비트가 1이고 조각화 오프셋이 0인 경우, 이 패킷은 조각화된 패킷이며, 현재 조각은 첫 번째 조각임을 나타냅니다. 즉, 이 패킷은 전체 패킷의 처음부분을 나타내며, 이후에 추가적인 조각이 이어서 전송될 것으로 예상됩니다.

따라서 주어진 정보를 기반으로 하면, 해당 패킷은 조각화된 패킷이며, 이것은 첫 번째 조각임을 나타냅니다. 이후에 추가적인 조각이 이어서 전송될 것으로 예상됩니다.

Exercise 4.

한 패킷이 도착했고, 해당 패킷의 fragment offset이 100인 경우의 의미는 다음과 같습니다:

  • 이 패킷은 조각화된 패킷이며, 현재 조각의 위치는 800바이트입니다: 조각화 오프셋은 조각의 위치를 나타내는 값으로, 데이터 바이트만을 고려합니다. 또한, fragment offset은 8바이트만을 고려한다. 따라서 조각화 오프셋이 100인 경우, 이 패킷은 원래 패킷의 800바이트 위치에 해당하는 조각임을 나타냅니다. (100 x 8byte = 800 bytes)

따라서 주어진 정보를 기반으로 하면, 해당 패킷은 조각화된 패킷이며, 현재 조각은 원래 패킷의 800바이트 위치에 해당합니다.

Exercise 5.

주어진 패킷의 조각화 오프셋은 100이며, HLEN은 5이고 총 길이는 100입니다.

이 때, 해당 조각의 원래 패킷에서의 첫 번째와 마지막 위치(바이트)는 무엇인가요?

  • 첫 번째 위치는 조각화 오프셋에 8을 곱한 값인 100x8byte = 800번째 bytes입니다.
  • 마지막 위치는 다음과 같은 값을 사용하여 계산할 수 있습니다:
    • 총 길이(total length) : 100바이트
    • 헤더 길이(header length) : 20바이트
    • 데이터 길이(data length) : 총 길이 - 헤더 길이 = 100 - 20 = 80바이트
      따라서 이 조각의 마지막 바이트는 원래 패킷에서 800 + 80 - 1 = 879번째 바이트입니다.

Exercise 6.

IP 헤더 크기가 항상 20바이트라고 가정합니다.
IP 패킷의 크기가 5140바이트인 경우 (헤더 포함)
데이터 링크 계층의 MTU가 1500바이트이면, 이 패킷은 어떻게 분할되어야 할까요?

IP header = 20 bytes

IP packet = 5140 bytes

MTU = 1500 bytes

  1. 최대 페이로드 크기 계산:
    MTU - IP header 크기 = 1500 - 20 = 1480바이트 (각 분할의 최대 페이로드 크기)
  2. 필요한 분할의 수 계산:
    패킷 크기 / 최대 페이로드 크기 = 5140 / 1480 ≈ 3.48
    분수의 분할 수는 존재할 수 없으므로, 가장 가까운 정수로 반올림합니다. 따라서 총 4개의 분할이 필요합니다.
  3. 각 분할의 분할 오프셋과 플래그 결정:
    • 분할 1:
      • 분할 오프셋: 0 (첫 번째 분할)
      • M 플래그 (추가 분할): 1 (이후에 추가 분할이 있음)
    • 분할 2:
      • 분할 오프셋: 1 * (1480 / 8) = 185 (8바이트 단위로 계산)
      • M 플래그: 1
    • 분할 3:
      • 분할 오프셋: 2 * (1480 / 8) = 370
      • M 플래그: 1
    • 분할 4:
      • 분할 오프셋: 3 * (1480 / 8) = 555
      • M 플래그: 0 (마지막 분할)

각 분할은 IP 헤더를 첨부하여 최대 페이로드 크기가 1480바이트가 됩니다. 원래 패킷은 이러한 분할로 나뉘어지게 되며, 각 분할에는 IP 헤더가 첨부됩니다.

참고로, 이는 IP 헤더 크기가 항상 20바이트로 고정되고, 분할 오프셋이 8바이트 단위로 계산되는 것을 가정한 간소화된 설명입니다. 실제로는 IP 헤더 크기와 네트워크 상황을 포함하여 분할이 더 복잡하고 다양한 요인에 따라 달라질 수 있습니다.

패킷의 ‘M’ 비트가 0

  1. 조각화되지 않은 패킷
  2. 조각화된 패킷, 마지막 조각임

패킷의 ‘M’비트가 1

  1. 조각화된 패킷, 마지막 조각이 아님

패킷의 ‘M’비트가 1이고, fragment offset이 0

  1. 조각화된 패킷, 첫번째 조각임

패킷의 ‘M’비트가 1이고, fragment offset이 100

  1. 조각화된 패킷, 100x8byte=800byte 위치에 해당함

0개의 댓글