네트워크 학습 내용 순서

  1. [TIL]Web Application Basic study: OSI 7 layer outline
  2. [TIL] Network OSI 7 layer: 1계층
  3. [TIL] Network OSI 7 layer: 2계층

이번 장에서는 네트워크(Network) 계층인 3계층에 대해 알아보자.

 

1. IP(Internet Protocol) 네트워크 계층 개요


네트워크 계층은 한 네트워크와 다른 네트워크 간 통신하기 위해 IP를 결정하는 계층 으로, 사용하는 ‘주요 프로토콜’은 IP(Internet Protocol) 를 사용한다. ‘주요 네트워크 기기’는 라우터 이며, ‘주요 데이터 단위’ 는 packet 이다.

네트워크 계층의 특징은 아래 4가지로 요약할 수 있다.

비신뢰성

데이터가 송신지까지 도달하는 걸 보장하지 않는다. 그래서 인터넷 계층의 윗 계층인 4계층 전송 계층에서 이를 갖춘다. 그래서 데이터 순서가 바뀔 수도 있고, 서로 다른 경로를 통해 전송될 수 있다.

비연결형

4계층 전송 계층과는 달리 연결설정 과정 없이 데이터를 전송한다.

주소 지정

IP 주소를 제공하여 각 기기 장치가 식별될 수 있도록 하는 역할을 한다. MAC 주소는 컴퓨터의 물리적인 식별자라면 IP 주소는 인터넷 연결 간 논리적인 식별을 하는데 사용된다.

경로 결정

이 IP 주소를 통해 라우팅의 경로 설정도 가능하다.

 

2. IP 주소


IP 주소란? 그리고 IP 주소의 사용 목적

각 기기들을 식별하기 위한 논리적인 주소를 말한다. 네트워크에 연결되어 있는 기기(호스트나 라우터)들은 자신의 고유한 주소를 갖고 있어야 데이터를 주고 받을 수 있다. 이를 위해서 인터넷 프로토콜은 논리적인 주소인 IP 주소를 제공하여 데이터를 서로 송수신할 수 있게 한다.

사설 네트워크(Private Network)와 공용 네트워크(Public Network)

사설 네트워크는 사설 IP를 사용하고, 공용 네트워크는 공인(공용) IP를 사용하며 ISP(Internet Service Provider) 인터넷 서비스 제공업체로부터 공인 IP를 할당받는다.

인터넷에 접속하기 위해서는 반드시 공인 IP 주소가 필요하다. 그래서 사설 네트워크에서 인터넷에 접속하기 위해서는 공인 IP 주소를 거쳐야 한다.

LG 유플럿, KT와 같은 인터넷 서비스 제공업체가 라우터에 공인 IP 주소를 부여한다.

가정 내의 기기들과 사내 컴퓨터들은 사설 IP 주소가 할당되어 있다.

다음 범위를 보면 알 수 있듯이 사설 IP와 공인 IP 네트워크 대역은 겹치지 않는다.

[사설 IP 네트워크 대역]

클래스IP 주소 범위
A10.0.0.0 ~ 10.255.255.255
B172.16.0.0 ~ 172.31.255.255
C192.168.0.0 ~ 192.168.255.255

[공인 IP 네트워크 대역]

클래스IP 주소 범위
A0.0.0.0 ~ 9.255.255.255
A11.0.0.0 ~ 126.255.255.255
B128.0.0.0 ~ 172.15.255.255
B172.32.0.0. ~ 191.255.255.255
C192.0.0.0 ~ 192.167.255.255
C192.169.0.0 ~ 223.255.255.255

IPv6 버전은 IPv4를 대체하기 위해 등장

IPv4 에서 4는 . 으로 나눠진 부분이 4군데여서 그렇다는 게 아닌 IP 를 표시하는 게 4세대 버전이라는 의미다. IPv6는 6세대 버전이라는 의미.

  • IPv4: Internet Protocol version 4
  • IPv6: Internet Protocol version 6
