IT/네트워크

[Internet layer (1) - NAT, ICMP, ARP] in TCP/IP 4 layer

kykyky 2024. 1. 7. 15:48

Internet layer의 다양한 프로토콜들을 알아보겠습니다!

 


 

NAT(Network address translation)

 

목적


- IP 절약: 하나의 공인 IP주소로 여러 대의 호스트가 인터넷 접속 가능
- 보안성 제고: 외부 공격자는 라우터 내부 네트워크의 사설 IP를 알수 없어, 최종 목적지로의 공격이 어려워짐

 

동작 원리

 

사진 출처: https://en.wikipedia.org/wiki/Network_address_translation

 

(S: Source, D: Destination 입니다.)

1) 호스트 → 게이트웨이 (사진 상 위, 왼쪽)
S IP: 호스트의 사설 IP주소
D IP: 서버 IP주소

2) 게이트웨이 → 서버 (사진 상 위, 오른쪽)
NAT table: 호스트의 사설 IP주소, 게이트웨이의 공인 IP주소, 목적지 IP주소 포함됨
       PAT의 경우: Source 포트번호, 사설망 포트번호 추가됨

S IP: 게이트웨이의 공인 IP주소 로 변경됨
D IP: 서버 IP주소


3) 서버 → 게이트웨이 (사진 상 아래, 오른쪽)
S IP: 서버 IP주소 
D IP: 게이트웨이 공인 IP주소

4) 게이트웨이 → 호스트 (사진 상 아래, 왼쪽)
S IP: 서버 IP주소 
D IP: 호스트 사설 IP주소 로 변경됨

 

아래는 NAT Table을 설명하는 사진입니다.

 

사진 출처: https://en.wikipedia.org/wiki/Network_address_translation

 

종류


static NAT

공인 IP주소 : 사설 IP주소 = 1 : 1


dynamic NAT

공인 IP주소 : 사설 IP주소 = 여러개 : 여러개
     

내부 네트워크 내 호스트가 많을 때


NAT-PAT(Port address translation)

공인 IP주소 : 사설 IP주소 = 1 : 여러개
        

사설 네트워크에 한 대가 아닌 여러 대의 호스트가 동일 목적지와 통신하려 할 때, 

되돌아오는 패킷의 최종 목적지를 특정하기 위해, 별도의 포트를 추가 설정
     

내부 네트워크 내 각 호스트에 임의의 포트번호를 지정
     

이 경우의 NAT table: Source Port(라우터의 포트번호), Destination(호스트의 사설 IP주소, 임의 포트번호)이 포함됨

 

 

 


 

ICMP

 

ICMP는 장치들이 네트워크 상에서 데이터 전송 에러 정보를 소통하기 위한 프로토콜입니다.

만약 수신자가 어떤 에러로 인해 송신자로부터 데이터를 제대로 받지 못했다면, 수신자는 송신자에게 에러 메시지를 알리기 위해 ICMP를 활용하고, 메시지 재전송을 요청합니다.

 

ICMP Packet Structure

 

ICMP는 아래와 같은 encapsulation 과정을 거쳐 IP Packet에 포함됩니다.

 

사진 출처: https://networkencyclopedia.com/internet-control-message-protocol-icmp/

 

위 사진의 두번째 네모 (IP header + datagram data area)가 IP Packet이겠지요. 이것의 자세한 구조는 아래와 같습니다.

 

 

이 글에서는, 위 그림의 ICMP 부분 (ICMP header, ICMP Payload)만 자세히 보도록 하겠습니다. 

 

Type of message

ICMP 메시지의 format을 결정합니다.

 

사진 출처: https://ipwithease.com/internet-control-message-protocol-icmp/

 

 

Code

조금더 자세한 설명이라 보시면 됩니다.

사진 출처: https://ipwithease.com/internet-control-message-protocol-icmp/

 

 

 

Checksum

ICMP 메시지의 오류 검출을 위한 체크섬입니다.

 

Header data

