인터넷 네트워크 계층 패킷을 데이터그램이라고 부른다.
IP의 사용에 대해 알아보기 전에 IP 데이터그램이 어떻게 이루어져 있는지 알아보자
IPv4
IPv4 데이터그램의 주요 필드는 다음과 같다.
버전 번호(4비트) : 데이터 그램의 IP 프로토콜 버전을 명시한다.
라우터는 IP의 버전 번호를 확인하여 데이터그램의 나머지 부분을 어떻게 해석할 지 결정한다. 다른 버전의 IP는 다른 데이터그램 형식을 사용한다.
헤더 길이(4비트)
IPv4데이터그램은 헤더에 가변 길이의 옵션을 포함하므로 헤더길이 필드를 통해 IP 데이터그램에서 실제 페이로드(예를 들어 데이터그램에 캡슐화 된 트랜스포트 계층 세그먼트)가 시작하는 곳을 결정한다. 대부분 IPv4 데이터그램은 옵션을 포함하지 않으므로 대체로 IPv4 데이터그램 헤더는 20바이트이다.
서비스 타입(TOS)(8비트) : 서로 다른 유형의 IP 데이터그램을 구별한다.
예를 들어 실시간 데이터그램(IP 전화 통신 어플리케이션)과 비실시간 트래픽(FTP)을 구분하는데 용이하다.
제공될 특정 서비스 레벨은 해당 라우터의 네트워크 관리자가 직접 결정하고 구성할 정책 문제이다.
TOS 비트 중 2개는 명시적 혼잡 통지에 사용된다.
데이터그램 길이(16비트) : 바이트로 계산한 IP 데이터그램의 전체 길이
이 필드의 크기는 16비트 이므로 IP 데이터그램의 이론상 최대 길이는 65535 바이트이지만, 1500바이트보다 큰 경우는 거의 없으므로 최대 크기의 이더넷 프레임의 페이로드 필드에 IP 데이터그램이 장착될 수 있다. (이해가 어려운 부분)
16비트 인식자, 플래그, 단편화 오프셋 : IP 단편화와 관계가 있다.
IPv6는 단편화를 허용하지 않는다.
TTL(Time-To-Live)(8비트) : 네트워크에서 데이터그램이 무한히 순환하지 않도록 한다.
이 필드 값은 라우터가 데이터그램을 처리할 때마다 감소한다. TTL 필드가 0이되면 라우터가 데이터그램을 폐기한다.
상위 계층 프로토콜(8비트) : 트랜스포트 계층의 특정 프로토콜을 명시한다.
IP 데이터그램이 최종 목적지에 도착했을 때만 사용된다.
예를 들어 값 6은 데이터 부분을 TCP로 전송하라는 의미이고, 값 17은 UDP로 데이터를 전송하라는 의미이다.
IP 데이터그램에서 프로토콜 번호의 역할은 트랜스포트 계층 세그먼트에서 포트 번호 필드의 역할과 유사하다. 포트 번호가 전송 계층과 응용 게층을 함께 묶는 접착제 역할을 하는 것처럼 프로토콜 번호는 네트워크 계층과 트랜스포트 계층을 묶는 역할을 한다.
링크 계층 프레임에도 링크 계층과 네트워크 계층을 묶는 특별한 필드를 가지고 있다.
헤더 체크섬(16비트) : 라우터가 수신한 IP 데이터그램의 비트 오류를 탐지하는데 도움을 준다
라우터는 수신한 각 IP 데이터그램마다 헤더 체크섬을 계산하고 이 값과 데이터그램 헤더의 체크섬이 다르면 오류 상태임을 감지한다. 라우터는 보통 오류가 검출된 데이터그램을 폐기한다.
TTL필드와 옵션 필드의 값은 변경되므로 체크섬은 각 라우터에서 재계산되고 저장되어야 한다.
왜 TCP/IP는 트랜스포트와 네트워크 계층에서 오류 검사를 수행할까?
1. IP 헤더만 IP 계층에서 체크섬을 수행하지만 TCP/UDP 체크섬은 전체 TCP/UDP 세그먼트를 계산한다.
2. TCP/UDP와 IP는 동일한 프로토콜 스택에 속할 필요가 없다. 원리상 TCP는 IP가 아닌 다른 네트워크 프로토콜위에서 운영될 수 있고, IP는 TCP/UDP로 전달되지 않는 데이터를 전달할 수 있다.
출발지(32비트)와 목적지(32비트) IP 주소
송신 호스트에서 데이터그램을 생성할 때, 자신의 IP 주소를 출발지 IP 주소 필드에 삽입하고 목적지 IP 주소를 목적지 IP 주소 필드에 삽입한다. 종종 출발지 호스트는 DNS 검색을 통해 목적지 주소를 결정한다.
옵션(가변 길이)
옵션 필드는 IP 헤더를 확장한다. 모든 데이터그램 헤더 옵션 필드에 정보를 포함하지 않는 방법으로 오버헤드를 해결하기위해 헤더 옵션은 거의 사용되지 않는다. 데이터그램 헤더가 가변 길이로 데이터 필드 시작점을 초기에 결정할 수 없어 옵션은 문제를 복잡하게 만든다. 또한 일부 데이터그램은 옵션 처리 유무에 따라서 라우터에서 IP 데이터그램을 처리하는 데 필요한 시간이 크게 달라진다. 이러한 가변 길이의 옵션은 고성능 라우터 및 호스트에서 IP처리에 특히 중요하다. 이러한 이유로 IP 옵션 필드는 IPv6에 포함되지 않았다.
데이터(페이로드)
데이터그램이 존재하는 이유이다.
대부분의 경우에 IP 데이터그램의 데이터필드는 정보를 목적지에 전달하기 위해 트랜스포트 계층 세그먼트(TCP or UDP)를 포함하지만 ICMP 메시지와 같은 다른 유형의 데이터를 담기도 한다.
IPv4 데이터그램 단편화
모든 링크 계층 프로토콜이 같은 크기의 데이터그램을 전달할 수는 없다.
어떤 프로토콜은 큰 데이터그램을 전달하는 반면에 다른 프로토콜은 작은 데이터그램만을 전달할 수 있다.
예를 들어 '이더넷 프레임' 은 최대 1500 바이트 데이터를 전달할 수 있지만 '광역 링크 프레임'은 576바이트 이상의 데이터를 전달할 수 없다.
링크 계층 프레임이 전달할 수 있는 최대 데이터 양을 MTU(maximum transmission unit)라 부른다.
각 IP 데이터그램은 한 라우터에서 다른 라우터로 전송하기 위해 링크 계층 프레임 내에 캡슐화 되므로 링크 계층 프로토콜의 MTU는 IP데이터그램의 길이에 엄격한 제약을 둔다. IP 데이터그램의 크기 제약은 문제가 되지 않는다. 문제는 송신자와 목적지 간의 경로를 따르는 각 링크가 서로 다른 링크 계층 프로토콜을 사용할 수 있고, 각 프로토콜들이 다른 MTU를 가질 수 있다는 점이다.
MTU에 따른 문제를 이해하기 위해 임의의 상황을 가정해보자
A, B, C라는 라우터가 있고, 각 라우터는 서로다른 링크 계층 프로토콜을 가진다. A 라우터는 링크 계층을 통해서 B 라우터로 데이터그램을 전송했고, B는 데이터그램을 C라우터로 보내야 하는 상황이다.
B 라우터가 IP 데이터그램을 받았기 때문에 데이터그램의 출력 링크를 결정해 주기 위해서 포워딩 테이블을 참조한다.
이때 출력 링크의 MTU가 IP 데이터그램보다 더 작은 상황이면 어떻게 할 것인가?
위 문제를 해결하기 위해서 IP 데이터그램의 페이로드(데이터)를 두 개 이상의 더 작은 IP 데이터그램으로 분할하고 각각의 더 작아진 IP 데이터그램을 별도의 링크 계층 프레임으로 캡슐화하여 출력 링크로 보낸다.
이러한 작은 데이터그램 각각을 조각(fragment)이라고 한다.
목적지 호스트가 같은 출발지로부터 일련의 데이터그램을 수신하면 이러한 데이터그램이 원본 데이터그램의 조각인지 판단해야 한다.
데이터그램이 조각이라고 판단되면 마지막 조각을 수신할 때 원본 데이터그램을 만들기 위해 조각을 결합하는 방법을 결정해야 한다.
이러한 조각의 재결합을 위해서 IPv4 데이터그램에는 16비트 인식자, 플래그, 단편화 오프셋 필드가 헤더에 있다.
16비트 인식자
데이터그램을 만들 때, 송신 호스트는 출발지 IP 주소와 목적지 IP주소 뿐만 아니라 16비트 인식자 번호를 데이터그램에 포함시킨다. 일반적으로 호스트는 데이터그램을 보낼 때마다 인식자 번호를 증가시킨다. 라우터가 데이터그램을 단편화 시킬 필요가 있을 때, 단편화된 결과인 데이터그램(조각)은 출발지주소, 목적지주소, 원본 데이터그램의 식별자 정보를 포함한다. 따라서 목적지에서 같은 송신자로부터 일련의 데이터그램을 받으면 어느 원본의 데이터그램 조각인지 결정하기 위해 데이터그램의 식별자 번호를 검사한다.
플래그
IP는 신뢰할 수 없는 서비스를 제공하므로 하나 이상의 조각이 도착하지 못할 수 있다. 이러한 이유로 목적지 호스트가 원본 데이터그램의 마지막 조각을 수신했음을 확신하기 위해 마지막 데이터그램 조각의 플래그 비트는 0으로, 다른 모든 조각의 플래그 비트는 1로 설정된다.
오프셋 필드
오프셋 필드는 조각이 분실되었는지 결정하기 위해 + 조각을 적절한 순서로 재결합하기 위해서 + 원본 데이터그램 내에 조각의 위치를 명시하기 위해서 사용된다.
단편화 예제
크기가 4000바이트(20바이트의 IP헤더 + 3980 바이트의 페이로드)인 데이터그램이 라우터에 도착했다.
이 데이터그램은 MTU가 1500바이트인 링크로 전달되어야 한다.
데이터그램의 인식자 번호는 1213 이라고 가정한다.
이 패킷은 최대 (1480 + 20)바이트로 분할이 가능하다.
따라서 4000바이트의 페이로드를 모두 분할하면
| (1480 + 20) | (1480 + 20) | (1020 + 20) | -> 이렇게 분할이 가능하다.
flag는 마지막 데이터그램 제외 모두 1이 될 것이다.
offset은 메시지 크기를 8바이트 단위로 나눠서 1480/8 = 185 가 된다.
1 | length = 20 + 1480 | id = 1213 | flag = 1 | offset = 0 |
2 | length = 20 + 1480 | id = 1213 | flag = 1 | offset = 185 |
3 | length = 20 + 1020 | id = 1213 | flag = 1 | offset = 370 |
데이터그램은 위 표와 동일하게 단편화가 될 것이다.
IPv4 주소체계
사전지식
호스트는 일반적으로 네트워크와 연결되는 하나의 링크를 가진다.
호스트가 IP 데이터그램을 보낼 때 일반적으로 네트워크와 연결되는 하나의 링크를 가진다. 호스트 IP가 데이터그램을 보낼 때 이 링크를 통해 데이터링크를 보낸다. 호스트와 물리적 링크 사이의 경계를 인터페이스라고 부른다.
이제 라우터와 인터페이스를 고려해보자.
라우터의 작업은 한 링크로부터 데이터그램을 수신하여 다른 링크로 전달하는 것이므로 라우터는 2개 이상의 연결된 링크가 필요하다. 라우터와 이런 링크 사이의 경계 또한 인터페이스라고 하는데 각 링크마다 하나의 인터페이스를 가지고 하나의 라우터는 여러 개의 인터페이스를 가진다. 모든 호스트와 라우터는 IP 데이터그램을 송수신할 수 있으므로 IP는 각 호스트와 라우터 인터페이스가 IP 주소를 갖도록 요구한다.
따라서 기술적인 부분에서 IP 주소는 인터페이스를 포함하는 호스트나 라우터보다 인터페이스 자체와 관련이 있다.
IP 주소는 32비트 길이이다.
IPv4 : 193.32.216.9
위 IP 주소를 2진수로 나타내면 다음과 같다.
11000001 00100000 11011000 00001001
서브넷
위 그림에서 3개의 인터페이스를 갖는 하나의 라우터는 7개의 호스트를 연결한다. 호스트와 라우터 인터페이스에 할당된 IP 주소를 잘 살펴보자.
왼쪽 3개의 호스트와 연결된 라우터 인터페이스는 223.1.1.xxx 형식의 IP 주소를 갖는다. 즉 동일한 왼쪽 24비트를 사용한다.
또한 4개의 인터페이스가 중계하는 라우터 없이 하나의 네트워크에 서로 연결되어 있다. 이 네트워크는 이더넷 LAN으로 상호연결되고 이 경우에 인터페이스는 이더넷 허브나 이더넷 스위치 또는 무선 엑세스포인트로 상호연결된다. (그림에서는 내부가 비어있는 것처럼 묘사되었다.)
IP 용어로 세 호스트들의 인터페이스들과 하나의 라우터 인터페이스로 연결된 네트워크는 서브넷을 구성한다고 말한다.
IP 주소체계는 이 서브넷에 223.1.1.0/24 라는 주소를 할당하는데, 여기서 /24 는 서브넷 마스크라고 부른다. 즉 32비트 주소의 왼쪽 24비트가 서브넷 주소라는것을 가리킨다.
서브넷의 IP 정의는 여러 호스트를 라우터 인터페이스에 연결하는 이더넷 세그먼트만을 의미하는 것은 아니다.
세 개의 라우터가 점대점 링크로 연결된 위 그림을 보자.
하나의 라우터는 각 점대점 링크를 위해 2개, 두 호스트를 직접 연결하는 브로드캐스트링크를 위해 1개, 총 3개의 인터페이스를 갖는다.
위 그림에서의 서브넷을 모두 살펴보자
1. 223.1.1.xxx 이더넷 세그먼트
2. 223.1.2.xxx 이더넷 세그먼트
3. 223.1.3.xxx 이더넷 세그먼트
4. R1과 R2를 연결하는 인터페이스용 223.1.9.xxx 서브넷
5. R1과 R3를 연결하는 인터페이스용 223.1.7.xxx 서브넷
6. R2와 R3를 연결하는 인터페이스용 223.1.8.xxx 서브넷
서브넷을 결정하려면 먼저 호스트나 라우터에서 각 인터페이스를 분리하고 고립된 네트워크를 만든다.
이 고립된 네트워크의 종단점은 인터페이스의 끝이 된다. 이렇게 고립된 네트워크 각각을 서브넷이라고 부른다.
CIDR(Classless InterDomain Routing) - 인터넷 주소 할당 방식
CIDR은 서브넷 주소체계를 일반화한다.
서브넷 주소체계보서, 32비트 IP 주소는 두 부분으로 나누고, 이것은 다시 점으로 된 십진수 형태의 a.b.c.d/x를 가지며, 여기서 x는 주소 첫 부분의 비트 수이다.
a.b.c.d/x 형식 주소에서 최상위 비트를 의미하는 x는 IP 주소의 네트워크 부분을 구성한다. 이를 해당 주소의 프리픽스 또는 네트워크 프리픽스라고 부른다.
하나의 기관은 통상 연속적인 주소의 블록을 할당받게 된다. 따라서 외부 라우터는 특정 기관으로 데이터그램을 전달할 때, 단지 앞의 x비트만 고려하면 되기 때문에 a.b.c.d/x 형태의 한 엔트리 만으로 특정 기관으로 패킷을 전송할 수 있기 때문에 포워딩 테이블의 크기를 상당히 줄여준다.
CIDR이 채택되기 전에는 IP 주소의 네트워크 부분을 8, 16, 24비트로 제한했고, 8, 16, 24비트 서브넷 주소를 갖는 서브넷을 각각 A,B,C 클래스 네트워크로 분류했기 때문에 이러한 주소체계는 클래스 주소체계라고 알려졌었다.
하지만 IP 주소의 서브넷 부분이 고정되어있다는 것은 급속히 증가하는 기관의 수를 지원하기엔 문제가 있다.
만약 클래스(/24) 서브넷은 2^8 - 2 = 254개 (256개 주소에서 2개는 특별한 사용을 위해 예약)의 호스트 만을 제공하기 때문에 많은 조직을 위해서는 턱없이 부족하다. 그렇다고 클래스(/16)을 사용해서 65534개의 호스트를 제공받기에는 자원이 너무 낭비된다.
따라서 CIDR의 도입 덕분에 주소 할당에 있어서 능동적이고 효율적인 사용이 가능해졌다.
'CS > Network' 카테고리의 다른 글
[Network] 네트워크 계층 : 라우팅(Link-State Routing) (0) | 2021.12.09 |
---|---|
[Network] 네트워크 계층 : NAT(Network Address Transmission) (0) | 2021.12.05 |
[Network] 트랜스포트 계층 : TCP 혼잡제어 알고리즘(TCP Tahoe, TCP Reno, TCP NewReno) (0) | 2021.11.29 |
[Network] 트랜스포트 계층 : 혼잡제어 (0) | 2021.11.29 |
[Network] 무선 네트워크 : Wireless LAN(Wi-Fi) (0) | 2021.11.18 |