IPv4IPv6
주소 형식192.168.10.1FE80:CD00:0000:0CDE:1257:0000:211E:729C
주소 표현10진수16진수
크기32bit(4 bytes)128bit(16 bytes)
최대 표현 개수약 43억개 범위: 0.0.0.0 ~ 255.255.255.255무한대에 가깝다.
서비스 품질제한적 품질확장된 품질
보안 기능IPSec 별도 설치기본 제공
  • 크기

    • IPv4 기준으로 각각 8bit씩 총 4 부분 * 8bit = 32bit를 이룬다.
    • IPv6 기준으로 각각 8bit씩 총 8 부분 * 16bit = 128bit를 이룬다.
  • 8bit를 1 옥텟(octet)이라 부른다.

Network ID와 Host ID

범위에 따라 Network ID와 Host ID로 구분할 수 있다.

  • 네트워크 ID: 전체 중 작은 네트워크를 식별하는 ID이자 호스트의 집합 대표 주소

  • 호스트 ID: 호스트를 식별

IP 주소 클래스 (IPv4 기준)

클래스IPv4 (2진수)IPv4 (10진수)네트워크 ID호스트 ID비고
A00000001. 00000000. 00000000. 000000000.0.0.0 ~ 127.255.255.2558 bit24 bit
B10000000. 00000000. 00000000. 00000000128 .0.0.0 ~ 191.255.255.25516 bit16 bit
C11000000. 00000000. 00000000. 00000000192 .0.0.0 ~ 223.255.255.25524bit8 bit
D11100000. 00000000. 00000000. 00000000224.0.0.0 ~ 239.255.255.255멀티캐스트용
E11110000. 00000000. 00000000. 00000000240.0.0.0 ~ 239.255.255.255특수용도 예약주소
  • docker IP는 B 클래스에 해당된다.

MAC 주소와 비교

  • MAC 주소: 48 bit, 16진수
  • IP 주소 (IPv4): 32 bit, 2진수
    • 실제로는 2진수로 되어 있고, 사람이 보기 편하게 10진수로 되어 있다.

A, B class의 문제점과 해결책

A 클래스와 B 클래스는 하나의 IP 주소로 많은 호스트를 가질 수 있다. 그런데 한 기관에서 이렇게 많은 호스트를 가지게 되는 경우는 없기 때문에, IP 주소가 낭비되는 문제가 발생된다. 또한, 이렇게 많은 컴퓨터가 패킷을 보내면 네트워크가 혼잡해진다. 이러한 문제점을 해결하는 방법이 이어서 학습할 내용인 “서브넷팅” 이다.

IP 주소 확인하기: ifconfig

IP 주소를 확인하는 명령어

  • terminal에 ifconfig를 입력해보고, 뜨는 것을 분석해보자.

  • 이것이 네트워크의 전부다.

  • lo0: loop back을 의미하는데, 자기 자신에게 보내는 데이터를 처리하기 위한 가상 인터페이스 장치 이름

    • inet 127.0.0.1: localhost로 자신의 컴퓨터를 의미한다.
    • netmask 0xff000000: 255.0.0.0 /8
      • 11111111 00000000 000000000 00000000
  • en0: ethernet을 의미한다

    • inet6 fe80::1872:9ed:4de7:e8c: IPv6 주소
    • inet 172.30.1.1: IPv4 주소로 내부 IP
    • broadcast 172.30.1.255: broadcast address
    • netmask 0xffffff00: 255.255.255.192 /26
      • 11111111 11111111 1111111 11000000

 

3. Subnetting(서브넷팅)


Subnetting, Subnet(서브넷), Subnet mask(서브넷 마스크) 란?

서브넷팅(subnetting) 이란 IP 주소를 클래스로 구분하는 방법으로, 네트워크를 작은 네트워크로 분할하여 너무 많은 IP 주소들이 낭비되는 문제를 해결하기 위한 기술이다. 이 분할된 네트워크를 Subnet(서브넷) 이라고 부른다. 서브넷들의 IP에서 어디까지가 네트워크 ID이고 호스트 ID인지 식별하기가 어려운데, 이를 돕는 게 바로 Subnet mask(서브넷 마스크) 이다. 네트워크 ID와 호스트 ID를 식별하기 위해서, 네트워크 ID에 해당되는 부분을 모두 1로, 호스트 ID에 해당하는 부분을 모두 0으로 표기하는 형식을 말한다.

클래스별 서브넷 마스크

그래서 서브넷 마스크를 클래스 별로 표시하자면 다음과 같다.

