네트워크 강의를 다시 듣고 있던 와중에 이 또한 TIL로 남길 필요를 느껴서 글로 남긴다. 사실 남에게 내가 무엇을 했는지를 보여주려면 꾸준한 기록 뿐이라는 사실을 배웠는데도 영 쉽지 않은 일인 것 같다. 뭔가 평가 받을 걸 두려워서 그런것 같다.
Network Layer에는 라우터라는 장치가 존재한다. 라우터의 내부에는 Routing Table이 존재하면, IP Packet의 경로를 지정해주는 역할을 수행한다. Routing Table을 구성할 때 크게 두 가지 프로토콜을 사용하는데, (1)Linked State 방식과 (2)Distance Vector 방식이 사용된다.
Linked State의 경우 Dijkstra Algorithm을 통해서 목적지까지의 최단 거리를 찾아낸다. Distance Vector의 경우 Bellman-Ford Algorithm을 사용한다.
Bellman-Ford Algorithm의 경우 최단 거리를 각 노드(라우터)가 계산을 할 때, 다른 노드에서 자기 자신을 거치는 거리를 최단 거리로 설정하는 경우가 있다. 네트워크의 컨디션은 수시로 변화한다. 만약 네트워크 상황이 좋아진다면 문제가 되지 않지만, 네트워크 상황이 나빠진다면 문제가 발생한다.
자기자신을 거치는 값이 테이블에 반영되므로, 최단 거리를 찾는 테이블 간의 정보가 반복적으로 교환되면서 Infinity Count문제가 발생한다.
이를 해결하기 위해 만약 다른 노드의 최단 거리값이 자기 자신을 거치는 경우, 그 노드의 값을 무한대로 표현하므로서 (=독을 묻히는 것) 이 문제를 방지할 수 있다.
실제로 네트워크에는 무수히 많은 라우터가 존재한다. 이런 상황에서 만약 Linked State나 Distance Vector를 적용하면 어떻게 될까? 아마 네트워크의 상황이 계속 변화하면서 포워딩 테이블이 생성되지 않거나 안정화가 될 수 없는 환경에 놓인다.
이러한 Scalebility의 해결책은 항상 계층화(Hierarchy Routing)이다.
한 범위 내의 네트위크 안에서 각각의 알고맂므을 사용해 알아서 포워딩 테이블을 생성한다. 그리고 그보다 상위 네트워크의 알고리즘이 그들을 다시 관리하는 식으로 실제로는 작동한다. 때문에 이런 자치적인 방식의 네트워크를 AS(Autonomous System)이라고 부른다.
AS 사이의 라우팅 알고리즘이 또한 별도로 존재하는데 Inter-AS Routing Algorithm이라고 한다. 인터넷 서비스 제공자(ISP) 또한 AS의 하나이다.
AS와 AS사이에는 서브시를 주고 받는 관계가 존재한다. 흔히 말해서 갑과 을의 관계가 형성되어 있다. 제공자(Provider)와 소비자(Customer)관계는 어떻게 정해질까?
이 두 관계는 누가 누구를 더 필요로 하냐는 암묵적인 관계로 정해진다. 이들의 관계는 기업의 위상과 사업상 비밀을 이유로 비공개이며 우리는 추정만 할 수 있을 뿐이다. 또한 관계의 우위가 애매한 경우 서로 협정을 맺는 Peering Relationship이 형성된다.
ISP가 인터넷 망을 깔고 사업을 하는 이유는 간단하다. 돈이 되기 떄문이다. 따라서 ISP는 돈이 되는 트래픽을 우선시하고 운반한다. 때문에 client - AS1 - AS2 - AS3 -server라는 관계가 있을 때, AS2을 단순히 거쳐서 운반되는 트래픽은 존재하지 않는다. AS2의 입장에서는 어디서 돈을 받아야할 지 모르기 때문이다.
결국 논리적으로 포워딩은 가장 짧은 거리로 되어야 하지만, 사실은 자본의 논리에 따라서 가능한 customer를 많이 거치는 방향으로 트랙픽은 이동한다.
https://sanghoon9939.tistory.com/35
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=nackji80&logNo=221431942767
https://moleman.tistory.com/560