Post

[🌐CN] ICMP - Internet Control Message Protocol

[🌐CN] ICMP - Internet Control Message Protocol

🌐 Internet Protocol 전곡 μˆ˜μ—… 정리

IPλŠ” Best Effort μ„œλΉ„μŠ€λ‘œ νŒ¨ν‚· μ†μ‹€μ΄λ‚˜ 였λ₯˜λ₯Ό 보μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έλ ‡λ‹€λ©΄ λ„€νŠΈμ›Œν¬μ—μ„œ λ°œμƒν•˜λŠ” λ¬Έμ œλ“€μ„ μ–΄λ–»κ²Œ 진단할 수 μžˆμ„κΉŒ? ICMPλŠ” IP의 보쑰 ν”„λ‘œν† μ½œλ‘œ, μ—λŸ¬ λ¦¬ν¬νŒ…κ³Ό λ„€νŠΈμ›Œν¬ 진단을 λ‹΄λ‹Ήν•œλ‹€.


ICMP의 ν•„μš”μ„±

Error/Status Reporting의 μ€‘μš”μ„±

πŸ“šSilent Failure Problem: IPλŠ” Best Effort μ„œλΉ„μŠ€λ‘œ μ—λŸ¬ λ°œμƒ μ‹œ μ•Œλ¦Ό 없이 νŒ¨ν‚·μ„ 쑰용히 버릴 수 있음 β†’ 진단이 맀우 어렀움!

λΌμš°ν„°κ°€ μ§λ©΄ν•˜λŠ” μ—λŸ¬ 상황:

1
2
3
4
5
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ❌ λΌμš°ν„°κ°€ νŒ¨ν‚·μ„ μ–΄λ””λ‘œ ν¬μ›Œλ”©ν• μ§€ λͺ¨λ¦„            β”‚
β”‚ ❌ TTL(Hop count)이 만료됨                           β”‚
β”‚ ❌ νŒ¨ν‚·μ΄ 링크의 MTU보닀 λ„ˆλ¬΄ 큼                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ™œ μ—λŸ¬ 보고가 ν•„μš”ν•œκ°€?

  • βœ… IPλŠ” Best Effort β†’ μ—λŸ¬ μ•Œλ¦Ό 의무 μ—†μŒ
  • ❌ κ·ΈλŸ¬λ‚˜ Silent FailureλŠ” 디버깅이 λΆˆκ°€λŠ₯!
  • βœ… ν•΄κ²°μ±…: ICMP둜 μ—λŸ¬ 상황 전달

Best Effort의 의미: β€œNever having to say you’re sorry” - ν•˜μ§€λ§Œ μ‹€μ œλ‘œλŠ” μ—λŸ¬ 보고가 ν•„μˆ˜μ !


ICMP κ°œμš”

ICMPλž€?

πŸ“šICMP (Internet Control Message Protocol): IPλ₯Ό λ³΄μ‘°ν•˜λŠ” ν”„λ‘œν† μ½œλ‘œ μ—λŸ¬ λ¦¬ν¬νŒ…κ³Ό κ°„λ‹¨ν•œ 쿼리 κΈ°λŠ₯을 제곡

IP 보쑰 ν”„λ‘œν† μ½œ ꡬ쑰:

1
2
3
4
5
6
7
8
9
10
11
12
13
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚         Routing Protocols           β”‚
        β”‚  RIP    OSPF    BGP    PIM          β”‚  ← λΌμš°νŒ… ν…Œμ΄λΈ” ꡬ성
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚       Control Protocols             β”‚
        β”‚     ICMP           IGMP             β”‚  ← μ œμ–΄ λ©”μ‹œμ§€
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚              IP                     β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

ICMP의 계측적 μœ„μΉ˜

TCP/IP Stackμ—μ„œμ˜ μœ„μΉ˜:

1
2
3
4
5
6
7
8
9
10
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Application (Telnet, FTP, HTTP...)  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Transport (TCP, UDP)                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Network (IP)     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚
β”‚                   β”‚  ICMP   β”‚ ◄────  IP μœ„μ—μ„œ λ™μž‘ν•˜μ§€λ§Œ
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜    IP의 μΌλΆ€λ‘œ 간주됨!
β”‚  Data Link (Ethernet, WiFi...)       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

핡심 νŠΉμ§•:

  • Runs on top of IP: TCP/UDP와 같은 레벨
  • Integral part of IP: Transportκ°€ μ•„λ‹Œ IP의 ν•„μˆ˜ ꡬ성 μš”μ†Œ
  • Protocol Field = 1: IP ν—€λ”μ—μ„œ ICMP 식별

ICMP λ©”μ‹œμ§€ ꡬ쑰

ICMP 헀더 포맷