클래스IPv4 (2진수)IPv4 (10진수)프리픽스 표기법
A255.0.0.011111111 00000000 00000000 00000000/8
B255.255.0.011111111 11111111 00000000 00000000/16
c255.255.255.011111111 11111111 11111111 00000000/24

🔆 프리픽스 표기법: 서브넷 마스크를 슬래시 비트 수로 나타낸 것으로, 네트워크 ID 부분을 나타낸다.

그래서 255.255.255.240인 경우, 8bit 3개에 4bit를 더해서 /28 로 표기한다.

 

4. IP packet 과 header


역캡슐화의 관점에서 packet이란?

네트워크 계층보다 더아래에 있는 데이터 링크 계층에서는 데이터 단위를 ‘프레임(frame)‘을 사용한다. 이 프레임에서 역캡슐화를 통해 이더넷 헤더와 트레일러를 제거한 것이 네트워크 계층에서의 프로토콜 데이터 단위인 ‘패킷(packet)‘이 된다.

캡슐화의 관점에서 packet이란?

또 네트워크 계층보다 위 계층의 데이터 단위인 TCP 세그먼트에서 캡슐화해서 IP 헤더를 붙인 것도 ‘패킷(packet)‘이다.

image

IP packet header에는 어떤 정보가 담겨져 있는가? (IPv4 기준)

데이터를 전달하기 위한 정보들이 포함되어 있다. 이 정보들을 사용하여 네트워크 계층의 장비인 라우터가 라우팅 동작을 하는데 핵심적인 역할을 수행한다.

image

 

5. Router


가정 내에의 네트워크(LAN)에서 인터넷 네트워크(WAN)로 접속하기 위해서는 라우터가 필요하다. 그 이유는 이 라우터에는 ISP(ex: KT, SK telecom, LG U+)를 통해서 공인 IP를 부여받은 라우터를 거쳐야하기 때문이다.

5.1 Router의 역할

라우터는 위 내용을 보다 일반화해서 표현하자면 ‘한’ 네트워크에서 ‘다른’ 네트워크로 데이터를 보내는 역할 을 한다.

그러면 네트워크 계층보다 하위 계층인 데이터 링크 계층의 장비인 스위치부터 다시 생각해보자.

스위치에 연결된 장비들은 같은 네트워크 범위에 있다. 그런데 네트워크를 통해 데이터를 보낼 때 반드시 동일한 네트워크 범위 내로만 보내는 게 아니다. 다른 네트워크에 있는 곳으로도 데이터를 보내야 한다. 이 때 이 네트워크 계층을 지나야하고, 이 계층에서의 장비가 ‘라우터’다. 이 라우터를 지나면 바로 다른 네트워크 로 갈 수 있지만, 때로는 목적지 네트워크에 도달하기 위해 해당 네트워크와 보다 가까운 ‘다른 라우터’를 판단 하기도 한다.

아래 이미지를 통해 보다 자세히 알아보자.

image

Network 1과 Network 3 사이에는 Network 2가 존재한다. Router 1은 network 1 뿐만 아니라 network 2에도 연결이 되어 있다. 복수의 인터페이스를 제공하며 이에 맞는 물리적 배선과 IP 주소가 설정되어 있다. 그래서 라우터에는 각 네트워크마다 연결되어 있어서 여러 IP 주소를 가진다.

5.2 Routing 과 Routing table

그렇다면 라우터는 다른 네트워크로 가는 경로를 어떻게 아는 것일까? 이에 대한 답은 바로 ‘라우팅 테이블’ 에 있다. 위 이미지 양 끝단에 Router 1과 Router 2에 대한 라우팅 테이블이 존재한다.

라우팅 테이블에 대해 간략히 설명하기에 앞서 ‘라우팅’ 이란 단어에 대해 알아보자.

라우팅 이란 패킷을 목적지 IP까지 최적의 경로로 전송할 수 있도록 이 경로를 찾는 동작을 말한다. 이 라우팅을 하기 위해서는 경로에 대한 정보를 라우터가 가지고 있어야 가능하다. 그 정보가 등록되고 관리되는 테이블이 라우팅 테이블 이다. 라우팅 하기 위해 라우팅 테이블을 이용한다.

5.3 라우터에서 MAC 주소와 IP 주소

