Packet-switching: store-and-forward
패킷 스위칭에 사용되는 기술인 store-and-forward
는 모두 저장(store)이 끝난 후 forward가 되는 것을 보장합니다.
라우터가 패킷을 수신할때 하나의 패킷을 한번에 받는 것이 아닌 비트 단위로 수신하게 되는데
아직 하나의 패킷의 모든 비트가 온전히 라우터에 전달되지 않은 시점에는 라우터로부터 그 패킷의 비트가 빠져나가지 않습니다.
즉, 하나의 패킷의 첫번째 비트는 마지막 비트가 도착하기 전에는 절대 라우터를 빠져나가지 않는 것이죠.
L2 스위치와 라우터 모두 store-and-forward
를 표준 기술로 채택하여 사용하고 있습니다.
패킷 전송 지연시간 (packet transmission delay)
위 그림에서 패킷을 전송할때 라우터에 의해 지연되는 시간은 L / R입니다.
이는 R의 단면적을 가진 수도관에 L만큼의 물을 밀어넣는데 걸리는 시간이라고 생각해볼 수 있습니다.
물론 패킷 전송 지연시간을 거치면 패킷이 다음 라우터까지 전송되는 것은 아닙니다. 관을 타고 이동해야하는 시간도 존재하기 때문이죠. (관을 타고 이동하는 시간을 propagation delay
라고 부르며, 추후 다시 등장할 개념입니다.)
Packet-switching: queueing
하나의 라우터에 수많은 패킷이 동시에 전달된다면 패킷들이 라우터로부터 포워드되기 위해 줄을 서야 할겁니다.
이 현상은 라우터의 처리속도에 영향을 받는 부분도 있겠지만 큐잉 이론에서 다루는 문제는 라우터 자체의 처리속도가 아닌
input link의 대역폭과 output link의 대역폭이 차이가 날때 큐잉(줄서기)가 발생한다는 것입니다. (깔때기처럼 입구는 넓지만 출구는 좁아서 발생하는 문제)
Packet Loss
기다리는 비트들(패킷들)은 라우터의 라인카드라는 보드에 저장되게 되는데 이 저장공간을 Buffer
라고 부릅니다.
버퍼는 유한한 자원이므로 버퍼가 가득 찬 상태에서 추가적인 패킷이 들어온다면 그 패킷을 보관해놓고 있을 수 없습니다.
이런 경우에는 새로 들어온 패킷을 삭제하게 되며, 이 현상을 Packet loss
라고 부릅니다.
즉, arrival rate(단위: bps)가 transmission rate(단위: bps)보다 클 경우에 패킷 로스가 발생할 수 있습니다. (물론 버퍼가 있으므로 버퍼의 용량 한계까지는 버틸 수 있습니다.)
Circuit switching
Circuit
은 데이터 송신자와 수신자 사이에 자료 전송을 위해 만들어진 경로(길)입니다.
유선전화의 네트워크는 Circuit 스위칭이 사용되는 대표적인 예시이며, 여기서 파생된 용어인 Call은 시작 지점부터 끝 지점까지 길을 연결해놓고 사용하는 방식을 의미합니다. 이때 자원할당을 위해 Signalling
프로토콜을 사용하며, 할당받은 길은 서로 공유하지 않습니다. (그 길을 현재 사용중이지 않더라도 지나갈 수 없습니다.)
Circuit 스위칭은 품질을 보장할 수 있다는 장점이 있지만, 자원을 전체적으로 활용하지 못한다는 단점이 있습니다. (놀고 있는 길도 사용할 수 없기 때문입니다.)
FDM과 TDM
Circuit 스위칭을 구현하는 방식은 크게 Frequency Division Multiplexing
(주파수 분할 다중화)와 Time Division Multiplexing
(시간 분할 다중화)가 존재합니다.
주파수 분할은 특정 주파수 대역을 사용자에게 할당하는 방식이며, 시간 분할은 단위시간 동안에는 한명의 사용자가 모든 대역을 온전히 사용할 수 있도록 제공하되, 나머지 시간에는 다른 사용자에게 번갈아가며 제공하는 방식입니다.
Packet switching v.s. Circuit switching
스위칭 기법은 서비스를 제공하는 ISP에서 채택해서 사용하게 되는데 채택하는 기법에 따라 ISP가 최대로 서비스할 수 있는 인원이 달라지게 되므로 어떤 기법을 채택할 것인가는 매우 중요한 요소입니다.
[예시]
한 ISP가 1Gbps 링크를 가지고 서비스를 제공하는 시나리오를 가정해봅시다.
이때 모든 유저는 인터넷을 사용할때 100Mb/s를 요구하고, 10%의 확률로 서비스를 이용합니다. (10%의 확률로 서비스를 이용한다는 것은 하루 24시간 중 2.4시간동안 인터넷을 사용한다는 의미입니다.)
만약 Circuit 스위칭 기법을 채택한다면 단 10명의 유저밖에 받지 못할 것입니다. (10Mbps * 10 = 1Gbps)
90%의 확률로 놀고 있는 길이 발생하겠지만 반드시 모든 사용자에게 서비스를 제공해야하므로 어쩔 수 없이 10명만을 대상으로 서비스할 수 밖에 없을 것입니다.
이에 반해 Packet 스위칭 기법을 사용하게 된다면 35명까지도 현실적으로 서비스해줄 수 있게 됩니다.
10명이 넘는 사용자가 동시에 서비스를 이용할 확률은 0.04%보다 작으며, 이는 곧 패킷 로스가 발생할 확률에 해당합니다.
아예 누군가가 서비스를 제공받지 못하게 되는 경우와 다르게 패킷 로스가 발생하는건 상대적으로 사소한 이슈이며, 이러한 이벤트가 발생할 확률또한 매우 낮습니다.
10명을 넘는 사람 k명이 서비스를 이용하고 나머지는 서비스를 이용하고 있지 않을 확률은
위와 같은 식을 통해 계산할 수 있습니다.
그럼에도 Circuit 스위칭이 일부 사용되는 이유
만약 모든 점에서 패킷 스위칭이 Circuit 스위칭보다 우월하다면 Circuit 스위칭을 소개할 일도 없었을 겁니다.
패킷 스위칭은 Bursty
한 데이터에 대해 유리합니다. Bursty
하다는 것은 일부 시간에만 사용량이 높다는 경우에 해당하며 이는 심지어 인터넷 서비스를 이용중인 시점에도 해당하는 말입니다.
웹 브라우저로부터 특정 화면을 불러오고 해당 화면을 보는 동안에는 또 다른 요청을 보내지 않기 때문입니다.
서비스 품질은 circuit 스위칭이 더 좋음 하지만 Call 과정(길을 예약하는 과정)에서 드는 트래픽은 오버헤드에 해당합니다.
한 순간동안 10명 이상의 사용자가 서비스를 요청할 확률은 조금 전 계산한 0.04%보다도 낮지만 (Bursty하기 때문)
낮은 확률로 서비스 혼잡 상태
(congestion)가 발생하여 패킷 전송이 딜레이되거나 패킷 로스가 발생할수도 있습니다.
만약 고객이 큰 돈을 지불하면서 Circuit 스위칭을 통해 연결해주길 요청한다면 ISP에서는 이를 제공해줄 수 있는 것이죠.
Q. 패킷 스위칭을 사용하면서 신뢰성 있는 서비스를 제공할 방법은 없나요?
파일의 전송같이 반드시 모든 패킷이 전송됨을 보장해야하는 서비스도 분명 존재할 것입니다. 이러한 신뢰성이 보장되어야 하는 서비스를 제공하기 위해 존재하는 것이 바로 TCP라는 프로토콜입니다.
이후에 다시 등장할 개념이기에 간단히 설명하자면 패킷이 loss되었는지를 확인해서 만약 loss가 발생하였다면 해당 패킷을 다시 전송하는 것이 TCP 프로토콜의 핵심입니다.
본 글에 사용된 자료는 https://gaia.cs.umass.edu/kurose_ross/ppt.php에서 무료로 제공하고 있습니다.