[네트워크] 네트워크 계층과 IP
네트워크 계층에서의 주요 목적
* IP 주소를 통한 송수신지 대상을 지정한다.
* 라우팅을 통한 다른 네트워크와 통신
데이터 링크 계층만으로는 다른 네트워크와의 통신하기 어렵다.
이유는 다른 네트워크까지의 도달경로를 파악하기 어렵다는 것과
다른 네트워크의 호스트의 위치 까지 파악하기 어렵다는 점이다.
LAN을 넘어 통신하기 위해 관련 개념들을 살펴봐야 한다.
라우팅 : 패킷이 이동할 최적의 경로를 결정하는 것
라우터 : 라우팅을 수행하는 대표적인 장비이다.
다른 네트워크와의 통신은 MAC 주소와 IP 주소가 함께 사용된다.
네트워크 계층의 핵심 프로토콜인 IP를 알아볼 필요가 있다.
IP
주요 기능은 특정 네트워크의 특정 호스트를 지징하는 '주소 지정' 역할과
'단편화' 기능을 한다.
주소 지정 기능
IP주소를 통해 송수신 되는 대상을 지정한다.
IP 버전 4 기준으로는 4바이트(32비트)로 하나의 주소를 표현한다.
숫자당 8비트로 표현한다. (0~255 범위 안에 있는 네 개의 10진수 표기)
EX : 192.168.1.1
단편화
전송하려는 패킷의 크기가 만약 MTU 를 넘으면 여러개의 패킷으로 분할하여 나누는 방법
MTU : 한번에 전송 가능한 IP 패킷의 최대크기이며, 일반적으로 1500바이트 이다.
IP V4 패킷에서의 핵심 필드
* 식별자
* 플래그
* 단편화 오프셋
* TTL
* 프로토콜
* 송신지 IP 주소
* 수신지 IP 주소
* 식별자
패킷에 할당되는 번호이며, 단편화된 여러 패킷들을 식별하기 위한 식별번호이다.
어떤 메세지로 부터 쪼개졌는지 알 수 있다.
* 플래그
세 개의 비트로 구성되며 첫번째 비트는 항상 0으로 사용되지 않는다.
두번째는 DF 라고 부르며 IP 단편화를 수행하지 말라는 표시이며
만약 1이라면 IP 단편화 수행하지 말라는 패킷이다.
세번째는 MF는 단편화된 패킷이 더 존재하는지 나타내는 플래그이다.
1이면 쪼개진 패킷이 더 있다는 것이며, 0이면 없다는 것이다.
* 단편화 오프셋
초기 데이터에서 몇 번째로 떨어진 패킷인지 지칭.
수신지가 패킷들을 재조합하려면 단편화된 패킷이 초기 데이터에서 몇 번째 패킷인지 알아야 한다.
* TTL (TIME TO LIVE)
패킷의 수명을 나타내며. 무의미한 패킷이 계속 남아있는 것을 방지 해준다.
패킷이 라우터를 거칠때 마다 TTL 이 1 씩 감소되며 0이 되면 해당 패킷은 폐기된다.
즉 홉 마다 1씩 감소된다.
* 프로토콜
상위 계층의 프로토콜이 어떤 것인지 나타내는 필드 (TCP는 4번이고 UDP는 17번이다.)
* 송수신지 IP 주소
송수신지의 IP 주소를 나타낸다.
IP V6 패킷에서의 핵심 필드
* 다음 헤더
상위 계층의 프로토콜 또는 확장 헤더를 가르킨다.
확장 헤더는 "홉 간 옵션", "수신지 옵션", "라우팅 관련 정보" 들의 정보들이 담겨져 있다.
* 홉제한 필드
IPv4 의 TTL 필드와 비슷한 역할이다.
* 송신지 IP 주소, 수신지 IP 주소
IP의 핵심 기능, 주소 지정
크게 네트워크 주소와 호스트 주소로 구성된다. ex: 172.16.12.50
네트워크 주소와 호스트 주소는 크기가 때마다 각각 다를 수 있다.
세 개의 옥텟이 네트워크 부분이 될수도 있고 두개 부분이 될 수도 있다.
한 옥텟당 8비트 -> 2의 8승만큼 표현 가능하다.
* 클래스 풀 주소 체계
네트워크 크기에 따라 ip 주소를 분류한 것


A : 이론적으로 2^7 개의 A클래스 네트워크 존재 가능. 각 네트워크에 2^24개의 호스트 주소 할당가능
B : 2^14 개의 B 클래스 네트워크가 존재 가능 (16비트에서 앞에 두비트는 고정이므로) , 2^16개의 호스트 주소 할당 가능
c : 2^21 개의 네트워크 존재 가능 (앞에 3자리 고정이므로) , 각 네트워크에 2^8 개 호스트 주소 할당 가능
하지만 실제로는 전부다 사용할 수는 없다. 호스트 주소가 전부 0인 주소는 해당 네트워크 자체를 의미하고
호스트 주소가 전부 1인 주소는 브로드캐스트 주소로 이용되기 때문에 이용 불가능
ex : 172.16.0.0 , 172.16.255.255 는 사용 불가능
하지만 클래스 풀 주소 체계도 클래스별로 네트워크 크기 가 고정되어 있어 많은 호스트 주소 공간이 낭비 될 수 있다.
또한 정해진 크기 때문에 유동적인 호스트 할당이 되지 않는다는 한계가 있다.
이러한 문제를 바탕으로 클래스리스 주소 체계가 등장했다.
클래스 개념 없이 네트워크를 나누고 호스트에게 주소 공간을 할당하여 준다.
서브넷 마스크라는 비트열을 통해 네트워크 주소와 호스트 주소를 구분한다.
네트워크 주소는 1, 호스트 주소는 0으로 표기한 비트열이다.
ex :
A Class : 255.0.0.0 = 11111111.00000000.00000000.00000000
B Class : 255.255.0.0 = 11111111.11111111.00000000.00000000
C Class : 255.255.255.0 = 11111111.11111111.11111111.00000000
서브넷팅
서브넷 마스크를 활용하여 클래스를 원하는 크기로 나누어 사용하는 것
서브넷 마스크는 비트 and 연산을 통하여 네트워크 주소를 얻을 수 있다.
- IP 주소: 192.168.219.103
- 서브넷 마스크: 255.255.255.0
이 두 수를 이진수로 변환하면
| IP 주소 | 192.168.219.103 | 11000000.10101000.11011011.01100111 |
| 서브넷 마스크 | 255.255.255.0 | 11111111.11111111.11111111.00000000 |
비트 AND 연산 결과는 아래와 같다
IP 주소: 11000000.10101000.11011011.01100111
서브넷 마스크: 11111111.11111111.11111111.00000000
결과 (AND): 11000000.10101000.11011011.00000000
결과를 다시 십진수로 변환하면 192.168.219.0 가 나오게 된다. (호스트가 모두 0 이기에 네트워크 주소이다.)
또 다른 표기법으로는 CIDR 표기법이라 하여
서브넷 마스크상의 1의 갯수를 표기 하는 형식이 있다.
ex : 11111111.11111111.11111111.00000000 --> 1이 24개 이므로 /24