MAC 주소는 우리가 사용하는 desktop, labtop 뿐만 아니라 스위치와 라우터도 포함하여 각 장치마다 부여된 고유의 물리적인 주소다. MAC 주소는 랜카드에 탑재되어 있고, 랜카드(LAN card 또는 Network Interface Card, NIC)는 각 기기마다 존재하기 때문이다.

다른 네트워크에 전달하기 위해서는 여러 기기들을 전송 도중에 거쳐야하기 때문에 라우터를 거치면 도착지 MAC 주소와 출발지 MAC 주소를 바꿔가며 전송하게 된다. 즉 프레임 데이터의 관점에서 보자면 이더넷헤더와 FCS(트레일러)가 교체된다는 의미다. 다음으로 전송해야할 MAC 주소를 알아내기 위해서 ‘ARP’ 라는 다른 프로토콜을 사용한다.

하지만, IP 헤더의 경우 NAT 주소 변환 시를 제외하고는 도착지 IP와 출발지 IP 주소는 변하지 않고, TTL과 헤더 체크섬이 변경된다.

5.4 라우터 간의 통신 🔆

그렇다면 라우터 간 통신은 어떻게 하는 걸까?

image

위 출처에 따르자면 한 라우터에 다른 라우터로 이동할 때 라우터마다 내부적으로 물리 계층 - 데이터 링크 계층 - 네트워크 계층 까지의 캡슐화와 역캡슐화가 계속 이뤄진다고 이해하면 된다.

라우터에서 데이터를 받으면 역캡슐화 작업을, 데이터를 보낼 때는 캡슐화 작업을 거친 후 다른 라우터에게 보내진다. 이는 라우터뿐만 아니라 스위치도 마찬가지다.

스위치도 스위치 끼리 물리 계층 - 데이터 링크 계층 까지 캡슐화와 역캡슐화가 계속 이뤄진다고 이해하면 된다.

 

6. Routing Protocols

6.1 개요


라우팅 과정에서 사용되는 프로토콜들에 대해 알아보자. 라우팅 프로토콜은 라우팅 정보를 교환하기 위한 프로토콜이다.

라우팅 방식에는 ‘정적’‘동적’ 라우팅으로 나눠진다. 전자는 ‘관리자가 직접 관리’하는 방식으로 수동으로 해야하므로 비효율적이다. 후자는 라우팅 테이블의 정보를 주기적으로 받아 갱신하는 방식이다.

이번 소단원에서 알아볼 라우팅 프로토콜들은 이 동적 라우팅에 사용되는 프로토콜이다.

동적 라우팅 프로토콜은 AS(Autonomous System)을 기준으로 어떤 역할을 하느냐에 따라서 내부 라우팅 프로토콜과 외부 라우팅 프로토콜로 분류할 수 있다.

AS(Autonomous System) 란 하나의 회사나 조직에서 관리하는 라우터들의 집합으로, 이 AS들로 네트워크가 구성되어 체계적으로 네트워크를 관리할 수 있다.

image

여러 AS들 간에 라우팅을 수행하는 외부 게이트웨이 라우팅 프로토콜을 ‘EGP(Exterior Gateway routing Protocol)’ 이라고 하며, 하나의 AS 내부에서 라우팅을 수행하는 내부 게이트웨이 라우팅 프로토콜을 ‘IGP(Interior Gateway routing Protocol)’ 라 한다.

  • EGP의 종류

    • BGP
  • IGP의 종류

    • RIP(Routing Information Protocol)
    • OSPF(Open Shortes Path First)

그러면 IGP에 대해 알아보자.

 

6.2 IGP


IGP: RIP(Routing Information Protocol)

RIP는 목적지로 도착하기까지 홉 수 정보를 저장하고 인접 라우터와 주기적으로 정보를 공유하는 방법 이다. 여기서 홉 수(Hope Count) 이란? 목적지로 도착하기까지 거쳐야 하는 링크 또는 라우터의 수를 말한다.

일반적으로 30초 마다 라우팅 테이블을 갱신하며, 120초 동안 정보를 받지 못하면 경로 단절로 판단된다. 단절된 경우 무한 으로 표시하거나, 홉 수 16으로 표시하기도 한다.

사용 포트로는 UDP 520번 포트를 사용한다.

