본문 바로가기

네트워크, 보안

네트워크 기초 - 스위칭 (Switching)

라우팅 프로토콜들을 다루려고 했으나 그 전에 스위칭부터 짚고 넘어가려 합니다.

앞선 내용들을 읽어 보셨다면 비교적 간단한 내용들이니 가볍게 읽고 넘어가시면 되겠습니다.

 

 

1. 스위칭 (Switching)

당연히도 하드웨어에서 다루었던 스위치가 수행하는 기능입니다. 통신을 위해 각 노드는 유,무선의 형태로 연결되어 있어야 하고 그러기 위해서는 네트워크는 다음과 같은 망형 구조를 띄게 됩니다.

 

 

그러나 이러한 망형 네트워크가 가지는 단점, 노드가 추가될때 회선이 낭비되고(필요한 회선의 수 : n*(n-1)/2 ) 구조가 복잡해지는 단점으로 인해 각 노드의 연결을 중계해주는 장비가 스위치이며 메쉬형 구조에서 다음과 같이 성형 구조로 진화하게 됩니다.

 

 

구조가 훨씬 간결해지고 필요한 회선의 수 역시 줄어든 모습이 보입니다. 물론 중심에 있는 스위치에서 장애가 발생하면 전체 네트워크가 내려앉는다는 단점이 존재하나 현재에서는 이러한 중요 장비를 이중화하거나 장비의 신뢰도 역시 많이 높아진 상태이며 이러한 네트워크 장비들을 저같은 사람들이 꾸준히 유지보수 하게 됩니다. 

 

부족한 신뢰성에 대한 문제는 이원화, 이중화, 다중화와 같은 방식들을 사용하여 높이게 되겠습니다만, 매우 특수한 목적이 있는 네트워크 같은 경우에는 메쉬형 역시 사용되고 있을 수 있겠습니다. 다중화에 대한 내용은 추후에 다루겠습니다.

 

 

2. 스위칭 방식

 

당연하게도 이러한 스위칭에는 위 그림과 같은 여러 방법들이 있고 대략적인 원리만 알아보도록 하겠습니다.

 

 

2.1 회선교환 (Circuit Switching)

 

말 송수신자간에 사용하는 회선을 할당하는 방식입니다. 쉽게 생각해서 유선전화를 떠올리시면 되겠습니다. A가 D와 통화중일때는 송수신자간 회선을 할당해주어서 다른 사람이 사용할 수 없습니다. 이러한 전화망을 PSTN이라고 합니다.

 

요즘 스마트폰은 여럿이서 통화가 가능하다던가 하는 기능이 있지만 기본적으로 다른사람과 통화중일때는 다른 사람의 전화가 부재중 처리되는데, 이러한 것을 상상하시면 됩니다. 송수신자간에는 언제든지 말을 주고받을 수 있고 회선을 할당해주니 속도도 안정적이지만, 다른사람이 이 회선을 못쓰게 된다는 단점이 있는겁니다. 

 

그래서 회선을 독점해서 다른사용자가 쓰지 못하는 이 단점을 극복하여 회선을 여러 사람이 공유하기 위해 아래에서 설명할 Store and Forward 방식이 생겨납니다.

 

 

2.2 축적 후 교환 (Store and Forward)

 

Store(저장) 하고 Foward(전달) 합니다. 축적교환 방식이라고 하는데 데이터를 주고받을때 중간장치가 전송되는 데이터를 임시로 저장하고 있다가 한방에 보내버립니다. 그러면 이 회선의 사용시간이 극도로 짧아지게 되고, 남는 시간에는 다른 사람이 회선을 사용할 수 있게 합니다.

마치 메일이나 문자를 보내는 것과 비슷한거죠. 내용을 우리는 타이핑하면서 임시로 저장하고 있다가, 전송이나 보내기 버튼을 누르면 상대방에게 데이터를 전달합니다. 엄밀히 말하자면 계층이 다르니 정확한 비유는 아니겠습니다만, 그런 느낌입니다.

 

아래에서 설명할 방식들은 기본적으로 이 축적 후 교환방식입니다.

 

 

2.2.1 메시지 교환 (Massage Switching)

보낼 데이터를 저장했다가 전송합니다. 저장해뒀다가 보내는 데이터를 메시지라고 일컫고 아까 설명드린 이메일같은 전송에서 사용됩니다. 그러므로 여러명이 회선을 사용할 때 조금더 효율적이지만, 회선교환 방식은 즉각적으로 데이터나 메시지를 주고받을 수 있는데 반해, 데이터를 다 받아서 저장하기 전까지는 전송하지 않으므로 딜레이가 생기게 됩니다.

 

그래서 이메일과 같은, 지연시간이 중요하지 않은 곳에 사용되고 딜레이가 없어야 하는 실시간 대화형 서비스에는 적합하지 않습니다.

 

 

2.2.2 패킷 교환 (Packet Switching)

 

자, 그런데 만약 내가 엄청나게 큰 용량을 보내야 한다면 어떨까요? 예를 들어 내가 어떤 게임을 다운로드하고 싶습니다. 이 게임의 용량이 100GB라고 생각해 보면 100GB나 되는 용량을 중간에서 저장해줄 장치가 있어야겠는데, 심지어 이 장치를 여러 사람이 사용하고 있으니 100GB보다 더 큰 기억장치를 가져야 할 겁니다.

 