1
2
3
4
5
6
7
8
9
10
11
bit # 0       7 8      15 16    23 24                            31
β”œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Type β”‚  Code  β”‚       Checksum                                 β”‚
β”‚(1 byte)β”‚(1 byte)β”‚      (16 bits)                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚              Rest of the header (4 bytes)                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                β”‚
β”‚                     Data section                               β”‚
β”‚                                                                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

헀더 ν•„λ“œ:

ν•„λ“œν¬κΈ°μ„€λͺ…
Type1 byteICMP λ©”μ‹œμ§€ νƒ€μž…
Code1 byteICMP λ©”μ‹œμ§€ μ„œλΈŒνƒ€μž…
Checksum2 bytes전체 ICMP λ©”μ‹œμ§€μ— λŒ€ν•œ 체크섬 (IP와 μœ μ‚¬)

μ΅œμ†Œ 크기: 8 bytes (μΆ”κ°€ 데이터 없을 경우 4 bytesλŠ” 0으둜 채움)

ICMP μΊ‘μŠν™”

IP Datagram λ‚΄λΆ€ ꡬ쑰:

1
2
3
4
5
6
7
8
9
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  IP Header   β”‚         IP Payload                 β”‚
β”‚              β”‚      (ICMP Message)                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

ICMP Message 상세:
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Type β”‚ Code β”‚ Checksum β”‚    Data Section         β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

ICMP λ©”μ‹œμ§€ νƒ€μž…

Error-Reporting vs Query Messages

ICMP λ©”μ‹œμ§€ λΆ„λ₯˜:

1
2
3
4
5
6
7
8
9
10
                    ICMP Messages
                         β”‚
         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β”‚                               β”‚
    Error-Reporting                   Query
         β”‚                               β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚Type 3, 4,   β”‚              β”‚Type 8/0, 13/14  β”‚
  β”‚5, 11, 12    β”‚              β”‚17/18, 9/10      β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

ICMP νƒ€μž… 전체 λͺ©λ‘

TypeCodeMessageλΆ„λ₯˜μ„€λͺ…
00Echo ReplyQueryPing 응닡
30-15Destination UnreachableErrorλͺ©μ μ§€ 도달 λΆˆκ°€
40Source QuenchError혼작 μ œμ–΄ (ν˜„μž¬ μ‚¬μš© μ•ˆ 함)
50-3RedirectErrorλΌμš°νŒ… 경둜 λ³€κ²½ μ•Œλ¦Ό
80Echo RequestQueryPing μš”μ²­
90Router AdvertisementQueryλΌμš°ν„° μ•Œλ¦Ό
100Router SolicitationQueryλΌμš°ν„° μš”μ²­
110, 1Time ExceededErrorTTL 만료 λ˜λŠ” 재쑰립 νƒ€μž„μ•„μ›ƒ
120, 1Parameter ProblemErrorIP 헀더 였λ₯˜
130Timestamp RequestQueryμ‹œκ°„ 정보 μš”μ²­
140Timestamp ReplyQueryμ‹œκ°„ 정보 응닡
170Address Mask RequestQueryμ„œλΈŒλ„· 마슀크 μš”μ²­
180Address Mask ReplyQueryμ„œλΈŒλ„· 마슀크 응닡

ICMP Error Messages

Error λ©”μ‹œμ§€μ˜ λ™μž‘ 원리

μ—λŸ¬ λ°œμƒ μ‹œ 흐름:

1
2
3
4
5
6
7
8
9
10
Host A                Router                    Host B
  β”‚                      β”‚                         β”‚
  β”œβ”€β”€β”€β”€ IP Datagram ────►│                         β”‚
  β”‚                      β”‚ (문제 λ°œμƒ: TTL=0,      β”‚
  β”‚                      β”‚  λͺ©μ μ§€ unreachable λ“±) β”‚
  β”‚                      β”‚                         β”‚
  β”‚                      β”œβ”€ Drop Datagram          β”‚
  β”‚                      β”‚                         β”‚
  │◄── ICMP Error ────────                         β”‚
  β”‚    Message           β”‚                         β”‚

Error λ©”μ‹œμ§€ 데이터 μ„Ήμ…˜

πŸ“šError Message Content: 원본 νŒ¨ν‚·μ˜ IP 헀더 + 첫 8 bytes payloadλ₯Ό ν¬ν•¨ν•˜μ—¬ μ—λŸ¬ 원인 좔적 κ°€λŠ₯

Error λ©”μ‹œμ§€ ꡬ쑰:

1
2
3
4
5
6
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  IP Header   β”‚ ICMP Header  β”‚  IP Header   β”‚ 8 bytes payload β”‚
β”‚  (new)       β”‚              β”‚  (original)  β”‚  (original)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                   μ—λŸ¬κ°€ λ°œμƒν•œ 원본 νŒ¨ν‚· 정보

