네트워크 상에서 증상을 알기 위한 컨트롤 메시지를 운반하는 프로토콜이다. IP 패킷을 처리할 때 발생하는 에러를 알려주며 보통 네트워크 진단을 위해 많이 사용된다.
목적지의 호스트가 없거나 목적지 port에 서버 프로그램이 없는 등의 에러 상황이 발생하면, IP header에 기록되어 있는 출발지 호스트에게 해당 에러를 알려주는 기능을 한다.
그림과 같은 종류가 있으며 네트워크 계층의 IP 데이터그램에 포함되어 전송된다.
앞서 IPv4가 곧 고갈될 것으로 예상됨에 따라 IPv6가 등장했다고 했다.
IPv6는 고정된 40바이트의 헤더를 갖고 있으며 단편화 (fragmentation)를 허용하지 않는다.
IPv4를 사용하는 라우터는 한번에 IPv6로 업그레이드할 수 없다. 따라서 현재는 IPv4와 IPv6의 과도기이다.
하지만 언제까지 기다릴 수는 없으므로 IPv4와 IPv6를 혼용하는 방식이 등장했는데 이를 tunnerling 이라고 한다.
IPv4 라우터를 거쳐갈 때 IPv6 데이터그램을 IPv4의 데이터 필드 (payload)에 포함해서 전송한다.
IPv4와 IPv6는 버전이 달라서 서로를 인식하지 못한다. 따라서 새로운 버전의 패킷을 이전 버전의 패킷 안에 넣어준 채 전달할 수 밖에 없다.
포워딩이라는 작업은 단순히 포워딩 테이블을 Look Up하는 것에 지나지 않는다. 또한 포워딩 테이블 Look Up은 Longest prefix match로 이루어진다.
이때 이 포워딩 테이블은 라우팅 알고리즘에 의해 채워진다고 했다.
라우팅 알고리즘은 다음과 같은 종류가 있다.
Link-State 알고리즘은 다익스트라 알고리즘을 사용한다.
다익스트라 알고리즘은
다익스트라 알고리즘에서 알아야 할 정보는 다음과 같다.
이를 기반으로 다음의 예시를 풀어보자.
출발지 u 부터 z까지 이동하는 최소한의 경로를 찾는다.
u와 이웃한 노드는 그 경로 비용와 p(노드)를 기록한다.
표 상에서 D(v), D(w), D(x)는 u에서 시작했으므로 p에 각각 7,u / 3,u / 5,u로 적을 수 있다.
이웃하지 않은 노드는 무한대로 적는다.
이후 3개의 인접 노드 중에서 경로가 제일 짧은 노드는 w이므로 N'에 w를 넣는다.
업데이트는 D(v) = min(D(v), D(w) + c(w, v))
의 공식을 따른다. 즉, 기존의 D(v) 값과 새로 구한 D(w) + c(w, v) 중에서 더 작은 값을 선택한다.
w와 이웃한 노드는 x, y, v 이다.
x ) 기존의 5와 공식에 따라 새로 구한 7 중에서 5를 선택한다.
y ) 기존의 무한대와 공식에 따라 새로 구한 11 중에서 11을 선택한다.
v ) 기존의 7과 공식에 따라 새로 구한 6 중에서 6을 선택한다.
값이 새로 바뀌었다는 것은 경로가 바뀌었다는 뜻이다. 즉, 원래 경로보다 w에서 오는 경로가 더 짧으니 이걸로 바꾸겠다는 뜻이므로 p 값은 w로 변경된다.
이런 식으로 반복을 거쳐서 노드 u의 포워딩 테이블을 채울 수 있다.
Link-State 알고리즘은 이렇게 다익스트라 알고리즘에 기반하여 포워딩 테이블을 채우는 라우팅 알고리즘이다.