이 영역은 길이가 가변적이고, 특정 Type of message나 Code인 경우 이 부분에 내용이 추가될 수 있습니다. 

 

Payload data

 

ICMP 사용 목적

 

Error reporting

 

ICMP 에러 메시지는 다양한 오류 상황에 대한 설명을 제공합니다. 

 

이건 특히 UDP 통신의 경우 유용해지는데요,

UDP 자체는 unreliable하여 패킷의 loss 등 다양한 오류가 일어날 수 있기에, 오류 발생 시 수신자는 이러한 문제를 알리기 위해 송신자에게 ICMP 에러 보고 메시지를 보내줍니다.


Diagnostics

진단을 위해서 ICMP가 활용되는 대표적인 경우는 아래와 같습니다.

 

▶ ping

 

목표 장치에 ICMP echo request 패킷을 보냄으로써, 특정 네트워크 장비의 reachability, 네트워크 latency를 테스트할 수 있습니다.

만약 그 장치가 reachable하다면 ICMP echo reply를 반환합니다.

 

사진 출처: https://www.layerstack.com/resources/tutorials/How-to-Enable-Disable-Ping-ICMP-Echo-Requests-in-Windows-Server-2022-Firewall

  


▶ traceroute

 

패킷이 source로부터 destination까지 가는 것을 추적하면서, 실제로 거치는 경로, 거쳐야 하는 총 hop의 개수, 그리고 각 step에 소요되는 시간을 알려줍니다.

 

source는 TTL = 1에서부터 시작하여 1씩 늘려가며 echo request를 전송합니다.

보내진 request는 한 hop마다 TTL이 1씩 줄어들고, TTL = 0인 순간 ICMP Time Exceed로서 돌아갑니다.

source는 위와 같은 방법으로 가는 길에 있는 host들을 알아낼 수 있습니다.

이렇게 TTL을 증가시키다가, 정확히 destination에 도착하는 데 필요한 만큼의 TTL으로 설정된 경우, echo reply가 돌아옵니다.

 

 

사진 출처: https://medium.com/geekculture/devops-in-linux-traceroute-154d9dd27982

 



 


 

ARP

 

주어진 IP에 대한 MAC을 얻는 프로토콜입니다.

 

 

 

다음 설명은, B의 IP를 알고 있는 A가 B의 MAC을 얻는 과정입니다. 두 case로 나누어 살펴보겠습니다.

 

※ 기호의 의미는 다음과 같습니다.

☆_♡: ☆의 ♡

☆ → ♡: ☆에서 ♡로

☆ ↔ ♡: ☆와 ♡가 서로

 

▶ case 1. 동일 네트워크에 있을 때

Switch의 MAC Table에 아직 필요한 정보들이 없다 가정하였습니다. 이미 있다면 그 Table로부터 정보를 가져오면 됩니다.

1) A → A가 포함된 네트워크 (by broadcast): ARP 요청 (IP가 B_IP인 단말 있는지 질문)     
2) Switch: A_MAC을 MAC table에 저장
3) Switch → 연결된모든포트 (by broadcast): 위 ARP 요청 패킷 전달

4) B → Switch: ARP 응답 (B_MAC)
5) Switch: B_MAC을 MAC table에 저장

6) Switch → A: B_MAC 알려줌

7) A ↔ B: 통신 가능해짐


▶ case 2. 동일 네트워크에 없을 때

Router의 ARP Table에 아직 필요한 정보들이 없다 가정하였습니다. 이미 있다면 그 Table로부터 정보를 가져오면 됩니다.

1) A → A가 포함된 네트워크 (by broadcast): ARP 요청 (IP가 B_IP인 단말 있는지 질문)     
2) Router → A: Router의A쪽Interface_MAC으로 응답 

3) A → Router: ARP 요청 
4) Router → B가 포함된 네트워크 (by broadcast): 위 ARP 요청 패킷 전달

5) B → Router: ARP 응답 (B_MAC)
6) Router: B_MAC을 ARP Cache table에 저장

7) A ↔ B: Router 통해 통신 가능해짐