문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. [[분류:네트워크 계층]] == 개요 == '''라우터''''는 [[패킷]]의 위치를 추출하여, 그 위치에 대한 최적의 경로를 지정하며, 이 경로를 따라 데이터 패킷을 다음 장치로 전향시키는 장치이다. 이때 최적의 경로는 일반적으로는 가장 빠르게 통신이 가능한 경로이므로, 이것이 최단 거리 일수도 있지만, 돌아가는 경로라도 고속의 전송로를 통하여 전달이 되는 경로가 될 수 있다. 간단히 말해 서로 다른 네트워크 간에 중계 역할을 해준다. 크게 제어 평면과 포워딩 평면으로 구성된다. 제어 평면(Control Plane)은 패킷의 경로를 할당하며, 포워딩 평면(Forwarding data plane)은 그에따라 패킷을 적절한 곳에 배분하는 역활을 한다. 제어 평면은 소프트웨어로 포워딩 평면은 하드웨어적으로 구현하는 것이 일반적이다. [[파일:라우터 구조.png|500px|프레임없음|오른쪽]] == 입력 포트 == 입력 포트는 라우터의 입력이 들어오는 포트이다. 또한 입력 포트는 입력 링크 반대편에 있는 링크 계층과 상호 운용하기 위해 필요한 링크 계층 기능을 수행한다. 가장 중요한 것은 입력 포트에서 검색 기능을 수행 하는 것이다. 여기서 포워딩 테이블을 참조하여 도착된 패킷이 스위칭 구조를 통해 전달되는 라우터 출력 포트를 결정한다. 제어 패킷은 입력 포트에서 라우팅 프로세서로 전달된다. == 출력 포트 == 출력 포트는 스위칭 구조에서 수신한 패킷을 저장하고 필요한 링크 계층 및 물리적 계층 기능을 수행하여 출력 링크로 패킷을 전송한다. 링크가 양방향 일때, 출력 보트는 일반적으로 동일한 링크의 입력포트와 한 쌍을 이룬다. == 라우팅 프로세서 == 라우팅 프로세서는 제어 평면 기능을 수행한다. 기존의 라우터에서는 라우팅 프로토콜을 실행하고 라우팅 테이블과 연결된 링크 상태 정보를 유지 관리하며 라우터의 포워딩 테이블을 계산하다. SDN 라우터에서 라우팅 프로세서는 원격 컨트롤러와 통신하며 라우팅 테이블 역할을 수행한다. == 입력 포트 처리 및 목적지 기반 전달 == 라우터는 포워딩 테이블을 사용하여 도착 패킷이 스위칭 구조를 통해 전달되는 출력 포트를 검색한다. 라우터는 패킷의 목적지 주소의 [[프리픽스]]를 테이블의 엔트리와 대응시킨다. 대응하는 엔트리가 존재하면 라우터는 패킷을 그 대응에 연관된 링크로 보낸다. 만약 앞의 엔트리와 대응하지 않으면 최장 프리픽스 매칭 규칙(Logest prefix matching rule)을 적용한다. 즉 테이블에서 가장 긴 대응 엔트리를 찾고 여기에 연관된 링크 인터페이스로 패킷을 보낸다. 테이블의 검색에는 하드웨어적인 방식을 사용한다. 내장형 [[SRAM]], [[DRAM]] 혹은 [[TCAM]]이 검색을 위해서 사용된다. 검색을 통해 패킷의 출력 포트가 결정되면 패킷을 스위칭 구조로 보낸다. [[ARP]]참고 (라우터는 ARP테이블을 작성하여 포워딩 시킨다.) == 변환기 == [[파일:라우터 변환기.png|500픽셀|프레임없음|오른쪽]] === 메모리 === 가장 단순하고, 초기의 라우터는 CPU를 직접 제어해서 입력 포트와 출력 포트 사이에서 패킷을 스위칭하는 전통적인 컴퓨터 처럼 작동했다. 입력 포트와 출력 포트는 전통적인 운영 체제의 [[I/O]]처럼 작동한다. === 버스 === 모든 출력 포트에 패킷이 수신되지만 라벨과 일치하는 포트만 패킷을 유지한다. 출력 포트 구분을 위한 내부 라벨이 패킷에 붙는다. 라벨은 스위치 내에서 버스를 통과하기 위해서만 사용되므로 출력 포트에서는 제거된다. 동시에 패킷을 한 버스가 처리할 수는 없으므로 하나를 제외한 모든 패킷이 대기해야 한다. 버스를 위한 라우터는 작은 지역 및 엔터프라이즈 네트워크에서 작동하는 라우터에 사용된다. === 크로스 바 === 크로스바 스위치는 출력 포트로 전달되는 패킷을 다른 패캣이 현재 해당되는 포트로 전달하지 않는 한 해당 출력 포트에 도달하는 것을 차단하지 않는다. 그러나 동시에 출력포트를 사용할 수는 없으므로, 같은 출력포트로 전달되는 패킷중 어떤것은 기달려야 한다. == 큐잉 == [[파일:라우터 큐잉.png|500px|프레임없음|오른쪽]] 패킷 큐는 입력 포트와 출력 포트 모두에서 형성될 수 있다. 대기열이 길어지면 도착하는 패킷을 저장할 수 있는 메모리가 고갈되어 [[패킷 손실]]이 발생한다. 대기열을 형성하는 알고리즘을 큐잉이라고 한다. === 입력 큐잉 === 스위칭 구조는 한번에 하나의 패킷만 지정된 출력 포트로 전송이 가능하다. 따라서 패킷이 이동하려는 출력링크의 경쟁이 없는 상태이더라도 같은 입력 큐에 앞에 패킷이 있으면 그 패킷이 나갈때까지 기다려야 한다. 이를 HOL(head of line brocking)이라고 한다. 입력 링크에서 패킷 도착 속도가 용량의 58%가 되면 HOL차단때문에 입력 큐가 무한정 길이로 증가한다. === 출력 큐잉 === 들어오는 패킷을 저장할 메모리가 충분하지 않을 때 도착한 패킷을 폐기(Drop Tail)하거나 이미 대기중인 하나 이상의 패킷을 폐기하여 새로 도착한 패킷을 저장하기 위한 공간을 확보해야 한다. 어떤 경우는 버퍼가 가득차기 전에 혼잡을 줄이기 위해서 패킷을 버리는 경우도 있다. [[AQM]]이라고 알려진(active queue management) 알고리즘으로 많은 정책들이 제시된다. 전통적으로 버퍼의 크기는 [[RTT]]*C(링크용량) 이었다. 그러나 이 흐름도 최신 경향에 따라 바뀌고 있다. == 패킷 스케줄링 == === [[FIFO]] === 먼저오는 패킷을 우선적으로 출력하는 것이다. 도착한 패킷은 도착한 순서를 나타내는 숫자가 매겨져서 출력큐로 어떤것을 전달 할지 결정하게 된다. === 우선순위 큐잉 === 네트워크 관리 정보를 운반하는 패킷이 사용자 트래픽보다 우선순위로 통과하게 하고 싶다면 어떻게 할까? 이처럼 먼저 통과해야 하는 패킷이 있을경우 우선순위가 높은 큐에 넣고 우선순위 큐를 먼저 처리하는 식으로 큐를 처리하게 된다. === 라운드 로빈 === 패킷은 우선순위 큐잉과 같이 클래스로 분류되지만, 클래스간에는 엄격한 서비스 우선순위가 존재하지 않으며, 라운드 로빈 스케줄러가 클래스 간에 서비스를 번갈아서 제공한다. 만약 현재 스케줄러가 검사하는 큐에 패킷이 없으면 바로 다음 큐로 넘어가 패킷을 전송하게 된다. === WFQ === Weighted Fair Queuing 의 준말이다. 도착하는 패킷은 각자 큐로 들어가게 된다. 라운드 로빈과 다른 점은 각 클래스마다 다른 양의 서비스 시간을 부여 받는다는 점이다. 만약 어떤 큐에 다른 큐보다 더 많은 패킷이 있으면 그에 비례한 가중치를 가지고 더 긴시간동안 출력 포트로 패킷을 전송할 권리를 얻는다. 라우터 문서로 돌아갑니다.