본문 바로가기

OSI Model

9. IP 프로토콜 (3계층 Network Layer 네크워크 계층)

(3계층 Network Layer 네크워크 계층)

IP 프로토콜

 

IP 프로토콜은 인터넷환경에서 네트워크계층의 데이터 전송 프로토콜이다

 

IP 프로토콜에서 라우터 간의 패킷을 중개할 때는 Best Effort라는 원칙에 따라 전송하는데, 이 방식은 전송 패킷이 수신 호스트에게 100% 도착하는 것을 보장하지 않는다. 따라서 IP 프로토콜에서 제공하지 않는 전송 오류 문제를 상위계층에서 고려해야 한다.

 

IP 프로토콜의 특징

• 비연결형를 제공한다.

• 패킷을 분할/병합하는 기능을 수행하기도 한다.

• 데이터 체크섬은 제공하지 않고, 헤더 체크섬만 제공한다.

• Best Effort 원칙에 따른 전송 기능을 제공한다.

 

Service Type 필드

Service Type 필드는 IP 프로토콜이 사용자에게 제공하는 서비스의 품질에 관련된 내용을 표현한다.

 

Service Type 필드에서 각 비트 값의 의미

비트 번호

각 비트의 값

0

1

0~2

우선순위(111 : 가장 높음)

3

지연 보통

지연 낮음

4

전송률 보통

전송률 높음

5

신뢰성 보통

신뢰성 높음

6~7

예약

 

3, 4, 5번 비트는 각각 지연, 전송률, 신뢰성을 의미하나, 일반 환경에서는 기본값이 0이다. 이는 실제 통신 환경에서 설정되는 경로가 0과 1의 차이를 반영할 수 있을 정도로 고품질 서비스를 제공하지 못하기 때문이다. 현재 FTP, 텔넷, DNS 같은 상위 계층의 응용 서비스 환경에 따라 3비트의 값이 지정되어 있다.

 

 

패킷 분할

IP 프로토콜에서는 상위계층에서 내려온 전송 데이터가 패킷 하나로 전송하기에 너무 크면 분할(Fragmentation)해 전송하는 기능을 제공한다. 다음은 패킷 분할과 관련된 필드다.

 

*Identification(식별자 혹은 구분자) :패킷분할과 관련된정보가 포함된다. 이중 Identification 필드는 송신 호스트가 지정하는 패킷 구분자 기능을 수행한다.

 

IP프로토콜이 분할한패킷에 동일한고유번호를 부여함으로써, 수신호스트가 Identification 번호가 같은 패킷을 다시 병합(Reassembly)할 수 있도록 해준다.

 

패킷을 분할하지 않으면 패킷을 전송할 때마다 이 필드의 값을 하나씩 증가시킨다.

 