ICMP Header:

1
2
3
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Type β”‚ Code β”‚ Checksum β”‚   Unused (0x00000000)  β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ™œ 8 bytes payload?

  • TCP/UDP ν—€λ”μ˜ Source Port, Destination Port 포함 (각 2 bytes)
  • ν˜ΈμŠ€νŠΈκ°€ μ–΄λ–€ μ†ŒμΌ“/μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό κ΄€λ ¨λœ μ—λŸ¬μΈμ§€ 식별 κ°€λŠ₯

ICMP Error λ°œμƒ μ œν•œ 쑰건

λ‹€μŒ κ²½μš°μ—λŠ” ICMP Error λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠμŒ:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
❌ No ICMP Error for:

1. ICMP μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λŠ” datagram
   β†’ λ¬΄ν•œ 루프 λ°©μ§€!

2. Fragmentκ°€ 첫 λ²ˆμ§Έκ°€ μ•„λ‹Œ datagram
   β†’ 첫 fragment만 μ—λŸ¬ 보고

3. Broadcast/Multicast μ£Όμ†Œλ₯Ό κ°€μ§„ datagram
   β†’ λ„€νŠΈμ›Œν¬ 폭주 λ°©μ§€

4. 특수 μ£Όμ†Œ (127.0.0.0, 0.0.0.0)λ₯Ό κ°€μ§„ datagram

5. IP Checksum μ—λŸ¬κ°€ μžˆλŠ” datagram

μ£Όμš” Error λ©”μ‹œμ§€ 상세

Type 3: Destination Unreachable

πŸ“šDestination Unreachable: IP datagram이 λͺ©μ μ§€μ— μ „λ‹¬λ˜μ§€ λͺ»ν•˜κ³  νκΈ°λ˜μ—ˆμŒμ„ μ•Œλ¦Ό

Code 값별 의미:

Codeμ„€λͺ…생성 주체
0Network is unreachableRouter
1Host is unreachableRouter
2Protocol is unreachableHost
3Port is unreachableHost
4Fragmentation required but DF setRouter
5Source routing not feasibleRouter
6Destination network unknownRouter
7Destination host unknownRouter
8Source host isolatedRouter
9Network administratively prohibitedRouter
10Host administratively prohibitedRouter
11Network unreachable for TOSRouter
12Host unreachable for TOSRouter
13Communication administratively prohibitedRouter
14Host precedence violationRouter
15Precedence cutoff in effectRouter

λΌμš°ν„° vs 호슀트: Code 2, 3만 ν˜ΈμŠ€νŠΈκ°€ 생성, λ‚˜λ¨Έμ§€λŠ” λΌμš°ν„°κ°€ 생성!

Code 3: Port Unreachable

λ°œμƒ μ‹œλ‚˜λ¦¬μ˜€:

1
2
3
4
5
6
7
8
Client                              Server
  β”‚                                    β”‚
  β”œβ”€β”€β”€ UDP to port 80 ───────────────►│
  β”‚                                    β”‚ ❌ No process listening
  β”‚                                    β”‚    on port 80
  β”‚                                    β”‚
  │◄──── ICMP Port Unreachable ────────
  β”‚      (Type=3, Code=3)              β”‚

RFC 792 κ·œμ •:

β€œλͺ©μ μ§€ ν˜ΈμŠ€νŠΈμ—μ„œ IP λͺ¨λ“ˆμ΄ ν”„λ‘œν† μ½œ λͺ¨λ“ˆμ΄λ‚˜ ν”„λ‘œμ„ΈμŠ€ ν¬νŠΈκ°€ activeν•˜μ§€ μ•Šμ•„ datagram을 전달할 수 μ—†μœΌλ©΄, destination unreachable λ©”μ‹œμ§€λ₯Ό 전솑할 수 μžˆλ‹€.”

μ‹€μ œ μ˜ˆμ‹œ:

1
2
3
4
5
6
7
8
bsdi % tftp
tftp> connect svr4 8888
tftp> get temp.foo
Transfer timed out.

# tcpdump 좜λ ₯:
bsdi.2924 > svr4.8888: udp 20
svr4 > bsdi: icmp: svr4 udp port 8888 unreachable

Type 5: Redirect

πŸ“šICMP Redirect: 더 λ‚˜μ€ κ²½λ‘œκ°€ μžˆμ„ λ•Œ 호슀트의 λΌμš°νŒ… ν…Œμ΄λΈ”μ„ μ—…λ°μ΄νŠΈν•˜λ„λ‘ μ•Œλ¦Ό

