2.3네트워크 계층
목적지를 찾는 단계
TL;DR
추억의 쪽지 시험
18. 네트워크 계층의 역할
A 회사에 다니는 사람이 B 회사 사람에게 이메일을 보내는 상황을 가정하자. A 회사 사람은 자신이 속한 A 회사의 스위치에 B 회사 사람이 사용하는 컴퓨터의 MAC 주소를 묻겠지만, A 회사 스위치는 이를 알 수 없다. B 회사 사람의 MAC 주소는 B 회사의 스위치에 연결되어 있기 때문이다. 즉, 호스트가 같은 LAN 안에서는 ARP로 MAC 주소를 알아낼 수 있지만, B 회사처럼 다른 네트워크에 있는 컴퓨터의 MAC 주소는 알 수 없기 때문이다.
여기서 라우터(Router)가 필요하다. 라우터는 데이터가 어떤 경로로 전달되어야 하는지를 알려주는 내비게이션과 같은 장비로, 어떤 길이 가장 빠른지 결정해준다. 그리고 어떤 길이 가장 빠른 길인지 찾는 과정을 라우팅(Routing)이라고 한다.
라우터는 스위치와는 달리 IP 주소를 이용해서 통신한다.
19. IP 주소란?
하나의 LAN 환경 안에서는 스위치를 이용해 MAC 주소로 통신할 수 있다. 그러나 인터넷에 접속해, 다른 네트워크의 컴퓨터와 통신하려면 어떻게 해야할까?
이 때 필요한 것이 IP(Internet Protocol) 주소다. IP 주소는 인터넷 상에 있는 컴퓨터의 고유 주소로, 이것을 이용해 한 컴퓨터에서 다른 컴퓨터로 데이터를 주고 받을 수 있다.
IP 주소는 SKT, KT, LG U+와 같은 ISP(Internet Service Provider, 인터넷 서비스 제공자)에 인터넷 설치를 신청하면 ISP와 내 컴퓨터가 연결되며, 공인 IP가 하나 부여된다.
공인 IP(Public IP)는 ISP에 의해 전 세계적으로 고유하게 할당되는 IP 주소다. 가정용 인터넷은 보통 유동적으로 할당되는 것이라 주기적으로 변경되며, 기업이나 서버는 고정 IP를 쓰기도 한다.
사설 IP(Private IP)는 주로 기업 내부에서만 사용되는 IP 주소로, 기업 밖에 있는 컴퓨터와는 통신할 수 없다. 사설 IP는 인터넷과 통신하려면 공유기(NAT)를 써야 한다.
IP 주소는 4바이트, 즉 32비트로 되어 있다. 사람이 읽기에 편한것은 10진수이기 때문에 192.168.2.124와 같은 형식을 가지고 있으며, 각 1바이트 별로 마침표(.)로 분리하여 표기된다. 1바이트는 2진수로 0 8개(10진수로 0)부터 1 8개(10진수로 255)까지 나타낼 수 있으므로 각 자리는 0 ~ 255 사이의 수다.
단, 마지막 1바이트의 가장 작은 수인 0과 가장 큰 수인 255는 각각 용도가 정해져 있어 컴퓨터의 IP 주소로 사용되진 않는다.
마지막 1바이트가 0인 주소는 네트워크 주소로, 일반적으로 하나의 네트워크를 통칭하기 위해 사용된다.
192.168.2.0
예를 들어, 하나의 라우터에 묶여 있는 컴퓨터들의 IP가 192.168.2.11~192.168.2.14라면 네트워크 주소는 192.168.2.0이다. 이에 대해, 192.168.2.11~192.168.2.14는 같은 IP 대역을 사용한다고 표현한다.
또, 마지막 1바이트가 255인 경우는 브로드캐스트 주소로, 브로드캐스트 주소는 네트워크에 연결된 컴퓨터에 데이터를 한번에 일괄적으로 전송할 때 사용하는 주소다.
192.168.2.255
20. IP 주소의 구조와 클래스
20-1. IP 주소의 구조
IP 주소는 네트워크 ID와 호스트 ID로 구분된다.
네트워크 ID는 컴퓨터가 많을 경우 관리가 어렵기 때문에 네트워크 범위를 지정하기 위한 것이고, 호스트 ID는 라우터에 연결된 개별 컴퓨터들이 사용한다.
예를 들어, 어떤 네트워크에 3개의 컴퓨터가 있고 각각 192.168.1.2, 192.168.1.3, 192.168.1.4라면 네트워크 ID는 공통 부분인 192.168.1이고, 호스트 ID는 각각 2, 3, 4다.
20-2. IP 주소의 클래스
공인 IP 주소는 예전에는 Classful 주소 체계라고 불리는 A부터 E까지 5개의 클래스를 썼는데, 요즘은 이후에 설명할 /24, /16과 같은 CIDR(프리픽스 기반)을 사용한다. 다만 원리는 비슷하므로 우선 클래스에 대해 알아보자.
A 클래스는 첫 1바이트가 네트워크 ID고 나머지 3바이트는 호스트 ID다. 이 때 호스트 ID는 총 2^8 * 2^8 * 2^8 = 2^24, 즉 약 1,670만 개의 경우의 수가 생기고 네트워크 ID까지 고려하면 2^31, 즉 약 21억개의 경우의 수가 생긴다. 다만, 첫 바이트의 가장 앞 자리는 0으로 고정되어 있기에, 실제로는 0.0.0.0 ~ 127.255.255.255까지 가능하다.(첫 바이트의 가장 앞 자리가 1이면 128부터 시작한다. 이는 B 클래스의 시작점이다.)
B 클래스는 첫 2바이트가 네트워크 ID고 나머지 2바이트가 호스트 ID다. B 클래스는 맨 첫 바이트 앞의 두 자리가 10으로 고정되어 있어, 128.0.0.0 ~ 191.255.255.255까지 가능하다.
C 클래스는 첫 3바이트가 네트워크 ID고 마지막 바이트만 호스트 ID다. C 클래스는 앞의 세 자리가 110으로 고정되어 있어 192.0.0.0 ~ 223.255.255.255까지 가능하다.
D, E 클래스는 일반인은 쓰지 않기에 넘어간다.
전 세계의 IP 주소를 관리하는 기관은 IANA(Internet Assigned Numbers Authority)다. 우리나라의 경우 KISA(Korea Internet & Security Agency, 한국인터넷진흥원)에서 IANA로부터 IP 대역을 할당받아 온 후, 받아온 IP 주소들을 ISP(KT, SKT, LG U+)에게 다시 할당해준다. 그러면 ISP는 개인이나 학교, 기업에 다시 할당해준다.
21. OSI 7 계층에서의 IP 주소
네트워크 계층(3 계층)에 추가되는 헤더 정보는 사실 여러 가지가 있지만, 여기서 중요한 부분은 송신자와 수신자의 IP 정보다.

