-> 블로그 이전

[Network] 네트워크 계층 : ICMP / IPv6

2022. 2. 23. 14:11Major`/컴퓨터 네트워크

ICMP (Internet Control Message Protocol)

1.  (Host - Host) / (Host - Router) / (Router - Router) 간에 네트워크 계층 제어 정보 교환을 위한 프로토콜

  • 에러 발생 여부
  • 상호간에 서로 살아있는지 확인 (네트워크 연결 여부)

>> Data를 교환하는게 아니라 상호간에 제어 정보를 교환하기 위한 프로토콜이다

 

2. IP의 상위 계층이다

  • 물론 IP / ICMP / Routing_P 3개 모두 네트워크 계층 안에 속하긴 하지만, 그 안에서도 상위-하위가 나뉘어져 있다
  • 따라서, ICMP 메시지는 최종적으로 IP 데이터그램의 페이로드에 캡슐화되어서 보내진다
IP 헤더 페이로드
출발지 IP / 목적지 IP / .... ICMP 메시지 + 여러 Data
ICMP 메시지
- 타입
- 코드
- 에러가 발생한 IP 데이터그램의 첫 8bytes

ICMP 메시지
타입 코드 설명
0 0 echo reply (ping)
3 0 dest network unreachable
3 1 dest host unreachable
3 2 dest protocol unreachable
3 3 dest port unreachable
3 6 dest network unknown
3 7 dest host unknown
4 0 sourch quench (congestion control - not used)
8 0 echo request (ping)
9 0 route advertisement
10 0 router discovery
11 0 TTL expired
12 0 bad IP header

- (0, 0) & (8, 0)

  • 상호간에 서로 살아있는지 확인하는 ICMP 메시지

- (3, 0 ~ 7)

  • Destination의 문제 or IP헤더의 문제로 인해 데이터그램이 제대로 전송되지 않았을 경우

- (9, 0) & (10, 0)

  • 라우팅 프로토콜을 위해 사용되는 ICMP 메시지

- (11, 0) & (12, 0)

  • 데이터그램 Drop 관련 ICMP 메시지
    • TTL expired : 데이터그램의 TTL 종료
    • Bad IP header : IP 헤더의 체크섬을 체크했는데 오류가 존재할 경우

Traceroute & ICMP

Traceroute 프로그램 : Source ↔ Destination 간의 Router 이름 + 해당 Router 주소를 추적하는 프로그램

  • ICMP 메시지를 활용해서 추적한다

동작 과정

1. Source는 Destination에 UDP 세그먼트를 3개씩 계속 보낸다 :: UDP 세그먼트 3개당 한 Set

  • 첫번째 데이터그램 TTL = 1
    • 이 데이터그램은 Hop(1) Router에서 TTL expired가 발생하게 된다
    • 따라서, Hop(1) Router에서 (11, 0 : TTL expired) ICMP 메시지를 Source로 보낸다
      • ICMP 메시지에 추가적으로 라우터 이름 + 라우터 IP주소가 포함된다
  • 두번째 데이터그램 TTL = 2
    • 이 데이터그램은 Hop(2) Router에서 TTL expired가 발생하게 된다
    • 따라서, Hop(2) Router에서 마찬가지로 (11, 0 : TTL expired) ICMP 메시지를 Source로 보낸다
  • ....
  • n번째 데이터그램 TTL = n
    • 이 데이터그램은 Hop(n) Router에서 TTL expired가 발생하게 된다
  • 이렇게 계속해서 ICMP 메시지가 도착할 때마다 Source는 RTT를 계산한다

 

2. 단, UDP 세그먼트의 포트번호에는 Destination Host가 사용할 거 같지 않은 랜덤한 포트번호를 기입해서 보낸다

 

3. 이렇게 계속해서 UDP 세그먼트 Set을 보내다보면 TTL이 굉장히 크게 증가할 것이다

 

4. TTL이 굉장히 커져서 결국 목적지에 도달하게 되면

  • 당연히 목적지에 도달은 했으니까 TTL expired는 발생하지 않는다
  • 그 대신, UDP 세그먼트의 포트번호를 Destination이 구별하지 못하기 때문에 (3, 3 : dest port unreachable) ICMP 메시지를 Source로 보내게 된다

 

5. Source가 (3, 3 : dest port unreachable) ICMP 메시지를 받게 되는 순간, Source는 "드디어 Destination에 데이터그램이 도달했구나"라고 생각해서 더 이상 보내지 않게 된다


Example) traceroute google.com

(2)

192.168.0.1 (192.168.0.1) 1.596ms 1.858ms 1.690ms

  • 먼저 LAN상에서 기본 게이트웨이로 데이터그램을 보냈다

>> 3개의 UDP 세그먼트의 RTT가 각각 1.596ms / 1.858ms / 1.690ms이다

 

(3)

* * *

  • 보안상의 이유 or Packet Loss로 인해 Packet의 응답이 없을 경우 "*"로 표시된다

 

(5)

211.174.0.145 (211.174.0.145) 10.599ms 20.695ms 211.174.0.129 (211.174.0.129) 21.625ms

  • 3개의 UDP 세그먼트 중 2개는 211.174.0.145 Router에서 TTL expired
  • 나머지 하나는 211.174.0.129 Router에서 TTL expired

 

(13)

nrt12s35-in-f14.1e100.net (142.250.196.110) 41.422ms 43.923ms 209.85.244.2 (209.85.244.2) 40.510ms

  • 3개의 UDP 세그먼트 중 2개가 최종 목적지인 google.com (142.250.196.110)에서 dest port unreachable 되었다
  • 나머지 하나는 209.85.244.2 Router에서 TTL expired 되었다

IPv6

1. IPv4의 주소가 굉장히 빠르게 고갈되어 가고 있어서 개발된 주소 형태이다

  • IPv4의 주소 고갈을 해결하기 위해 CIDR/DHCP/NAT를 통해서 최대한 주소를 효율적으로 사용하고 있기는 하다

2. 헤더길이가 고정적으로 40byte이다

3. IPv6는 단편화를 허용하지 않는다

  • 데이터그램의 processing time을 단축하기 위해서 이렇게 구현하였다

4. 체크섬 또한 제거되었다

  • 이 또한 각 홉에서의 처리 시간을 줄이기 위해서 제거

5. IPv6전용 ICMPv6가 개발되었다

  • 추가적 메시지 타입 : Packet Too Big
    • IPv6는 단편화가 금지되어 있기 때문에 "Packet Too Big" ICMPv6 메시지를 보내서 해당 Packet을 Drop시킨다
    • 그러면 Source자체에서 처음부터 단편화를 시켜서 다시 보내준다

 

Priority / Flow Label

- QoS(Quality of Service)를 위한 필드이다

  • Priority : Flow 중인 데이터그램들 사이에 우선순위를 부여해서 먼저 처리되도록 해준다
  • Flow Label : 같은 Flow의 데이터그램들을 구분해준다

 

Next Header

1) 만약 Option Header 존재 O

  • Next Header필드에 다음 헤더에 대한 정보를 기입해준다
  • 마지막 데이터그램의 Next Header 필드에는 Transport-Layer Protocol을 기입해준다 (TCP? UDP?)

 

2) 만약 Option Header 존재 X

  • 마지막 데이터그램의 Next Header 필드에 Transport-Layer Protocol을 기입해준다 (TCP? UDP?)

>> Next Header 필드에서 Protocol 필드 정보까지 해주기 때문에 IPv4에 존재하던 Protocol 필드는 사라졌다


IPv4 → IPv6 전환

- 하루 아침에 IPv4를 IPv6로 변경하는 것은 사실상 불가능하다

- 점차적으로 변경해야 한다

 

터널링 (Tunneling)

- 점차적으로 IPv6로 변환하는 방법

- IPv4 Router들이 IPv6 데이터그램을 IPv4 데이터그램의 페이로드로써 운반하는 방식이다