ICMP : internet control message protocol
네트워크 상에서 이런저런 증상들을 알기위한
컨트롤 메세지를 보내는 프로토콜
- ICMP의 목적:
- ICMP는 호스트와 라우터가 네트워크 수준 정보를 통신하는 데 사용됩니다. 주로 오류 보고 (예: 호스트, 네트워크, 포트 또는 프로토콜에 접근 불가)와 에코 요청/응답(ping 명령어에서 사용됨)을 위해 사용됩니다.
- 네트워크 계층:
- ICMP는 네트워크 계층에서 동작하며, IP 데이터그램 내에 포함되어 전달됩니다.
- ICMP 메시지 구조:
- ICMP 메시지는 타입, 코드, 그리고 오류를 발생시킨 IP 데이터그램의 처음 8바이트로 구성됩니다.
- ICMP 타입과 코드:
- 오른쪽에 있는 표는 일반적인 ICMP 타입과 코드를 보여줍니다
- 타입 0, 코드 0: 에코 응답(ping 응답)
- 타입 3, 코드 0: 목적지 네트워크 접근 불가
- 타입 3, 코드 1: 목적지 호스트 접근 불가
- 타입 3, 코드 2: 목적지 프로토콜 접근 불가
- 타입 3, 코드 3: 목적지 포트 접근 불가
- 타입 3, 코드 6: 목적지 네트워크 미상
- 타입 3, 코드 7: 목적지 호스트 미상
- 타입 4, 코드 0: 소스 퀜치(혼잡 제어, 현재는 사용되지 않음)
- 타입 8, 코드 0: 에코 요청(ping 요청)
- 타입 9, 코드 0: 라우트 광고
- 타입 10, 코드 0: 라우터 검색
- 타입 11, 코드 0: TTL(수명 시간) 만료
- 타입 12, 코드 0: 잘못된 IP 헤더
- 오른쪽에 있는 표는 일반적인 ICMP 타입과 코드를 보여줍니다
Traceroute와 ICMP
Traceroute는 네트워크 경로를 추적하는 데 사용되며, 각 중간 라우터에서 발생하는 ICMP 메시지를 통해 네트워크의 각 구간의 응답 시간을 측정합니다. 이 정보는 네트워크 문제를 진단하고 최종 목적지까지의 경로를 파악하는 데 유용합니다.
- Traceroute 작업 과정:
- 출발지에서 목적지로 UDP 세그먼트(데이터 패킷)를 여러 번 보냅니다.
- 첫 번째 세트는 TTL(Time to Live)이 1로 설정됩니다.
- 두 번째 세트는 TTL=2로 설정됩니다.
- 흔하지 않은 포트 번호를 사용합니다.
- 출발지에서 목적지로 UDP 세그먼트(데이터 패킷)를 여러 번 보냅니다.
- 데이터그램이 라우터에 도달했을 때:
- 각 세트의 데이터그램이 해당 라우터에 도착하면:
- 라우터는 데이터그램을 버리고,
- 출발지에 ICMP 메시지(타입 11, 코드 0)를 보냅니다.
- 이 ICMP 메시지에는 라우터의 이름과 IP 주소가 포함됩니다.
- 각 세트의 데이터그램이 해당 라우터에 도착하면:
- ICMP 메시지가 도착했을 때:
- ICMP 메시지가 도착하면, 출발지는 **왕복 시간(RTT, Round Trip Time)**을 기록합니다.
- 정지 기준:
- UDP 세그먼트가 최종 목적지 호스트에 도착하면,
- 목적지에서 ICMP "포트 접근 불가" 메시지(타입 3, 코드 3)를 반환하고,
- 이때 작업이 중지됩니다.
IPv6
이거 아직까지도 도입 안된거보면
앞으로도 안될 가능성 높다
어떻게 사용할지 아직까지 제대로 협의된게 아니니
자세히 알필요 없고 대충 알아두자
ㅡ> address 크기가 128bits 라서 주소가 부족할 걱정은 없다
터널링 (Tunneling)
IPv4와 IPv6 라우터가 공존하는 과도기에는
서로 이해할 수 있는 헤더로 바꾸는 터널링 과정이 필요하다.
- 모든 라우터를 동시에 업그레이드할 수 없음:
- 모든 네트워크 라우터를 한꺼번에 IPv6로 업그레이드하는 것은 현실적으로 불가능합니다. 이 때문에 IPv4와 IPv6 라우터가 혼재된 상태로 네트워크가 운영되어야 합니다.
- 이를 위해, 별도의 "flag day" (모든 시스템이 동시에 변환되는 날) 없이 네트워크가 혼합된 상태에서 작동해야 합니다.
- 터널링 (Tunneling):
- IPv4 라우터들 사이에서 IPv6 데이터를 전송할 때, IPv6 데이터그램을 IPv4 데이터그램의 **페이로드(payload)**로 캡슐화하여 전송하는 방식이 사용됩니다.
- 이 방법은 IPv6 패킷을 IPv4 패킷 안에 담아 IPv4 라우터를 통해 전송하고, 목적지에서 이를 다시 IPv6로 해석할 수 있도록 해줍니다. 이는 IPv6로 완전히 전환하기 전까지 IPv4 네트워크에서 IPv6 데이터를 사용할 수 있게 해주는 임시 해결책입니다.
이러한 방식을 통해 IPv6로의 점진적인 전환이 가능해지고, 두 프로토콜이 공존하는 동안의 호환성을 유지할 수 있습니다.
- Logical View:
- A, B, E, F 라우터들이 IPv6 네트워크 상에 있습니다.
- B와 E 라우터 사이에는 IPv4 네트워크(C와 D 라우터)가 존재합니다.
- 터널링을 통해 B와 E 라우터는 IPv4 네트워크를 통해 연결되며, 그 사이에서는 IPv4 네트워크를 사용해 데이터를 전달하지만, 그 외 구간에서는 IPv6 프로토콜을 유지합니다.
- Physical View:
- B와 C 구간, 그리고 D와 E 구간에서는 IPv4를 사용하여 데이터를 전달합니다.
- B-to-C (IPv6 inside IPv4): IPv6 데이터그램이 IPv4 패킷 안에 캡슐화되어 전달됩니다. 즉, 원래의 IPv6 데이터는 그대로 있지만 외부에서는 IPv4 패킷으로 보입니다.
- D에서 E로 전송될 때 다시 IPv6 패킷으로 복원되며, E-to-F까지는 다시 순수 IPv6로 전송됩니다.
따라서, 터널링은 IPv6 패킷이 IPv4 네트워크를 통과해야 할 때, IPv6 패킷을 IPv4 패킷으로 감싸서 전송하는 기법을 의미하며, 이를 통해 IPv4 네트워크를 지나가는 동안에도 IPv6 데이터가 손상되지 않도록 보장할 수 있습니다.
라우팅
라우팅 : 경로를 설정하는 것 (포워딩 테이블 제작)
포워딩 : 그 경로로 보내는 것
라우팅과 포워딩 사이의 상호작용
- 라우팅 알고리즘(Routing Algorithm):
- 라우팅 알고리즘은 네트워크를 통해 데이터 패킷이 목적지까지 이동하는 전체 경로(end-to-end-path)를 결정합니다.
- 각 라우터는 라우팅 알고리즘을 사용하여 최적의 경로를 계산한 후, 그 경로에 대한 정보를 라우터의 포워딩 테이블에 저장합니다.
- 포워딩(Forwarding):
- 포워딩은 라우터에 도착한 패킷을 어떤 출구 링크로 보낼지 결정하는 과정입니다.
- 패킷의 목적지 IP 주소와 라우터의 포워딩 테이블을 참고하여 패킷을 올바른 출구 링크로 전달합니다.
- 포워딩 테이블(Forwarding Table):
- 포워딩 테이블은 목적지 주소 범위(destination address range)와 그에 맞는 출력 링크(output link)를 매핑한 정보입니다.
- 이 정보에 따라 라우터는 패킷이 어느 링크로 나가야 하는지를 결정합니다.
따라서 라우팅은 전체 네트워크에서 최적의 경로를 계산하는 과정이고, 포워딩은 라우터에서 해당 경로에 따라 패킷을 올바른 방향으로 보내는 과정입니다.
그래프 추상화
네트워크를 그래프로 보자
노드
ㅡ> 라우터
엣지
ㅡ> 라우터간의 링크
ㅡ> 링크 코스트 : 실제거리, 트래픽의 양 등
costs
- 노드 (Node)는 네트워크의 라우터를 나타내고, 그래프에서 u, v, w, x, y, z로 표시됩니다.
- 링크 (Link)는 라우터 간의 물리적 연결이며, 각 링크에는 비용 (Cost)이 지정되어 있습니다. 비용은 대역폭, 혼잡도, 또는 링크의 지연 시간과 같은 요소에 따라 달라집니다.
- 경로의 비용 (Cost of Path)은 주어진 경로 상의 각 링크 비용들의 합으로 계산됩니다.
여기서 중요한 질문은 "어떻게 u에서 z까지 최소 비용 경로를 찾을 수 있을까?"입니다. 이 문제를 해결하는 것이 라우팅 알고리즘의 역할입니다.
라우팅 알고리즘 분류
- 글로벌(Global) 또는 분산(Decentralized) 정보:
- Global (전역): 모든 라우터가 네트워크의 전체 토폴로지 및 링크 비용 정보를 가지고 있습니다. 이는 링크 상태(Link State) 알고리즘과 관련이 있습니다.
- Decentralized (분산): 각 라우터는 물리적으로 연결된 이웃 라우터와의 정보만 알고 있으며, 링크 비용은 이웃과의 교환 과정에서 얻습니다. 이는 거리 벡터(Distance Vector) 알고리즘과 관련이 있습니다.
- 정적(Static) 또는 동적(Dynamic):
- Static (정적): 경로가 시간이 지남에 따라 천천히 변하는 경우로, 변동이 거의 없고 주기적으로 경로가 갱신되지 않습니다.
- Dynamic (동적): 경로가 빠르게 변화하며, 주기적으로 업데이트되거나 링크 비용 변화에 반응하여 경로가 조정됩니다.
이러한 분류는 네트워크 환경에 따라 최적의 라우팅 알고리즘을 선택할 수 있는 중요한 기준이 됩니다.
Link State 라우팅 알고리즘
Dijkstra의 알고리즘
- 네트워크 토폴로지 및 링크 비용이 모든 노드에 알려져 있습니다.
- "link state broadcast"를 통해 수행됩니다. (모든 비용이 브로드캐스트로 알려진 연결상태)
- 모든 노드는 동일한 정보를 가집니다.
- 하나의 소스 노드에서 모든 다른 노드로의 최소 비용 경로를 계산합니다.
- 해당 소스 노드에 대한 포워딩 테이블을 제공합니다.
- 반복적으로 작동하며, k번의 반복 후 k개의 목적지 노드로 가는 최소 비용 경로를 알 수 있습니다.
표기법:
- C(x,y): 노드 x에서 y까지의 링크 비용을 나타냅니다. x와 y가 이웃하지 않으면 비용은 ∞로 설정됩니다.
- D(v): 소스에서 목적지 v까지의 경로 비용의 현재 값입니다.
- p(v): 소스에서 v까지의 경로에서 바로 이전 노드를 나타냅니다.
- N': 최소 비용 경로가 확실히 알려진 노드의 집합입니다.
이 알고리즘은 네트워크에서 가장 짧은 경로를 찾는 데 매우 유용하며, 링크 상태 알고리즘에서 중요한 역할을 합니다.
Dijkstra의 알고리즘
초기화 (Initialization):
- N' = {u}: 시작 노드 u를 포함하는 집합을 초기화합니다.
- 모든 노드 v에 대해:
- 만약 v가 u에 인접해 있으면, D(v) = c(u, v) (u에서 v까지의 비용)
- 그렇지 않으면, D(v) = ∞ (u에서 v까지의 경로가 없음을 의미)
루프 (Loop):
- N'에 포함되지 않은 w 중에서 D(w)가 가장 작은 노드를 선택합니다.
- 선택한 w를 N'에 추가합니다.
- N'에 포함되지 않은 모든 인접한 노드 v에 대해 D(v)를 갱신합니다:
- D(v) = min(D(v), D(w) + c(w, v))
- 즉, v로 가는 기존 비용 D(v)와 w를 경유하는 새로운 비용 D(w) + c(w, v) 중 작은 값을 선택합니다.
이 과정을 모든 노드가 N'에 포함될 때까지 반복합니다.
이 알고리즘은 최단 경로를 찾기 위해 점진적으로 각 노드의 최단 경로를 확정하며, 반복적인 비교와 갱신을 통해 전체 네트워크의 최단 경로를 계산합니다.
예시
테이블 설명:
- Step: 알고리즘의 단계. 각 단계에서 새로운 노드를 N'에 추가합니다.
- N': 이미 최단 경로가 확정된 노드의 집합.
- D(v), D(w), D(x), D(y), D(z): 각 노드까지의 최단 경로 비용과 그 경로에서 이전 노드를 나타냅니다. 예를 들어, "D(v)"는 노드 v까지의 최소 비용이며, 그 경로의 바로 이전 노드를 표시합니다.
예를 들어, D(w) = 3, u는 노드 w까지의 최소 경로 비용이 3이고, 그 경로에서 u를 거친다는 것을 의미합니다.
예시 단계:
- Step 0: 출발점은 u입니다. 초기 설정으로 u에서 다른 노드들까지의 경로 비용을 설정합니다.
- D(w) = 3, u: u에서 w까지의 최소 경로 비용은 3입니다.
- D(x) = 5, u: u에서 x까지의 최소 경로 비용은 5입니다.
- 나머지 노드들은 아직 경로가 확정되지 않아서 무한대(∞)로 설정되어 있습니다.
- Step 1: w를 선택하여 N'에 추가합니다. w는 가장 낮은 경로 비용(3)을 가지고 있기 때문입니다.
- w를 통해 다른 노드로 가는 경로를 업데이트합니다. 예를 들어, w에서 x로 가는 경로는 5이고, 이 경로는 u를 통해 가는 경로보다 더 짧지 않기 때문에 변경되지 않습니다.
이런 방식으로 각 단계에서 가장 낮은 비용을 가진 노드를 선택하고, 그 노드를 통해 다른 노드로 가는 경로를 업데이트하는 과정을 반복합니다.
최종 결과:
- Step 5: 모든 노드의 최단 경로가 확정되었습니다. N'에 포함된 모든 노드는 u에서 시작해 각 노드까지의 최단 경로가 결정되었습니다.
포워딩 테이블
출발지 : 라우터 U
각 목적지(destination)에 따른 다음 홉(next hob)을 적은
포워딩 테이블
시간복잡도
진동 가능성 (Oscillations Possible)
- 진동은 링크 비용이 네트워크 상의 트래픽 양에 따라 변할 수 있을 때 발생할 수 있습니다.
- 이미지 하단의 시각적 예시는 이런 진동이 발생하는 과정을 보여줍니다.
- 처음에 링크 비용은 일정하지만, 경로 재계산 이후 링크의 트래픽 양에 따라 비용이 달라집니다. 예를 들어, 링크 A-B의 비용은 1+e(추가 비용)로 증가할 수 있습니다.
- 링크 비용이 업데이트되면 경로 재계산이 다시 발생하며, 이로 인해 새로운 트래픽 경로가 설정되고 링크 비용이 또다시 변할 수 있습니다.
- 이러한 과정이 반복되면 네트워크 경로 설정이 계속 바뀌면서 "진동"이 발생할 수 있습니다.
이러한 진동 문제는 링크 비용이 트래픽에 따라 동적으로 변화할 때 주로 발생하며, 안정적인 경로 설정을 위해서는 추가적인 조정이 필요할 수 있습니다.
한계
모든 링크 비용을 아는건 현실적으로 불가능해서
관리주체가 동일한 네트워크 범위 안에서만 사용한다.
(예시: 한양대 네트워크 안에서만 사용)
'CS > 네트워크' 카테고리의 다른 글
네트워크계층6 (1) | 2024.10.10 |
---|---|
네트워크계층5 - 거리벡터, 벨만포드 (2) | 2024.10.09 |
네트워크계층3 - NAT, DHCP, datagram, 단편화/재조립 (0) | 2024.10.05 |
네트워크계층1 (0) | 2024.10.01 |
전송계층4 - 혼잡 제어, 공정성 (0) | 2024.09.27 |