RIP 라우팅 프로토콜은 ‘Neighbor Table’을 만들지 않고, RIP 라우팅 프로토콜을 interface에 동작시키면 주기적으로 Update Packet을 보낸다. 그래서, RIP 라우팅 프로토콜은 공격자가 잘못된 네트워크 정보를 만들어 Update Packet을 보내는 경우 보안에 취약할 수 있다.

  이 문제를 해결하기 위해서 EIGRP, OSPF, BGP, IS-IS와 같은 라우팅 프로토콜은 Neighbor로 인정한 장비에게만 Update Packet을 받는다. 그러기 위하여 Neighbor로 인정한 장비 목록을 ‘Neighbor Table’에 등록하여 해당 Table에 등록된 Neighbor에게만 Update Packet을 받도록 하였다. 그리고, 상대방 장비를 Neighbor로 인정할 것인지 여부를 확인하기 위하여 EIGRP, OSPF, IS-IS는 Hello Packet을 만들었고, BGP는 ‘OPEN 메세지’라는 것을 만들었다.

  그런데, EIGRP 라우팅 프로토콜은 상대방이 보내온 Hello Packet을 확인하여 자신이 Neighbor로 인정하면 바로 Neighbor 관계가 수립되지만, OSPF 라우팅 프로토콜은 상대방도 자신을 Neighbor로 인정했는지 여부를 확인해야 Neighbor 관계가 수립되도록 만들었다.

  즉, OSPF 라우팅 프로토콜은 자신도 상대방을 Neighbor로 인정하고, 상대방도 자신을 Neighbor로 인정한 것을 확인해야 Neighbor 관계가 되는 것이다. 이 상태를 우리는 ‘2-WAY’ 상태라고 부른다. 어떠한 과정을 거쳐서 ‘2-WAY’ 상태가 되는지 확인해 보기로 하자.

1. Null or DOWN 상태

  처음 Neighbor 관계를 수립할 때는 상대방에게 어떠한 정보도 받은 것이 없으니, ‘Neighbor Table’은 ‘Null’ 상태로 아무런 정보가 없을 것이다. 또한, Neighbor를 수립한 후에 Dead Interval 동안 Hello Packet을 받지 못하면 Neighbor 관계가 끊어져 ‘DOWN’ 상태일 것이다.

  일반적으로 Neighbor 관계가 끊어지면 ‘Neighbor Table’에서 사라지기 때문에 ‘DOWN’ 상태를 확인할 수 없지만, Neighbor가 끊어진 후 일정한 시간동안 Neighbor 관계를 맺지 못하게 하는 기술 등을 사용하는 경우는 Neighbor 관계가 끊어진 후에 ‘DOWN’ 상태를 확인할 수 있다.

  이 상태에서 OSPF 라우팅 프로토콜이 동작하는 interface로 Hello Packet을 주기적(Hello Interval)으로 보낸다.

2. INIT 상태

  앞에서 OSPF Hello Packet에는 해당 interface에 연결된 Neighbor 리스트 정보가 들어있다고 설명을 하였다. 그 이유는 새로운 Neighbor에게 Hello Packet을 받았을 때, Neighbor 리스트에 자신이 없는 경우 Hello Packet을 보내온 장비에게 자신의 Hello Packet을 Unicast로 바로 보내어 빠르게 Neighbor 관계를 수립하기 위함이다.

  위 그림에서 두 장비의 interface에 OSPF 라우팅 프로토콜을 동작시키면 상호간에 Hello Packet을 전달하는데, 상대방을 아직 Neighbor로 인정한 상태가 아니기 때문에 Hello Packet에는 상대방 장비가 Neighbor 리스트에 존재하지 않을 것이다. 이런 경우, 다음의 프로세스를 거치게 된다.

  Step 1. Hello Packet의 OSPF Header 정보 확인

1. OSPF Version : Version은 반드시 동일하여야 한다.

2. Packet Type : 1 (Hello Packet)

3. Router ID : 자신의 ‘Router ID’와 반드시 달라야 한다. (같은 경우 Hello Packet을 무시함)

4. Area ID : Hello Packet을 받은 interface와 Area ID와 반드시 동일하여야 한다.

5. Authentication : 자신의 ‘인증 Type’ 및 ‘인증 정보(Password 등)’와 반드시 동일하여야 한다.

  Step 2. Hello Packet의 Data 정보 확인

1. Network Mask : OSPF Network Type이 Broadcast, NBMA인 경우는 반드시 동일하여야 한다.

2. Hello Interval, Dead Interval : Hello Packet을 받은 interface의 정보와 반드시 동일하여야 한다.

3. Options : ‘N bit'(NSSA 여부)와 ‘E bit'(Stub Area 여부)는 자신의 정보와 반드시 동일하여야 한다.

4.  Neighbor List : 자신이 리스트에 존재하면 해당 Neighbor의 Dead Interval을 초기화한다

     (Neighbor List에 자신이 없으면 Step 3을 수행한다.)

  Step 3. 자신의 Neighbor List에 등록

1. Hello Packet을 확인한 결과, 상대방을 Neighbor로 인정하면 ‘Neighbor Table’에 등록한다.

2. 자신만 Neighbor로 인정한 상태이기 때문에 Neighbor의 상태를 ‘INIT’ 상태로 표시한다.

3. ‘INIT’ 상태로 등록된 Neighbor에게 Unicast로 Hello Packet을 전달한다.

    (Multicast로 전달시 기존 Neighbor도 Packet을 처리하여야 하기 때문에 Unicast로 전달한다.)

3. 2-WAY 상태

  상호간에 Unicast로 전달받은 Hello Packet의 Neighbor List에는 자신이 존재하게 될 것이다. 즉, Unicast로 Hello Packet을 받으면 상대방이 자신을 Neighbor로 인정했다는 것을 알게 된다. 자신도 상대방을 Neighbor로 인정했고, 상대방도 자신을 Neighbor로 인정한 것을 확인했으니 양방향 Neighbor가 되었다는 것을 확인할 수 있다.

  이 상태를 ‘2-Way’ 상태라고 하고 ‘2-Way 상태가 되어야 Neighbor 관계가 수립된 것이다. 상호간에 데이터베이스를 동기화하여야 Neighbor 관계가 수립된 것이라고 잘못 알고 있는 분들이 많은데, ‘2-Way’ 상태가 되면 Neighbor 관계는 수립이 끝난 상태이다. 이 상태에서 OSPF 라우팅 프로토콜은 Neighbor를 두 종류로 분리한다.

  그것은 데이터베이스를 동기화하는 ‘Adjacency Neighbor’와 데이터베이스를 동기화하지 않고 ‘2-Way’ 상태를 유지하는 ‘non-Adjacency Neighbor’이다. 이 부분은 추후에 DR(Designated Router), BDR(Backup Designated Router)을 설명하는 부분에서 자세하게 하도록 하겠다.