![thumbnail](/static/9d41e4dab8384c0c3c9b5f06762d7fd1/b1abc/240721_hongongdan-thumbnail.png)
혼공단 12기 3주차 학습 기록
![network layer network layer](/static/1220fb2256043cc7689b9b2afac260c4/fe486/240721_network-layer.png)
네트워크 계층(Network Layer)의 개념과 주요 프로토콜에 대해 알아보자.
네트워크 계층과 IP
물리 계층과 데이터 링크 계층은 다른 네트워크까지의 경로를 파악하기 어렵다는 특징이 있어 LAN을 벗어난 범위에서는 통신이 어렵다. LAN을 넘어서 다른 도시나 다른 국가에 있는 호스트끼리 통신을 가능하게 해주는 계층이 바로 네트워크 계층이다.
데이터 링크 계층의 MAC 주소만으로는 모든 네트워크에 속한 호스트를 특정하기 어렵기 때문에 네트워크 계층에서는 IP 주소를 사용한다. MAC 주소는 NIC마다 할당되는 고정된 주소라면, IP 주소는 호스트에 직접 할당이 가능하다는 차이가 있다.
IPv4
IP(Internet Protocol)는 IPv4와 IPv6로 나뉘는데, 대체로 IP를 이야기할 때는 IPv4를 의미한다. IP 주소는 4byte로 표현하고 0~255 범위의 10진수로 표기한다. 각 10진수는 .으로 구분되며, 구분된 8bit를 옥텟(octet)이라고 한다.
![IPv4 IPv4](/static/75ddd8f8d4793af9e41a5b9a98928c06/fe486/240721_ipv4.png)
IP는 주소를 바탕으로 송수신 대상을 지정하는 IP 주소 지정(IP addressing) 기능과 전송하려는 패킷 크기가 MTU 단위보다 클 경우 작은 크기의 복수 패킷으로 나누는 IP 단편화(IP fragmentation) 기능을 가진다.
여기서 MTU(Maximum Transmission Unit)란, 한 번에 전송 가능한 IP 패킷의 최대 크기를 말한다. 일반적으로 IP 패킷의 헤더 포함 1500바이트 크기를 가지며 IP 단편화로 나누어진 패킷은 수신지에 도착하면 재조합된다.
![IPv4 패킷 IPv4 패킷](/static/417e65a83df9be3d6a9cb1280717edd7/fe486/240721_ipv4-packet.png)
IPv4 패킷은 프레임의 페이로드로 데이터 필드에 명시된다. 여러 필드가 있지만 핵심이 되는 부분은 아래와 같다.
식별자(identifier)
단편화된 패킷이 수신지에 도착하여 재조합할 때, 어떤 메시지로부터 나눠었는지 인식하기 위해 패킷에 할당된 번호를 식별자라고 한다.
![identifier identifier](/static/305b99e9397535e150cc73ffd5ad24c9/fe486/240721_identifier.png)
플래그(flag)
플래그는 IP 패킷 전송을 제어하는 데 사용되는 비트로 구성된 필드이다. 총 3비트로 구성되어 있다.
-
RSV(Reserved): 항상 0으로 예약된 비트
-
DF(Don’t Fragment): 단편화를 허용 여부를 나타내는 비트. 0이면 허용, 1이면 허용하지 않음
-
MF(More Fragments): 단편화된 패킷이 추가로 존재하는지를 나타내는 비트. 0이면 마지막 패킷이고 1이면 나눠진 패킷이 더 존재함을 의미
![flag flag](/static/a2f9277486179610d66a28c5469c41ce/fe486/240721_flag.png)
단편화 오프셋(fragment offset)
단편화 오프셋은 패킷이 단편화되기 전에 패킷의 초기 데이터에서 몇 번째로 떨어져 있는지를 나타내는 값이다. 이 값을 통해 수신 측에서 패킷을 올바르게 재조합할 수 있다.
예시) MTU가 1500바이트, IP의 크기가 4000바이트, 단편화된 3개의 패킷의 단편화 오프셋이 각각 0, 185, 370인 경우
- 첫 번째 패킷: 0번째 바이트부터 시작
- 두 번째 패킷: 1480번째 바이트부터 시작
- 세 번째 패킷: 2960번째 바이트부터 시작
![fragment offset fragment offset](/static/a13210cc1977b37b16e9865d6401e366/fe486/240721_fragment-offset.png)
TTL(Time To Live)
TTL은 패킷의 수명을 나타내는 필드이다. 패킷은 네트워크를 통해 전송되는 동안 여러 라우터를 거치게 되는데, 각 라우터를 지날 때마다 1씩 감소하고 0이 되면 폐기된다. 루프를 방지하고 잘못된 라우팅으로 인해 패킷이 무한히 네트워크를 돌아다니는 것을 방지하기 위해 사용된다. 참고로 패킷이 경유하는 지점은 홉(hop)이라고 한다.
![TTL TTL](/static/4243f00c6e0c8b1f619a355d707ed587/fe486/240721_ttl.png)
프로토콜(Protocol)
상위 계층의 프로토콜이 무엇인지를 나타내는 필드이다.
송신지, 수신지 MAC 주소
이름 그대로 송수신지의 IPv4 주소를 알 수 있다.
IPv6
IPv4는 32비트 주소 체계를 사용하여 약 43억 개(2^32)의 IP 주소를 할당할 수 있다. 그러나 현대의 급격한 인터넷 성장으로 인해 그 개수는 빠르게 고갈되어 갔다. 이를 해결하기 위해 등장한 것이 바로 IPv6이다.
![IPv6 IPv6](/static/23e12c41b56e98d7d9efeac787829691/fe486/240721_ipv6.png)
IPv6는 128비트(16바이트) 주소 체계를 사용하여 거의 무한에 가까운 IP 주소를 제공할 수 있다. IPv6 패킷은 IPv4에 비해 간소화되어 있으며 주요 필드들은 아래와 같다.
![IPv6 packet IPv6 packet](/static/3e2b72f6da528ab84fb8ca99f65d1f75/fe486/240721_ipv6-packet.png)
다음 헤더(next header)
IPv6는 기본 헤더를 포함하여 추가적인 헤더 정보가 필요할 경우, 확장 헤더(extension header)라는 추가 헤더를 가질 수 있다. 이러한 확장 헤더나 상위 계층의 프로토콜을 가리키는 필드를 다음 헤더라고 한다.
홉 제한(hop limit)
홉 제한 필드는 IPv4 패킷의 TTL 필드와 비슷한 패킷의 수명을 나타내는 필드이다.
송신지, 수신지 MAC 주소
송수신지 MAC 주소를 통해 IPv6 주소 지정을 할 수 있다.
ARP(Address Resolution Protocol)
상대 호스트의 IP 주소는 알고 있지만, MAC 주소는 모르는 경우 ARP라는 프로토콜을 이용해 MAC 주소를 알아낼 수 있다.
A가 동일한 네트워크에 속한 B의 IP 주소는 가지고 있고 MAC 주소를 알아낸다고 가정해 보자. 먼저, A는 네트워크 내 모든 호스트에게 ARP 요청(ARP Request) 메시지를 보낸다.
![ARP Request ARP Request](/static/09ad647b8a50dd485670a96ee38d514a/fe486/240721_arp-request.png)
네트워크 내 모든 호스트는 ARP 요청 메시지를 수신하지만, 자신의 IP 주소에 해당하지 않으면 무시한다. 요청한 IP 주소에 해당하는 호스트인 B는 MAC 주소를 A에게 전송한다. 이를 ARP 응답(ARP Reply)이라고 한다.
![ARP Reply ARP Reply](/static/05f3086c8fa1690922d48c3b0e580078/fe486/240721_arp-reply.png)
MAC 주소를 전달받은 A는 호스트 B의 IP 주소와 MAC 주소의 연관 관계를 ARP 테이블에 추가한다. ARP 테이블은 일정 시간이 지나면 삭제되거나 임의로 삭제할 수 있다. 이 과정까지 도달하면 A는 B와 통신할 때, 더 이상 ARP 요청을 보낼 필요가 없게 된다.
만약 A와 B가 동일한 네트워크에 있지 않고, 라우터의 MAC 주소를 모를 경우에는 라우터를 거칠 때마다 (ARP 요청 - ARP 응답) 과정을 반복하며 호스트에게 패킷을 전달한다.
![ARP world area ARP world area](/static/8e940e0ada4fb84d4a8431ea0d0b43fa/fe486/240721_arp-wan.png)
IP 주소
IP 주소는 크게 네트워크 주소와 호스트 주소로 이뤄진다. 네트워크 주소와 호스트 주소는 크기가 동일할 수도 있고, 어느 한쪽이 더 클 수도 있다. 각 주소에 크기를 얼마나 할당해야 하는지 고민을 해결하기 위해 등장한 것이 네트워크 크기에 따라 IP 주소를 분류하는 클래스라는 개념이다.
![Classful Addressing Classful Addressing](/static/60c633756ced16c85f93a568554c8387/fe486/240721_classful-addressing.png)
A, B, C, D, E 총 5개의 클래스가 존재하지만, 네트워크 크기를 나누는 데에 실질적으로 사용하는 클래스는 A, B, C 클래스이다.
클래스 | 범위 | 네트워크 수 | 호스트 수 |
---|---|---|---|
A Class | 0.0.0.0 ~ 127.255.255.255 | 2^7 | 2^24 - 2 |
B Class | 128.0.0.0 ~ 191.255.255.255 | 2^14 | 2^16 - 2 |
C Class | 192.0.0.0 ~ 223.255.255.255 | 2^21 | 2^8 - 2 |
단, 호스트 주소가 모두 0인 주소(e.g. 172.16.0.0)는 해당 네트워크 자체를 의미하는 네트워크 주소이고, 모두 1인 주소(e.g. 172.16.255.255)는 브로드캐스트를 위한 주소로 사용되기 때문에 각 클래스당 할당 가능한 호스트 수는 2를 제외한 나머지이다.
서브넷 마스크(subnet mask)
클래스풀 주소 체계를 이용하면 네트워크와 호스트 크기를 유동적으로 관리할 수 있긴 하지만, 네트워크와 호스트 비트 수가 고정되어 있어 어쩔 수 없이 낭비되는 IP 주소가 발생한다. 그 때문에 현대에서는 클래스에 구애받지 않고 네트워크의 영역을 나눌 수 있는 클래스리스 주소 체계(classless addressing)를 사용한다.
클래스리스 주소 체계에서 네트워크와 호스트를 구분하는 역할을 하는 도구가 바로 서브넷 마스크이다. 서브넷 마스크는 32비트로 구성되며, 네트워크 부분을 나타내는 연속된 1비트와 호스트 부분을 나타내는 연속된 0비트로 이루어져 있다.
서브넷 마스크 예시
-
A class: 255.0.0.0
-
B class: 255.255.0.0
-
C class: 255.255.255.0
서브넷 마스크를 이용해 클래스를 원하는 크기로 나눠 사용하는 것을 서브네팅(subnetting)이라 하며, IP 주소와 서브넷 마스크 사이의 비트 AND 연산으로 쉽게 구분할 수 있다.
예시로 IP 주소가 192.168.1.10, 서브넷 마스크가 255.255.255.0이라고 가정해 보자.
![subnetting subnetting](/static/72d42bc8453ed204a6d4f76fc299f407/fe486/240721_subnetting.png)
IP 주소와 서브넷 마스크를 이진수 형태로 변환한 후, 각 비트를 비교해 두 수가 모두 1일 경우에만 1을 반환하고 그 이외에는 0을 반환하는 비트 AND 연산을 시행한다.
이진수를 다시 십진수로 변환하면 192.168.1.0이라는 네트워크 주소를 구할 수 있다.
CIDR 표기법
앞선 예시에서는 서브넷 마스크를 255.255.255.0처럼 10진수 형태로 표현했지만, IP 주소/서브넷 마스크의 연속된 1비트 수 형태로 표기하는 방식도 있다. 이를 CIDR 표기법이라 부른다.
CIDR 표기 예시
-
255.255.255.0 -> /24
-
255.255.0.0 -> /16
-
255.0.0.0 -> /8
IP 주소가 192.168.1.10, 서브넷 마스크가 255.255.255.0이면 192.168.1.10/24 형태로 표기한다.
라우팅
라우터(Router)
라우터는 패킷이 이동할 최적 경로를 설정한 뒤, 해당 경로로 패킷을 이동시킨다. 데이터가 특정 수신지까지 도달하기 위한 정보는 라우팅 테이블(routing table)에 명시되어 있다.
라우팅 테이블에는 여러 항목이 포함되어 있으며, 대표적인 정보는 아래와 같다.
-
네트워크 주소 (Destination Network): 목적지 네트워크의 주소
-
서브넷 마스크 (Subnet Mask)
-
게이트웨이 (Gateway or Next Hop): 패킷을 전달할 다음 경유지의 주소
-
인터페이스 (Interface): 패킷을 보내는 네트워크 인터페이스
-
메트릭 (Metric): 해당 경로의 비용 또는 우선순위. 낮을수록 우선순위가 높음
라우팅 테이블 예시
네트워크 주소 | 서브넷 마스크 | 게이트웨이 | 인터페이스 | 메트릭 |
---|---|---|---|---|
192.168.1.0 | 255.255.255.0 | 0.0.0.0 | eth0 | 1 |
192.168.2.0 | 255.255.255.0 | 192.168.1.1 | eth1 | 1 |
0.0.0.0 | 0.0.0.0 | 2^21 | eth0 | 10 |
macOS 기준 netstat -rn
명령어로 라우팅 테이블을 확인할 수 있다.
![routing table routing table](/static/0a8e4f7368df9916ffe64051de6a2041/fe486/240721_routing-table.png)
라우팅 프로토콜(Routing Protocol)
라우팅 프로토콜은 라우터끼리 정보를 교환하여 패킷이 이동할 최적 경로를 찾는 프로토콜이다. 크게 AS 내부에서 수행되는 IGP(Interior Gateway Protocol)와 AS 외부에서 수행되는 EGP(Exterior Gateway Protocol)로 분류할 수 있다.
*AS(Autonomous System):동일한 라우팅 정책으로 운용되는 라우터 집단
RIP(Routing Information Protocol)
RIP는 거리 벡터(distance-vector) 기반 라우팅 프로토콜로, 인접한 라우터끼리 경로 정보를 교환하여 주기적으로 라우팅 테이블을 업데이트한다. 수신지까지의 경로 중 홉(hop) 수를 기준으로 경로를 선택하는데, ‘가장 적은 홉 수’를 가진 경로를 최적의 경로라고 판단한다.
OSPF(Open Shortest Path First)
OSPF는 링크 상태(link-state) 라우팅 프로토콜로, 네트워크 크기와 복잡성에 상관없이 효율적인 라우팅을 제공하기 위해 설계되었다. 링크 상태 DB를 기반으로 현재 네트워크를 맵으로 구성해 대역폭, 지연 시간 등을 고려하여 최적 경로를 계산한다.
RIP와 OSPF 비교
특징 | RIP | OSPF |
---|---|---|
프로토콜 타입 | 거리 벡터 프로토콜 | 링크 상태 프로토콜 |
최적 경로 선택 기준 | 홉 수 | 비용 (대역폭, 지연 시간 등) |
업데이트 방식 | 주기적인 테이블 업데이트 | 변경 사항 발생 시 링크 상태 광고 |
네트워크 규모 | 작은 네트워크에 적합 | 대규모 네트워크에 적합 |
계층적 구조 | X | 에어리어 기반 계층 구조 |
RIP와 OSPF는 IGP의 대표적인 프로토콜로 각각의 특성과 용도에 따라 선택하여 사용된다.
RIP는 설정이 간단하고 작은 네트워크에서 효과적이지만, 홉 수 제한과 느린 수렴 속도 때문에 대규모 네트워크에는 적합하지 않다. 반면, OSPF는 대규모 네트워크에서 높은 효율성을 제공하며, 빠른 수렴 속도와 계층적 구조를 통해 복잡한 네트워크에서도 효과적으로 동작한다.
BGP(Border Gateway Protocol)
EGP의 대표적인 프로토콜로, AS 간의 라우팅 정보를 교환하는 데 사용되는 경로 벡터(Path Vector) 라우팅 프로토콜이다. 경로 정보와 메트릭을 통해 최적의 경로를 선택하며, 서로 다른 AS 간에 피어(peer) 관계를 형성해 경로 업데이트를 주고받는다.
기본 미션
MISSION 1
1. IPv4의 대표적인 기능 두 가지를 골라 보세요. (p.147)
(1) 신뢰성 있는 전송 (2) IP 주소 지정 (3) IP 단편화 (4) IP 주소 변환
정답: (2), (3)
MISSION 2
2. 라우팅 프로토콜과 관련한 아래 설명을 읽고 옳은 것을 골라 보세요. (p.187)
라우팅 프로토콜은 AS 내부에서 수행되는 (IGP, EGP, RIP, OSPF)와 AS 외부에서 수행되는 (IGP, EGP, RIP, OSPF)로 나뉩니다. (IGP, EGP, RIP, OSPF)는 대표적인 거리 벡터 라우팅 프로토콜이고, (IGP, EGP, RIP, OSPF)는 대표적인 링크 상태 라우팅 프로토콜입니다.
정답: 순서대로 IGP, EGP, RIP, OSPF
추가 미션
MISSION 1
Q. 본인 컴퓨터의 IP 주소와 MAC 주소 파악해 보기
macOS 기준 아래 명령어를 사용하면 IP 주소와 MAC 주소를 확인할 수 있다.
$ echo "IP Address: $(ipconfig getifaddr en0)"; echo "MAC Address: $(ifconfig en0 | grep ether | awk '{print $2}')"
![본인 컴퓨터의 IP 주소와 MAC 주소 본인 컴퓨터의 IP 주소와 MAC 주소](/static/5ea39a732ab79229081020cebcab34e7/fe486/240721_sub-mission.png)
References
[📚book] 혼자 공부하는 네트워크