네트워크 계층(Data Link Layer)
- OSI 7계층 중 3번째에 위치한 계층이다.
- 네트워크의 핵심인
라우팅(데이터가 가야 할 길을 찾는 기능)
의 대부분이 3계층인 네트워크 계층에서 작동합니다.
- 이 계층은 여러 대의
라우터
들을 바탕으로 데이터를 패킷
단위로 잘게 쪼개어 전송하는 층위에 해당합니다. 데이터가 전송될 수 있는 수 많은 경우의 수 중 가장 효율적인 라우팅이 방법을 찾는 것 또한 이 단계에서 가능해집니다.
데이터 링크 계층에 대해 다시 간단하게 상기해보자
-
데이터 링크 계층은 OSI 계층 중 2번째에 위치해 있다.
-
LAN
환경에서 L2 Switch에 연결되어 있는 여러 Host들은 이더넷 프로토콜
을 사용하여 MAC Address
가 담긴 Frame
단위의 데이터로 서로 통신하게 있다.
-
그리고 여러 LAN 통신망들이 뭉쳐서 구성한 더 큰 통신망을 구성한 것을 WAN
이라고 한다.
이제부터 WAN 환경에서는 어떻게 통신을 주고 받는지 지금부터 네트워크 계층을 살펴보면서 알아보자!
IP Address란?
- 데이터 링크 계층은 LAN 통신 환경에서 MAC address로 Host를 구별했다.
- 네트워크 계층은 WAN 통신 환경에서
IP address
로 Host를 구별한다!
- 따라서, 인터넷에 연결된 모든 컴퓨터나 라우터의 IP 주소는 고유하다.
- IANA(Internet Assigned Numbers Autority) 에서 전세계 IP 주소를 관리하고 있다.
- IP Address란?
- 'Internet Protocol'의 줄임말
- 인터넷에 연결된 각 Host를 구별하기 위해 사용되는 고유한 주소이다.
- Internet Protocol란?
- 인터넷을 통해 데이터를 주고받을 때 사용되는 통신 규약
패킷
이라는 데이터 단위로 서로 통신이 가능하게 된다.
- 밑에서 좀 더 자세히 다뤄보자~
IP Address 형식
-
IP Address는 총 4 Byte(32 bit)로 구성되어 있으며,
일반적으로 1Byte씩의 값(=Octet)을 10진수로 '.' 으로 구분해서 표기한다. (위 이미지처럼)
-
IP Address는 효율적으로 네트워크 구성하기 위해 Network Address, Host Address 로 2개의 필드로 나눌 수 있다.
=> 이를 통해 우리는 이 IP Address를 총 A, B, C의 클래스로 나눌 수 있다.
- A Class :
0.0.0.0
~ 127.255.255.255
(큰 규모의 네트워크에 적합)
- Network Address : 1 Octet => 126 개의 네트워크
- Host Address : 2 ~ 4 Octer => 16,777,214 개의 호스트
- B Class :
128.0.0.0
~ 191.255.255
(중간 규모의 네트워크에 적합)
- Network Address : 1 ~ 2 Octet => 16,384 개의 네트워크
- Host Address : 3 ~ 4 Octer => 65,534 개의 호스트
- C Class :
192.0.0.0
- ~ 223.255.255.255
(소 규모의 네트워크에 적합)
- Network Address : 1 ~ 3 Octet => 2,097,152 개의 네트워크
- Host Address : 4 Octet => 254 개의 호스트
서브넷 마스크의 역할
그러면 이제 IP Address를 통해 어떻게 통신하는지 알아보자~
그전에 먼저 서브넷 마스크
라는 것을 알고 넘어가야 한다!
-
서브넷 마스크란?
- Subnet + Mask의 합성어로, IP Address를 서브넷 마스크를 통해
우리는 Network ID 와 Host ID를 알 수 있다.
- 서브넷(Subnet) : IP address를 더 작은 네트워크로 분할하는 기술
- 마스크(Mask) : '비트연산을 통해 일부 데이터를 가린다' 라는 의미를 가진다.
-
서브넷 마스크의 역할
- 서브넷 마스크 중 '1'로 이루어진 부분을 네트워크 ID, '0'인 부분을 호스트 ID인 것을 알 수 있다.
- 서브넷 마스크가
255.255.255.0
이고 IP 주소가 192.168.123.132
라 가정해보자
- IP 주소를 서브넷 마스크로 AND 연산을 해주면 네트워크 ID가
192.168.123.000
인 것과 나머지 부분이 132
가 호스트 ID인 것을 알 수 있다.
패킷(Packet)의 구조
- IP 계층은
패킷
이라는 단위로 데이터를 송수신한다.
- 패킷(Packet)은 Header(20Byte) + Data + Option으로 구성된다.
1) Version (4bit)
- 패킷의 IP Version을 나타낸다.
- IPv4 :
0100
, IPv6 : 0110
2) Header length (4bit)
- IP Header의 길이를 4Byte 단위로 나타낸다.
- 보통 헤더의 길이가 20Byte이므로 4Byte 단위로
0101
이 담긴다.
3) Type of service (8bit)
- 패킷의 우선순위를 정의한다.
- 더 이상 사용되지 않아 신경 쓰지 않아도 된다.
4) Total length (16bit)
-패킷(IP header + Payload)의 길이를 Byte 단위로 나타낸다.
- Total length - Header length를 통해 Payload의 길이를 알 수 있다.
5) Identification (16bit) / Flag (3bit) / Fragment Offset (13bit)
-
패킷이 단편화가 가능하기 위해서 위 3가지의 헤더 정보가 담기게 된다.
-
MTU
를 초과하였을 때, 여러 패킷으로 단편화를 진행하게 되는데,
이때 패킷에 분할 정보를 Identification / Flag / Fragment Offset에 담게 된다
- Identification (16bit)
- 단편화된 패킷들을 재조합할 때, 식별하기 위한 용도로 사용한다.
- Flag (3bit)
- 패킷이 단편화되었는지 아닌지를 알려주는 역할을 한다.
- 1번째 bit : 예약되어 있는 bit로 일반적으로 사용하지 않는다. (항상
0
)
- 2번째 bit : 패킷의 단편화 유무를 알려준다 (단편화 :
0
, 단편화X : 1
)
- 3번째 bit : 분할된 패킷이 더 있는지를 알려준다. (마지막 패킷 :
0
, 뒤에 더 있다 : 1
)
- Fragment Offset (13bit)
- 패킷 재조립 시, 분할된 패킷 간의 순서에 대한 정보가 담겨 있다.
- 분할된 패킷의 상대 위치를 8 Byte 단위로 나타낸다.
따라서, Fragment Offset * 8 한 값이 패킷의 삽입 위치가 된다.
MTU 란?
- 'Maximum Transmission Unit' 의 줄임말로
하나의 패킷으로 운반 가능한 최대 크기를 나타낸다.
- IP Header와 Payload를 합친 크기로, 보통 1500 Byte로 정해져 있다.
6) Time to Live (8bit)
- 패킷이 경유할 수 있는 최대 홉 수를 나타낸다.
- 라우터를 통과할 때마다 TTL 값은 1씩 감소하게 되고, 0이 되면 패킷은 자동으로 폐기된다.
- 이로 인해, 부정확한 패킷들이 네트워크 환경에서 무기한 순환되는 상황을 방지할 수 있게 된다.
7) Protocol (8bit)
- 상위 계층인 전송 계층의 프로토콜을 나타낸다.
- 예로, ICMP :
0x01
, TCP : 0x06
, UDP : 0x11
8) Header Checksum (16bit)
- 패킷 헤더의 오류 발생 여부를 확인하기 위해 송신측에서 계산한 헤더의 체크섬을 담고 있다.
9) Source IP Address (32bit)
10) Destination Ip Address (32bit)
13) Option
- 특수한 처리 옵션이 들어갈 수 있는 필드
- 옵션 필드가 추가되는 경우, 4Byte 단위로 부족한 공간은 Padding으로 채워넣는다.
라우팅
라우팅이란?
- 패킷에 포함된 주소 등의 상세 정보를 이용하여 목적지까지 데이터 또는 메시지를 체계적으로 다른 네트워크에 전달하는 경로 선택 그리고 스위칭하는 과정을 의미한다.
- 쉽게 말해서, 데이터를 출발지부터 목적지까지 빠르고 정확한 길을 찾아 효율적으로 전달해주는 프로토콜이다.
위 이미지를 보면 A, B, C라는 라우터와 각 라우터가 가지고 있는 라우팅 테이블을 볼 수 있다.
1. 라우터
- 네트워크 간의 패킷을 전송해주는 네트워크 장비이다.
- 라우터는 라우팅 프로토콜을 통해 효율적인 경로로 목적기까지 데이터를 전달해주게 된다.
- 라우터마다 LAN(근거리 통신망)을 이루고 있다.
2. 라우팅 테이블
-
목적지 IP 까지 갈 수 있는 모든 경로들 중에서 가장 효율적이라고 생각하는 경로 정보를 라우터는
라우팅 테이블에 따로 저장하여 보관하고 있다.
-
라우팅 테이블이 어떤 정보들을 저장하고 있냐면,
1) Destination IP : 최종 목적지 IP를 나타낸다.
2) Next-Hop Interface : 목적지 IP에 가기 위한 라우터의 출구 Port에 대한 정보
3) Distance : 목적지 라우팅을 위한 Matric 정보
- 보통 6개 정도까지의 최적 루트를 계산해내며, 이들 사이에 트래픽을 로드 밸런싱한다.
- 비용이 가장 적게 소요되는 기준값을 최적 경로로 저장
4) Matric(=Cost) : 최적 경로 서열 값
-
라우터가 바로 연결되어 있는 네트워크는 라우팅 테이블에 그대로 저장하면 되는데,
원격 네트워크의 경우에는 어떻게 저장하는가?
- 1) 정적 경로 : 네트워크 관리자가 직접 수동으로 입력
- 구성이 간단하고, 원하는 경로로 패킷을 전달할 수 있다.
- 단일 경로에 적합하다.
- 관리 부담의 증가 및 경로 장애 발생 시엔 라우팅이 불가능하다.
- 2) 동적 경로 : 라우팅 프로토콜에 의해 자동 계산
- 장비가 자동으로 경로를 지정한다.
- 네트워크 변화를 인지하여 경로를 재구성한다.
- 다중경로 네트워크에 적합
-
라우터들은 이웃 라우터끼리 지속적으로 라우팅 테이블 정보를 주고 받으며,
각 라우터는 자신의 라우팅 테이블을 갱신한다.
-
자신의 컴퓨터의 라우팅 테이블의 데이터를 보고 싶다면
cmd에서 route print
명령어로 볼 수 있다!
3. 게이트웨이 (Gateway)
- 한 네트워크에서 다른 네트워크로 이동하기 위하여 거쳐야 하는 지점
- 다시 말해, 서로 다른 네트워크 프로토콜을 사용하는 경우 게이트웨이를 통해 외부 네트워크로 전달된다.
- 보통 자신의 네트워크 ID + 1번으로 하여 기본 설정되어 있다.
Ex) 내 IP : 192.168.132.32
이고, 서브넷 마스크가 255.255.255.0
인 경우,
내 게이트웨이는 192.168.132.1
이다.
예시를 통해 라우팅하는 과정을 좀 더 자세히 알아보자
위 이미지는 출발지인 PC_A(192.168.10.1
) 가 패킷을 목적지인 PC_D(192.168.40.4
)로 송신하는 과정이다.
1) 192.168.10.1의 네트워크 내엔 목적지의 (192.168.40.4
)을 찾을 수 없어
자신의 라우팅 테이블을 확인하여 자신의 게이트웨이(192.168.10.254
)로 전달되어 Router#1에 도착한다.
2) Router#1의 라우팅 테이블을 조회해보니 Router#2에 목적지 네트워크가 존재하는 것을 확인하여
Router#1의 게이트웨이(192.168.20.253
)로 전달을 시작하고 Router#2는 (192.168.20.254
)로 받게 된다.
3) Router#2는 받은 패킷의 목적지 IP 주소가 자신의 네트워크 내 존재하는 것을 확인하여 PC_D(192.168.40.4
)까지 그대로 전달해준다.
IP 할당 방식 : Static, DHCP
1. Static 방식
- 사용자가 직접 IP, 서브넷마스크, 게이트웨이, DNS 주소 입력하여 할당하는 방식이다.
- 네트워크 내 호스트가 많아질수록 네트워크 관리 난이도가 올라간다는 단점이 있다.
2. DHCP(Dynamic Host Configuration Protocol) 방식
- 호스트의 IP 주소, 서브넷마스크, 게이트웨이, DNS 주소를 자동으로 할당해주는 기능이다.
- 통상적으로 라우터가 DHCP 서버 역할을 수행하고 있다.
<DHCP 동작 원리> : DORA 라는 4가지 과정이 존재한다.
- D : Discover => Client가 DHCP 서버를 찾는다.
- O : Offer => DHCP 서버가 Client에게 자신이 DHCP 서버라고 알린다.
- R : Request => Client는 DHCP 서버에게 자신이 필요한 정보를 요청한다.
- A : Ack => DHCP 서버는 요청한 정보를 제공해준다.
ARP 프로토콜
-
아까 우리는 위 이미지를 통해 WAN 환경에서 데이터가 어떻게 전달되는지 살펴보았다.
그리고 방금 DHCP로 인하여 IP들이 동적할당된다는 것도 알았다.
-
여기서 우리는 중요한 부분을 짚고 넘어가야 한다. IP 주소는 정적이지 않고 변한다는 것에!!!
-
PC_D의 IP가 192.168.40.4
가 아닌 192.168.40.10
으로 DHCP 서버로 인해 변경이 되었다고 가정하자
-
이제 PC_A가 보낸 데이터는 누구에게 가는가?
-
쉽게 생각하면, PC_A의 목적지(IP 주소)인 192.168.40.4
가 없으니 패킷은 폐기가 될 것 같지 않나?
-
하지만, 그렇지 않다. 여전히 PC_D에게 안전하게 전달이 된다!
-
우리는 데이터 링크 계층에는 네트워크 기기마다 고유한 MAC 주소라는 것이 있다는 것을 알고 있다.
-
PC_D의 MAC 주소는 전달되는 데이터 속에 있는 Frame Header의 목적지 Mac Address에 잘 적혀있을 것이기 때문에 데이터는 PC_D로 도착할 수 있을 것이라는 생각이 들 것이다!!!!
-
실제로 위 역할은 RARP 프로토콜이 제공해준다!!!
-
그러면 위 상황을 가능하게 해준 ARP 프로토콜에 대해 자세히 알아보자!
ARP 프로토콜이란?
- 'Address Resolution Protocol'의 줄임말로, 말 그래도 주소 결정 프로토콜을 의미한다.
- IP 주소에 대응되는 물리적 주소(MAC Address)를 가지고 오는 프로토콜이다.
- RARP : ARP와 반대로 해당 MAC 주소에 대응되는 IP 주소를 알아노는 프로토콜이다.
ARP Table
- 매번 ARP 프로토콜을 통해 MAC 주소를 알아내기엔 너무 부담스럽기 때문에
따로 ARP Table에 IP 주소와 대응되는 MAC 주소
라는 정보들을 저장하게 된다.
ARP 프로토콜 과정
- 1) ARP 테이블에 목적지 MAC 주소가 없다면 다음 과정이 수행된다.
- 2) 송신자는 목적지 MAC 주소가 필요하므로 ARP 요청 패킷을 브로드캐스트로 전송한다.
- 3) 모든 호스트와 라우터는 APR 요청 패킷을 수신한다.
- 4) 요청한 MAC 주소를 가진 수신자만 이에 대해 ARP 응답 패킷을 유니캐스트로 전송한다.
- 5) 송신자는 ARP 응답 패킷을 받고 ARP 테이블에 MAC 주소와 목적지 IP 주소를 추가한다.
브로드캐스트란?
- LAN 상에 붙어있는(브로드캐스트 도메인 안에 있는) 모든 네트워크 장비들에게 보내는 통신
IP 주소 체계 : 공인 IP, 사설 IP
1. 공인 IP(Public IP)
- ISP(인터넷 서비스 제공자)에 의해 공인 IP를 발급받을 수 있다.
- 공인 IP는 전역 네트워크에서 고유한 IP 주소로 사용할 수 있다.
2. 사설 IP(Private IP)
- 사설 IP는 공유기(=라우터 기능을 제공)에 연결된 네트워크 기기들에 할당한 내부 IP 주소를 의미한다.
- 사설 IP는 로컬 네트워크 내에서만 유효한 IP 주소이다
외부 네트워크를 이용할 때, NAT를 통해 라우터의 공인 IP를 가지고 통신할 수 있다.
3. NAT(Network Address Translation) : 네트워크 주소 변환
- 외부에 노출된 공인 IP와 실제 내부에서 사용되는 사설 IP를 서로 매핑시켜주는 기술을 말한다.
- 자세한 내용은 전송 계층의 포트 개념을 학습하고 살펴보자
<사설 IP 등장 배경>
- 궁금한 것이 생겼다. 모든 IP를 공인 IP로 관리하면 더 편하고 좋지 않나?
- 그러면 좋겠지만,
전세계의 네트워크 기기의 수가 IP 주소로 표현할 수 있는 최대 개수를 초과해버린지 오래이다.
- 따라서, 우리는 라우터가 공인 IP를 가지고, 그 내부에서 여러 네트워크 기기를 사설 IPfh 관리하는 형태로 최대한 공인 IP를 아껴쓰는 방식으로 변하게 되었다.
IPv6
- 지금까지 내가 IP 주소를 말할 때의 기준은 IPv4 주소 체계였다.
- 하지만 현재 IP는 IPv4뿐만 아니라 IPv6으로도 표현할 수 있다.
<IPv6 등장배경>
- IPv4의 수요가 증가하면서 IPv4 주소인 32 bit(약 43억개)로는 처리가 어려울 수준까지 올라오게 되었다.
- 그래서 최근까지는 NAT 기술을 도입하여 사설 IP로 많은 네트워크 기기가 인터넷을 사용할 수 있게 하였다.
- 하지만, 사람들이 NAT가 IPv4 주소 고갈의 완전한 해결책이 될 수 없다는 것을 깨달았다.
- 그 예로, 특정 Application들은 NAT 환경에서 작동하지 않을 여지가 있었다.
실제로 스마트폰의 사용률이 급격하게 증가하던 2011년대 초, 특정 앱들이 NAT 장비에서 동작하지 않는 일들이 발생하기 시작했고,
이를 해결하기 위해 NAT 장비의 S/W Upgrade를 따로 진행해야 했다.
- 하지만 NAT 장비들의 Upgrade로 인해 부하 증가는 결국 스마트폰의 품질 저하 문제로 이어지게 되었다!
!!! 따라서, IPv4의 근본적인 문제 해결은 IPv6 방법밖에 없다.
<IPv6 특징>
-
128 bit로 IP 주소를 표현한다.
-
기존 A, B, C Class 사용 지양하고, 유니캐스트/애니캐스트/멀티캐스트 주소형태로 사용
즉, 네트워크 규모 및 단말기 수에 따른 순차적으로 IP 주소를 할당
-
IPv6의 주소 표현 방법
- 총 128bit를 16bit 단위로 총 8개의 블록을 나누고, 각 블록은 다시 4자리 16진수로 변환되어
:(클론)
구분한다.
- Ex)
FE80:CD00:0000:0CDE:1257:0000:211E:729C
-
새로운 Header 포맷
- 확장헤더도입
- 헤더를 고정 길이로 변경 (IPv4는 최소 20 ~ 최대 60)
- 패킷 단편화 관련 필드 삭제
- 체크섬 필드 삭제 (데이터 링크 계층에서 체크섬의 계산이 이루어지므로 생략하였다.)
-
보안 기능 기본적으로 제공
- IPv4는 IPSec이라는 보안 프로토콜을 별도로 설치해주어야 했지만,
- IPv6는 확장헤더를 통해 네트워크 계층에서의 암호화를 제공하고, 패킷 변조를 방지시켜준다.