etc

[Network] IRC구조

mongyang 2013. 2. 22. 17:44


1. 정의

 - 실시간 인터넷 텍스트 메시징 또는 동시 회의

2. 서버 구조(spanning tree)

- 시발(始發)

 이중화가 2계층 설계로 도입될 때, 루프 또는 중복되는 프레임은 네트워크에 심각한 결과를 가져올 수 있다. STP(Spanning Tree Protocol)은 이러한 문제를 해결하기 위해서 개발되었다.

 - 개념

 루프의 원인이 될 수 있는 여분의 경로를 의도적으로 블로킹하여 네트워크상의 모든 도착지 사이에 오직 논리적인 하나의 경로만이 있도록 책임진다.

 STA Network Topology 상에서 Bridge로 하여금 루프(loop)를 형성하지 않도록 하는 알고리즘이다. 이 말은 임의의 2개의 단말이 프레임을 송수신할 수 있는 경로가 단 하나 이도록 한다는 의미이다.

- 설명

그림에서 모든 스위치들은 STP Enable 되어있다.


: Pc1은 네트워크로 브로드캐스트를 보낸다.

: 스위치 S3 STP가 구성되어 있으므로 Trunk2를 위한 포트는 블로킹 상태로 놓는다.

: 스위치 S3 S1으로부터 메시지를 받아도 블러킹 되어 있으므로 S2로 전달하지 않는다.

: 스위치 S2 S1사이의 Trunk링크 장애가 발생한다.

: 스위치 S2 S3 Trunk2링크를 복구하여 연결이 지속되도록 한다.

: Trunk1복구시 STP는 재수렴하여 S3과의 Trun2를 차단한다.

 STP는 블로킹 상태의 포트들을 전략적으로 배치하여 네트워크를 통과하는 루프 프리경로를 구성하여 일어날 수 있는 루프를 방지한다.

 

STP 알고리즘 구조

 STP는 루프를 방지하기 위해 블로킹을 구성해야 할 필요가 있는 네트워크 상의 스위치 포트를 결정하기 위해 스패닝 트리 알고리즘을 사용한다. Spanning Tree 알고리즘은 루트 브리지라는 단일 스위치를 지정하여 모든 경로 계산을 위한 지점으로 참조하여 사용한다.

: 그림에서 루트 브릿지인 S1은 선거를 통해서 선택되어 진다.

: 모든 스위치들은  STP 에서 교환하는 BPDU프레임으로 네트워크상에 어떤 스위치가 가장낮은 Bridge ID(BID) 를 가지고 있는지 결정하기 위해 참여한다.

: 스위치는 가장 낮은 BID와 함께 자동으로 STA(Spanning Tree Algorithm) 계산을 위한 루트 브리지가 된다.

: BPDU STP를 위해 스위치들로 교환되어지는 프레임 메시지이다. BPDU에 스위치를 식별할 수 있는 BID를 포함하여 BPDU를 보낸다. BID는 우선순위 값, 보내는 스위치의 MAC주소값, 그리고 선택적으로 확장된 시스템ID가 포함되어 있다. 가장 낮은 BID값은 이들 세가지 필드의 조합으로 결정된다.

: 루트 브릿지를 결정한 후에 STA는 가장 짧은 루트 브릿지 경로를 계산한다. 각 스위치는 어떤 포트를 차단할지 결정하기 위해 STA를 사용한다. 브로드캐스트 도메인 안의 모든 도착지를 위한 루트브릿지로가는 최선의 경로를 STA가 결정하는 동안, 네트워크를 통해 전달하는 모든 트래픽을 막는다.

-       Root port : 루프 브릿지에 가장 가까이 있는 스위치 포트들

-       Designated port : 네트워크상에 트래픽을 전달할 수 있도록 여전히 허락되어 있는 푸트 포트를 제외한 모든 포트.

-       Non-designated port : 루프를 방지하기 위해 블로킹 상태로 구성되어 있는 모든 포트들.

: 루트 브릿지 결정 방법

-       스위치는 부팅된 후에 2초마다 루트 ID와 스위치의 BID를 포함하여 BPDU프레임을 밖으로 보낸다.

-       최초에는 자기 자신을 루트 브짓지로 식별한다.

-       스위치들이 그들의 BPDU프레임을 전달하면 브로드 캐스트 도메인 안의 인접한 스위치들은 BPDU프레임안의 루트 ID정보를 읽고, 수신하는 스위치의 루트 ID보다 수신된 BPDU안의 루트ID가 낮으면 수신 스위치는 인접한 스위치의 루트 브릿지로 식별할 수 있게 루트ID를 업데이트 한다.

: 루트 브릿지로 가는 최적경로

-       루트 브릿지 지정 후, 브로드 캐스트 도메인 안의 모든 도착지로부터 루트 브릿지로 가는 최적의 경로를 결정하는 과정을 시작한다. 그 경로 정보는 도착지에서 루트 릿지까지의 경로에 속한 가가각의 포트 코스트의 합계로 결정된다.

 IRC Channel

      : Channel Scope

-       채널 엔티티는 단독 서버나 IRC network에 의해 정보가 유지됨.

-       유저는 직접 연결된 서버에 의해 채널 멤버쉽을 알게됨.

-       Channel prefix‘&’인 채널인 경우 해당 서버에서 지역적이다.

-       다른 채널들은 채널 마스크에 따라 서버군의 단독 서버나 여러 서버에게 알려진다.

-       채널 마스크가 없는 경우 : 모든 서버에게 알려짐.

-       채널 마스크가 있는 경우 : 채널 안의 로컬 유저를 가진 서버에게만 알려짐.

: Standard Channel

-       처음 유저가 참여하면 암묵적으로 생성된다.

-       마지막 유저가 나가면 없어진다.

-       Channel prefix‘+’가 아니라면 생성한 유저는 자동적으로 채널 오퍼레이터가 된다.

-       중복 채널 방지.

IRC 메시지 전송.

     : 메시지들은 트리 내에서 전달에 필요한 가지(branch)들만을 따라 전달된다.

     : 네트워크 상태(network state)는 모든 서버에게 전송된다.

     : 일반 적으로 매우 높은 수준의 비명시적 신뢰관계가 서버들 사이에 존재한다.

     : 치명적인 문제점.

-       잘못 동작하거나 악의적으로 놓인 서버가 IRC 네트워크에 치명적인 손실을 가져다 줄 수 있다.

-       의도적인 것에 의한 결과이든 하부 네트워크의 상황에 따른 결과이든 구조의 어떠한 변경은, -스플리트(net-split)이나 넷-조인(net-join)을 요구할 수도 있다.

-       이로 인해 수많은 네트워크 트래픽과 가짜의 나감/들어옴(quit/join) 메시지가 유발되어 잠시 통신 연결이 손실될 수도 있다.

-       구조의 어떠한 변경은 대규모의 네트워크에 서버를 하나 추가한다는 셈이 되는데, 이것은 많은 네트워크에 백그라운드 밴드위스 부하를 가져다 주고, 서버에 많은 메모리 부하를 야기한다.

 

 

'etc' 카테고리의 다른 글

[C++] Explicit 의미  (0) 2013.05.10
[C++] 문자열 분리(strtok, strtok_s)  (0) 2013.03.04
[C++] warning C4996  (0) 2013.02.21
[SVN] tortoise svn branch merge  (0) 2013.02.13
[C++] 전방선언과 include  (0) 2013.02.13