그러면 RIP를 사용하는 라우팅 테이블을 아래 그림에서 확인해보자. 아래 그림을 보면 30초마다 갱신되는 정보를 확인할 수 있다. 이렇게 주기적으로 인접 라우터와 정보를 공유하는 방법 이 RIP이다.

image

Router A의 홉 수 계산을 다음 아래와 같이 할 수 있다. 나머지 Router B와 C도 동일한 방식으로 계산된다.

[Router A]

  • Router A에서 Network 1 또는 2를 가기 위해서는 다른 Router를 거칠 필요가 없으므로 홉 수 0
  • Router A에서 Network 3을 가기 위해서는 Router B를 거쳐야 하므로 홉 수 1
  • Router A에서 Network 4를 가기 위해서는 Router B, C를 거쳐야 하므로 홉 수 2

이러한 RIP 방식에는 느린 수렴(Slow Convergence) 문제가 존재한다. 예를 들어서 네트워크와 라우터 간 연결이 끊어졌을 경우, 해당 라우터의 라우팅 테이블에 적힌 홉 수는 무한대로 수정된다. 그러면 주변 라우터들에게도 이 상황 정보가 빠르게 전달되야 하는데, 느리게 전달되어 모든 라우터가 변경 사항을 적용하는데 오랜 시간이 걸린다.

이 문제점을 해결하기 위해서 3가지 방식 을 사용한다. 첫 번째는 홉 수를 16으로 수정 하여 홉 수가 15를 넘으면 바로 16으로 수정하여 상황 정보를 받지 않아도 바로 수정하는 방식으로 적용 시간을 단축할 수 있다. 두 번째는 Split - Horizon 방식으로 전달하는 정보를 구분하여 전송하는 방식으로 단절 상황에 관한 정보만 전달하고, 다른 라우터에게서 받은 라우팅 정보를 다시 상대방에게 전달하지 않는 방법을 말한다. 세 번째는 Triggered Update 방식이다. 이는 갱신되는 시간 간격 30초와 상관없이 단절되는 상황이 발생하면 바로 전달하는 방식이다.

IGP: OSPF (Open Shortest Path First)

OSPF는 가장 많이 사용하는 IGP(내부 게이트웨이 프로토콜)의 한 종류로, 링크 상태 알고리즘 및 광고 기법으로 사용한다. 가장 짧은 경로 계산은 Dijkstra(다이제스트로) 알고리즘으로 최적의 경로를 계산한다.

그리고 OSPF는 라우팅을 효과적으로 수행하기 위해서 네트워크를 영역 단위로 나누어 관리하는데, AS 내에 여러 개의 영역으로 나눈 다음 내부의 라우터들끼리 각 영역에서 라우팅 정보를 교환하는 계층적 구조 를 가진다.

 

6.3 NAT(Network Address port Translation)


IP 주소는 이용하는 범위에 따라서 공인과 사설로 나눌 수 있다. 공인은 인터넷을 시용할 때 반드시 필요한 것이고, 사설은 가정 내 네트워크 또는 사내 네트워크 처럼 사설로 사용하는 네트워크다.

사설 네트워크에 속한 장비로 사설 네트워크 내의 통신을 할 때는 필요 없다. 하지만, 사설 IP 주소에서 인터넷 같은 ‘공인 IP 주소’에 접속하려고 할 때 사설 네트워크 그대로 인터넷을 사용할 수 없기 때문에 NAT 가 필요하다.

그러면 이 ‘NAT’에 대해 알아보자. 이 NAT를 통해서 인터넷 접속을 위해 사설 IP 주소를 공인 IP로 변환이 필요하고, 이 작업을 위해서 NAT 프로토콜을 사용한다.

IP 패킷에는 출발지 IP 주소와 도착지 IP 주소가 있는지를 기억하자. 집에서 브라우저를 통해 데이터를 보내고자할 때, 이 패킷은 웹 서버로 보내고자 하기 때문에 출발지 IP 주소는 사설 주소이고 도착지 IP 주소는 공인 주소가 된다. 이 주소 설정으로는 웹 서버까지 요청 전송이 문제 없이 가능하지만, 응답이 제대로 도착하지 않는다. 왜냐하면 사설 IP 주소의 범위와 공인 IP 주소의 범위가 다르기 때문이다.

image

