본문 바로가기
네트워크

TCP/IP 네트워크 계층 - IP와 ICMP

by 끊임없는정진 2023. 1. 31.

▶ TCP/IP 방식의 네트워크 계층 - IP와 ICMP

IP 주소는 포트 번호와 마찬가지로 IANA에서 관리한다. IP 주소의 범위는 0부터 255까지다. 다시 말해, IP 주소는 0.0.0.0 부터 255.255.255.255까지 총 32비트로 이뤄진 체계다. 

IP 주소를 처음 설계할 당시에는 IP 주소를 A 등급부터 E 등급까지 분류했지만 일반적으로 A 등급부터 C 등급까지 사용한다. IP 주소의 등급은 주어진 첫 번째 자리를 가지고 구분한다.

등급 범위 기본 서브넷 마스크 비고
A 1~126 255.0.0.0 127.0.0.1 루프백 주소
B 128~191 255.255.0.0  
C 192~223 255.255.255.0  

 

IP 주소에서 네트워크 ID란 LAN 영역에 대한 고유한 식별자를 의미하고, 호스트 ID란 해당 LAN 영역에 속한 호스트에 대한 고유한 식별자를 의미한다. 특히, 호스트 ID에서 모든 비트가 0인 경우를 네트워크 IP 주소(C 등급에서 192.168.10.0인 경우)라고 하며, 모든 비트가 1인 경우를 브로드캐스트 IP 주소(C등급에서 192.168.10.255인 경우)라고 한다.

네트워크 IP 주소와 브로드캐스트 IP주소는 운영체제 내부에서 사용하기 때문에 C 등급의 경우 실제 사용가능한 IP 주소의 범위는 192.168.10.1번 부터 192.168.10.254번까지 총 254개다. A 등급과 B 등급도 총 개수에서 네트워크 IP 주소와 브로드캐스트 IP주소를 제외한 개수가 실제 사용 가능한 개수에 해당한다.

리눅스 기반의 운영체제에서 echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_boradcasts 명령어를 입력하면, 브로드캐스트 IP 주소를 사용할 수 있다. 이후에 ping 192.168.10.255 -b 를 입력하면, 192.168.10.1번부터 1952.168.10.254번까지 모든 호스트에게 ICMP를 요청하겠다는 의미이다. 이처럼 브로드캐스트 IP 주소의 속성을 악용한 공격을 ICMP 스머핑 공격이라고 한다(후에 자세히 다룸.).

인터넷 사용자가 급증하면서, 주소고갈의 문제를 해결할 필요가 생겼다. 이로 사설 IP 주소가 등장한다. 사설 IP 주소는 LAN 전용 주소이다. 그래서 내부 IP 주소라고도 부른다. 전체 IP 중 사설 IP 주소를 제외한 나머지 IP 주소를 공인 IP 주소라고 한다. 사설 IP 주소의 범위는 다음과 같다.

등급 범위
A 10.0.0.0 255.0.0.0 ~ 10.255.255.255 255.0.0.0
B 172.16.0.0 255.255.0.0 ~ 172.31.255.255 255.255.0.0
C 192.168.0.0 255.255.255.0 ~ 192.168.255.255 255.255.255.0

 

사설 IP 주소는 LAN 영역에서 전용으로 사용할 수 있는 주소임에도 실제 인터넷에 접속할 수 있다. 이것은 NAT라는 기법을 사용하기 때문에 가능하다. NAT(Network Address Translation)란 출발지 사설 IP 주소를 출발지 공인 IP 주소로 바꾸는 기법이다. 보통 라우터 같은 장비에서 NAT 기법을 이용한다. 예전에 ipconfig 예시로 라우터는 무선 공유기를 의미하는데, 무선 공유기가 NAT 기능을 수행하는 장치다. NAT 기법에 포트 번호 주소를 연동해 사용할 경우 이것을 PAT(Port Address Translation)라고 한다. PAT를 이용하면 이론적으로 1개의 공인 IP 주소에 65536개의 사설 IP 주소를 연결할 수 있다. 다시 말해 65536개의 IP 주소가 필요한 LAN 영역에서도 공인 IP 주소 1개만으로도 구성이 가능하다는 의미다. ipconfig를 검색했던 예시도 PAT 기법을 적용한 경우다. 그렇지만 일상에서는 NAT과 PAT을 구분하기보단 NAT라는 용어로 통칭한다.

또한, 보안 측면에서 외부에서 내부로 직접 접근할 수 없다는 장점도 가지고 있다. 사설 IP 주소를 이용하면 NAT으로 밖으로 나갈 수 있지만 외부에서는 실제 내부 IP 주소를 사용하는 PC로 직접적인 접근이 불가하다. 외부에서는 공인 IP 주소까지만 접근이 가능할 뿐이다. 그러나, 포트 포워딩이라는 PAT 기법을 응용해 내부로 접근할 수 있기도 하다.

