본문 바로가기
CS/Network

[Network] 네트워크 계층 (L3): 멀리 있는 컴퓨터와의 연결

by 그냥하는거지뭐~ 2024. 8. 19.
목차
- LAN을 넘어선 통신
- L3의 프로토콜
- 라우팅 테이블 및 전송 과정 

1. LAN을 넘어선 통신

1.1. 네트워크 계층

물리 계층(L1), 데이터 링크 계층(L2)은 주로 LAN 내에서의 통신을 담당한다. 즉, 주로 같은 네트워크 세그먼트 또는 같은 물리적 네트워크 내에서의 통신을 처리한다. L2에서는 MAC 주소를 사용하여 같은 네트워크 내에서 기기 간의 통신이 이루어진다. 

 

여러 네트워크 간에 통신하기 위해서는 L1, L2만으로는 부족하다. 여러 네트워크에 속한 모든 호스트의 MAC 주소를 파악하는 것은 너무나 어려운 일이기 때문이다. 그래서 더 먼 거리의 통신을 위해서는 네트워크 계층(L3)에서의 라우팅 과정이 필요하다. 라우터가 라우팅 테이블IP 주소를 사용하여 목적지까지의 최적의 경로를 결정하게 된다. 택배로 따지면 MAC 주소가 수신인, IP 주소가 수신지 역할을 한다고 생각하면 쉽다. 

 

1.2. 인터넷 프로토콜(IP)

L3의 가장 대표적인 프로토콜인 IP는 IPv4, IPv6 두 가지 버전이 있다. IP를 이야기할 때는 보통 IPv4를 의미하는 경우가 많다고 한다. IPv4에 대해서는 2.1에서 더 자세히 알아보겠다. 

IPv4 (192.168.0.1)
- 32bit / 4개의 옥텟(8bit)로 구성되어 있으며, 각 옥텟은 0~255 
- 43억 개의 주소를 제공하지만, 부족해서 나온게 IPv6

IPv6 (2001:0db8:85a3:0000:0000:8a2e:0370:7334)
- 128bit / 8개의 블록(16bit)으로 구성되며, 콜론(:)으로 구분 
- 거의 무한대에 가까운 주소 공간을 제공 

 

IP의 가장 기본적인 두 가지 기능은 addressingfragmentation이다. IP Addressing은 송수신 대상을 지정하는 것이고, IP fragmentation은 MTU(한 번에 전송 가능한 최대 IP 패킷 크기) 크기 이하의 여러 패킷으로 분할되어 전송되고, 목적지에 도착 후 재조립되는 것을 의미한다. 

 

1.3. ARP

상대의 IP 주소는 알지만 MAC 주소를 모를 때 사용하는 프로토콜이다. 즉 ARP를 사용해 동일 네트워크 내에 있는 호스트의 IP 주소를 통해 MAC 주소를 알아낼 수 있다. 

 

① ARP 요청 : A는 동일 네트워크 내의 모든 호스트에게 브로드캐스트 메시지를 보낸다

② ARP 응답 : 받은 메시지가 자신의 IP 주소와 일치하면, MAC 주소를 담아 A에게 보낸다. 

③ ARP 테이블 갱신 : A는 B의 MAC 주소를 ARP 테이블에 추가해서 또 통신을 할 때 브로드캐스트로 ARP 요청을 보낼 필요가 없다.  

 

A와 B가 다른 네트워크에 있다면 다음과 같이 통신이 이루어진다. 

A -> (ARP 요청) -> (ARP 응답) -> (라우터 A의 MAC 주소 겟)  -> 라우터 A -> (ARP 요청) -> (ARP 응답) -> (라우터 B의 MAC 주소 겟) -> 라우터 B -> (ARP 요청) -> (ARP 응답) -> (B의 MAC 주소 겟) -> B

 

 


2. L3의 프로토콜

2.1. IPv4 프로토콜

IPv4는 네트워크 상에서 데이터를 교환하기 위한 프로토콜이다. 그런데 정확하게 전달될 것을 보장하지는 않는다. 데이터가 가다가 깨지거나 중복된 패킷을 전달하거나, 순서가 잘못 전달될 수도 있다. 이는 다른 계층에서 보정을 하게 되며, IPv4는 단지 먼 곳까지의 전달만 담당한다. 

 

IPv4 ❘ 출처: 위키백과

 

① Version: 4만 들어간다. IPv6는 구조가 아예 다르다. 

② IHL(Header Length): header는 20byte이고, option이 붙을 수 있어서 최대 60byte까지 늘어날 수 있다. 즉 헤더의 길이는 20~60byte인데, 2진수 4개로 표현하고 있다. 2222는 15인데 어떻게 20~60을 표현할까? => /4 를 해서 20byte는 5로 표현한다. 

option이 4씩이기 때문에 option이 하나씩 붙을 때마다 1씩 증가하는 셈이다. 

③ TOS(Type Of Service): 지금은 쓰이지 않아서 0으로 비워둔다. 

④ Total Length: payload까지 합쳐진 전체 길이 

 

(5, 6, 7 - Fragmentation이 발생했을 때 쪼개진 패킷들을 알아보기 위한 값들)

⑤ Identification: 여러 조각으로 쪼개진 패킷들이 어떤 메시지에서부터 쪼개졌는지를 인식하기 위해 사용하는 식별자. 쪼개진 패킷들은 같은 Id를 갖는다. 

⑥ Flags: 세 개의 비트로 구성되어 있다. (0, DF, MF)

