본문으로 바로가기

TIL 2021-11-30 NAT3, RIP(벨만포드)

category TIL 2021. 11. 30. 23:49

Address-dependent filtering

 

여기서 Address는 externel endpopint의 주소를 의미함

 

Address-Dependent filtering은 inbound 패킷의 DSP IP, DST port, SRC IP을 확인 함 (SRC Port 노상관)

1. Rescrited Cone NAT

Filter rule: accept if inbound packet is  {1.1.1.1: any port } to {5.5.5.1 : 1000}

 

만약 src가 1.1.1.1이고 도착지가 5.5.5.1:1000 인 경우에만 accpet함

2.Port restricted conte NAT

 

3. Address, Port dependent (Symmetric NAT)

Address and port dependent filtering은 DST IP, DST PORT, SRC IP, SRC PORT를 확인함

 

Hairpinning behaviour

 

hairpinning은 nat를 통해 같은 nat의 두 internel endpoint가 통신하는 것

 

Host A IP주소 10.1.1.1이지만 밖에서는 5.5.5.1로 보이고,

Host B IP주소 10.1.1.2이지만 밖에서는 5.5.5.2로 보이고,

 

Host A,B는 같은 private 네트워크에 있어도 A가 B와 통신할떄 public 네트워크 주소밖에 몰라 nat를 통해 전달됨

A | 10.1.1.1:5000 | 5.5.5.1|1000

B | 10.1.1.2:5000 | 5.5.5.2|1000

라고 할때

 

A가

SRC PORT SRC IP DST PORT DST IP
5000 10.1.1.1 1001 5.5.5.2

로 내부 SRC, 외부 DST가 담긴 패킷을 NAT에 보내면

SRC PORT SRC IP DST PORT DST IP
5000 10.1.1.1 5001 10.1.1.2

NAT는  SRC, DST를 모두 변환하여 SRC는 외부 형태로, DST는 내부형태로 변환함

 

 

Internel Source IP Address and Port

 

요약

 

Externel

 

NAT로부터 보내지는 SRC PORT, SRC IP가 외부 주소

 

Internel

 

NAT에서 보내지는 SRC PORT, SRC IP가 내부 주소

 

 

 

RIP

 

Routing

 

Routing은 여러 네트워크를 지나서, 혹은 사이에 네트워크의 트래픽 경로를 고르는 과정이다.

 

 

특정 패킷 포워딩 메커니즘을 통해 중간 노드들의 방향을 정하는 고차원 결정

 

패킷 포워딩은 하나의 인터페이스에서 다른 쪽으로 logically addressed된 네트워크 패킷을 이동하는 것

 

라우팅 프로세스는 주로 라우팅 테이블을 통해서 함

 

Hop by hop routing

 

패킷의 목적지를 기준으로 다음 경로를 라우터가 정하는 것

 

Policy based Routing

 

네트워크 관리자에 의해 정해진 정책을 기반으로 라우팅 경로를 정하는 것

 

1. DV

벨만포드

2.Link state Routing

다익스트라

SPF

 

벨만포드

 

function bellman(){
    const nodeLen = 10;
    vertical = [{src:1, dst:2, cost:3},{src:4, dst:5, cost:3},{src:2, dst:4, cost:3},{src:3, dst:6, cost:3},{src:1, dst:2, cost:3}];
    let dist = new Array(nodeLen).fill(Infinity);
   	dist[0] = 0;
    for(let i = 1 ; i < nodeLen; i++){
        for(let {src,dst, cost} of vertical){
            if(dist[src]==Infinity){
                continue;
            }
            if(dist[dst]>dist[src]+cost){
                dist[dst] = dist[src]+cost;
            }
        }
    }
    for(let {src,dst,cost} of vertical){
        if(dist[dst]>dist[src]+cost){
            console.log('Negative Cycle');
        }
    }

}

임의로 자바스크립트로 짜본 벨만포드 알고리즘이다.(간선 부분은 막 함)

 

만약 시작 부분을 0으로 초기화해주어야한다.

 

dist[src]가 무한대라면 아직 계산된 적이 없는 정점이기에 넘어가고, 그렇지 않다면 dist[src]+cost가 dist[dst]보다 작다는 건 더 작은 비용으로 dst에 도달할 수 있다는 것이므로 업데이트해준다.

 

이를 N-1번 반복해주면 된다.

 

이후에는 마지막으로 간선을 돌면서 dist[dst]가 dist[src]+cost보다 큰 경우가 있는지 확인한다. 이런 경우에는 음의 사이클이 형성되어 계속해서 값이 줄어들기 떄문에 이런 결과가 발생하는 것이다.

 

근데 네트워크의 경우 음의 비용이 드는 일은 없지 않을까?