우리가 사용해온 ping이라는 명령어는 ICMP 라는 프로토콜에 기반한다. ICMP(Internet Control Message Protocol)는 등장 이후 전송 작업을 화면에 출력하기 위한 용도로 등장했다. 이처럼 ICMP는 화면 출력 메시지에 기반해 오류 통보 기능과 질의,응답 기능 등을 수행하기 위한 프로토콜이다.

ICMP 방식의 오류 통보전송 중 일어날 수 있는 목적지 도달 불가, 발신지 억제, 시간초과, 매개변수의 문제 등을 사용자 화면에 출력하기 위한 기능을 의미한다. 그렇지만 사용자 입장에서 ICMP는 오류 통보보다는 질의,응답 기능이 더욱 중요하다.

ICMP의 질의 응답 기능을 설명하자면 다음과 같다. 우선 사용자가 목적지 호스트로 ICMP 질의를 요청한다. 그럼 운영체제에서는 네트워크 계층에 기반해 쓰레기 값으로 채워진 페이로드를 생성한다. FTP나 SSH 같은 프로토콜은 응용 계층에서 사용자의 실제 정보를 담은 페이로드를 생성하지만, ICMP 프로토콜은 네트워크 계층에서부터 페이로드를 생성한다.

구분 상위 계층과의 연속성 페이로드 생성 계층 전송 단위
IP 있음 응용 계층 패킷
ICMP 없음 네트워크 계층 패킷

 

쓰레기 값으로 채워진 페이로드 앞에 다음과 같은 8바이트 크기의 ICMP 헤더가 붙는다.

ICMP 헤더의 구조

 

ICMP 헤더의 다양한 정보 중 해당 ICMP가 요청인지, 응답인지를 구분하기 위한 주요 정보가 타입(type) 항목에 담긴다. 타입 항목에서 8은 요청을 의미하고, 0은 응답을 의미한다. ICMP 페이로드에 ICMP 헤더를 추가해 ICMP 패킷을 생성한 뒤 다시 그 앞에 IP 헤더가 붙는다. IP 헤더가 있어야 라우팅이 가능하기 때문이다. 이처럼 ICMP 패킷은 네트워크 계층에서 시작해 데이터 링크 계층과 물리 계층으로 넘어간다.

IP와 ICMP의 인캡슐레이션은, IP의 경우, TCP/UDP 페이로드 + TCP/UDP 헤더 + IP 헤더의 인캡슐레이션이 일어나고, ICMP의 경우, ICMP 페이로드 + ICMP 헤더 + IP 헤더의 인캡슐레이션이 일어난다. 둘의 차이를 확인할 수 있다.

참고로 PAT 환경에서 ICMP 요청, 응답이 일어날 경우에는 ICMP 헤더를 이용해서 포트 번호를 저장한다.

ping 명령어와 마찬가지로 ICMP 방식에 기반해 구현한 또 다른 명령어가 있는데, tracert 명령어다. ping이 출발지와 목적지 사이의 통신 여부를 점거하기 위한 용도라면, tracert는 출발지와 목적지 사이의 라우팅 과정을 확인하기 위한 용도.

tracert 명령어는 ping  명령어에서 나타나는 TTL 속성을 이용해 구현한다. TTL값을 1로 설정한 ICMP 패킷부터 시작해서 TTL값을 하나씩 늘여가며 경유하는 라우터로 부터 ICMP 오류를, 목적지 호스트로부터 ICMP 응답을 받아서 경로를 확인한다. 참고로 윈도우 계열에서는 ICMP 방식을 이용하고 유닉스/리눅스 계열에서는 UDP 방식을 이용한다. UDP 방식을 이용할 경우 포트 번호 33,435번을 사용한다.

또한, 반복해서 tracert 를 사용하면 경로가 바뀔수도 있는데, 라우팅 알고리즘이 동적으로 작동해서 그렇다. 

일단, 멀티캐스트 구현을 위한 IGMP 프로토콜이 있지만 여기서 논외로 한다.

ARP 와 RARP는 엄밀하게 구분하자면 네트워크 계층과 데이터 링크 계층 사이에서 동작하는 프로토콜이지만, 분류 상 네트워크 계층으로 분류한다. RARP의 경우, DHCP가 사실 상 해당 기능을 수행하기 때문에 논외로 한다. IPv6 환경에서는 ICMP가 IGMP와 ARP 기능까지 수행한다.

 

 

출처 : 해킹 입문자를 위한 TCP/IP 이론과 보안 2/e - 오동진 지음

'네트워크' 카테고리의 다른 글

TCP/IP 방식의 물리 계층  (0) 2023.02.03
TCP/IP 방식의 데이터 링크 계층  (0) 2023.02.02
TCP/IP 네트워크 계층 - IP 헤더의 구조  (0) 2023.01.30
TCP/IP 전송계층  (0) 2023.01.28
OSI 7 layer 와 TCP/IP 표 정리  (0) 2023.01.27

댓글