*DF(Don't Fragment) : 패킷이 분할되지 않도록 한다. 즉, 값을 1로 지정하면 패킷 분할을 막을 수 있다.

 

*MF(More Fragment) : 분할된 패킷을 전송할 때는 여러 개의 분할 패킷이 연속해서 전송되므로 MF 필드 값을 1로 지정하여, 분할 패킷이 뒤에 계속 발생됨을 표시해주어야 한다. 분할 패킷 중 마지막 패킷은 MF 비트를 0으로 지정하여 분할 패킷이 더 없음을 표시한다.

 

*Fragment Offset(분할 옵셋) : 패킷 분할이 이루어지면 12비트의 Fragment Offset 필드를 사용한다. 저장되는 값은 분할된 패킷의 내용이 원래의 분할 전 데이터에서 위치하는 상대 주소 값이다. 값은 8바이트 배수므로, Fragment Offset 값이 64라면 원래 데이터에서 64×8 = 512번째에 위치한다.

 

 

주소 관련 필드

Source Address와 Destination Address 필드는 송수신 호스트의 IP 주소다.

Source Address는 송신 호스트 주소고, Destination Address는 수신 호스트 주소다.

 

IP 주소 체계는 크게 네 종류다. 클래스 A, B, C는 유니캐스팅에서 이용하고, 클래스 D는 멀티캐스팅에서 이용한다.

 

클래스 A, B, C는 주소를 network와 host 필드로 구분해 관리함으로써, 클래스별로 네트워크 크기에 따라 주소 관리를 다르게 한다.

 

*network(네트워크) : 네트워크 주소다. 전 세계적으로 유일한 번호가 모든 컴퓨터 네트워크에 할당된다. 현재 이 주소의 할당은 NIC(Network Information Center)에서 담당한다.

 

* host(호스트) : 네트워크 주소가 결정되면 하위의 호스트 주소를 의미하는 host 비트 값을 개별 네트워크의 관리자가 할당한다. A 클래스는 host 비트의 크기가 크기 때문에 규모가 큰 네트워크에서 사용하고, C 클래스는 규모가 작은 네트워크에서 사용한다.

 

IP 주소 값을 통해 이 주소가 속한 클래스를 알 수 있다. 이진수이면 그림에서 맨 왼쪽 비트와 비교해 바로 알 수 있다. 십진수이면 A1.A2.A3.A4의 표현에서 맨 왼쪽의 A1 값이 아래의 주소 대역 중 어디에 속하는지에 따라 결정된다. 예를 들어, 211.223.201.30은 클래스 C의 주소다.

.

0.0.0.0 ~ 127.255.255.255 : 클래스 A의 주소 대역

• 128.0.0.0 ~ 191.255.255.255 : 클래스 B의 주소 대역

• 192.0.0.0 ~ 223.255.255.255 : 클래스 C의 주소 대역

• 224.0.0.0 ~ 239.255.255.255 : 클래스 D의 주소 대역

• 240.0.0.0 ~ 255.255.255.255 : 클래스 E의 주소 대역. 맨 왼쪽 4비트가 1111인 경우로 예약 주소 대역이다.

 

기타 필드

앞서 설명한 필드 외에도 IP 프로토콜에서는 다음과 같은 다양한 필드를 정의한다.

*Version Number(버전 번호) : IP 프로토콜의 버전 번호다. 현재 인터넷 환경에서 사용하는 IP 프로토콜은 버전 4다. IP 프로토콜의 새로운 버전인 IPv6과 구분하기 위해 기존 IP 프로토콜을 IPv4로 표현하기도 한다.

 

* Header Length(헤더 길이) : IP 프로토콜의 헤더 길이를 32비트 워드 단위로 표시한다. 일반 패킷을 전송하는 경우에 헤더의 Options 부분 이하가 빠지므로 IP 헤더의 최소 크기는 5다.

 

* Packet Length(패킷 길이) : IP 헤더를 포함하여 패킷의 전체 길이를 나타낸다. 필드의 크기가 16비트므로 IP 프로토콜에서 지원하는 패킷의 최대 크기는 216-1바이트다. 그러나 이는 이상적인 최댓값으로, IP 프로토콜에서 65,535바이트의 IP 패킷을 전송해도 대부분 데이터링크 계층에서 분할해 전송한다. 따라서 실제 환경에서 IP 프로토콜은 IP 패킷을 더 작은 단위로 만든다. IP 패킷의 크기는 일반적으로 8,192바이트를 넘지 않는다.

 

* Time To Live(생존 시간) : 패킷 전송 과정에서 패킷이 올바른 목적지를 찾지 못하면 수신 호스트에게 제대로 도착하지 않고, 네트워크 내부에서 떠돈다. 이런 현상을 방지하려고 Time To Live 필드를 사용한다. 송신 호스트가 패킷을 전송하기 전에 네트워크에서 생존할 수 있는 시간을 이 필드에 지정하고, 각 라우터에서는 패킷이 지나갈 때마다 필드 값을 감소시키면서 패킷을 중개한다. 임의의 라우터에서 Time To Live 값이 0으로 감소하면 패킷은 자동으로 버려지고, 패킷 송신 호스트에게 ICMP 오류 메시지가 전달된다.

 

* Transport Protocol(전송 프로토콜) : IP 패킷을 생성하도록 IP 프로토콜에게 데이터 전송을 요구한 전송 계층의 프로토콜을 가리킨다. TCP는 6을, UDP는 17을, ICMP는 1을 지정한다.

 

* Header Checksum(헤더 체크섬) : 전송 과정에서 발생할 수 있는 헤더 오류를 검출하지만 데이터의 오류는 검출하지 않는다. 이와 달리 계층 4 프로토콜인

TCP, UDP 헤더는 데이터와 헤더 오류를 모두 검출한다. 체크섬 계산 과정은 다음과 같다. 먼저 Header Checksum 필드의 비트 값을 모두 0으로 설정한 후, 전체 헤더가 16비트 워드의 연속이라 가정하고 1의 보수 합을 수행한다. 이 값을 체크섬으로 하여 패킷을 전송하고, 수신 호스트는 1의 보수 합을 계산하여 계산 결과가 모두 1이면 전송 과정에 오류가 없다고 판단한다. 전송 과정에 오류가 발생하면 IP 프로토콜에서는 해당 패킷을 버리고, 이를 복원하는 일은 상위계층에서 담당한다.

 

* Options(옵션) : 네트워크 관리나 보안처럼 특수 용도로 이용할 수 있다.

 

*Padding(패딩) : IP 헤더의 크기는 16비트 워드의 크기가 4의 배수가 되도록 설계되어 있다. 앞서 설명한 필드의 전체 크기가 이 조건에 맞지 않으면 이 필드를 사용해 조정할 수 있다.