MPLS의 Label
- 4 byte : 20bit(label) / 2 bit (experimental field - 중간에 있는 장비들이 ip header를 보지 않기 때문에 ip precedence 값을 확인하지 못해 qos를 적용하지 못함. 그래서 이 필드를 사용. default로는 ip precedence값이 copy가 되어 들어감.) / 1bit(stack field - 그 다음에 ip header가 있는지 , label header가 있는지 확인, untagged를 해야할 때 stack field가 1이 되어있는 것 까지 떼어냄) / 12bit(TTL - 라우팅 프로토콜에서 loop이 발생하면 MPLS에서도 loop 발생 이를 방지하기 위해 갖고 있음. default는 ip header의 TTL 값을 copy해서 보냄)
- layer2 / 3 header 사이에 label header가 들어감.
- 반드시 그런거는 아니고, L2vpn 기술을 사용하면 순서는 바뀔 수 있음...
- 같은 destination이어도 service 별로 다르게 label 생성 가능
- FEC : 패킷을 포워딩하는 그룹.
- 같은 조건에서 같은 path로 포워딩 매커니즘을 가지고 포워딩 하는 것
- 각각의 LSR은 독립적으로 Label을 할당하는데, 하나의 FEC에 하나의 Label을 할당해서 LIB 테이블을 생성함.
- LDP를 통해 LIB 정보를 neighbor LSR에 서로 교환을 함
connection oriented
- LFIB 정보(neighbor action)가 모두 생성되어야 패킷을 포워딩할 수 있음.
- 혹은, mpls 그룹이 하나라면, 그 그룹이 모두 LFIB 테이블이 생성되어야 한다고 이해햐도 됨 .
MPLS의 장점
- BGP로 40만개를 전달받았다면,,BGP로 전달받은 정보는 next-hop을 찾아가게됨. next-hop의 best path를 보고 감.
- 즉, bgp로 받는 정보는 next-hop을 찾아가는 경로와 같은 경로로 통신을 하게 됨.
- 40만 개의 정보를 2개의 라우터에서 20만개씩 보냈다면, 2개 라우터의 경로만 알고있으면 되는 것.
- A라우터가 20만개의 정보 전달 / B 라우터가 20만개의 정보 전달 : A에서 전달받은 20만개가 하나의 FEC, B에서 전달받은 20만개가 하나의 FEC 임. => 20만개를 A 라우터에서 전달 받았으니까. A 라우터의 IP만 FEC로 할당하면 됨 => BGP로 받은 정보는 next-hop의 Label을 붙여버리자. => 그럼 label 테이블의 크기가 확줄어듦!!!
- 그래서 BGP로 전달받은 정보는 Label을 할당하지 않는 것.
- 중간에 있는 장비는 BGP를 돌릴 필요도 없어짐.
MPLS VPN : 2개의 레이블이 붙음
MPLS TE : 2개 혹은 그 이상의 레이블이 붙음
MPLS VPN + TE : 3~ 그 이상의 레이블이 붙음
Example
PE1 - P - P - P - PE2
- MPLS VPN
- 전용회선 처럼 쓰기 때문에, 다른 고객끼리 같은 ip를 사용할 수 있음. 그래서 VRF를 만듦. (A, B 고객) A 고객의 정보는 label 정보를 40, B 고객의 정보는 label 정보를 41로 퍼뜨림. 그리고 PE1은 해당 40, 41 레이블로 들어오면 어느쪽으로 나갈 수 있는지 앎.
- PE1 <-> PE2는 iBGP로 맺어져 있음. A , B 고객(둘 다 next-hop은 PE1의 ip)의 각각 정보가 BGP로 정보가 전달이 됨. (bgp로 전달하면서 label의 정보도 같이 전달함)
- 그렇다면,,, PE2 -> A 고객으로 가려면? 자신이 생성한 A고객 ip의 label을 붙이고 나감. + 어느 pe로 도착해야하는지 label도 같이 달고 나감.
- MPLS TE
CE : customer
CE - PE - p - p -p - PE - CE: PE<->CE 구간은 10M로 연결, 끝과 끝의 통신은 10M를 보장해줘. 근데 보장을 못해줄 가능성이 있다면?
- CE 끝과 끝으로 가는 경로를 TE라고 함. TE를 정의하는 방법은 총 2가지 임.
- dynamic TE : dynamic이 단순히 best path를 찾는거라면 경로는 1가지밖에 안생길듯. 그래서, 먼저 나는 특정 인터페이스만 TE로 사용하고 싶다고 정의 -> 해당 인터페이스로만 따로 토폴로지를 생성함.(선택받지 못한 인터페이스는 TE를 위한 경로를 만들때 제외되는 것)
- MPLS TE : 리소스 예약을 할 수 있음. TE 용르로 선택한 특정 인터페이스의 전체 사용 가능한 리소스가 어느 정도인지 전달을 받고, 10M가 안되는 경로를 제외시킴. 최종적으로 남아있는 경로를 가지고 best path를 계산함.
- exprite TE : 수동으로 경로를 여러 개를 만듦. 여러개 경로 중에 먼저 설정된 경로부터 rsvp packet을 던져보고, 나한테 10M를 보장할 수 있냐고 확인함. 보장 못한다고 하면 다음 설정된 경로한테 다시 보장할 수 있냐고 물어봄.
- 보통, exprite TE를 설정하고 다 갈 수 없다면 dynamic TE를 사용하겠다고 설정함. 만약, 어떤 경로도 사용할 수 없다면 그냥 일반적인 MPLS 통신을 함.(통신을 하긴 해야하니까..)
- TE 경로 업데이트를 언제쯤 할지는 선택할 수 있음,,
TE 경로가 잡혔다면?
- A 네트워크에 대해 TE 경로로 무조건 보내야 함. 그래서 TE 끝과 끝 부분에 터널이 생성됨. 이 터널에 대한 라벨 정보가 하나 더 붙음.
- TE 안에서도 a' -> b'로 가는 경로가 여러 가지가 있다면, 즉 TE안에 TE가 있다면 그 때마다 레이블이 붙어야 함.
MPLS VPN, MPL TE를 같이 쓴다면 Label은 더 마아않이 붙을 수 있음!
- 하지만 아무리 Label이 많아도 가장 바깥에는 outer label 하나가 꼭 붙어 있음.
- outer로 꼭 붙어 있는 이유는?
- 처음 라우터는 다중으로 레이블을 여러개 붙이거나, 중간 라우터가 레이블을 추가할 수 있음.
- 하지만 레이블은 무조건 하나만 처리할 수 있음. 물론 untagged로 설정되어있으면, 뗄때는 다 떼어낼 수도 있음.
L2로 들어오면 FIB / LFIB 어디로 가야할지 결정을 해야함.
- PID로 구분함.
stack
- untagged일때, 어디까지 떼어야하는지 구분자
'네트워크' 카테고리의 다른 글
MPLS 초보탈출 4차 (0) | 2022.02.14 |
---|---|
MPLS 초보탈출 3차 (0) | 2022.02.13 |
MPLS 초보 탈출 1차 (0) | 2022.02.13 |
MPLS 쌩초보 기초기초 (0) | 2022.02.04 |
[따라하며 배우는 서버 부하분산 입문] 서버 부하분산 2번째 (0) | 2022.01.17 |