λ°œμƒ 상황:

1
2
3
4
5
6
7
8
9
10
11
12
13
νŠΉμˆ˜ν•œ 상황: 같은 λ„€νŠΈμ›Œν¬μ— μ—¬λŸ¬ λΌμš°ν„°κ°€ μžˆμ„ λ•Œ

                        β”Œβ”€β”€β”€β”€β”
                β”Œβ”€β”€β”€β”€β”€β”€β”€β”‚ R1 │─────────┐
                β”‚       β””β”€β”€β”€β”€β”˜         β”‚
                β”‚                      β”‚
        β”Œβ”€β”€β”€β”€β”  β”‚                      β”‚  Internet  β”Œβ”€β”€β”€β”€β”
        β”‚ S  │───                      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Ίβ”‚ D  β”‚
        β””β”€β”€β”€β”€β”˜  β”‚       β”Œβ”€β”€β”€β”€β”         β”‚            β””β”€β”€β”€β”€β”˜
                └───────│ R2 β”‚β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β””β”€β”€β”€β”€β”˜

문제: Default Router = R1μ΄μ§€λ§Œ, D둜 κ°€λ €λ©΄ R2κ°€ 더 빠름!

Redirect λ™μž‘:

  1. Sκ°€ R1으둜 νŒ¨ν‚· 전솑
  2. R1이 R2κ°€ 더 λ‚˜μ€ κ²½λ‘œμž„μ„ 발견
  3. R1이 Sμ—κ²Œ ICMP Redirect (Type=5) 전솑
  4. S의 λΌμš°νŒ… ν…Œμ΄λΈ” μ—…λ°μ΄νŠΈ: D β†’ R2

Code κ°’:

Codeμ„€λͺ…
0Redirect for network
1Redirect for host
2Redirect for type-of-service and network
3Redirect for type-of-service and host

Type 11: Time Exceeded

πŸ“šTime Exceeded: TTL이 0에 λ„λ‹¬ν•˜κ±°λ‚˜ Fragment 재쑰립 νƒ€μž„μ•„μ›ƒ λ°œμƒ

Code κ°’:

Codeμ„€λͺ…μš©λ„
0Time-to-live equals 0 during transitTraceroute
1Time-to-live equals 0 during reassemblyFragment νƒ€μž„μ•„μ›ƒ

TTL λ™μž‘ μ˜ˆμ‹œ:

1
2
3
4
5
6
7
νŒ¨ν‚· 경둜:
  Host A (TTL=64) β†’ R1 (TTL=63) β†’ R2 (TTL=62) β†’ ... β†’ Destination

TTL=0이 되면:
  Router ──► Drop Packet
         β”‚
         └─► Send ICMP Time Exceeded to Source

Wireshark μ˜ˆμ‹œ:

1
2
3
4
5
6
7
8
Internet Control Message Protocol
  Type: 11 (Time-to-live exceeded)
  Code: 0 (Time to live exceeded in transit)
  Checksum: 0xecbe [correct]
  Unused: 00000000

Internet Protocol Version 4, Src: 192.168.0.2, Dst: 192.168.1.2
User Datagram Protocol, Src Port: 33289, Dst Port: 44444

Type 12: Parameter Problem

λ°œμƒ 경우:

Codeμ„€λͺ…
0IP header bad (catchall error)
1Required option missing

ICMP Query Messages

Query λ©”μ‹œμ§€μ˜ νŠΉμ§•

Query vs Error:

1
2
3
4
5
6
Error Message:              Query Message:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ One-way  β”‚                β”‚ Request  β”‚
β”‚ (μ—λŸ¬ 톡보)β”‚                β”‚   +      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚ Reply    β”‚
                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Query μ’…λ₯˜:

1
2
3
4
5
6
7
8
9
                    Query Messages
                         β”‚
      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
      β”‚                  β”‚                  β”‚
   Echo            Timestamp         Address Mask
 (Type 8/0)        (Type 13/14)      (Type 17/18)
      β”‚                  β”‚                  β”‚
   Router Solicitation/Advertisement
        (Type 10/9)

Type 8/0: Echo Request/Reply (Ping)

Ping의 λ™μž‘ 원리

πŸ“šPing: λ„€νŠΈμ›Œν¬ μ—°κ²°μ„± ν…ŒμŠ€νŠΈ 도ꡬ, ICMP Echo Request/Reply μ‚¬μš©

Ping λ™μž‘:

1
2
3
4
5
6
7
8
9
Host A                              Router/Host B
  β”‚                                       β”‚
  β”œβ”€β”€β”€β”€β”€ ICMP Echo Request (Type=8) ─────►│
  β”‚                                       β”‚
  β”‚                                   Kernel이
  β”‚                                   직접 처리
  β”‚                                       β”‚
  │◄──── ICMP Echo Reply (Type=0) ─────────
  β”‚                                       β”‚

