[kocw 이미정]18. Routing in the Internet

이건회·2022년 2월 21일
0

네트워크

목록 보기
18/24

  • AS1은 AS3와 AS2를 통해 위치할 수 있는 경로를 알아야 하고, 이를 AS1 내부 전체에 소문을 내야 한다. 이것이 intra as 라우팅의 역할이다.

  • x는 목적지 서브넷이다. as1은 x는 as3를 통해 도달할 수 있음을 알아온다. 1c가 그 정보를 받아오는데 이를 as1 내부에 전부 알려준다. 1d는 x로 데이터를 보내기 위해 1c로 가는 최단거리 포워딩 테이블을 만든다. 1d에서 1c로 가는 최단거리 인터페이스는 i로 가는 것이다.

  • 만약 x라는 서브넷이 as3뿐 아니라 as2로도 가능하다면, 1c는 as3로부터, 1b는 as2로부터 x로 가는 정보를 받아오고, 내부에 알린다. 1d는 inter as 프로토콜을 통해 둘 중 x로 가는 최단거리 경로를 결정한다. - 이 때 최단거리를 결정하는 방법을 hot potato 라우팅이라 한다. 1c와 1b중 자신인 1d에서 더 가까운 곳, 적은 홉을 거치는 곳을 선택하는 것이다. 리소스를 조금만 사용하고 빠르게 빠져나갈 수 있다.

  • 위 사진을 통해 과정을 hot potato 라우팅 과정을 요약해 볼 수 있다.

  • 인트라 AS라우팅 프로토콜은 IGP(interior gateway protocols)라고도 부른다.
  • 가장 초기에 쓰인 인트라 as라우팅 프로토콜은 RIP이고 OSPF, IGRP와 같은 라우팅 프로토콜 또한 있다.

  • rip는 distace vector 알고리즘을 적용한다. 소규모 네트워크에 적용되기 적합하다. 네트워크가 적어 링크가 비슷하고 모든 링크 코스트를 1로 가정하기 때문이다. 따라서 디스턴스 매트릭이 홉으로 카운팅 된다. 가령 목적지까지 가는데 3개의 링크를 거치면 디스턴스 링크는 3홉이다. 맥시멈 15카운트이고 16카운트는 무한대를 의미한다.
  • rip는 advertisement 메세지에 디스턴스 벡터를 실어 이웃과 교환한다. 메세지에 실릴 수 있는 목적지의 개수는 최대 25개다. 매 30초마다 교환한다.

  • rip를 이용하는 경우 라우팅 테이블의 예시다. 파란 구름이 목적지 서브넷이고 총 4개다. 각 목적지에 대한 엔트리를 테이블에 갖고 있다. w로 가기 위해서는 먼저 a로 가야 하고 홉 카운트는 2라는 뜻이다.

  • 디스턴스 벡터를 교환하다가 이웃인 A가 A에서 z로의 경로 길이가 4라는 메세지를 보내오면, D는 엔트리의 넥스트 홉을 A로 바꾸고 홉 카운트도 바꾼다.

  • link failure가 발생하여 x와 y 두 라우터 간의 링크가 끊어지면 둘 사이에는 advertisement가 교환이 안된다. x는 30초마다 오던 메세지가 180동안 안오면 링크가 fail 됐다고 가정하고 y를 넥스트 홉으로 하는 모든 루트를 invalidate하고 루트를 새로 계산해서 새 advertisement를 이웃에 보낸다.
  • 디스턴스 벡터에서 발생하는 핑퐁 루프를 피하기 위해 rip는 poison reverse를 쓴다. 그러나 이 방식이 모든 루프를 브레이크 할 수 있는 것은 아니다.

  • rip는 애플리케이션 레벨 프로세스로 구현되었는데 이 프로세스 이름을 route-d(혹은 daemon)이라 한다.
  • 이 프로세스는 운영체제 안에서 계속 돌며 30초마다 advertisement 메세지를 udp에 내보내고, udp는 세그먼트로 encapsulte 해서 ip 계층으로 내보내고, ip계층은 이웃 라우터로 보내 다시 이웃의 route-d로 올라가 포워딩 테이블이 업데이트 된다.

  • OSPF 라우팅 프로토콜은 퍼블릭하게 이용 가능하다. 링크 스테이트 알고리즘 기반 프로토콜로 링크 스테이트 패킷을 네트워크 전체에 알리고, 모든 라우터들은 네트워크 전체의 toplogy map을 그리고, 그래프 전체에 자신을 소스로 하는 다익스트라 알고리즘을 적용하여 라우팅 테이블을 작성한다.
  • 서브넷별 엔트리가 있던 rip와 달리 ospf에는 각 엔트리가 neighbor 별로 있다.
  • ospf는 ip 바로 위에 구현이 되었다. 따라서 udp 세그먼트로 encapsulate 되지 않고 바로 이웃 ip에 전달된다.

  • ospf가 rip에 비해 진보한 점이다. 먼저 규모가 큰 AS에서 적용 가능하다.따라서 계층적인 ospf를 적용한다. 또 딜레이, 밴드위드, 비용 등을 기준으로 하는 링크 코스트를 다양하게 사용한다. 각각의 링크 스테이트에 대한 advertise가 필요하고 가각의 라우팅 테이블을 별도로 계산해야 한다. 심지어 복수의 링크 코스트도 사용 가능하다. 또 ospf의 프로토콜 메세지는 authenticated하여 진짜 유효한 라우터가 보낸지를 식별한다. 또 여러 라우터에게 메세지를 동시에 보내는 MOSPF 라우팅이 있다.

  • 위처럼 ospf가 큰 규모의 as를 다룸을 확인할 수 있다. 이렇게 되면 노드와 링크가 많아져 계층적인 ospf가 사용된다. 어떤 한 링크에서 지나가는 링크 스테이트 패킷의 양이 많아지기 때문이다. 따라서 as의 규모가 제한되고, as를 몇 개의 area로 나눈다. 또 링크 스테이트 브로트캐스팅을 area안에서만 하여, 전체 as 규모가 늘어나더라도 area를 일정하게 하면 한 링크에서 오가는 패킷의 양은 변함이 없게 한다.
  • 그러나 한 area내의 라우터는 내 area 바깥에 있는 서브넷 혹은 라우터로 가는 길을 모른다. 따라서 각 area 마다 area border 라우터를 두어 우리 area 안의 서브넷 각각 끼리의 거리를 계산하고 이를 area 라우터끼리 교환한다.
  • 또 area border 라우터를 포함해서 backbone area가 다시 구성이 된다. 이 역할은 개별적 area를 붙여주는 역할을 한다. backbone 내의 자체적 ospf가 돌며 이 안에서만 링크 스테이트가 브로드캐스팅이 된다. 따라서 백본 내에 속한 border area 라우터의 길이를 정확하게 알고 있다. 이를 통해 개별 area 내부의 정보와, area border 가 backbone을 통해 area 외부의 경로 정보를 알게되어 최종적으로 경로를 알 수 있다.

  • 따라서 local area와 백본인 two-level hierarchy이다. local area와 백본 내에서만 ospf 라우팅이 이루어진다. area border 라우터는 내부 area의 정보를 담은 서머리를 서로 교환하고, boundary 라우터는 또 다른 as와 데이터를 교환한다.

  • inter as routing인 bgp다. 각 as는 자기가 원하는 intra as 라우팅 프로토콜을 선택할 수 있다. 그런데 as간을 연결하는 프로토콜은 각 as가 다른 프로토콜을 사용해서는 안 된다. 다 같이 동일하게 사용해야 딜리버리가 되기 때문이다. 따라서 인터넷에서는 단 하나의 inter as 라우팅 프로토콜을 사용하는데 이것이 BGP다.
  • eBGP는 서브넷에 도달 가능한 정보를 이웃 AS로부터 알아오고 iBGP는 그렇게 알아온 정보를 AS내부에 소문내주는 프로토콜이다. as 내부에서는 이 정보를 통해 외부 서브넷으로 가는 좋은 경로를 선택하는데, 이 때 bgp가 중요하게 생각하는 것은 policy, 즉 정책이다. 가령 어떤 as 에서 목적지 as로 갈때 경로상 거치는 as 중에서 보안상 거치면 안되는 as, 혹은 비용이 너무 큰 as등이 있으면 다른 경로를 택하는 것이다.

  • bgp라우터는 이웃한 것 끼리 만들어지며 서로 반 영구적 tcp 커넥션을 맺는다. 이 커넥션을 통해 bgp advertisement를 교환한다.
  • 가령 as3에서 as1에 어떤 서브넷 프리픽스 x에 대해 그 경로를 advertise하면, as1이 as3으로만 메세지를 넘기면 알아서 x로 포워딩 해준다는 약속을 하는 것이다.

  • 실선은 eBGP 세션이고 점선은 iBGP 세션이다. as 내부는 iBGP, as 간은 eBGP임을 볼 수 있다. 3a가 1c에게 x인 서브넷 프리픽스 경로정보를 eBGP를 통해 보낸다. 1c는 iBGP를 통해 이를 소문내고, 이를 들은 1b는 as2에도 이 정보를 보내준다.

  • BGP라우터가 주고받는 경로정보의 핵심 내용은 목적지 서브넷의 프리픽스와 그 경로로 가기 위한 attribute로 구성된다.
  • attribute의 핵심 요소는 서브넷 프리픽스로 가는데 거쳐야 하는 as 리스트인 as-path와, 첫번째 as 라우터에서 도달하는 넥스트 홉 라우터의 정보를 적는 next-hop이 필요하다.
  • 이는 경우에 따라 각 as가 복수의 게이트웨이를 사용할 경우 각 게이트웨이 메세지마다 어느 곳으로 보낼지를 명시해야 하기 때문이다.
  • 게이트웨이 라우터가 advertisement를 들으면 information을 우리 as에서 쓸 것인지를 지정하는 import policy를 수립한다.

  • bgp에서는 특정 서브넷으로 가는 경로가 여러개일때, policy decision을 하여 각 경로의 as를 거칠때 어떤 상황이 발생하는지 확인하고 경로를 결정하고, 만약 이 조건이 같을 경우, 거쳐야 하는 as경로가 더 작은 경로를 선택한다. 가령 이것도 같은 경우 hot-potato를 적용하여 넥스트 홉 라우터가 더 가까운 경로를 선택한다.

  • bgp는 세션을 오픈하기 위해 OPEN 메세지를 이웃 라우터에 던져 tcp 커넥션이 생겨난다. open 요청을 받은 라우터는 이를 받아들이는 ack메세지로 KEEPALIVE메세지를 보낸다. 이렇게 세션이 만들어지면 bgp 라우터를 새로운 경로정보를 발견할 때, 혹은 이전에 말한 정보를 다시 보낼 때 마다 UPDATE 메세지로 갱신한다. 또한 어떠한 이벤트가 발생하지 않으면 TCP커넥션이 종료 되므로 이를 막기 위해 KEEPALIVE메세지를 정기적으로 주고 받는다. NOTIFICATION 메세지는 이전 메세지에서 오류가 생기면 보고하고 BGP 세션을 종료하고자 할 때 사용한다.
profile
하마드

0개의 댓글