4.1 네트워크 계층 개요
라우터는 네트워크, 링크, 물리 3개 계층만 존재한다.
라우터는 IP 패킷만 인식해서 포워딩(전달)된다.
1) 포워딩과 라우팅: 데이터 평면과 제어 평면
◾ 포워딩
입력 링크에 도달한 패킷을 올바른 방향의 출력 링크로 이동시킨다.
라우터 내부의 포워딩 테이블을 참조해서 목적지 주소에 맞는 출력 링크를 고를 수 있다.
◾ 라우팅
라우팅 알고리즘은 경로를 계산해서 포워딩 테이블을 채운다.
포워딩 테이블은 단일 주소와 출력 링크를 매핑하지 않고 주소의 범위와 출력 링크를 매핑해서 관리한다.
단일 주소-링크 매핑으로 관리한다면 테이블의 사이즈가 기하급수적으로 커지기 때문이다.
또한 범위로 관리하면 일정 비트까지 중복되는 경우가 존재하는데, 이때는 prefix 비트가 가장 많이 매칭된 링크로 이동된다.
2) 네트워크 서비스 모델
인터넷 네트워크 계층은 최선형 서비스(best-effort service)라는 것을 제공한다.
말이 최선형 서비스일 뿐이지 패킷의 대역폭, 손실, 순서, 지연을 보장하지 않는다.
4.2 라우터 내부에는 무엇이 있을까?
라우팅 프로세서가 포워딩 테이블을 만들면 각 입력 포트에 독립적으로 저장된다.
4.3 인터넷 프로토콜(IP): IPv4, 주소 지정, IPv6 등
현재 사용 중인 IP는 IPv4와 IPv6 두 가지 버전이 있다.
1) IPv4 데이터그램 형식
IP Header - 1
◾ Time To Live(TTL)
패킷이 무한루프에 빠지지 않도록 패킷의 수명을 제한한다. 라우터에서 패킷이 처리될때마다 TTL이 1씩 감소해서 0이 되면 패킷은 폐기된다.
◾ Protocol(Upper layer protocol)
현재 데이터 영역에 담긴 세그먼트가 상위 계층인 트랜스포트 계층의 어떤 프로토콜 세그먼트인지 명시한다.
2) IPv4 데이터그램 단편화
패킷은 전송될 때 다수의 링크를 거쳐간다. 하지만 각 링크별로 보낼 수 있는 데이터의 최대 크기(Maximum Transmission Unit, MTU)가 다르기 때문에 패킷의 크기가 MTU보다 작다면 패킷은 단편화된다.
패킷은 단편화되면서 헤더에 정보를 기록한다.
IP Header - 2
◾ Identification
단편화 되기 전, 하나의 패킷이었음을 알리기 위한 식별자.
◾ Flags
단편화된 패킷 여부. 단편화가 일어나지 않았거나 마지막 fragment는 0으로 설정한다.
◾ Fragment Offset
전체 데이터에서 단편화된 데이터가 원래 있던 위치 중 첫번째 값을 8로 나눈 값.
3) IPv4 주소체계
IP 주소는 특정 호스트를 지칭하는 것이 아닌 인터페이스를 지칭한다.
그렇기 때문에 하나의 호스트가 여러개의 IP를 가질 수 있고 대표적으로 라우터가 있다.
IP 주소가 마구잡이로 할당된다면 포워딩 테이블의 규칙성은 사라지고 1:1 매핑만으로 해결할 수 있기 때문에 포워딩 테이블의 크기가 기하급수적으로 커지고 탐색 속도도 매우 느려지는 문제가 발생한다.
그래서 IP 주소는 계층화 되어 구성되고 그에 따라 할당된다.
앞 부분(network prefix)은 어떤 네트워크에 속하는지(네트워크 ID), 뒷 부분은 어떤 호스트인지(호스트 ID)를 나타낸다.
12.34.158.0/24(서브넷 마스크)는 network prefix 24비트가 네트워크 ID 라는것을 의미한다. (=12.34.158)
결과적으로 같은 네트워크 상에 속한 호스트들은 동일한 네트워크 ID를 가지기 때문에 포워딩 테이블의 구성이 단순해진다.
추가로 12.34.158.0/24 와 같은 표기방식은 사람이 읽기 편할뿐, 실제 서브넷 마스크는 기계가 이해할 수 있어야 하기 때문에 위와 같이 관리한다.
과거에는 network prefix를 고정해서 특정 기관에 따라 배분해서 사용했지만 비효율적이기 때문에 최근에는 가변적으로 운용한다.
이러한 주소 할당 방식을 CIDR(Classeless Interdomain Routing) 이라고 한다.
◾ 서브넷(subnet)
같은 네트워크 ID를 가진 호스트의 집합이다.
같은 서브넷에 속한 호스트들은 라우터를 거치지 않고도 서로 접근이 가능하다.
라우터도 마찬가지로 호스트이지만 여러개의 인터페이스를 가졌기 때문에 라우터끼리도 서브넷이 구성된다.
그렇기 때문에 라우터는 여러개의 서브넷에 걸쳐있는 호스트라고 볼 수 있다.
◾ 주소 블록 획득
서브넷에서 사용하기 위한 IP 주소 블록은 ISP에서 얻어야 하고 ISP도 마찬가지로 상위 기관에서 얻어야 한다.
이 상위기관이 ICANN이고 최상위 국제 기관이다. ICANN은 IP 주소 할당과 DNS 루트 서버를 관리한다.
◾ 호스트 주소 획득: 동적 호스트 구성 프로토콜(DHCP)
일반적으로 IP 주소를 호스트에게 고정적으로 할당해 주는것은 호스트가 항상 네트워크에 접속하고 있는것은 아니기 때문에 효율적이지 못하다.
예를 들어 호스트가 1만개 존재하지만 실제 네트워크를 이용중인 호스트가 50%라고 하더라도 존재하는 호스트에게 IP 주소를 모두 할당하기 때문에 매우 비효율적이다.
그렇기 때문에 호스트에게 요청이 들어올 때 DHCP 서버가 해당 호스트에게 IP 주소를 대여해준다.
이 때, IP 주소의 대여시간이 정해져있고 시간이 지나면 IP 주소는 회수된다.
실제 네트워크에 접속하려는 호스트들과 대여-회수가 이루어지기 때문에 더 적은수의 IP 주소로도 운영이 가능해진다.
DHCP discover
클라이언트가 DHCP 서버를 찾기 위해 자신의 트랜잭션 ID가 담긴 discover 메시지를 서브넷에 존재하는 모든 호스트에게 브로드캐스팅한다.
이 때, 67번 포트는 DHCP 서버만 열려있기 때문에 서버만 수신할 수 있고 다른 호스트는 해당 메시지를 무시할 수 있다.
DHCP offer
discover 메시지를 수신받은 서버는 IP 대여와 관련된 정보를 담은 메시지를 서브넷에 존재하는 모든 호스트에게 브로드캐스팅한다.
이 때, 모든 호스트의 68번 포트가 열려있지만 해당되는 트랜잭션 ID를 가진 클라이언트만 응답하기 때문에 다른 호스트는 해당 메시지를 무시할 수 있다.
DHCP request
요청받은 DHCP 서버가 여러개 존재할 수 있으므로(ex:와이파이) 클라이언트가 원하는 DHCP 서버 정보를 담은 메시지를 요청 받은 DHCP 서버들에게 브로드캐스팅한다.
이 때, 선택되지 못한 DHCP 서버들은 브로드캐스팅 메시지를 수신하면 IP 주소를 대여해주기 위해 저장해둔 데이터를 삭제한다.
DHCP ACK
메시지에 해당되는 DHCP 서버만 브로드캐스팅에 응답해서 요청 클라이언트의 정보를 담은 ACK 피드백을 브로드캐스팅해서 상호 동작을 종료한다.
참고로 서버-클라이언트 관계이기 때문에 DHCP는 애플리케이션 계층 프로토콜이다.
4) 네트워크 주소 변환(NAT)
IPv4는 약 43억개의 주소를 할당할 수 있는데 시간이 지남에 따라 수 많은 디바이스들이 IP를 사용되면서 IP 할당에 문제가 발생할 가능성이 생겼다. 이에 대한 해결책으로 NAT와 IPv6가 있다.
IPv6는 비용적인 문제로 현실적으로는 어렵기 때문에 NAT로 문제를 우회한다. 해결이 아닌 우회임을 알아야 한다.
NAT는 한마디로 말하자면 사설망이다. 하나의 공인 IP 주소를 여러 호스트가 사용할 수 있도록 해주는 일종의 트릭이다.
우리가 흔히 사용하는 공유기를 떠올리면 이해하기 쉽다.
게이트웨이에서 패킷이 송신될 때 NAT 변환 테이블에는 IP와 포트가 기록된다.
송신될 때 포트번호가 변환되기 때문에 서브넷의 호스트들은 동일한 포트를 사용할 수 있다.
다수의 사설 IP 주소와 하나의 공인 IP 주소가 NAT 변환 테이블에 의해 서로 변환된다.
◾ NAT 사용시 발생하는 문제점
NAT 사용시 서브넷 내부에서 서버를 운영하기 매우 어렵다는 문제가 있다.
NAT 변환 테이블에 기록되려면 패킷이 한번은 송신되어야 하는데 서버는 먼저 송신하는게 아니라 수신을 기다리기 때문에 테이블에 기록되지 않는다.
가능하게 하려면 게이트웨이의 NAT 변환 테이블을 직접 수정해야 하지만 수정 권한이 없다면 서버를 구축하기 매우 어려워진다.
또 한가지 문제로 계층구조를 침범하는 문제가 있다.
게이트웨이가 호스트를 구별하는데에 IP 주소가 아닌 포트번호를 사용할 뿐만 아니라 네트워크 계층임에도 불구하고 NAT 변환 테이블 작성을 위해 트랜스포트 계층에서 작성된 포트번호를 바꾼다.
'이론 > 네트워크' 카테고리의 다른 글
링크 계층: 링크, 접속망, 랜 (0) | 2022.11.24 |
---|---|
네트워크 계층: 제어 평면 (0) | 2022.11.20 |
트랜스포트 계층 (2) (0) | 2022.11.18 |
트랜스포트 계층 (1) (0) | 2022.11.18 |
애플리케이션 계층 (0) | 2022.11.15 |