그런데, 통신을 할 때 송신자의 IP 정보는 그렇다쳐도 수신자의 IP 정보는 어떻게 확인할 수 있을까? 수신자의 IP는 도메인 이름을 DNS에 질의해서 알아내는데, 이렇게 알게된 IP 주소를 어느 경로로 보내야 할지는 라우터가 결정해준다. 이에 대해선 조금 뒤 보다 자세히 살펴본다.
22. 브로드캐스트, 유니캐스트, 멀티캐스트
네트워크에선 데이터를 주고받는 여러 방식들이 있다.
22-1. 브로드캐스트
브로드캐스트(Broadcast)는 같은 네트워크에 속한 모든 컴퓨터에게 데이터를 전달한다. 라디오나 TV가 모든 시청자들에게 일방적으로 신호를 보내는 것을 생각할 수 있다.
22-2. 유니캐스트
유니캐스트(Unicast)는 1:1 통신이다. 물론 이를 위해선 3계층 관점에선 IP 주소를, 2계층에선 ARP를 통해 IP에 대응하는 MAC 주소를 알고 있어야 한다.
22-3. 멀티캐스트
멀티캐스트(Multicast)는 브로드캐스트와 유니캐스트를 섞어 놓은 방식으로, 같은 네트워크에서 데이터를 보내고 싶은 컴퓨터가 2대 이상이라면 그룹을 지정해서 그 그룹에 해당하는 컴퓨터에게만 데이터를 보낸다.
23. 서브넷과 서브넷 마스크
23-1. 서브넷의 개념
앞서 살펴본 A 클래스에선 하나의 네트워크 주소를 갖는 컴퓨터가 총 1,670만 대 있을 수 있다(서로 다른 호스트 주소가 21억개까지 가능하므로). 그런데 이럴 경우, 브로드캐스트 주소로 오는 데이터는 그 많은 주소로 모두 갈 것이고 각 컴퓨터는 그 데이터가 내게 필요한 정보인지 필터링해야 할 것이다. 하나의 큰 네트워크에 속해 있으면 이는 아주 비효율적일 수 있다.
따라서 하나의 네트워크 안에서 구조를 분할함으로 보다 효율적으로 네트워크를 사용할 수 있는데, 이렇게 네트워크를 분할한 작은 네트워크를 서브넷(subnet)이라고 부르고, 분할하는 작업을 서브넷팅(subnetting)이라고 한다.
23-2. 서브넷팅의 원리
서브넷팅은 IP 주소의 네트워크 ID와 호스트 ID 중 네트워크 ID는 그대로 두고 호스트 ID를 쪼개는 방식으로 할 수 있다. 즉, 호스트 ID를 서브넷 ID와 호스트 ID로 나누는 작업이 서브넷팅이다.
23-3. 서브넷 마스크
서브넷 마스크(Subnet Mask)란 IP 주소에서 네트워크 ID와 호스트 ID를 구분하기 위한 구분자다.
아래의 두 표현은 모두 같은 의미의 서브넷 마스크로, 앞의 3바이트(24비트)가 네트워크 ID고 뒤 1바이트(8비트)가 호스트 ID라는 의미다.
192.168.1.1/24 255.255.255.0
이 두 표현이 어떻게 첫 3바이트가 네트워크 ID라는 의미를 가지는걸까? 서브넷 마스크는 1과 0의 조합인데, 1이 연속적으로 나온 후 0이 연속적으로 나오는 형태다. 또, 서브넷 마스크를 구할때 네트워크 ID는 모두 1로 채우고 호스트 ID는 0으로 채운다. 예를 들어, 첫 3바이트가 네트워크 ID인 C 클래스의 경우 3바이트는 1, 나머지 1바이트에 해당되는 호스트 ID를 0으로 채우면 255.255.255.0이 된다. /24는 네트워크 ID의 비트 수로, 24비트(3바이트)가 모두 1의 값을 가진다는 의미다.
23-4. 서브넷팅해보기
서브넷팅은 하나의 큰 네트워크를 여러 개의 작은 네트워크로 나눠 쓰는 것이다. 이로 인해 브로드캐스트 범위가 줄어 불필요한 트래픽이 감소되고, 조직/부서별로 네트워크를 분리한다면 관리와 보안에 이점이 생긴다. 또, 라우팅 시에도 경로를 보다 효율적으로 정리할 수 있다.
다음의 예시 상황으로 서브넷팅을 해보자.
네트워크 주소: 172.16.0.0 서브넷 마스크: 255.255.0.0 4개의 서브넷으로 나눈다고 할 때, 4개의 조합이 나오려면 호스트 ID 중 2개를 쓰면 된다. 왜냐하면 2개의 비트는 4개의 조합(00, 01, 10, 11)을 만들 수 있기 때문이다.
이렇게 만든 4개의 조합은 서브넷 ID에 들어가게 되고, 서브넷 ID는 네트워크 ID와 호스트 ID 사이에 들어간다. 즉, 네트워크 주소 172.16 다음에 서브넷 ID가 00, 01, 10, 11과 같이 들어가고 이후가 호스트 ID다.
이번 예시는 B 클래스이므로 3번째 바이트부터가 호스트 ID고, 서브넷 ID가 추가되면서 맨 첫 자리가 00, 01, 10, 11로 시작하게 되면 각각 0, 64, 128, 192부터 시작한다. 즉, 네트워크 주소는 172.16.0.0, 172.16.64.0, 172.16.128.0, 172.16.192.0이다.
이들의 브로드캐스트 주소는 각각 맨 마지막 호스트 ID이므로, 172.16.63.255, 172.16.127.255, 172.16.191.255, 172.16.255.255가 된다. 그리고 네트워크 주소와 브로드캐스트 주소 사이가 호스트 주소의 범위다.

