본문 바로가기

ComputerScience/Network

컴퓨터통신 - 18. 패킷 스위칭

728x90

1. 패킷스위칭(Packet Switching) 

- 3계층에서 수행된다.

- 왜 네트워크 계층이 반드시 필요한지 먼저 짚고가자. 

- 거리 제한이 있는 무선랜으로는 지리적으로 광범위한 네트워크를 구성하기 어렵다. 랜에는 연결할 수 있는 노드의 수가 제한되어 있다.

- 따라서 이런 직접 연결의 한계가 있기 때문에 광범위한, 많은 수의 호스트를 지원할 수 있는 scalable한 네트워크를 구성하기 위해서는 간접연결을 할 수 있는 방법이 필요하다.

- 직접연결은 노드가 공유 매체에 접근하게 되면 다른 호스트들의 성능에 영향을 주지만 간접연결은 이 영향이 적다.

- 노드들을 연결하는 switch의 모습이다 (인터넷에서는 router)

- 연결되는 링크들 중에 들어오는 링크를 input port, 나가는 링크를 output port라고 한다.

- 이전에 배운 내용을 떠올려보면 switch에는 두가지 방식이 있었다.

- Circuit switch : 입력 포트와 출력포트를 선으로 연결해서 회선을 만드는 방식

- packet switch : circuit 없이 버퍼에 store & forward

- 우리는 packet switch 방식을 자세히 다뤄볼 것이다.

2. 데이터그램 (Datagrams)

- 패킷 스위칭에서 forward를 수행하는 대표적인 방식 중 하나. 

- 회선스위치와 달리 일정한 성능을 보장하기 어렵다.

- 포워딩 테이블이란? 예를들어 C가 B에게 패킷을 보낸다고 하자. 그럼 switch1의 3번으로 들어가서 1번으로 나가야하는데 어디로 가야할지 나름의 근거가 필요하다. 

- 따라서 각 switch는 각각 테이블로 목적지주소, port에 대한 정보를 저장해서 관리한다. (forwarding table, routing table)

- 아무리 목적지가 동일한 패킷을 여러개 보낸다고 해도 table을 참조하는 routing은 독립적으로 이루어진다.

*한 노드에서 다른 노드로 가기위한 경로를 route라고 한다. 따라서 이렇게 경로를 찾는 것을 routing이라고 한다.

3. 가상 회선 (Virtual Circuit)

- 패킷 스위칭의 다른 방식이다.

- circuit 스위치의 장점을 일부 살린 패킷스위칭 방식이다.

- 명시적인 연결 설정이 존재한다. 실제 회선을 만드는 것이 아니라 virtual circuit을 만들어 같은 목적지의 패킷을 가상 회선을 통해 물흐르듯 보낼 수 있다.

- 물론 이렇게 만들어진 가상의 circuit을 해당 패킷만 사용하는 것은 아니다. 다른 목적지로 가는 패킷도 그 회선을 사용할 수 있다.

- 모든 패킷을 독립적으로 처리하는 datagram과 다르게 모든 패킷의 path를 찾느라 테이블을 참조할 필요가 준다.

- virtual circuit은 목적지가 같은 패킷의 흐름이 존재할때 매번 테이블 참조를 피하기 위해 다른 종류의 자료구조가 필요하다.

- 가상의 circuit이 만들어지면 기억하는 table이 있다.

- 명시적인 연결 설정이 생기면 가상회선 테이블에 엔트리로 추가되고 사용을 다해서 해지되면 테이블에서 제거된다.

- 그래서 패킷에 vc#(virtual circuit number)를 붙여서 보낸다. 

- VC#을 index로 하면 random access의 탐색속도를 구현할 수 있다.

- 그런데 만약에 5라는 id로 A에서 B로 가는 가상회선을 만들었는데 다른 곳에서 5라는 id를 쓰고있다면? 머리가 아프다.

- 실제로 전체 네트워크에서 유일한 회선 id를 부여하는 일은 쉬운일이 아니다.

- 따라서 고안한 방법이 각 스위치마다 자유롭게 VC#를 정하고 테이블에서는 다음 VC#을 기록해서 Switch1에서 5번을 타고 나가지만 switch 2부터는 11번으로 들어왔다 라고 이름을 바꿔서 인식하는 것이다. switch 2부터는 11번으로 들어와서 7번으로 나간다고 인식한다.

