[컴퓨터 네트워크] - Network Core(Packet-switching, Circuit-switching)
저번 글에서는 Access Netoworks와 Physical Media에 대해서 정리해보았다. 이번 글에서는 Network Core에 대해서 알아보도록 하자.
1. The network Core
네트워크 코어는 첫 번째 글에서 나왔듯이, switch와 router가 있다. 다음 그림을 보면 알 수 있듯이, 이 라우터들끼리 연결돼 network를 구성하기도 한다.
이 네트워크 코어의 특징은 mesh, 즉 특정 형태 없이 무작위로 연결돼 있다는 특징이 있다. 이런 특징을 가지고 있는 이유가 있다. 바로 트래픽이 한 쪽에 몰리지 않게 하기 위함이다. 트래픽이 한 쪽에 몰리게 된다면 mesh하게 연결돼 있다는 특징을 이용해 우회를 통해 서비스가 중단되는 문제점을 보완한 기술이다.
첫 번째 글에서도 나온 부분이지만 네트워크 코어에서는 packet-switching이 중요하다. 이 packet-switching은 메세지를 packet 단위로 쪼개서 다음 라우터에 전달하는 방식이다. 이제 packet-switching으로 데이터를 전달하는 방식에 대해서 알아보자.
네트워크 코어에서 데이터를 전달하는 방식중 중요한 방식은 바로 forwarding과 routing이다. 즉, 현재 라우터에서 다음 라우터까지 데이터를 어떻게 보내는지는 두 방식을 확인 하면 된다.
-Forwarding과 Routing
먼저 라우터들, 또는 네트워크 코어들은 앞서 설명했듯 mesh, 특정 형태 없이 연결돼 있는데, 즉, 한 라우터에 하나의 라우터만 연결된 것이 아니라 여러개의 라우터가 연결되어 있다는 뜻이다. 그럼 라우터는 메세지를 받고 전송할 때 어느 라우터로 전송해야될까?
메세지는 현재 packet 으로 쪼개진 상태이다. 이 패킷에는 메세지 내용 뿐 아니라 헤더에 목적지 주소 정보가 포함되어 있다. 그리고 다음과 같이 한 라우터에서 3개의 경로가 있다고 가정하자.
메세지를 전송을 하기 전, 네트워크가 연결이 될 때, router들끼리는 서로 소통을 하고, routing algorithm을 통해 목적지까지의 최단경로 계산을 끝마친 상태이다. 즉 목적지까지의 경로 계산하는 과정이 routing이다.
즉, 현재 0111이라는 목적지가 담긴 패킷이 들어왔고, 3가지 인접 라우터 중에 어디로 전달할지 결정해야 하는 상황이다. 이 때, 이미 routing algorithm을 통해 목적지까지 경로는 정해져 있고, 이 routing algorithm을 토대 이제 forwarding table을 작성한다. 이를 통해, 현재 라우터에서 어느 라우터로 전달할지 결정하고 전달하는 과정이 forwarding이다.
routing과 forwarding은 네비게이션으로 목적지 설정할 때의 예시를 드는데 다음 그림을 참고하면 된다.
- Packet Switching과 여러 delay들
패킷 스위칭의 순서에 대해서 더 자세히 알아보자. 먼저 hosts(end system)에서 전달하고자 하는 메세지가 존재한다. 이 메세지를 L bits의 패킷 단위로 쪼갰다고 가정을 해보자. 그럼 host는 이 쪼개진 패킷들을 링크까지 밀어넣어야 된다. 이 때 등장하는 delay가 Transmission delay이다. 이 transmission delay에 대해서 다시 정리해보자.
Transmission Delay : 호스트가 패킷들을 link까지 밀어넣는데 걸리는 시간.
이를 조금 더 이해하기 쉬운 방식으로 비교를 해보자면, 수도꼭지를 이용해 양동이에 물을 채우는 중이다. 이 양동이에 물을 채워넣기 시작하고 양동이에 연결된 배관 구멍을 통해 배관으로 물이 빠져나간다고 하자. 그렇다면, 직접 L만큼의 물을 R의 속도로 채워넣기 시작했다. 그리고 양동이에 물이 차면 흘러넘치게 된다. 즉 L만큼 다 채우고 흘러넘치는 순간, 배관을 타고 이동하게 된다. 즉, 이 물을 다 채우는데까지 걸리는 시간이 Transmission delay에 해당하게 되는 것이다.
Transmission delay는 다음과 같이 표현된다.
위 그림을 살펴보자. 먼저 위에서 정리했던 transmission delay가 눈에 띈다. 그리고, nodal processing, queueing, propagation이 차례대로 눈에 보인다. 즉, packet-switching에서는 3개의 delay들이 더 존재한다. nodal processing delay부터 차례대로 알아보자.
-nodal processing delay: 목적지를 결정하는데 걸리는 시간(bit error 체크, output link 결정)인데 거의 microsecs보다 적게 걸린다.
-queueing delay: 전송전까지 queue에서 대기하는 시간이다. 혼잡 정도에 따라 걸리는 시간이 다르다.
-propagation delay: 실제로 packet이 link를 타고 다음 라우터나 최종 목적지로 가는데 걸리는 시간이다. 이 지연시간은 전송속도와 link의 실제 길이가 주어지면 다음과 같이 구할 수 있다.
만약, 실제 거리가 d이고, link의 전송속도가 s라면 다음과 같이 나타낼 수 있다.
따라서, packet-switching에서 일어나는 delay시간을 계산하기 위해서는 위에 나타난 delay들을 모두 합해야된다.
-Packet Switching: Store and Forward
앞서 routing과 forwarding을 설명할 때, packet switching에 대해서 packet단위로 나눠서 데이터를 보내는 방식이라고 했다. A에서 B로의 데이터 전달 사이에 라우터가 존재한다면 어떻게 될까? 데이터 전송 과정은 다음과 같을 것이다.
- 보낼 데이터를 쪼개서 패킷에 담는다.
- A에서 중간 라우터로 패킷을 전송한다.
- 중간 라우터에서 B컴퓨터로 패킷을 전송한다.
이 때, 패킷이 하나가 아니라 여러개라면? 중간 라우터에서는 A에서 패킷을 받을 때, 쪼개져서 오는 패킷들을 바로바로 전송하지 못한다. 하나의 패킷이 다 왔는지 확인하고 B로 전달해야되기 때문이다. 이것이 중간 라우터에서 패킷이 다 올 때까지 저장하면서 기다리고 전달하는 store and forward 방식이다.
이와 비슷하지만 다른 방식으로 cut-through 방식이 있다. 이 방식은 패킷의 헤더의 목적지 정보를 확인하고 오는 데이터 족족 바로 다음으로 전달하는 방식인데, 실레로 구현하는데 어려움이 있어 현재는 store and forward 방식을 많이 사용하고 있다.
-Packet Switching: Queueing
이번에는 다음 그림과 같이 라우터 하나에 데이터를 보낼 컴퓨터가 여러 대 있는 상황을 살펴보자.
A와 B에서 동시에 데이터를 전송해야하는 상황이다. 그치만 중간 라우터는 한개만 존재하고, store and forward 방식을 사용하기에는 용량이 부족해 혼잡이 발생할 것이다. 기본적으로 store and forward 방식을 이용하지만, 이와 같이 혼잡 발생 시, queue 방식을 이용해서 보내는 방식이 queueing 방식이다. Queue는 컴퓨터 공학과 학생이라면 다들 알고 있을 것이다. 먼저 들어온 것을 먼저 내보내는 FIFO(First In, First Out) 방식이다. 즉, 먼저 들어온 데이터를 먼저 내보내는 방식이다.
근데 여기서 packet-switching의 단점이 나타난다. 만약, A/B에서 데이터 전송속도가 라우터에서의 내보내는 속도보다 크다면 어떻게 될까? 즉 중간 라우터에서 데이터 도착률>>전송률이라면, 라우터에 메모리 버퍼가 꽉차게 되고 결국 쪼개진 데이터들의 tail들은 소실될 것이다.
-Circuit-swtiching
위와 같은 packet-switching 방식의 대안 중 하나가 바로 circuit-switching이다. Circuit-switching은 전화로 예시를 생각하면 된다. 회선을 미리 정해놓고 그 회선을 쓰는 사람은 송신자 수신자 둘 뿐이다. 즉 다른 사용자는 이 회선이 활성화 돼있는 동안 이 회선을 이용해 사용자들과 데이터를 주고받기 불가능하다는 것이다.
그렇지만 이런 circuit-switching의 단점도 존재한다. 만약 전화로 예시를 들었을 때, 1초도 쉬지 않고 서로 소통하는 것은 불가능할 것이다. 만약 쉬는 시간이 생기게 된다면, 그 시간에 다른 사용자가 회선을 사용할 수 있는데, 그 시간을 낭비하게 된다는 것이다. 이를 보완하기 위해 FDM과 TDM이라는 방법이 나타났다.
FDM(Frequency Division Multiplexing): 주파수마다 사용자를 나누는 것이다. 즉 동일 회선에 대해서 특정 주파수마다 사용자들을 배치하는 것이다. 다음 그림을 참고하자.
이 FDM 방식도 기존의 circuit-switiching 방법에 대해 많이 보완한 방안이긴 하지만, 여전히 사용자가 특정 주파수에 배정돼 있고, 다른 사람들과 공유를 못한다는 단점이 존재한다.
TDM(Time Division Multiplexing): TDM은 위의 FDM의 방안을 더 응용해서 이제 시간 별로 사용자를 나누는 방식이다. 이 때는 보낼 데이터가 있을 시간에만 모든 주파수를 사용할 수 있어 최적의 속도로 이용할 수 있다. 아래 그림을 참고하자.
위 방법들이 있지만 여전히 실생활에서는 Circuit-switching 방식보다는 Packet-switching 방식을 사용하고 있다. 그 이유가 뭘까? 이제부터 알아보도록 하자.
- Packet-swtiching vs Circuit-switching
다음과 같은 예시를 생각해보자.
- 1Gb/s link
- 각 사용자: "active" 상태일 때, 100Mb/s, 10%시간 동안만 "active" 상태.
이 때, circuit-switching과 packet-switching 각각에 대해서 얼마나 많은 사용자들이 이 네트워크를 이용할 수 있겠는가?
먼저 Circuit-switching 방법을 생각해보자. Circuit-switching은 한 명이 한 번밖에 회선을 이용하지 못하기 때문에, 한 명이 active 되면 나머지 사용자는 이 회선을 사용하지 못하게 된다. 이 때, 10%만 활성화되기 때문에 1,000Mbps(=1 Gbps) 에 대해 100Mbps로 나눠주면 즉, 10명의 사용자밖에 유치를 못하게 된다.
이제, Packet-switching 방법을 생각해보자. Packet-switching 방법은, 기본적으로 10명의 사용자를 유치할 수 있고, 추가적으로 더 확보할 수 있다. 그 이유는 다음계산을 살펴보자.
보통 네트워크를 설계할 때, 네트워크 초과확률이 0.1% 미만으로 되게 설계를 하게 돼있다. 즉, 이 예시로 표현하자면, 11명부터 초과하게 되는 것인데, 이 확률이 0.1% 미만이 될 때까지 동시 사용자 수를 고려할 수 있게 된다. 이렇게 계산하다 보면 다음과 같은 식이 나오게 된다.
이 식을 계산해보면, N이 대략 35가 되어야 하므로, 35명까지는 고객 유치를 할 수 있다는 뜻이다. 즉, 비록 10명이 최적이긴 하지만, 11명이상이 동시에 네트워크를 사용할 확률이 0.1% 이하라는 작은 수치이기 때문에 이를 만족하는 35명까지는 괜찮다는 뜻이다. (만약 초과하게 돼서 오류가 발생한다고 해도, 금전적으로 피해보상을 해주면 된다..ㅎ)
그렇다면 결론은 Packet-switching이 더 좋다라는 것인데, 실제로 진짜 Packet-switching이 모든 면에서 Circuit-switching보다 좋을까? 네트워크 특징은 bursty data라는 것이다. 즉, 어떨 때는 데이터를 많이 보내야 할 때도, 어떨 때는 데이터를 아예 보내지 않을 때도 있다는 것이다. 이럴 때는 패킷 스위칭을 사용하는 게 유리하다. 그렇지만 데이터를 많이 보내야할 때는 혼잡이 발생하게 되는데, 이럴 때는 적절한 보상이 필요하거나 congestion control을 잘하는게 중요하다. 이 congestion control에 대해서는 TCP를 배울 때 더 자세히 다룰 예정이다.
그래서 결국 패킷 스위칭을 더 많이 사용하고 있는데, 사실 사람들은 좋은 네트워크 품질을 원한다. 그렇기 때문에 패킷 스위칭에 circuit 처럼 사용할 수 있는 프로토콜을 만드려는 시도가 많았다. 그렇지만, 실제로 쓰이고 있는 것들은 없다.
마지막으로 Packet-switching과 Circuit-switching에 대한 예시가 좋아서 정리하고 넘어가려고 한다. 수업시간에 Packet-swtiching은 친구와 식당을 가려하는데, 예약을 하지 않고 가서 기다리는 것이고, Circuit-switching은 예약을 하고 들어가서 대기가 아무리 많아도 그냥 free-pass로 들어가는 것이다. 이렇게 예시를 들면 Packet-switching과 Circuit-switching에 대해서 더 이해가 쉬웠다.