이 문제를 해결하기 위해 NAT를 사용해보자.

사설에서 패킷을 보낼 경우, 출발지 IP 주소는 사설 주소이고 도착지 IP 주소는 공인 주소다. 웹 서버에 도착하기에 앞서서 라우터의 NAT 테이블을 통해 출발지 사설 IP 주소를 공인 IP 주소로 바꾼 후, 웹서버에게 전달한다. 그리고 변환한 주소의 정보를 NAT 테이블에 보존한다. 그 후, 웹 서버가 응답을 보낼 때 패킷이 라우터에 도착하면 NAT 테이블을 바탕으로 목적지 IP 주소를 공인에서 저장했던 사설로 바꾼다. 그러면 정확하게 사설 IP로 데이터가 도착한다.

 

6.3 ARP(Address Resolution Protocol)


알아낸 내용

앞서 학습한 내용을 통해 우리는 2가지를 알았다.

첫 번째, MAC 주소는 각 장치마다 부여된 고유의 물리적인 주소이기 때문에 전송 도중에 거쳐야할 기기들을 지나면서 데이터의 이더넷 헤더와 FCS가 교체되면서 목적지 MAC 주소와 출발지 MAC 주소가 바뀔 수 있다.

두 번째, 도착지 IP 주소와 출발지 IP 주소는 그대로다 (단, NAT 주소 변환은 예외)

ARP란?

그런데, 첫 번째 사실에서 MAC 주소가 바뀌는 이유는 네트워크를 지나는 데이터들은 한 네트워크 내에서 뿐만 아니라 여러 개의 네트워크를 지나는 경우가 많기 때문이다. 이렇게 여러 개의 네트워크를 지나기 위해서는 라우터가 다음 라우터로 데이터를 전송하기 위해서 물리적인 주소인 IP 주소뿐 아니라 물리적인 주소인 MAC 주소도 알아야 한다. 그러나 보내는 측의 입장에서는 목적지 IP 주소는 알 수 있더라도 ‘목적지 MAC 주소’는 알 수 없다. 그러면 이 문제에 대한 해결책은 무엇일까?

해결책이 바로 IP 목적지 IP 주소를 통해 목적지 MAC 주소를 알아내고자 하는 방법 인 ARP 다.

패킷 -> ARP로 대응시켜 캡슐화 -> 프레임

  • 패킷의 IP 헤더: 목적지 IP 주소, 출발지 IP 주소
  • 프레임의 이더넷 헤더: 목적지 MAC 주소, 출발지 MAC 주소

ARP의 주소 해석

이렇게 ARP로 목적지 IP 주소를 통해 목적지 MAC 주소를 알 수 있는데, ARP의 ‘주소 해석’ 을 사용해서 알 수 있다. IP 주소와 MAC 주소를 대응시키는 것을 ‘주소 해석’ 이라고 한다.

다음으로 이 주소 해석에 대해 알아보자.

  1. ARP 요청을 통해 목적지 IP 주소에 대응하는 MAC 주소를 질의한다. 이 때 ARP는 ‘브로드캐스트 방식’ 으로 전송한다. 브로드캐스트 방식으로 전송하기에 다수의 호스트에 요청하며 이 때 브로드캐스트 주소는 48 비트가 모두 1이기에 ‘FF:FF:FF:FF:FF’ 다.

  2. 여러 호스트에서 이 요청을 받고, 질의를 받는 IP 주소를 가진 호스트 즉 목적지 IP 주소와 동일한 주소를 가진 호스트가 ARP 응답으로 MAC 주소를 알려준다. 응답은 ‘유니캐스트 방식’ 으로 전송한다.

  3. 해당 IP 주소와 MAC 주소의 대응 정보를 ARP 캐시에 저장한다.

  • ARP 캐시는 획득한 목적지 정보를 20분 동안 저장한다.
  • 저장 후 또 다시 MAC 주소 요청이 들어오면 ARP 캐시에 저장된 정보를 사용한다.

 

6.4 ICMP


ICMP란?

ICMP가 나온 배경을 이해하기 위해서 IP의 특징을 다시 한 번 짚어보자.

  • 비신뢰성: 신뢰성 있는 전송은 ‘전송 계층’에서 이뤄진다
  • 비연결형
  • 주소 지정: IP 주소
  • 경로 설정: 라우팅