- 즉 만들어진 가상의 회선에 각 스위치마다 다른이름을 붙이는 것이다.

4. 두 패킷 스위칭 비교

- DG는 전세계의 노드중 유일한 주소를 (full address) 헤더로 붙여야 한다.

- VC는 각 스위치에서 식별가능한 VC#를 헤더로 붙인다.

- circuit switch는 연결설정 시간이 소요되며 한번 연결하면 주소를 확인할 필요가 없으니 주소 오버헤드가 없고 당연히 패킷 포워딩 시간도 없다.

- 데이터그램은 테이블이 길어진다면 탐색에 시간이 걸릴 수 있지만 가상회선은 테이블에 access만으로 빠른 검색이 가능하다.

- 가상회선은 사전에 네트워크 state정보를 저장해서 재활용하여 이득을 얻자는 것이다. 하지만 장애가 발생하면 처음부터 모든 상태를 다시 설정해야 한다. 즉 매우 복잡해서 통제가 어려운 네트워크 환경에서는 오히려 상태를 일일히 확인하여 저장하는게 상당한 걸림돌일 수 있다. 왜냐하면 갑자기 한 부분이 고장이 났다면 새로운 state를 설정할때까지 통신이 불통이 되기 때문이다.

- 실제로 네트워크 환경에서는 장애라는 것이 자연스러운 일이기 때문에 장애극복 측면에서는 데이터그램이 더 유리할 수 있다. 갑자기 네트워크 상태가 안좋으면 그냥 단순히 그 순간 다른 경로를 타면 그만이다. 어차피 table은 초기화 될 것이기 때문이다.

- state를 저장하는 장점을 살리면서도 장애에 유연한 방법으로 선택한 것이 soft state이다.

5. 소스 라우팅 (source routing)

- 이제까지는 노드에서 패킷을 보내면 network가 알아서 경로를 타고 목적지로 보내주었다.

- 하지만 상황에 따라 발신자가 직접 원하는 포트를 거칠 필요가 있을 때 사용하는 방법이다. (발신자에게 주도권이 생김)

- 따라서 주소는 발신지에서 목적지까지의 포트번호를 포함한다.

6. 스위치의 성능

- 옛날에는 통신속도가 느려서 링크에서 병목이 생겼지만 요즘 초고속 통신 사회에서는 100메가 1기가는 기본이 되었다.

- 심지어 포트 수도 많이 생기면서 이제는 노드에서 병목이 일어난다.

- 1, 2, 3 포트를 통해 패킷이 도달하면 버스를 타고 메인메모리에 옮겨 저장하고 cpu에서 처리하여 다시 포트로 전송을 한다. 이 동작을 모든 패킷마다 수행한다.

- cpu의 처리속도는 상대적으로 매우 빠르기 때문에 병목의 가장 큰 원인은 매 패킷마다 버스를 타고 메모리에 적히는 것이다.

- 한번 패킷을 처리하기 위해서는 버스를 두번타고 메모리 access를 두번한다. 그래서 버스가 800Mbps의 폭이라면 100Mbps 포트 4개를 지원할 수 있다.

- 따라서 포트가 많을수록 특별한 버스를 쓰거나 큰 폭의 버스를 사용해야 하고 혹은 비싼 메모리가 필요해진다.

- 버스와 메모리에서의 병목만 얘기했지만 패킷이 들어오고 나가는 건 일종의 I/O기 때문에 반드시 하드웨어 적으로 인터럽트를 동반한다. 이는 프로세서에게는 상당히 비용이 많이 드는 작업이다. 

- 그래서 초당 처리할 수 있는 패킷의 수가 정해져있다. 그러니까 패킷 크기가 작아버리면 전체 처리하는 양이 얼마 안되니까 사실상 800Mbps 버스를 써봤자 다 사용하지도 못하고 낮은 성능이 나오는 것이다. 

- 2Gbps를 지원할 수 있다고 하더라도 이 수치는 최적의 상태인 패킷도 충분히 긴 경우를 말하는 거라서 실제로 패킷크기가 작아버리면 1Gbps도 안나올 수 있다.

7. 셀 스위칭(Cell Switching, ATM)

- 전화 회사가 만든 packet switch network이다.

- 지속적인 트래픽이 나가는 패턴을 겨냥하고 만들어서 Virtual circuit방식을 사용한다.

 

728x90
반응형