여기서 말하는 기억장치는 우리가 일반적으로 사용하는 USB, HDD, SSD 와 같은 저장장치가 아니고 겁나 빠르고 비싼 기억장치를 말합니다. 어마어마하게 비효율적이고 경제성이 떨어지게 되겠죠.

 

그래서 100GB를 한번에 보내는 것이 아니고, 잘게 잘라버리는겁니다. 이렇게 잘게 자른 하나의 덩어리를 이제는 익숙한 단어인 패킷(Packet) 이라고 부르는 겁니다. 

 

당연한 이야기지만 이 패킷을 너무 잘게 잘라도 안좋고, 너무 크게 잘라도 안좋겠죠? 일반적으로 이더넷을 사용하니 TCP 패킷의 크기는 1500Byte 입니다. 헤더들을 제외하고 페이로드만 따지자면 1460Byte 구요. 

 

즉 100GB 짜리 파일을 내려받을때, 이 1500Byte짜리 패킷을 대략 7300만 개 받게 되겠습니다.

 

 

데이터그램 방식 (UDP)

 

패킷 교환의 방식중 하나입니다. 위와 같은 그림에서 A에서 X로 데이터를 보낼 때, 한쪽 회선만 할당해서 보내는 것이 아니고 그냥 빨리 보내기 위해 보낼 수 있는곳으로 보내버립니다. 어차피 목적지는 찾아가니까요. 이러면 엄청나게 효율적으로 데이터를 전송할 수 있게 되겠습니다. 연결을 설정할 필요가 없어지니까요. 하지만 장점만 있지는 않겠죠?

 

이러한 방식을 사용하게 되면 데이터가 전송되는 경로가 계속 변하고 데이터의 순서 또한 보장받을 수 없어서 데이터가 변형될 수 있다는 단점을 가집니다. 그래서 수신측에서 데이터의 순서를 짜맞추는 순서제어라는 기능이 필요하게 됩니다.

 

"안녕하세요" 라는 내용의 데이터를 보냈는데, 

 

네이버 메일로는 "세"

다음 메일로는 "안"

카카오톡으로 "요"

라인으로 "녕"

문자 메시지로 "하"

 

이렇게 한번에 받은거나 마찬가집니다. 심지어 몇개는 오류가 나서 안오기도 하고, 폐기되기도 합니다. 그러면 수신자는 이게 무슨소린가 싶겠죠? 하지만 가장 효율적이고 빠르다는 장점을 가지기 때문에 데이터가 유실되어도 상관없는 고용량 데이터 전송이나 전송이 빈번할 때 사용됩니다. 

 

예시를 들자면 유튜브 영상시청 같은 것이 있겠습니다. 동영상은 많은 수의 사진을 빠르게 재생하는 것인데 그중에 한두장은 색이 좀 이상하다거나 이미지가 조금 흐릿하다거나 해도 시청자가 눈치채기 힘들겁니다. 그래서 UDP와 같은 프로토콜이 데이터그램 방식을 사용합니다.

 

 

와이어샤크에서 유튜브 영상을 틀어놓고 캡쳐한 패킷입니다. 보시다시피 UDP에서는 포트정보와 길이정도만 표시하고 데이터 순서는 신경쓰지 않습니다. 여기서 캡쳐된 순서가 실제로 전송될 때의 순서와 같은것을 보장하지 않습니다.

 

 

가상회선 방식 (TCP)

 

회선 교환 방식과 패킷 교환 방식을 짬뽕한 방식입니다. 즉, 데이터를 보내는 회선을 할당하되, 패킷으로 끊어 보냄으로써 다른 사용자도 이 회선을 이용할 수 있게 합니다. 데이터그램 방식과 달리 연결을 맺어버리기 때문에 데이터가 손상되거나 순서가 뒤바뀔 걱정이 없지만, 이 연결을 맺기위한 과정이 한단계 필요해지게 됩니다. 이 과정을 TCP handshake 라고 부르며, TCP가 이 가상회선 방식을 사용하게 됩니다. 

 

데이터는 정확하지만 UDP보다 조금 느린, 일반적으로 인터넷 웹 서핑에서 이 TCP를 사용합니다.

 

 

TCP 패킷을 캡쳐한 모습입니다. TCP 패킷은 1500Byte의 크기를 가지고, Ethernet Header 14Byte를 포함하여 1514Byte로 패킷이 잘라져 있는 모습을 확인 가능하며, 이 패킷들의 순서(Sequence) 역시 적혀있는 모습입니다.

 

 

그러니까 속도를 중요시 할것인지, 데이터 정확성을 중요시 할것인지에 따라 현재 인터넷에서는 데이터그램방식과 가상회선 방식을 선택하여 사용하고 있는 상태입니다. 

 

TCP 프로토콜 UDP 프로토콜
- 연결형(Connection-oriented) 프로토콜
- 연결이 성공해야 통신 가능
- 비연결형(connection less) 프로토콜
- 연결없이 통신 가능
- 데이터 경계를 구분하지 않음
- 바이트 스트림(byte-stream) 서비스
- 데이터 경계를 구분함
- 데이터그램(datagram) 서비스
- 신뢰성 있는 데이터 전송
- 데이터를 재전송함
- 비신뢰적인 데이터 전송
- 데이터를 재전송하지 않음