핡심 νŠΉμ§•:

  • βœ… Kernelμ—μ„œ 직접 처리 (Application Layer λΆˆν•„μš”)
  • βœ… 맀우 λΉ λ₯Έ 응닡
  • βœ… λΌμš°ν„°μ™€ 호슀트 λͺ¨λ‘ 응닡 κ°€λŠ₯

Echo Request/Reply 포맷:

1
2
3
4
5
6
7
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Type β”‚ Code β”‚ Checksum β”‚ Identifier β”‚Sequence Numberβ”‚
β”‚ 8/0  β”‚  0   β”‚          β”‚  (2 bytes) β”‚   (2 bytes)  β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Optional Data (κ°€λ³€ 길이)               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Identifier & Sequence Number:

  • Identifier: Ping ν”„λ‘œμ„ΈμŠ€ 식별
  • Sequence Number: 각 μš”μ²­/응닡 μŒμ„ λ§€μΉ­

Type 13/14: Timestamp Request/Reply

Timestamp λ©”μ‹œμ§€

πŸ“šTimestamp: μ‹œμŠ€ν…œ κ°„ μ‹œκ°„ 정보 κ΅ν™˜ 및 Round-Trip Time μΈ‘μ •

포맷:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Type   β”‚ Code β”‚ Checksum β”‚ Identifier β”‚Sequence Numberβ”‚
β”‚ 13 or 14 β”‚  0   β”‚          β”‚            β”‚              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         32-bit Originate Timestamp                       β”‚
β”‚         (μš”μ²­ 전솑 μ‹œκ°„)                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         32-bit Receive Timestamp                         β”‚
β”‚         (μš”μ²­ μˆ˜μ‹  μ‹œκ°„)                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         32-bit Transmit Timestamp                        β”‚
β”‚         (응닡 전솑 μ‹œκ°„)                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ‹œκ°„ ν˜•μ‹:

  • UTC (Universal Coordinated Time) μžμ • 이후 κ²½κ³Ό milliseconds
  • 32-bit β†’ μ•½ 24μ‹œκ°„ 주기둜 overflow

μš©λ„:

  • μ‹œμŠ€ν…œ μ‹œκ³„ 동기화 (NTP의 μ „μ‹ )
  • Round-Trip Time (RTT) μΈ‘μ •

λ„€νŠΈμ›Œν¬ 경둜 탐색

Path MTU Discovery

πŸ“šPMTU (Path MTU): End-to-end κ²½λ‘œμƒμ˜ μ΅œμ†Œ MTU

문제 상황:

1
2
3
4
5
6
7
Host A                Router C               Host B
MTU=1500   MTU=1500   MTU=1400   MTU=1300
   β”‚           β”‚          β”‚           β”‚
   β”œβ”€ 1500B ──►│          β”‚           β”‚
   β”‚           β”œβ”€ 1500B ─►│           β”‚
   β”‚           β”‚          β”‚ ❌ Too big!β”‚
   β”‚           β”‚          β”‚           β”‚

RFC 1191 ν•΄κ²° 방법:

