[ OSPF 동작과정 요약]
┌─ DOWN ┬ HELLO 패킷
│ └ 네이버 구성 요건
│
├─ INIT
│
├─ Two-Way ─ BR/BDR 선출
│
├─ Exstart ─ Master/Slave 라우터 선출
│
├─ Exchange ┬ DBD(DDP) 패킷 <–> LSAck 패킷
│ └ LSDB 비교 후 LSRL 기록
│
├─ Loading ┬ LSR 패킷
│ └ LSU 패킷 <–> LSAck 패킷
│
└─ Full ┬ 라우팅 정보 교환 끝
ㅇ └ 라우터끼리 LSDB 일치
[ OSPF 동작과정 상세 설명 ]
1. Down State
인접한 라우터에게 Hello 패킷을 송신하지만, 받지는 못한 상태이다. 또는, Dead Interval Time이 끝나기 전까지 Hello 패킷을 수신하지 못한 상태이다. 최초의 상태라고 할 수 있다.
* Attempt State
Non-Broadcast Multi Access 환경에서만 적용되는 상태고, Down State랑 똑같은 상태이다. NBMA 환경에서는 ‘neighbor’ 명령어를 이용해 Neighbor를 구성하는데 이 때, Neighbor에게 패킷을 못받은 상태이다. Neighbor와 연결이 끊긴 상태이기도 하다.
2. Init State
Neighbor로부터 Hello 패킷을 받았지만, 정작 Neighbor는 자신의 Hello 패킷을 못받은 상태이다. 이 때, Neighbor로부터 수신한 Hello 패킷을 보면 Neighbor List에 나의 Router-id가 없다.
3. Two-way State
Neighbor끼리 서로 Hello 패킷을 받은 상태이다. 이 상태에서 DR/BDR을 선출한다. 선출하기 위해 Wait Timer동안 대기한다. Wait Timer는 Dead Timer와 값이 동일하다.
* DR/DBR이란
┌DR(Dignated Router): Link State 정보 관리 및 동기화
├BDR(Backup Designated Router): DR 다운 시 백업용 라우터
└DROther: DR, BDR이 아닌 일반 라우터
LSA의 무분별한 플러딩을 막아 불필요한 트래픽을 줄이기 위해 DR/BDR 선출한다. DR 선출 이후 BDR/DROther은 LSA를 DR로만 보내고, DR이 다시 다른 라우터로 전송한다. 이는 즉, DROther는 DR하고만 통신한다.
4. Exstart State
OSPF 패킷을 주고 받기 전 Adjacent Neighbor을 맺는다. 진짜 Neighbor가 되는 것이다. 이 때, Master 라우터와 Slave 라우터를 선출해 누가 먼저 DBD(DDP) 패킷을 보낼지 정한다. DBD 패킷은 Master라우터가 먼저 보내고, Master라우터만 시퀸스 번호를 수정할 수 있다.
* DBD 패킷에 대해선 추후 OSPF 3: 패킷 종류 편에 정리할 예정이다.
5. Exchange State
LSDB에 담긴 LSA Header를 DBD(DDP) 패킷에 담아 전송한다. DBD 패킷을 주고받는 과정을 통해 새로운 LSA 상세 정보가 있는지 확인한다. 새로운 정보가 있다면 Link State Request List에 기록한다. DBD 패킷을 받고나면 LSAck 패킷으로 잘 받았다는 응답을 한다. DBD 패킷을 모두 교환하고 LSRL 확인했을 때, 기록된 내용이 있다면 Loading State로 넘어간다. 만일, 기록된 내용이 없다면 Full State로 넘어간다.
* LSDB: Link-State DataBase
6. Loading State
앞서 언급한 LSRL에 기록된 내용이 있으면, LSR 패킷을 보내 특정 LSA의 상세정보를 요청한다. 이 LSR 패킷을 받은 라우터는 LSA의 상세정보를 LSU 패킷에 담아 전송한다. LSU를 받은 라우터는 잘 받았다는 의미로 LSAck 패킷을 보낸다.
7. Full State
라우터(Adjacenct Neighbor)끼리 라우팅 정보 교환이 끝난 상태이다. 이 때, 서로 동일한 LSDB를 가지고 있다.