24. 라우터의 동작 방식
라우터는 데이터의 전송을 위해 가장 적절한 길을 찾아 네트워크 간의 경로(Route)를 설정하는 장비다.
앞서 2 계층에서 쓰이는 장비인 스위치는 같은 네트워크 내에서만 통신이 가능했다. 서로 다른 네트워크 간의 통신을 위해선 라우터를 사용해야 한다. 예를 들어, 172.16.1.0/24와 172.16.2.0/24 네트워크는 서로 다른 네트워크이며 이 둘 간의 통신을 위해선 라우터가 필요하다.
서로 다른 네트워크 간에는 1개 이상의 라우터가 있을 수 있다. 이런 경우, 어떤 경로로 이동하는게 가장 빠른 통신이 가능할지 확인을 해야하는데 이렇게 네트워크와 네트워크 간의 경로를 설정하는 것을 라우팅(Routing)이라고 한다. 라우팅을 위해선 라우팅 테이블(Routing Table)을 사용하는데, 이는 데이터를 목적지까지 보내기 위한 거리와 방법 등을 명시한 테이블이다.
라우팅 테이블에는 데이터를 목적지로 전달하기 위해 어떤 방향(인터페이스)으로 가야하는지에 대한 정보가 있다. 맥에서 라우팅 테이블은 netstat -rn으로 조회할 수 있다.
라우팅 테이블은 주기적으로 업데이트해야 한다. 이는 네트워크 상황이 계속 변경되기 때문이다. 다만, 사람이 매번 업데이트할 수도 있지만(관리자가 직접 설정하는 정적 라우팅), 일반적으론 라우터끼리 프로토콜(OSPF, BGP 등)로 서로 상태를 교환하며 자동으로 갱신한다.