1
2
3
4
5
6
7
8
9
10
11
12
13
Step 1: DF (Don't Fragment) λΉ„νŠΈ μ„€μ •ν•˜κ³  전솑

Step 2: MTU 초과 μ‹œ ICMP μˆ˜μ‹ 
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ Type: 3 (Destination Unreachable)       β”‚
  β”‚ Code: 4 (Fragmentation needed but DF    β”‚
  β”‚          set)                            β”‚
  β”‚ MTU of next hop: 1400 ◄─── μ€‘μš”!        β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 3: 더 μž‘μ€ MTU둜 μž¬μ „μ†‘

Step 4: 성곡할 λ•ŒκΉŒμ§€ 반볡

PMTU Discovery κ³Όμ •:

1
2
3
4
5
6
7
8
9
10
11
12
13
Host A                                      Host E
  β”‚                                            β”‚
  β”œβ”€β”€β”€ Packet (MTU=1500, DF=1) ───────────────► ❌
  β”‚                                            β”‚
  │◄── ICMP: Use MTU=1400 ──────────────────────
  β”‚                                            β”‚
  β”œβ”€β”€β”€ Packet (MTU=1400, DF=1) ───────────────► ❌
  β”‚                                            β”‚
  │◄── ICMP: Use MTU=1300 ──────────────────────
  β”‚                                            β”‚
  β”œβ”€β”€β”€ Packet (MTU=1300, DF=1) ───────────────► βœ…
  β”‚                                            β”‚
  │◄─────── Packet received ────────────────────

Wireshark μ˜ˆμ‹œ:

1
2
3
4
5
6
Internet Control Message Protocol
  Type: 3 (Destination unreachable)
  Code: 4 (Fragmentation needed)
  Checksum: 0x3147 [correct]
  Unused: 0000
  MTU of next hop: 1400 ◄─── λ‹€μŒμ— μ‚¬μš©ν•  MTU!

Traceroute

Traceroute 원리

πŸ“šTraceroute: νŒ¨ν‚·μ΄ λͺ©μ μ§€κΉŒμ§€ κ±°μΉ˜λŠ” λͺ¨λ“  λΌμš°ν„°μ˜ 경둜λ₯Ό μΆ”μ ν•˜λŠ” 도ꡬ

TTL을 μ΄μš©ν•œ 경둜 탐색:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TTL의 λ™μž‘:
  β”Œβ”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”
  β”‚ Src β”‚       β”‚ R1  β”‚       β”‚ R2  β”‚       β”‚ Dst β”‚
  β””β”€β”€β”¬β”€β”€β”˜       β””β”€β”€β”¬β”€β”€β”˜       β””β”€β”€β”¬β”€β”€β”˜       β””β”€β”€β”¬β”€β”€β”˜
     β”‚             β”‚             β”‚             β”‚
     β”œβ”€ TTL=1 ────►│             β”‚             β”‚
     β”‚             β”œβ”€ TTL=0 ❌   β”‚             β”‚
     │◄─ ICMP ──────             β”‚             β”‚
     β”‚   R1 식별   β”‚             β”‚             β”‚
     β”‚             β”‚             β”‚             β”‚
     β”œβ”€β”€β”€β”€ TTL=2 ──┼────────────►│             β”‚
     β”‚             β”‚             β”œβ”€ TTL=0 ❌   β”‚
     │◄─── ICMP ───┼──────────────             β”‚
     β”‚      R2 식별│             β”‚             β”‚
     β”‚             β”‚             β”‚             β”‚
     β”œβ”€β”€β”€β”€ TTL=3 ──┼─────────────┼────────────►│
     β”‚             β”‚             β”‚             β”‚ βœ… 도착

Traceroute μ•Œκ³ λ¦¬μ¦˜:

  1. TTL=1둜 νŒ¨ν‚· 전솑 β†’ 첫 번째 λΌμš°ν„°μ—μ„œ Time Exceeded μˆ˜μ‹ 
  2. TTL=2둜 νŒ¨ν‚· 전솑 β†’ 두 번째 λΌμš°ν„°μ—μ„œ Time Exceeded μˆ˜μ‹ 
  3. TTL=n둜 νŒ¨ν‚· 전솑 β†’ λͺ©μ μ§€ λ„λ‹¬κΉŒμ§€ 반볡

각 ν™‰μ—μ„œ λ°›λŠ” 정보:

1
2
3
4
5
6
ICMP Time Exceeded λ©”μ‹œμ§€:
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ Type: 11 (Time Exceeded)            β”‚
  β”‚ Code: 0 (TTL expired in transit)    β”‚
  β”‚ Source IP: λΌμš°ν„°μ˜ IP μ£Όμ†Œ ◄─ μ€‘μš”! β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Traceroute μ‹€ν–‰ μ˜ˆμ‹œ

λͺ…λ Ήμ–΄:

1
$ traceroute www.whitehouse.gov

좜λ ₯ κ²°κ³Ό:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
traceroute to www.whitehouse.gov (204.102.114.49), 30 hops max, 40 byte packets

 1  cory115-1-gw.EECS.Berkeley.EDU (128.32.48.1)
    0.829 ms  0.660 ms  0.565 ms

 2  cory-cr-1-1-soda-cr-1-2.EECS.Berkeley.EDU (169.229.59.233)
    0.953 ms  0.857 ms  0.727 ms

 3  soda-cr-1-1-soda-br-6-2.EECS.Berkeley.EDU (169.229.59.225)
    1.461 ms  1.260 ms  1.137 ms

 4  g3-8.inr-202-reccev.Berkeley.EDU (128.32.255.169)
    1.402 ms  1.298 ms  *  ◄─── Lost Reply (λΌμš°ν„°κ°€ ICMP μ•ˆ 보냄)

 8  * * *  ◄─── 이 λΌμš°ν„°λŠ” ICMPλ₯Ό 보내지 μ•Šλ„λ‘ 섀정됨

12  a204-102-114-49.deploy.akamaitechnologies.com (204.102.114.49)
    18.137 ms  14.905 ms  19.730 ms  ◄─── Final Hop (λͺ©μ μ§€ 도달!)

각 μ€„μ˜ 의미:

1
2
3
4
5
Hop #  Hostname (IP Address)  RTT1  RTT2  RTT3
  β”‚         β”‚                  β”‚     β”‚     β”‚
  β”‚         β”‚                  └─────┴─────┴─ μ„Έ 번의 μΈ‘μ •κ°’
  β”‚         └─ ν•΄λ‹Ή λΌμš°ν„°μ˜ μ£Όμ†Œ
  └─ 홉 카운트 (TTL κ°’)

특수 ν‘œμ‹œ:

  • * : 응닡 μ—†μŒ (Timeout λ˜λŠ” ICMP 차단)
  • No PTR record: DNS μ—­λ°©ν–₯ 쑰회 μ‹€νŒ¨

Ping & Traceroute Q&A

자주 λ¬»λŠ” 질문

Q: Ping은 λΌμš°ν„°μ— μ˜ν•΄ ν¬μ›Œλ”©λ˜λ‚˜μš”?

A: βœ… Yes! κ·Έλž˜μ„œ 인터넷 μ–΄λ””μ—λ‚˜ ping을 보낼 수 μžˆμŠ΅λ‹ˆλ‹€.

1
2
3
Client ──► Router 1 ──► Router 2 ──► Server
   β”‚                                    β”‚
   └──── Ping은 λͺ¨λ“  λΌμš°ν„°λ₯Ό 톡과 β”€β”€β”€β”€β”€β”€β”˜

Q: λͺ¨λ“  μž₯λΉ„κ°€ Ping에 μ‘λ‹΅ν•˜λ‚˜μš”?

A: ❌ No! λ³΄μ•ˆμƒμ˜ 이유둜 λ§Žμ€ μž₯λΉ„κ°€ ICMPλ₯Ό μ°¨λ‹¨ν•©λ‹ˆλ‹€.

1
2
3
4
차단 이유:
1. λ³΄μ•ˆ: DoS 곡격 λ°©μ§€
2. μ •μ±…: λ„€νŠΈμ›Œν¬ ꡬ쑰 μˆ¨κΉ€
3. μ„±λŠ₯: ICMP 처리 λΆ€λ‹΄ κ°μ†Œ

Q: λΌμš°ν„°κ°€ λ‹€λ₯Έ μž₯λΉ„λ‘œ κ°€λŠ” Ping을 ν¬μ›Œλ”©ν•˜μ§€ μ•Šμ„ 수 μžˆλ‚˜μš”?

A: βœ… Yes! λΌμš°ν„°λŠ” λ‹€μŒκ³Ό 같이 μ„€μ • κ°€λŠ₯:

  • Ping 응닡 μ•ˆ 함 (μžμ‹ μ— λŒ€ν•œ)
  • Ping ν¬μ›Œλ”© μ•ˆ 함 (λ‹€λ₯Έ μž₯λΉ„λ‘œ κ°€λŠ”)

ICMPv6 (IPv6용 ICMP)

ICMPv4μ™€μ˜ 차이점

πŸ“šICMPv6: IPv6용으둜 ν™•μž₯된 ICMP, ARP와 IGMP κΈ°λŠ₯κΉŒμ§€ 톡합

μ£Όμš” λ³€κ²½ 사항:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ICMPv4 β†’ ICMPv6 λ³€ν™”:

βœ… μœ μ§€:
  - Error message (Destination Unreachable, Time Exceeded λ“±)
  - Query request/response (Echo, Timestamp λ“±)

❌ 제거:
  - μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ‹œμ§€ νƒ€μž… μ‚­μ œ

βž• μΆ”κ°€:
  - Neighbor Solicitation (NS) - ARP request μ—­ν• 
  - Neighbor Advertisement (NA) - ARP response μ—­ν• 
  - Packet Too Big (Type 2) - Fragmentation 제거둜 μƒˆλ‘œ μΆ”κ°€
  - Multicast Listener Discovery (MLD) - IGMP μ—­ν• 

ICMPv6 Neighbor Discovery

NS (Neighbor Solicitation):

1
2
3
4
5
6
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Type=135 β”‚Code=0β”‚ Checksum β”‚      Reserved      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Target Address (128 bits)              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

NA (Neighbor Advertisement):

1
2
3
4
5
6
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”¬β”€β”€β”¬β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Type=136 β”‚Code=0β”‚ Checksum β”‚R β”‚S β”‚O β”‚ Reserved β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”΄β”€β”€β”΄β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Target Address (128 bits)              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Flags:

  • R (Router): 1이면 λΌμš°ν„°κ°€ 전솑, 0이면 호슀트
  • S (Solicited): 1이면 NS에 λŒ€ν•œ 응닡
  • O (Override): 1이면 κΈ°μ‘΄ μΊμ‹œ 정보 μ—…λ°μ΄νŠΈ

ICMPv6 μ£Όμš” 차이

1. Fragmentation λ³€κ²½:

1
2
3
4
5
6
IPv4: λΌμš°ν„°κ°€ Fragment κ°€λŠ₯
  └─► Fragment κ΄€λ ¨ ICMP λ©”μ‹œμ§€

IPv6: Fragmentation μ—†μŒ!
  └─► Packet Too Big (Type 2) λ©”μ‹œμ§€
      MTU보닀 큰 νŒ¨ν‚·μ€ 무쑰건 Drop + ICMP 전솑

2. Multicast 지원:

1
2
3
ICMPv6λŠ” Multicast도 지원:
  - Neighbor Discovery에 Multicast μ‚¬μš©
  - Multicast Listener Discovery (MLD)

ICMP의 μ‹€μ „ ν™œμš©

λ„€νŠΈμ›Œν¬ 진단 μ›Œν¬ν”Œλ‘œμš°

문제 진단 μˆœμ„œ:

1
2
3
4
5
6
7
8
9
10
11
12
13
1. Ping으둜 μ—°κ²°μ„± 확인
   β”œβ”€β–Ί 성곡 β†’ λ„€νŠΈμ›Œν¬ 정상
   └─► μ‹€νŒ¨ ↓

2. Traceroute둜 경둜 확인
   β”œβ”€β–Ί μ–΄λ””μ„œ λŠκΈ°λŠ”μ§€ 확인
   └─► 문제 λΌμš°ν„° 식별 ↓

3. PMTU Discovery둜 MTU 문제 확인
   └─► Fragmentation 이슈 ν•΄κ²°

4. ICMP Error 둜그 뢄석
   └─► κ·Όλ³Έ 원인 νŒŒμ•…

λ³΄μ•ˆ 고렀사항

ICMP λ‚¨μš© λ°©μ§€:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
곡격 μœ ν˜•:
1. ICMP Flood (Ping Flood)
   └─► λŒ€λŸ‰μ˜ Echo Request둜 κ³ΌλΆ€ν•˜

2. Smurf Attack
   └─► Broadcast μ£Όμ†Œλ‘œ Ping β†’ 증폭 곡격

3. ICMP Redirect μŠ€ν‘Έν•‘
   └─► μ•…μ˜μ μΈ 경둜 λ³€κ²½

λŒ€μ‘:
βœ… Rate Limiting: ICMP λ©”μ‹œμ§€ 속도 μ œν•œ
βœ… Filtering: λΆˆν•„μš”ν•œ ICMP νƒ€μž… 차단
βœ… Validation: Source IP 검증

정리

ICMP의 핡심 μ—­ν• 

κΈ°λŠ₯μ„€λͺ…λŒ€ν‘œ λ©”μ‹œμ§€
Error ReportingIP 전솑 쀑 λ°œμƒν•œ 문제 보고Type 3, 11, 12
Diagnosticsλ„€νŠΈμ›Œν¬ μ—°κ²° 및 경둜 진단Ping, Traceroute
Path DiscoveryMTU 및 경둜 정보 탐색PMTU Discovery
ControlλΌμš°νŒ… μ΅œμ ν™” 및 μ œμ–΄Redirect

μ£Όμš” ICMP λ©”μ‹œμ§€ μš”μ•½

Typeμ΄λ¦„μš©λ„ν•΅μ‹¬ ν™œμš©
0/8Echo Reply/Requestμ—°κ²°μ„± ν…ŒμŠ€νŠΈPing
3Destination Unreachable전달 μ‹€νŒ¨ μ•Œλ¦Όλ””λ²„κΉ…
5Redirect경둜 μ΅œμ ν™”λΌμš°νŒ… ν…Œμ΄λΈ” μ—…λ°μ΄νŠΈ
11Time ExceededTTL 만료Traceroute

ICMP의 핡심: IP의 Best Effortλ₯Ό λ³΄μ™„ν•˜μ—¬ λ„€νŠΈμ›Œν¬λ₯Ό 진단 κ°€λŠ₯ν•˜κ³  디버깅 κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” ν•„μˆ˜ ν”„λ‘œν† μ½œ!

ICMP μ—†μ΄λŠ” λΆˆκ°€λŠ₯ν•œ 것듀:

  • ❌ Ping으둜 μ—°κ²° 확인
  • ❌ Traceroute둜 경둜 좔적
  • ❌ PMTU Discovery둜 졜적 νŒ¨ν‚· 크기 κ²°μ •
  • ❌ μ—λŸ¬ λ°œμƒ μ‹œ 원인 νŒŒμ•…
This post is licensed under CC BY 4.0 by the author.