EIGRP발표자료.html
30.65 KB · text/html · 업로드 2026-07-22 17:48
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>EIGRP · DUAL 알고리즘 발표자료</title>
<style>
:root{
--bg:#07111f;
--bg2:#0c1b2d;
--panel:#10233a;
--panel2:#142b46;
--line:#284866;
--text:#edf6ff;
--muted:#a8bad0;
--cyan:#55d6ff;
--mint:#78e6c4;
--yellow:#ffd27a;
--red:#ff9f9f;
--purple:#b9a7ff;
--code:#050c15;
}
*{box-sizing:border-box}
html,body{margin:0;width:100%;height:100%;background:var(--bg);color:var(--text);
font-family:"Pretendard","Noto Sans KR","Malgun Gothic",Arial,sans-serif}
body{overflow:hidden}
.deck{position:relative;width:100vw;height:100vh}
.slide{
display:none;position:absolute;inset:0;overflow:auto;
padding:5.2vh 6.2vw 8vh;
background:
radial-gradient(circle at 92% 4%,rgba(85,214,255,.13),transparent 28%),
radial-gradient(circle at 8% 96%,rgba(120,230,196,.08),transparent 25%),
linear-gradient(145deg,var(--bg) 0%,var(--bg2) 100%);
}
.slide.active{display:block}
.center{min-height:80vh;display:flex;flex-direction:column;justify-content:center}
.eyebrow{font-size:clamp(12px,1.05vw,18px);font-weight:900;letter-spacing:.16em;
text-transform:uppercase;color:var(--mint)}
h1{margin:.28em 0 .22em;font-size:clamp(40px,5.25vw,82px);line-height:1.06}
h2{margin:0 0 .55em;font-size:clamp(31px,3.55vw,57px);line-height:1.14}
h3{margin:.05em 0 .45em;font-size:clamp(18px,1.65vw,29px);color:var(--cyan)}
p,li{font-size:clamp(15px,1.3vw,23px);line-height:1.6}
.lead{max-width:1120px;font-size:clamp(20px,2vw,33px);color:var(--muted)}
.small{font-size:clamp(12px,.95vw,17px);color:var(--muted)}
.muted{color:var(--muted)}
.accent{color:var(--cyan)}
.good{color:var(--mint);font-weight:800}
.warn{color:var(--yellow);font-weight:800}
.danger{color:var(--red);font-weight:800}
.purple{color:var(--purple);font-weight:800}
.grid{display:grid;gap:1.15rem}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.card{
background:linear-gradient(180deg,rgba(20,43,70,.96),rgba(12,27,45,.97));
border:1px solid var(--line);border-radius:18px;padding:1.15rem 1.3rem;
box-shadow:0 18px 45px rgba(0,0,0,.18)
}
.card.soft{background:rgba(16,35,58,.72)}
.card strong{color:#fff}
ul{margin:.25em 0 0;padding-left:1.2em}
li{margin:.18em 0}
li::marker{color:var(--cyan)}
.tag{display:inline-block;margin:.14em .2em .14em 0;padding:.3em .68em;border-radius:999px;
border:1px solid var(--line);background:rgba(85,214,255,.05);color:var(--mint);font-weight:800}
.kpi{font-size:clamp(28px,3vw,52px);font-weight:950;color:var(--cyan);line-height:1}
.formula,.code{
background:var(--code);border:1px solid var(--line);border-left:5px solid var(--cyan);
border-radius:13px;padding:.9rem 1rem;margin:.65rem 0;
font-family:Consolas,"D2Coding","Courier New",monospace;
font-size:clamp(13px,1.05vw,19px);line-height:1.55;white-space:pre-wrap
}
.formula{font-size:clamp(16px,1.25vw,22px)}
table{width:100%;border-collapse:collapse;margin-top:.55rem;font-size:clamp(13px,1.05vw,19px)}
th,td{padding:.7rem .78rem;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
th{background:rgba(85,214,255,.06);color:var(--cyan);font-weight:900}
.flow{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;margin:.8rem 0}
.node{padding:.62rem .9rem;border:1px solid var(--line);border-radius:12px;background:var(--panel);font-weight:900}
.arrow{font-size:1.35rem;color:var(--cyan);font-weight:950}
.compare{display:grid;grid-template-columns:1fr auto 1fr;gap:1rem;align-items:stretch}
.vs{display:flex;align-items:center;justify-content:center;font-size:clamp(24px,3vw,48px);font-weight:950;color:var(--yellow)}
.topology{display:flex;align-items:center;justify-content:center;gap:1.2rem;flex-wrap:wrap;margin:1.1rem 0}
.router{
width:104px;height:66px;border-radius:50%;display:flex;align-items:center;justify-content:center;
background:linear-gradient(180deg,#1d84ba,#145376);border:3px solid #8ee4ff;font-weight:950;
box-shadow:0 12px 28px rgba(0,0,0,.25)
}
.link{width:110px;height:6px;background:linear-gradient(90deg,var(--cyan),var(--mint));border-radius:999px;position:relative}
.link .label{position:absolute;top:-31px;left:50%;transform:translateX(-50%);white-space:nowrap;color:var(--muted);font-size:14px}
.stepbar{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin:1rem 0}
.step{padding:1rem;border-top:4px solid var(--cyan);background:rgba(16,35,58,.6);border-radius:0 0 13px 13px}
.callout{padding:.85rem 1rem;border-radius:13px;background:rgba(255,210,122,.08);border:1px solid rgba(255,210,122,.38)}
.footer{position:fixed;left:0;right:0;bottom:0;height:34px;z-index:20;display:flex;align-items:center;
justify-content:space-between;padding:0 20px;color:#90a5bd;font-size:12px;
background:linear-gradient(180deg,transparent,rgba(2,7,13,.9));pointer-events:none}
.progress{position:fixed;left:0;bottom:0;height:4px;background:linear-gradient(90deg,var(--cyan),var(--mint));
width:0;z-index:30;transition:width .2s}
.controls{position:fixed;right:16px;bottom:45px;display:flex;gap:8px;z-index:40}
.controls button{width:42px;height:42px;border-radius:50%;border:1px solid var(--line);cursor:pointer;
background:rgba(16,35,58,.93);color:var(--text);font-size:20px}
.menu{position:fixed;left:16px;bottom:45px;z-index:40}
.menu button{height:42px;border-radius:22px;border:1px solid var(--line);cursor:pointer;padding:0 16px;
background:rgba(16,35,58,.93);color:var(--text);font-weight:800}
.toc{
display:none;position:fixed;left:16px;bottom:96px;width:min(440px,86vw);max-height:70vh;overflow:auto;
padding:.8rem;background:rgba(7,17,31,.98);border:1px solid var(--line);border-radius:15px;z-index:50
}
.toc.open{display:block}
.toc button{display:block;width:100%;text-align:left;padding:.62rem .7rem;margin:.25rem 0;border:0;border-radius:9px;
background:transparent;color:var(--text);cursor:pointer}
.toc button:hover{background:rgba(85,214,255,.08)}
@media(max-width:900px){
.g2,.g3,.g4,.compare,.stepbar{grid-template-columns:1fr}
.slide{padding:4.2vh 5vw 9vh}
.vs{min-height:60px}
.link{width:60px}
}
@media print{
body{overflow:visible}
.slide{display:block!important;position:relative;min-height:100vh;page-break-after:always}
.controls,.menu,.toc,.footer,.progress{display:none!important}
}
</style>
</head>
<body>
<div class="deck">
<section class="slide active" data-title="표지">
<div class="center">
<div class="eyebrow">Enhanced Interior Gateway Routing Protocol</div>
<h1>EIGRP와 <span class="accent">DUAL 알고리즘</span></h1>
<p class="lead">라우팅 메트릭, 네이버 형성, EIGRP 패킷, Successor·Feasible Successor, 경로 제어 및 인증</p>
<div>
<span class="tag">IGP</span><span class="tag">Advanced Distance Vector</span>
<span class="tag">IP Protocol 88</span><span class="tag">DUAL</span>
</div>
</div>
</section>
<section class="slide" data-title="EIGRP 개요">
<div class="eyebrow">01 · Overview</div>
<h2>EIGRP란?</h2>
<div class="g2">
<div class="card">
<h3>정의</h3>
<p><strong>EIGRP</strong>는 하나의 자율 시스템 내부에서 경로 정보를 교환하는 <strong>IGP</strong>입니다.</p>
<ul>
<li>기반 개념: Distance Vector</li>
<li>경로 계산: DUAL 알고리즘</li>
<li>전송: IP Protocol 88</li>
<li>멀티캐스트: 224.0.0.10</li>
</ul>
</div>
<div class="card">
<h3>분류</h3>
<p>EIGRP는 일반적으로 <strong>Advanced Distance Vector</strong>로 분류됩니다.</p>
<div class="flow">
<span class="node">Distance Vector</span><span class="arrow">+</span>
<span class="node">DUAL</span><span class="arrow">+</span>
<span class="node">Neighbor 관계</span>
</div>
<p class="small">일부 교재에서는 “Hybrid”라는 표현도 사용하지만, Link-State 프로토콜은 아닙니다.</p>
</div>
</div>
</section>
<section class="slide" data-title="IGP와 EGP">
<div class="eyebrow">02 · Routing Scope</div>
<h2>IGP와 EGP 구분</h2>
<div class="compare">
<div class="card">
<h3>IGP · Interior Gateway Protocol</h3>
<p>하나의 AS 내부에서 라우팅 정보를 교환하는 프로토콜</p>
<ul>
<li>RIP</li><li>EIGRP</li><li>OSPF</li><li>IS-IS</li>
</ul>
<p class="good">빠른 수렴과 내부 경로 최적화 중심</p>
</div>
<div class="vs">VS</div>
<div class="card">
<h3>EGP · Exterior Gateway Protocol</h3>
<p>서로 다른 AS 사이에서 라우팅 정보를 교환하는 프로토콜</p>
<ul><li>BGP</li></ul>
<p class="warn">정책 기반 제어와 대규모 인터넷 경로 교환 중심</p>
</div>
</div>
</section>
<section class="slide" data-title="거리 벡터 특성">
<div class="eyebrow">03 · Distance Vector</div>
<h2>거리 벡터 라우팅의 기본 구조</h2>
<div class="g2">
<div class="card">
<h3>Distance + Vector</h3>
<ul>
<li><strong>Distance</strong>: 목적지까지의 비용</li>
<li><strong>Vector</strong>: 다음 홉 또는 출력 인터페이스</li>
<li>이웃 라우터와 경로 정보를 교환</li>
</ul>
<div class="formula">목적지 네트워크 → Metric → Next Hop / Interface</div>
</div>
<div class="card">
<h3>전통적 문제와 방지</h3>
<ul>
<li>Split Horizon</li>
<li>Maximum Hop Count</li>
<li>Route Poisoning / Poison Reverse</li>
<li>Hold-down Timer</li>
<li>Route Summarization</li>
<li>Triggered Update</li>
</ul>
<p class="small">Poison Reverse와 Hold-down은 RIP 설명에서 주로 다루며, EIGRP는 DUAL을 통해 루프 없는 경로를 계산합니다.</p>
</div>
</div>
</section>
<section class="slide" data-title="EIGRP 테이블">
<div class="eyebrow">04 · Data Structures</div>
<h2>EIGRP의 3개 핵심 테이블</h2>
<div class="g3">
<div class="card">
<div class="kpi">1</div>
<h3>Neighbor Table</h3>
<p>현재 인접 관계를 형성한 EIGRP 이웃 정보</p>
<div class="code">show ip eigrp neighbors</div>
</div>
<div class="card">
<div class="kpi">2</div>
<h3>Topology Table</h3>
<p>학습한 모든 EIGRP 경로와 FD·RD·상태 정보</p>
<div class="code">show ip eigrp topology</div>
</div>
<div class="card">
<div class="kpi">3</div>
<h3>Routing Table</h3>
<p>실제로 패킷 전달에 사용하는 최적 경로</p>
<div class="code">show ip route eigrp</div>
</div>
</div>
</section>
<section class="slide" data-title="EIGRP 메트릭">
<div class="eyebrow">05 · Composite Metric</div>
<h2>EIGRP 메트릭과 K 값</h2>
<div class="g2">
<div class="card">
<h3>메트릭 구성 요소</h3>
<table>
<tr><th>항목</th><th>기본 K 값</th><th>역할</th></tr>
<tr><td>Bandwidth</td><td>K1 = 1</td><td>경로 내 최소 대역폭</td></tr>
<tr><td>Load</td><td>K2 = 0</td><td>부하</td></tr>
<tr><td>Delay</td><td>K3 = 1</td><td>경로의 누적 지연</td></tr>
<tr><td>Reliability</td><td>K4 = 0, K5 = 0</td><td>신뢰성</td></tr>
<tr><td>MTU</td><td>계산 미사용</td><td>경로 정보로 전달</td></tr>
</table>
</div>
<div class="card">
<h3>기본 계산 관점</h3>
<div class="formula">Metric = 256 × (Bandwidth 항목 + Delay 항목)</div>
<ul>
<li>기본 K 값에서는 <strong>Bandwidth와 Delay</strong>만 사용</li>
<li>Hop Count는 경로 선택의 주 메트릭이 아님</li>
<li>기본 최대 Hop Count는 100, 설정으로 확장 가능</li>
</ul>
</div>
</div>
</section>
<section class="slide" data-title="EIGRP 기본 특성">
<div class="eyebrow">06 · Characteristics</div>
<h2>EIGRP 핵심 특성</h2>
<div class="g3">
<div class="card"><h3>빠른 수렴</h3><p>Feasible Successor가 있으면 Query 없이 백업 경로로 즉시 전환</p></div>
<div class="card"><h3>부분 업데이트</h3><p>변경된 경로 정보만 필요한 이웃에게 전달</p></div>
<div class="card"><h3>VLSM 지원</h3><p>Classless 라우팅 및 불연속 네트워크 지원</p></div>
<div class="card"><h3>UCMP 지원</h3><p><code>variance</code>로 서로 다른 Metric 경로 사용 가능</p></div>
<div class="card"><h3>루프 방지</h3><p>DUAL의 Feasibility Condition을 이용한 Loop-Free 경로 계산</p></div>
<div class="card"><h3>인증</h3><p>Classic EIGRP에서 Key-chain 기반 MD5 인증 지원</p></div>
</div>
</section>
<section class="slide" data-title="네이버 형성">
<div class="eyebrow">07 · Neighbor Adjacency</div>
<h2>EIGRP 네이버 관계</h2>
<div class="topology">
<div class="router">R1</div><div class="link"><span class="label">Hello</span></div>
<div class="router">R2</div><div class="link"><span class="label">Update / ACK</span></div>
<div class="router">R3</div>
</div>
<div class="g2">
<div class="card">
<h3>일치해야 하는 조건</h3>
<ul>
<li>동일한 EIGRP AS 번호</li>
<li>동일 서브넷에서 직접 연결</li>
<li>K 값 일치</li>
<li>인증 사용 시 Key-chain 정보 일치</li>
</ul>
</div>
<div class="card">
<h3>Hello / Hold</h3>
<ul>
<li>일반 링크: Hello 5초, Hold 15초</li>
<li>저속 NBMA: Hello 60초, Hold 180초</li>
<li>Hold 시간 안에 Hello 미수신 시 이웃 해제</li>
</ul>
</div>
</div>
</section>
<section class="slide" data-title="네이버 테이블 해석">
<div class="eyebrow">08 · Neighbor Output</div>
<h2><code>show ip eigrp neighbors</code> 해석</h2>
<table>
<tr><th>필드</th><th>의미</th></tr>
<tr><td>H</td><td>Handle 번호. 이웃을 내부적으로 관리하는 인덱스</td></tr>
<tr><td>Address</td><td>이웃 라우터의 인터페이스 IP 주소</td></tr>
<tr><td>Interface</td><td>이웃과 연결된 로컬 인터페이스</td></tr>
<tr><td>Hold</td><td>Hello 패킷을 기다리는 남은 시간</td></tr>
<tr><td>Uptime</td><td>인접 관계가 유지된 시간</td></tr>
<tr><td>SRTT</td><td>ACK 왕복시간의 평활 평균값</td></tr>
<tr><td>RTO</td><td>ACK 미수신 시 재전송까지 기다리는 시간</td></tr>
<tr><td>Q Cnt</td><td>전송 대기 중인 신뢰성 패킷 수. 정상은 지속적으로 0</td></tr>
<tr><td>Seq Num</td><td>신뢰성 패킷의 시퀀스 번호</td></tr>
</table>
</section>
<section class="slide" data-title="EIGRP 패킷">
<div class="eyebrow">09 · Packet Types</div>
<h2>EIGRP 패킷 5종류</h2>
<div class="g3">
<div class="card"><h3>Hello</h3><p>네이버 탐색과 유지</p><span class="tag">Multicast</span><span class="tag">ACK 없음</span></div>
<div class="card"><h3>Update</h3><p>라우팅 정보 전달</p><span class="tag">Reliable</span></div>
<div class="card"><h3>Query</h3><p>새로운 대체 경로 질의</p><span class="tag">Reliable</span></div>
<div class="card"><h3>Reply</h3><p>Query에 대한 경로 응답</p><span class="tag">Unicast</span><span class="tag">Reliable</span></div>
<div class="card"><h3>ACK</h3><p>Update·Query·Reply 수신 확인</p><span class="tag">Unicast</span></div>
</div>
</section>
<section class="slide" data-title="RTP와 전송 방식">
<div class="eyebrow">10 · Reliable Transport Protocol</div>
<h2>멀티캐스트와 유니캐스트</h2>
<div class="g2">
<div class="card">
<h3>기본 전송</h3>
<ul>
<li>Hello: 224.0.0.10 멀티캐스트</li>
<li>Update·Query: 상황에 따라 멀티캐스트 또는 유니캐스트</li>
<li>Reply·ACK: 유니캐스트</li>
</ul>
</div>
<div class="card">
<h3>Reliable Delivery</h3>
<ul>
<li>Update·Query·Reply는 ACK 기반 전송</li>
<li>ACK 미수신 시 재전송</li>
<li>재전송 실패가 지속되면 인접 관계 재설정 가능</li>
</ul>
</div>
</div>
<div class="callout"><strong>NBMA 환경</strong>에서는 멀티캐스트가 제한될 수 있으므로 정적 Neighbor 설정이 필요할 수 있습니다.</div>
<div class="code">router eigrp 100
neighbor 10.4.123.1 Serial1/0.123</div>
</section>
<section class="slide" data-title="DUAL 기본 용어">
<div class="eyebrow">11 · DUAL Concepts</div>
<h2>FD, RD, Successor, Feasible Successor</h2>
<div class="g2">
<div class="card">
<h3>거리 값</h3>
<ul>
<li><strong>FD · Feasible Distance</strong>: 현재 라우터에서 목적지까지의 전체 Metric</li>
<li><strong>RD · Reported Distance</strong>: 이웃이 광고한 목적지까지의 Metric</li>
</ul>
<div class="formula">Feasibility Condition: RD(후보 경로) < FD(Successor)</div>
</div>
<div class="card">
<h3>경로 역할</h3>
<ul>
<li><strong>Successor</strong>: 현재 사용 중인 최적 경로</li>
<li><strong>Feasible Successor</strong>: 조건을 만족한 Loop-Free 백업 경로</li>
</ul>
<p class="good">FS가 있으면 장애 시 Active 상태로 전환하지 않고 빠르게 대체 가능</p>
</div>
</div>
</section>
<section class="slide" data-title="DUAL 동작 흐름">
<div class="eyebrow">12 · DUAL Operation</div>
<h2>경로 장애 발생 시 동작</h2>
<div class="stepbar">
<div class="step"><h3>1. 장애 감지</h3><p>Successor 경로 Down 또는 Metric 변경</p></div>
<div class="step"><h3>2. FS 확인</h3><p>Topology Table에서 Feasible Successor 검색</p></div>
<div class="step"><h3>3A. FS 존재</h3><p>즉시 새로운 Successor로 승격</p></div>
<div class="step"><h3>3B. FS 없음</h3><p>경로를 Active로 전환하고 Query 전송</p></div>
</div>
<div class="flow">
<span class="node">Passive</span><span class="arrow">→</span>
<span class="node">FS 없음</span><span class="arrow">→</span>
<span class="node danger">Active</span><span class="arrow">→</span>
<span class="node">Reply 수신</span><span class="arrow">→</span>
<span class="node good">Passive</span>
</div>
</section>
<section class="slide" data-title="Passive Active SIA">
<div class="eyebrow">13 · Route State</div>
<h2>Passive, Active 그리고 SIA</h2>
<div class="g3">
<div class="card">
<h3>Passive</h3>
<p>경로 계산이 완료된 정상 상태</p>
<div class="code">P 192.168.3.3/32</div>
</div>
<div class="card">
<h3>Active</h3>
<p>FS가 없어 Query·Reply로 새로운 경로를 계산 중인 상태</p>
<div class="code">A 192.168.3.3/32</div>
</div>
<div class="card">
<h3>SIA · Stuck In Active</h3>
<p>정해진 시간 안에 Query에 대한 Reply를 받지 못한 상태</p>
<p class="danger">인접 관계가 재설정되고 해당 이웃을 통한 경로가 제거될 수 있음</p>
</div>
</div>
<p class="small">대규모 Query 범위, 느린 링크, CPU 과부하, 불안정한 네이버가 SIA 위험을 높입니다.</p>
</section>
<section class="slide" data-title="UCMP와 Variance">
<div class="eyebrow">14 · Load Balancing</div>
<h2>ECMP와 UCMP</h2>
<div class="g2">
<div class="card">
<h3>ECMP</h3>
<p>동일한 Metric 경로를 동시에 설치</p>
<div class="formula">Equal-Cost Multi-Path</div>
</div>
<div class="card">
<h3>UCMP</h3>
<p>서로 다른 Metric 경로를 <code>variance</code>로 동시에 설치</p>
<div class="formula">후보 FD ≤ Successor FD × variance</div>
<p class="small">동시에 Feasibility Condition도 만족해야 합니다.</p>
</div>
</div>
<div class="code">router eigrp 100
variance 2
maximum-paths 2
traffic-share balanced</div>
</section>
<section class="slide" data-title="Offset-list 개념">
<div class="eyebrow">15 · Metric Control</div>
<h2>EIGRP Offset-list</h2>
<div class="g2">
<div class="card">
<h3>목적</h3>
<ul>
<li>특정 Prefix의 EIGRP Metric 증가</li>
<li>Primary / Backup 경로 우선순위 조정</li>
<li>Traffic Engineering</li>
<li>일부 경로를 의도적으로 Less Preferred 처리</li>
</ul>
</div>
<div class="card">
<h3>동작</h3>
<p>Offset 값은 EIGRP 메트릭의 <strong>Delay 항목</strong>에 추가됩니다.</p>
<div class="formula">새 Metric = 기존 Metric + Offset</div>
<p class="warn">경로를 차단하는 기능이 아니라 선호도를 낮추는 기능</p>
</div>
</div>
</section>
<section class="slide" data-title="Offset-list In Out">
<div class="eyebrow">16 · Offset-list Direction</div>
<h2>IN / OUT 방향</h2>
<div class="g2">
<div class="card">
<h3>IN</h3>
<p>해당 인터페이스로 <strong>수신하는</strong> EIGRP 경로의 Metric 증가</p>
<p class="small">이웃이 광고한 경로를 로컬에서 덜 선호하도록 조정</p>
</div>
<div class="card">
<h3>OUT</h3>
<p>해당 인터페이스로 <strong>송신하는</strong> EIGRP 경로의 Metric 증가</p>
<p class="small">이웃에게 특정 경로를 덜 좋은 경로로 보이도록 광고</p>
</div>
</div>
<div class="code">access-list 10 permit 192.168.10.0 0.0.0.255
router eigrp 100
offset-list 10 in 5000 Ethernet0/0</div>
</section>
<section class="slide" data-title="Manual Summary">
<div class="eyebrow">17 · Route Summarization</div>
<h2>EIGRP Manual Summary</h2>
<div class="g2">
<div class="card">
<h3>목적</h3>
<ul>
<li>라우팅 테이블 크기 감소</li>
<li>업데이트 범위 축소</li>
<li>토폴로지 안정성 향상</li>
<li>경계 라우터에서 세부 경로 숨김</li>
</ul>
</div>
<div class="card">
<h3>인터페이스 단위 설정</h3>
<div class="code">interface Serial1/0
ip summary-address eigrp 100 10.1.0.0 255.255.252.0</div>
<p>10.1.0.0/22는 10.1.0.0/24부터 10.1.3.0/24까지 포함</p>
</div>
</div>
</section>
<section class="slide" data-title="Null0 요약 경로">
<div class="eyebrow">18 · Summary Safety</div>
<h2>요약 경로와 Null0</h2>
<div class="g2">
<div class="card">
<h3>왜 생성되는가?</h3>
<p>요약 범위에 포함되지만 실제 세부 경로가 존재하지 않는 목적지로 패킷이 들어올 수 있습니다.</p>
<p>이 패킷을 상위 라우터로 다시 전달하면 Routing Loop가 발생할 수 있습니다.</p>
</div>
<div class="card">
<h3>Null0 역할</h3>
<p>요약 범위에는 포함되지만 실제 상세 경로가 없는 트래픽을 폐기</p>
<div class="formula">Summary Route → Null0 → Drop</div>
<p class="good">잘못된 재귀 라우팅과 루프 방지</p>
</div>
</div>
</section>
<section class="slide" data-title="Key-chain 인증">
<div class="eyebrow">19 · Authentication</div>
<h2>EIGRP Key-chain 인증</h2>
<div class="g2">
<div class="card">
<h3>Key-chain 생성</h3>
<div class="code">key chain AA
key 1
key-string cisco</div>
<ul>
<li>양쪽 라우터의 Key ID와 Key-string 일치</li>
<li>Key-chain 이름은 로컬 식별자</li>
</ul>
</div>
<div class="card">
<h3>인터페이스 적용</h3>
<div class="code">interface Serial1/0
ip authentication mode eigrp 100 md5
ip authentication key-chain eigrp 100 AA</div>
<p class="small">Classic EIGRP 기준 명령입니다. IOS 버전과 Address Family 방식에 따라 문법이 다를 수 있습니다.</p>
</div>
</div>
</section>
<section class="slide" data-title="Redistribution">
<div class="eyebrow">20 · Route Redistribution</div>
<h2>다른 라우팅 프로토콜과 재분배</h2>
<div class="topology">
<div class="router">RIP</div><div class="link"><span class="label">ASBR</span></div><div class="router">EIGRP</div>
</div>
<div class="g2">
<div class="card">
<h3>RIP → EIGRP</h3>
<div class="code">router eigrp 100
redistribute rip metric 1544 10 255 1 1500</div>
<p class="small">대역폭, Delay, Reliability, Load, MTU의 Seed Metric 필요</p>
</div>
<div class="card">
<h3>EIGRP → RIP</h3>
<div class="code">router rip
version 2
redistribute eigrp 100 metric 4</div>
<p class="small">RIP Metric은 Hop Count 사용</p>
</div>
</div>
</section>
<section class="slide" data-title="Distribute-list">
<div class="eyebrow">21 · Route Filtering</div>
<h2>Distribute-list</h2>
<div class="g2">
<div class="card">
<h3>역할</h3>
<p>라우팅 업데이트를 수신하거나 송신할 때 특정 경로를 허용·차단</p>
<ul>
<li>ACL 기반 필터링</li>
<li>Prefix-list 또는 Route-map 연계 가능</li>
<li>IN / OUT 방향 적용</li>
</ul>
</div>
<div class="card">
<h3>기본 명령 구조</h3>
<div class="code">access-list 10 deny 192.168.20.0 0.0.0.255
access-list 10 permit any
router eigrp 100
distribute-list 10 in Ethernet0/0</div>
</div>
</div>
</section>
<section class="slide" data-title="Route-map 필터">
<div class="eyebrow">22 · Advanced Filtering</div>
<h2>Route-map을 이용한 경로 필터링</h2>
<div class="code">access-list 10 permit 192.168.20.0 0.0.0.255
route-map EIGRP-FILTER deny 10
match ip address 10
route-map EIGRP-FILTER permit 20
router eigrp 100
distribute-list route-map EIGRP-FILTER in Ethernet0/0</div>
<div class="callout"><strong>주의:</strong> Route-map 마지막에는 암묵적 Deny가 있으므로 나머지 경로를 허용하는 Permit Sequence를 구성합니다.</div>
</section>
<section class="slide" data-title="Auto-summary와 Split Horizon">
<div class="eyebrow">23 · Route Behavior</div>
<h2>Auto-summary와 Split Horizon</h2>
<div class="g2">
<div class="card">
<h3>Auto-summary</h3>
<p>Classful 경계에서 자동 요약하는 기능</p>
<div class="code">router eigrp 100
no auto-summary</div>
<p class="small">현대 IOS에서는 기본 비활성화된 경우가 많지만 실습에서는 명시적으로 설정 가능</p>
</div>
<div class="card">
<h3>Split Horizon</h3>
<p>학습한 인터페이스로 동일 경로를 다시 광고하지 않는 루프 방지 기능</p>
<div class="code">interface Serial0/0.2
no ip split-horizon eigrp 100</div>
<p class="small">Hub-and-Spoke Multipoint NBMA에서 Spoke 간 경로 교환을 위해 예외적으로 해제</p>
</div>
</div>
</section>
<section class="slide" data-title="기본 설정">
<div class="eyebrow">24 · Configuration</div>
<h2>EIGRP 기본 설정 예시</h2>
<div class="g2">
<div class="card">
<h3>R1</h3>
<div class="code">conf t
router eigrp 100
eigrp router-id 1.1.1.1
network 10.12.12.0 0.0.0.3
network 10.13.13.0 0.0.0.3
no auto-summary
end</div>
</div>
<div class="card">
<h3>검증</h3>
<div class="code">show ip protocols
show ip eigrp neighbors
show ip eigrp topology
show ip route eigrp
show ip eigrp traffic</div>
</div>
</div>
</section>
<section class="slide" data-title="DUAL 실습 포인트">
<div class="eyebrow">25 · Lab Focus</div>
<h2>DUAL 실습에서 확인할 항목</h2>
<div class="g2">
<div class="card">
<h3>장애 전</h3>
<ul>
<li>Successor와 Feasible Successor 존재 여부</li>
<li>각 경로의 FD / RD 값</li>
<li>Topology 상태가 Passive인지 확인</li>
</ul>
<div class="code">show ip eigrp topology 192.168.3.3/32</div>
</div>
<div class="card">
<h3>장애 후</h3>
<ul>
<li>FS 존재: 즉시 Successor 승격, 대체로 P 유지</li>
<li>FS 없음: P → A → Query/Reply → P</li>
<li>SIA 또는 네이버 Reset 발생 여부</li>
</ul>
<div class="code">debug eigrp fsm
debug eigrp packets query reply</div>
</div>
</div>
</section>
<section class="slide" data-title="핵심 정리">
<div class="center">
<div class="eyebrow">Conclusion</div>
<h2>핵심 정리</h2>
<div class="g2">
<div class="card">
<ul>
<li>EIGRP는 <strong>Advanced Distance Vector IGP</strong></li>
<li>기본 메트릭은 <strong>Bandwidth + Delay</strong></li>
<li>DUAL은 <strong>Successor와 FS</strong>를 이용해 루프 없는 경로 계산</li>
<li>FS가 없을 때 Query / Reply로 새로운 경로 탐색</li>
</ul>
</div>
<div class="card">
<ul>
<li>Offset-list: 경로 Metric 조정</li>
<li>Manual Summary: 업데이트 축소와 안정성 향상</li>
<li>Key-chain: EIGRP 네이버 인증</li>
<li>Distribute-list: 경로 광고·수신 필터링</li>
</ul>
</div>
</div>
</div>
</section>
</div>
<div class="menu"><button id="menuBtn">목차</button></div>
<div class="toc" id="toc"></div>
<div class="controls">
<button id="prev" aria-label="이전 슬라이드">‹</button>
<button id="next" aria-label="다음 슬라이드">›</button>
</div>
<div class="footer"><span>EIGRP · DUAL 발표자료</span><span id="counter">1 / 26</span></div>
<div class="progress" id="progress"></div>
<script>
const slides=[...document.querySelectorAll('.slide')];
let index=0;
const counter=document.getElementById('counter');
const progress=document.getElementById('progress');
const toc=document.getElementById('toc');
slides.forEach((s,i)=>{
const b=document.createElement('button');
b.textContent=`${i+1}. ${s.dataset.title||'Slide'}`;
b.onclick=()=>{show(i);toc.classList.remove('open')};
toc.appendChild(b);
});
function show(i){
index=(i+slides.length)%slides.length;
slides.forEach((s,n)=>s.classList.toggle('active',n===index));
counter.textContent=`${index+1} / ${slides.length}`;
progress.style.width=`${((index+1)/slides.length)*100}%`;
history.replaceState(null,'',`#${index+1}`);
}
document.getElementById('prev').onclick=()=>show(index-1);
document.getElementById('next').onclick=()=>show(index+1);
document.getElementById('menuBtn').onclick=()=>toc.classList.toggle('open');
document.addEventListener('keydown',e=>{
if(['ArrowRight','PageDown',' '].includes(e.key)){e.preventDefault();show(index+1)}
if(['ArrowLeft','PageUp'].includes(e.key)){e.preventDefault();show(index-1)}
if(e.key==='Home')show(0);
if(e.key==='End')show(slides.length-1);
if(e.key.toLowerCase()==='m')toc.classList.toggle('open');
if(e.key.toLowerCase()==='f' && document.documentElement.requestFullscreen)document.documentElement.requestFullscreen();
});
const start=parseInt(location.hash.slice(1),10);
show(Number.isFinite(start)&&start>0?start-1:0);
</script>
</body>
</html>