충남대학교 컴퓨터융합학부의 김상하 교수님의 컴퓨터네트워크를 수강한 후 정리한 글입니다.
오늘은 패킷과 패킷 교환 방식에 대해 알아보도록 합시다.
데이터를 교환하기 위해서는 어디로 보내야할지, 어디서 왔는지에 대한 정보가 필요하다. 이에 대한 정보가 담겨 있는 것이 Network Layer
의 Packet
이다.
Application
계층에서의 User Data
를 여러 개로 분리한다. 한번에 전송할 수 있는 data
의 크기가 정해져있기 때문에 이렇게 작동한다. 전송할 수 있는 data
의 크기에 맞게 분리했는데 문제는 어디로 보내야할지, 어디서 왔는지에 대한 정보가 없다. 이에 대한 정보를 추가한 것이 Packet
이다. 출발지와 목적지에 대한 정보를 담고있는 것이 Packet Header
, 혹은 Control Information
이라고 부른다.
패킷은 목적지 IP 주소와 출발지 IP 주소, 상위 계층에서 받은 data가 들어있다.
패킷을 통해 데이터를 주고 받는다는 것은 알겠는데... 그런데 어떤 방식으로 패킷을 주고 받는건가요? 🤔
패킷 교환 방식에는 Datagram
방식과 Virtual Circuit
방식이 있다. 각각에 대해 자세하게 살펴보자.
두 가지 교환 방식에 대해 알아보기 전에, 먼저 Packet Switching
에 대해 알아보자.
좌측 그림과 같은 네트워크 상에서, 2번 노드에 대해 살펴보자.
2번 노드는 1, 3, 5번 노드와 연결되어 있고 Host C와 연결되어 있다. 다시 말해 총 4개의 경로를 가지고 있는 셈이다. 이는 4개의 Interface(네트워크 어댑터)를 가지고 있다는 것을 의미한다. 각 Interface 별로 Ingoing Queue
와 Outgoing Queue
를 가지고 있다. Ingoing Queue
는 현재 노드로 들어온 패킷이 저장되는 곳, Outgoing Queue
는 현재 노드에서 나갈 패킷이 저장되는 곳이다.
우측 그림을 보면 1 -> 2 -> 3의 경로로 패킷이 이동하는 경우를 설명하고 있다. 1번 노드의 Outgoing Queue
에서 3번 노드의 Ingoing Queue
로 패킷이 이동하는 것을 볼 수 있다.
이러한 Packet Switching으로 패킷이 이동하는데 이 때 Datagram
과 Virtual Circuit
, 두 가지 방식이 존재하는 것이다.
Datagram
방식은 Virtual Circuit
보다 덜 오래된 방식이다. 나름 최신 방식이고, 현재 IP
에서 사용되고 있는 방식이다. 가장 큰 특징은 orderly delivery(순차적 전달)
을 지원하지 않는다는 것이다. 다양한 경로를 통해 패킷이 전달되며 경로에 따라 최종 목적지까지 도달했을 때의 순서가 달라질 수 있다는 말이다.
위에서 봤던 네트워크에서 예를 들어보자. B에서 D로 패킷을 보내려고 할 때, 여러 가지의 경로를 가지게 된다. 몇 가지 예시를 들어보면 아래처럼 나타낼 수 있다.
이처럼 다양한 경로를 통해서 패킷이 전송되며, 라우터에 의해 경로가 정해진다.
그런데... 아까 위에서 말했던 것처럼, 패킷의 순서가 꼬일 때는 어떻게 하죠? 😥
이를 해결하기 위해, Datagram
방식을 사용하는 경우 수신 측에서 패킷을 재정렬하는 과정을 거친다. Buffer
를 두어 패킷이 Buffer
에 먼저 저장되고 이를 재정렬한다. 이 과정에 대해서는 나중에 다시 살펴보도록 하자.
Virtual Circuit
은 오래된 방식이다. 가장 기본적인 전송 방식이라고 볼 수 있다. Datagram
방식과 다르게 orderly delivery(순차적 전달)
을 지원한다. 가상 회선 방식으로 불리는 Virtual Circuit 은 3단계의 과정을 가진다.
우선 어떤 경로로 보내줄지에 대한 경로 설정이 필요하다. 이를 설정하기 위한 과정 Connection Phase
이다. 아까 위에서 봤던 패킷의 구조와는 살짝 다르다. 사실 위에서 봤던 패킷의 구조는 Datagram
의 패킷이고 Virtual Circuit
의 패킷은 조금 다르게 생겼다. 이 역시 아래에서 추가적으로 설명하겠다.
우측 상단에 보이는 패킷을 통해서 경로를 설정한다. Connection Packet
에는 Ciruit Number와 출발지, 목적지 주소가 담겨있다. 이 패킷이 지나가면서 Virtual Circuit Table
을 각 노드에 생성한다. 일종의 이정표라고 생각하면 된다. 각 노드의 아래에 있는 것이 Virtual Circuit Table
이다. 해석을 해보자면 아래와 같다.
경로를 설정했으니 다음은 데이터를 보낼 차례이다.
우측 상단을 보면 이전 과정에서 본 패킷과 살짝 다른 것을 눈치챘을 것이다. 하지만 Datagram
의 패킷과는 또 약간 다르다. 출발지 주소, 목적지 주소가 아니라 Virtual Circuit Number
와 Sequence Number
인데, 그 이유는 이전 과정에서 경로를 이미 설정해두었기 때문이다. 특정한 Virtual Circuit Number
를 가진 패킷이 들어온 경우, 지정해둔 경로를 따라 이동하기 때문에 출발지, 목적지 주소가 필요하지 않은 것이다.
전송을 마치게 되면 설정해둔 경로를 삭제하는 과정을 거친다.
2번 과정을 통해 데이터를 모두 전송한 경우, 쓸모 없어진 경로를 삭제한다. 이 때 사용되는 패킷 역시 뭔가 조금 다르게 생겼다. 이 패킷에는 삭제할 경로의 이름, 즉 Virtual Circuit Number
를 가지고 있다. 0번에 대한 경로를 설정해줬으므로 이제 0번에 대한 경로를 삭제할 차례이다. 패킷이 지나가면서 설정해둔 경로를 삭제한다.
글이 길어져서 두 가지 방식에 대한 패킷의 형태는 다음 글에서 작성하려고 한다. 시험을 위해 글을 정리하고 있는데 이론이 되게 재밌는 것 같다. 다음 글에서 보도록 하자. 🤗