카테고리 없음

ICMP, PING, TraceRoute

쿠키는 서비스 2023. 9. 7. 11:40
반응형

ICMP

Stands for Internet Control Message Protocol

Designed for informational messages

- Host unreachable, port unreachable, fragmentation needed

- Packet expired(infinite loop in routers)

Uses IP directly

PING and traceroute use it

Doesn't require listeners or ports to be opened.

Some firewalls block ICMP for security reasons

That is why PING might not work in those cases

Disabling ICMP also can cause real damage with connection establishment

- Fragmentation needed

PNG demo

 

인터넷 제어 메시지 프로토콜의 약자
정보 메시지용으로 설계됨
- 호스트에 연결할 수 없음, 포트에 연결할 수 없음, fragment가 필요함
- 패킷 만료(라우터의 무한 루프)
IP를 직접 사용
PING과 Traceroute를 사용합니다.
리스너나 포트를 열 필요가 없습니다.

 

ICMP (Internet Control Message Protocol)는 인터넷 프로토콜 스위트의 일부로, 주로 네트워크 계층에서 작동합니다. 이 프로토콜은 IP 프로토콜을 사용하는 네트워크 컴퓨터 간에 다양한 유형의 제어 메시지와 오류 메시지를 전송하는 데 사용됩니다. ICMP는 네트워크 문제를 진단하고 보고하거나 라우터와 같은 네트워크 장치가 특정 조건에 대응할 수 있도록 정보를 제공하는 역할을 합니다.

### 주요 기능과 메시지 유형
1. **Echo Request / Echo Reply**: 이 메시지 유형은 "ping" 명령어에서 가장 잘 알려져 있습니다. Echo Request를 받은 호스트는 Echo Reply 메시지를 보내서 자신이 온라인이고 응답 가능한 상태임을 알립니다.
  
2. **Destination Unreachable**: 목적지에 도달할 수 없을 때 이 메시지가 전송됩니다. 예를 들어, 호스트가 다운되었거나 경로가 존재하지 않을 때입니다.

3. **Time Exceeded**: 데이터 패킷이 목적지에 도달하기 전에 시간이 초과되면 이 메시지가 전송됩니다. 이는 주로 무한 루프를 방지하기 위해 사용됩니다.

4. **Parameter Problem**: IP 헤더에 문제가 있을 때 이 메시지가 전송됩니다.

5. **Redirect**: 라우터가 다른 라우터를 통해 더 효율적으로 패킷을 전송할 수 있음을 알릴 때 사용됩니다.

### ICMP의 한계와 보안 문제
- ICMP는 주로 제어 메시지와 오류 메시지를 전송하는 데 사용되므로, 데이터 전송에는 사용되지 않습니다.
- ICMP는 자체적으로 보안 기능을 제공하지 않아, 공격자에 의해 악용될 수 있습니다. 예를 들어, ICMP를 사용한 'Ping of Death', 'Smurf Attack', 'ICMP Tunneling' 등의 공격 방법이 있습니다.

ICMP는 네트워크의 상태를 모니터링하고 문제를 진단하는 데 매우 유용하지만, 그 자체로는 복잡한 네트워크 연산을 수행하지 않습니다. 그래서 일반적으로 ICMP는 IP와 함께 작동하여 네트워크의 안정성과 효율성을 높이는 데 사용됩니다.

 

### Ping에 대해

Ping은 네트워크 진단 도구 중 하나로, 주로 두 컴퓨터 간의 연결 상태를 확인하기 위해 사용됩니다. Ping은 ICMP (Internet Control Message Protocol)를 사용하여 "Echo Request" 메시지를 목적지 호스트에 보내고, 그 호스트로부터 "Echo Reply" 메시지를 받습니다. 이 과정을 통해 두 호스트 간의 연결 가능성, 지연 시간 (latency), 패킷 손실 등을 측정할 수 있습니다.

### 사용 예시

Ping을 사용하는 가장 기본적인 방법은 커맨드 라인 (명령 프롬프트 또는 터미널)에서 `ping` 명령어를 사용하는 것입니다.

#### Windows에서:

1. `Win + R` 키를 눌러 "실행" 창을 엽니다.
2. `cmd`를 입력하고 Enter 키를 눌러 명령 프롬프트를 엽니다.
3. `ping [목적지 주소]`를 입력합니다. 예를 들어, Google의 서버에 Ping을 보내려면 `ping google.com`을 입력합니다.

```
C:\> ping google.com

Pinging google.com [172.217.22.14] with 32 bytes of data:
Reply from 172.217.22.14: bytes=32 time=27ms TTL=56
Reply from 172.217.22.14: bytes=32 time=27ms TTL=56
Reply from 172.217.22.14: bytes=32 time=26ms TTL=56
Reply from 172.217.22.14: bytes=32 time=27ms TTL=56

Ping statistics for 172.217.22.14:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 26ms, Maximum = 27ms, Average = 26ms
```

#### macOS나 Linux에서:

1. 터미널을 엽니다.
2. `ping [목적지 주소]`를 입력합니다. 예를 들어, `ping google.com`을 입력하면 됩니다.