- 0: 사용x

- DF(Don't Fragment): 1이면 단편화 불가능, 0이면 단편화 가능 

- MF(More Fragment): 1이면 쪼개진 패킷이 더 있음, 0이면 마지막 패킷 

 Fragment offset: 쪼개진 패킷이 몇 번째 데이터인지 순서를 알아보기 위함. 시작 부분으로부터 얼만큼 떨어져 있는지 

 

⑧ TTL(Time To Live): 패킷의 수명. 하나의 라우터를 거칠 때(홉)마다 1씩 감소하여, 0이 되면 폐기됨. 최적의 경로로 찾아가는 도중에 데이터가 정확하게 전달되는 것을 보장하지는 않는다고 했다. 라우터를 거치면서 한 라우터에서 목적지를 잘못 작성했을 때, 데이터가 도착하지 못하고 돌 수 있다. 이런 패킷들이 계속 살아있게 둘 수는 없기 때문에 도입됐다. 

⑨ Protocol: 상위 계층의 프로토콜이 무엇인지 나타냄. ex) ICMP(L3): 1번, TCP(L4): 6번, UDP(L4): 17번

⑩ Header Checksum: 오류가 있는지 확인

⑩ Source Address, Destination Address: 송수신지의 IP 주소

 

 

2.2. ICMP 프로토콜

Internet Control Message Protocol로, 인터넷 제어 메시지를 주고받는 프로토콜이다. 대표적으로 상대방과 통신이 되는지 확인하기 위해 쓰인다.

① Type: (대분류)

- 8: Echo(요청)

- 0: Echo Reply(응답)

- 3: Destination Unreachable. 목적지에 도달하지 못했을 때 (경로상의 문제)

- 11: Time Exceded. 요청 시간이 만료됐을 때 (목적지까지는 갔지만 응답을 못받는 경우, 상대방의 문제. ex. 방화벽)

 

② Code: (소분류)


2. 라우팅 테이블 및 전송 과정 

라우팅 테이블은 최적의 경로를 지도처럼 저장해두고 있다. 라우팅 테이블에 적혀 있는 경로만 찾아갈 수 있고, 적혀있지 않다면 디폴트 라우트로 패킷을 내보내게 된다. 아래 그림에서 Destination 0.0.0.0가 바로 디폴트 라우트다. 

// mac
netstat -nr

// window
route print

 

이제 내 컴퓨터에서 보낸 패킷이 다른 네트워크의 컴퓨터까지 어떻게 이동하는지 알아보자. 

 

 

A가 다른 네트워크에 속한 B와 통신을 하려고 하는 상황이다. 

 

① A (출발지)

- 자신의 routing table을 확인한다.

- B의 네트워크 대역이 본인에게 있는지 확인한다. (192.168.20.0으로 가려면 일단 192.168.10.1로 가라)

- ICMP 요청 프로토콜을 만든다. (type 8)

- IPv4를 작성한다. 출발지 IP(A의 IP), 목적지 IP(B의 IP)

- 이더넷 프로토콜을 작성한다. 출발지 MAC(A의 MAC), 목적지 MAC(공유기의 MAC)

🤔 이더넷은 가까운 곳에서 통신할 때만 쓰는 것이기 때문에 가까운 곳에서 갈 수 있는 곳까지를 작성한다. 그림에서는 같은 네트워크의 공유기이므로, 이더넷 프로토콜에서 목적지 MAC 주소에는 공유기의 MAC 주소가 들어간다. 

 

② switch

- switch는 L2 장비이므로 L2 프로토콜(Eth)까지만 확인한다.

- Eth의 목적지 MAC 주소에 전달한다. 

 

③ 공유기

- L2 프로토콜인 Eth를 확인해서 자신에게 온 것이 맞는지 확인한다.

- L3 (IPv4) 까봤더니 목적지 IP 주소가 자신은 아니다. 

- routing table 확인 후, 목적지에 전달한다.

- 전달할 때, 이더넷 테이블의 출발지 MAC 주소와 도착지 MAC 주소를 바꿔서 전송한다. 

 

④ 라우터

- L2(Eth) 확인 -> 자신에게 온 것이 맞는지 확인

- L3 (IPv4) 확인 -> 목적지 IP 주소가 자신은 아님 -> routing table 확인 후 Eth table 출발지, 목적지 수정해서 전달 

 

(같은 방식으로 라우터 -> 공유기 -> 스위치)

 

⑤ B (도착지)

- L2 확인, L3 확인

- ICMP 요청 확인 (08)

- ICMP 응답 (00)

 

(같은 방식으로 다시 A에게 전달)

 

- Eth table은 네트워크 대역이 바뀔 때마다 새로 작성한다. 
- 홉을 할 때마다 MAC 주소를 모르는 경우 ARP 프로토콜을 사용하여 알아낸 후 전송해야 한다. 

 

 


Reference

- 혼자 공부하는 네트워크 

- IP: https://www.youtube.com/watch?v=_i8O_o2ozlE&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=9

- ICMP: https://www.youtube.com/watch?v=JaBCIUsFE74&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=10

- https://www.youtube.com/watch?v=CjnKNIyREHA

'CS > Network' 카테고리의 다른 글

[Network] 소켓  (1) 2024.09.06
[Network] 물리 계층(L1)과 데이터 링크 계층(L2)  (0) 2024.05.06
[Network] 네트워크 시작하기!  (2) 2024.05.04