본문 바로가기

프로그래밍/Computer Network

12. Verifying connectivity

1. ICMP(Internet Control Message Protocol)

 

우리는 network에서 웹페이지가 보이지 않는 등과 같은 많은 network connection문제를 겪는다. 

ICMP는 router, remote host가 original transmission이 왜 실패했는지를 communication하기 위해 사용한다. 

ICMP는 five-layer TCP/IP model에서 internet layer protocol이며, IPv4 header이후에 ICMP datagram이 나온다.

ICMP header는 다음과 같이 이루어져 있다.

 

출처 : Wikipedia

 

Type은 message의 유형을 나타낸다.

Code는 해당 message가 전달된 구체적인 이유를 의미한다.

Checksum은 ICMP datagram의 무결정을 검증하기 위해 사용한다.

Rest of header은 나머지 부분으로 type, code에 따라 다르게 설정된다.

 

Data section은 error message를 일으킨 IPv4 datagram의 일부와 같은 것들을 포함한다. 

ICMP는 사람이 사용하기 어렵도록 되어있기 때문에, 여러 tool을 사용하는데 대표적으로 거의 모든 OS에서 사용가능한 Ping이 있다. 

Ping은 기본적으로 Echo request(Type:8, Code:0)라고 하는 ICMP message를 보낸다. 

만약 destination이 정상적으로 동작하고 communication이 가능하다면, Echo reply(Type:0, Code:0)를 받는다.

실행 후 출력되는 창은 OS에 따라 다를 수 있다.

 

2. Traceroute(Linux/Mac), Tracert(Windows)

 

패킷의 네트워크 통과경로 중 어느 구간에서 문제가 생기는지 파악하려고 할 때 유용하다. 

기본적으로 internet layer의 TTL값을 1부터 시작해서 1씩 증가시켜가며 패킷을 목적지로 전송한다.

목적지에 도달하기 전에 TTL값이 0이되어버린 패킷들은 ICMP Time-exceeded(Type:11)를 응답받는다. 

Traceroute는 사용되지 않는 high number port로 UDP패킷을 보내고, 목적지에 성공적으로 도달하면 ICMP Destination Port Unreachable(Type:3, Code 3)를 수신한다.

Tracert는 ICMP Echo request를 보내고, 목적지에 성공적으로 도달하면  ICMP Echo reply를 수신한다.

 

MTR(Linux/Mac), Pathping(Windows)은 실행시간이 더 긴 traceroute(tracert)/ping의 조합이라고 생각하면된다. 네트워크 구간을 점검하기 위해 더 많은 시간동안 데이터를 수집하고 총합적으로 분석한다.

 

3. Testing port connectivity

 

Internet layer에서 전송은 정상적으로 되는데, TCP connection이 연결이 잘 안되는 경우도 있을 것이다. 

이런 경우 Netcat(Linux/Mac), Test-NetConnection(Windows)을 사용할 수 있다.

Netcat에 port번호를 지정하거나, Tes-Netconnection에 -port 옵션을 지정하는 방식을 사용하면 된다.

테스트 목적의 TCP connection을 시도해봄으로서 연결이 잘 되는지를 확인할 수 있다.

'프로그래밍 > Computer Network' 카테고리의 다른 글

14. IPv6  (0) 2024.04.23
13. Cloud  (0) 2024.04.23
11. Connecting to Internet (2)  (0) 2024.04.20
10. Connecting to Internet (1)  (0) 2024.04.16
9. VPN & Proxy  (0) 2024.04.15