TCP를 사용하는 4계층은 데이터가 중간에 유실될 경우를 고려한 전송 서비스를 제공하지만, 3계층은 데이터 전송 후 제대로 도착했는지 확인하지 못한다. 그래서 3계층의 이러한 문제점을 해결하기 위해 ‘ICMP’ 가 개발되었다. 이 프로토콜은 목적지 IP로의 데이터 전송 여부를 확인할 수 있게 해주는 프로토콜 을 수행한다. 그래서 ‘2가지 기능’을 가지고 있다.

보내는 측에게 네트워크 내에서 일어나는 에러 상황을 통보하거나 네트워크 상태를 진단하는 기능을 제공한다.

  • 에러 보고 (Reporting) 기능
  • 질의 (Query) 기능

ICMP 헤더

ICMP는 프로토콜이지만 IP 헤더에 의해 캡슐화되는 게 특징이다.

  • IP 헤더 + ICMP 헤더 + 데이터

이 ICMP 헤더에는 타입, 코드, 체크섬, ICMP 데이터가 포함되어 있다.

  • 타입: ICMP 메시지 유형으로 Reporting 인지, Query 인지
  • 코드: 타입 값의 내용
  • 체크섬: 에러 검사 역할
  • 데이터: 타입과 코드에 따라서 달라진다.
Type설명용도
0Echo Reply질의
3Destination Unreachable에러
4Source Quench에러
5Redirect에러
8Echo Request질의
11Time Exceeded에러
  • 0번, 3번, 8번을 자주 확인할 수 있다.

ICMP 사용 상황 예시

네트워크 망이 다음과 같이 구성되어 있다고 하자.

  • PC A - Router 1 - Router 2 - PC B

PC A에서 PC B에게 데이터를 전송하는 도중 패킷이 Router 2에서 유실되거나 폐기되었다고 하자.

그러면 라우터는 ICMP 메시지를 통해서 IP 패킷이 도중 유실된 이유를 원래 출발지인 PC A에게 통지한다.

  • ICMP 메시지
    • 목적지: PC A
    • 출발지: Router 2

이를 통해서 ICMP는 목적지 IP로의 데이터 전송 과정 중에 에러 상황을 출발지로 통보하는 기능을 수행한다.

ICMP 메시지

이 ICMP 메시지를 보고 싶다면 ‘ping’ 명령어를 사용해보면 된다.

Ping(Packet INternet Groper)의 약자로, 네트워크 상태를 점검 및 진단하는 명령어

  • 나중에 서버를 구출할 때, 그 서버에 ping을 날려보면 데이터를 보내고 받을 수 있는지 확인할 수 있다.

  • 터미널 실행 후, ping google.co.kr를 입력해보자.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
> ping google.co.kr
PING google.co.kr (172.217.26.227): 56 data bytes
64 bytes from 172.217.26.227: icmp_seq=0 ttl=114 time=45.149 ms
64 bytes from 172.217.26.227: icmp_seq=1 ttl=114 time=36.573 ms
64 bytes from 172.217.26.227: icmp_seq=2 ttl=114 time=44.751 ms
64 bytes from 172.217.26.227: icmp_seq=3 ttl=114 time=44.796 ms
64 bytes from 172.217.26.227: icmp_seq=4 ttl=114 time=40.381 ms
64 bytes from 172.217.26.227: icmp_seq=5 ttl=114 time=45.104 ms
64 bytes from 172.217.26.227: icmp_seq=6 ttl=114 time=37.562 ms
64 bytes from 172.217.26.227: icmp_seq=7 ttl=114 time=36.680 ms
^C
--- google.co.kr ping statistics ---
8 packets transmitted, 8 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 36.573/41.375/45.149/3.740 ms
  • 총 8개의 packet을 보내고, 받았다는 걸 알 수 있다.
  • 이렇게 Ping을 보내어 해당 서버와 통신 유무를 확인할 수 있다.

이 때 보내지는게 ICMP 에코 요청 응답 메시지다. 이 메시지를 통해서 다음 요소들을 확인할 수 있다.

  • 원격지 호스트
  • 라우터 동작 여부
  • 원격 호스트까지 왕복 시간
  • 중간 손실되는 메시지 크기 등등

 


Reference