```
$ ping google.com
PING google.com (172.217.22.14): 56 data bytes
64 bytes from 172.217.22.14: icmp_seq=0 ttl=56 time=27.123 ms
64 bytes from 172.217.22.14: icmp_seq=1 ttl=56 time=26.799 ms
64 bytes from 172.217.22.14: icmp_seq=2 ttl=56 time=27.456 ms
64 bytes from 172.217.22.14: icmp_seq=3 ttl=56 time=26.889 ms
```

이렇게 해서 목적지까지의 지연 시간과 패킷 손실률 등을 확인할 수 있습니다. 이 정보는 네트워크 문제를 진단하거나 성능을 측정하는 데 유용합니다.

 

`icmp_seq`, `ttl`, 그리고 `time`은 `ping` 명령어의 출력에서 자주 볼 수 있는 항목들입니다. 각각은 다음과 같은 의미를 가집니다:

### icmp_seq (ICMP Sequence Number)

- **icmp_seq**는 ICMP 메시지 시퀀스 번호를 나타냅니다. `ping` 명령어를 실행할 때, 여러 개의 ICMP Echo Request 메시지가 목적지로 전송됩니다. 각 메시지는 고유한 시퀀스 번호를 가지며, 이 번호는 Echo Reply 메시지에서 돌아올 때 동일하게 유지됩니다. 이를 통해 패킷의 손실 여부나 순서 등을 확인할 수 있습니다.

### ttl (Time to Live)

- **ttl**은 Time to Live의 약자로, 패킷이 네트워크에서 얼마나 오래 "살아있을" 수 있는지를 나타내는 값입니다. 패킷이 라우터를 거치면서 이 값은 1씩 감소하고, 0이 되면 패킷은 삭제됩니다. 이는 무한 루프를 방지하는 데 도움이 됩니다. `ping`의 출력에서 볼 수 있는 TTL 값은 Echo Reply 메시지가 돌아올 때의 값입니다. 이 값으로부터 목적지까지 얼마나 많은 라우터를 거쳐왔는지를 추정할 수 있습니다.

### time (Round-Trip Time)

- **time**은 패킷이 목적지에 도착한 후 다시 원래의 위치로 돌아오는 데 걸린 시간을 밀리초(ms) 단위로 나타냅니다. 이를 Round-Trip Time (RTT)이라고도 합니다. 이 값은 네트워크의 지연 시간을 측정하는 데 사용되며, 값이 크면 클수록 네트워크 지연이 크다는 것을 의미합니다.

이러한 정보들은 네트워크의 성능 문제를 진단하거나, 네트워크 경로에 문제가 있는지 확인하는 데 유용합니다.

 

ICMP?

정보를 주고받는 데 사용되는 IP 수준 프로토콜입니다.

 

`traceroute`는 네트워크 진단 도구 중 하나로, 데이터 패킷이 소스 컴퓨터에서 목적지 컴퓨터까지 어떤 경로를 통해 이동하는지를 추적합니다. 이 도구는 목적지까지의 경로에 있는 각 라우터나 스위치에 대한 정보를 제공하며, 각 단계에서의 지연 시간을 측정할 수 있습니다.

### 작동 원리

1. `traceroute`는 목적지 IP 주소로 ICMP 패킷을 보냅니다. 이때, 패킷의 Time to Live (TTL) 값을 1로 설정합니다.
2. 패킷이 첫 번째 라우터에 도착하면, 라우터는 TTL 값을 1 감소시킵니다. TTL이 0이 되므로, 라우터는 패킷을 삭제하고 소스 주소로 "Time Exceeded" 메시지를 보냅니다.
3. `traceroute`는 이 메시지를 받고 첫 번째 라우터의 주소와 지연 시간을 기록합니다.
4. 이 과정을 반복하면서 TTL 값을 2, 3, 4, ... 로 증가시켜 다음 라우터들을 찾아갑니다.
5. 최종 목적지에 도달하면, 목적지 컴퓨터는 "Echo Reply" 메시지를 보내고 `traceroute`는 경로 추적을 종료합니다.

### 사용 예시

#### Linux나 macOS에서:

터미널을 열고 `traceroute [목적지 주소]` 명령어를 입력합니다. 예를 들어, Google의 서버까지의 경로를 추적하려면 `traceroute google.com`을 입력합니다.

```
$ traceroute google.com
traceroute to google.com (172.217.22.14), 64 hops max, 52 byte packets
 1  192.168.1.1 (192.168.1.1)  1.678 ms  0.881 ms  0.837 ms
 2  10.0.0.1 (10.0.0.1)  3.765 ms  3.992 ms  3.997 ms
 3  ...
 4  ...
```

#### Windows에서:

명령 프롬프트를 열고 `tracert [목적지 주소]` 명령어를 입력합니다. 예를 들어, Google의 서버까지의 경로를 추적하려면 `tracert google.com`을 입력합니다.

```
C:\> tracert google.com

Tracing route to google.com [172.217.22.14]
over a maximum of 30 hops:

  1    <1 ms    <1 ms    <1 ms  192.168.1.1
  2     2 ms     2 ms     2 ms  10.0.0.1
  3     ...
  4     ...
```

`traceroute`는 네트워크 문제의 원인을 찾거나, 네트워크의 성능을 측정하는 데 유용한 도구입니다.

반응형