개요
필자는 패킷이라는 것을 마인크래프트 플러그인 개발할 때 사용하긴 했었다. 네트워크에 속한다고는 알고 있었는데 정확히 뭘 의미하는지는 몰랐다. 이 포스팅을 통해서 알아가볼려고 한다.
패킷이란?
패킷은 Package(패키지) + Bucket(버킷)을 합친 말로, 네트워크를 통해서 데이터를 전달하는 기본 단위이다.
네트워크를 통해서 데이터를 전달할 때 데이터를 조각으로 쪼개는데 그것을 패킷이라고 한다.
그냥 바로 데이터를 전달하지 왜 패킷으로 굳이 나누어서 전달하냐고 의문이 생길 수 있다. 컴퓨터가 두 대 이상을 경우에는 비효율적이기 때문이다.
서로 다른 컴퓨터가 두 회선으로 데이터를 전송할 때 세 번째 컴퓨터에서는 동일한 회선을 사용해 데이터를 전송할 수 없기 때문이다.
패킷은 컴퓨터가 몇대라도 목적지 IP에 잘 도착하기만하면 된다.
아래 회선 교환 방식과 패킷 교환 방식을 읽어보면 본 필자가 하는 말이 무슨 말인지 이해가 될거다.
회선 교환 방식
회선 교환 방식은 먼저 회선을 설정한 후 데이터를 전송하는 방식이다. 회선을 설정한다는 말은 "두 호스트가 연결되었다"는 의미이다.
위 그림에서 A와 B가 통신하려고 하면 회선을 설정해야 해당 경로를 통해 데이터를 주고 받을 수 있다.
하지만 이 회선 교환 방식에는 문제점이 하나 존재한다.
위 그림과 같이 A와 B의 회선이 연결되었다고 해보자. 두 호스트는 연결되었으니 바로 데이터를 주고 받을 수 있다. 하지만 A와 B가 회선을 연결한만 된 채로 데이터를 주고 받지 않으면 회선에는 어떠한 데이터도 전송되지 않는다. 그럼 C가 A에게 데이터를 전송하려고 하면 회선이 이미 다른쪽으로 연결되어 있기 때문에 전송하고 싶어도 못하는 상황이 발생된다. 이를 해결하기 위해 패킷 교환 방식이 등장했다.
패킷 교환 방식
현대 대부분의 인터넷은 패킷 교환 방식을 사용한다. 패킷 교환 방식은 회선 교환 방식의 문제점을 해결한 방식으로, 데이터를 작은 단위로 쪼개어 전송한다. 목적지에 도달하면 해당 데이터를 다시 조립하여 사용자에게 전달한다.
회선 교환 방식과는 달리 정해진 경로만으로 송수신하지 않고 다양한 중간 노드들을 거치는데 이를 패킷 스위치라고 한다. 패킷 스위치는 수신지까지 올바르게 도달할 수 있도록 최적의 경로를 결정하거나 패킷의 송수신지를 식별한다.
대표적인 패킷 스위치로는 라우터가 있다. 라우터와 공유기를 같다고 생각하는 사람들이 있다. 하지만 본 필자는 다르게 본다. 왜냐하면 라우터의 수 많은 기능 중에서 NAT 기능만 쏙 빼온 장치(공유기)이기 때문이다.
여기서 등장할 수 있는 개념이 포워딩이다.
간혹가다 둘 다 똑같은거 아니냐! 라는 소리를 들을 때가 많다. 하지만 라우팅은 최적의 경로를 결정하여 패킷을 전송하는 것이다. 애초에 뭔가 다르지 않나..?
* 포워딩이란? 뚫려있는 길을 통해 패킷을 전달하는 것이다.
* NAT란? 하나의 공인 IP를 통해 공유기에 연결된 여러 개의 호스트들에게 사설 IP를 부여하여 인터넷이 가능하게끔 만들어주는 역할이다.
얘기하다보니 여기까지 왔네요ㅋㅋ 이제 패킷에 대해 자세히 알아봅시다.
패킷의 구조
패킷의 구조는 Header(헤더)와 Data(데이터)로 나뉜다.
Destination IP Address까지가 Header이며 Data가 Body이다.
우리가 볼거는 Source IP Address, Destinstion IP Address, Data이다. 이것들이 내용을 이해하는데 도움이될 것 같기 때문에 선정했다. 다른거는 굳이?
- Source IP Address : 출발 IP 주소
- Destinstion IP Address : 목적지 IP 주소
- Data : Payload(내용/메시지/데이터)
패킷(Packet)을 택배에 비유하자면 Header는 택배의 송장이고 Data는 택배의 내용물이다.
정리하자면 Header에는 패킷에 대한 메타정보가, Data에는 Payload가 담겨있다.
패킷 생성 원리
패킷의 생성 원리를 설명하려면 부가적인 개념들이 존재하기 때문에 그 개념부터 설명하고 알아보도록 하자.
1. TCP/IP
IP는 Internet Protocol(인터넷 프로토콜)의 약자이다. 프로토콜(Protocol)은 원활한 교류를 위해 약속한 규칙이다. 즉, IP는 인터넷에서 원활한 교류를 위해 약속한 규칙이라고 할 수 있다.
TCP는 Transmission Control Protocol의 약자로 서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜이다.
데이터 통신 중에 패킷이 손실되거나 순서가 바뀌어서 전달될 수 있는데 TCP는 손실을 찾고 교정해 순서를 재조합할 수 있도록 도와준다.
즉, 데이터 전송 여부와 순서 보장을 위해 정보 전달을 통제한다고 해서 전송 제어 프로토콜(TCP)이라고 부른다.
TCP는 데이터의 정체성 확인(데이터가 있는지 없는지 체크), IP는 목적지까지 데이터를 전송하는 프로토콜이라고 이해하자.
(이 둘이 만나면 너무 안전~)
TCP가 왜 탄생했냐!
IP의 문제점 중 비신뢰성과 비연결성이 있다. IP는 패킷이 잘 도착되었는지, 손실은 없는지 체크를 하지 못하여 올바르게 전달되지 않을 수도 있다는 특징이 있다. IP의 보안 문제를 해결하기 위해서 TCP가 탄생했다.
TCP는 회선 교환 방식과 비슷하게 먼저
- 보내고 싶은 IP에 연결 요청을 보낸다.
- 상대방도 내 IP에 연결 응답을 보내어 둘이 연결한다.
위와 같은 방식은 통신이 연결되어 있음을 보장한다.
다음으로 TCP가 어떻게 동작하는지 아래 그림을 통해 살펴보자.
먼저 A가 B에게 인터넷을 타고 데이터를 전송한다. 하지만 수신측에서 데이터를 확인해보니 3번 패킷이 전달되지 않았다. 그러면 TCP 프로토콜에 의해서 A에게 다시 전송해달라고 요청하고 A는 B에게 다시 전송한다. 이 과정을 패킷이 올바르게 올 때까지 수행한다. 패킷이 모두 도착하면 순서를 재조합한다. 이 모든 과정은 그냥 "이렇게 동작하구나"라는 것만 이해해도 좋다.
2. 2 - 1 캡슐화(Encapsulation)
패킷을 설명할 때 필요한 개념 중 하나로 이해하려면 알아야한다.
캡슐화(인캡슐레이션)는 네트워크 통신에서 패킷을 만들 때, 각 계층의 옷을 입히듯이 정보를 추가한다. 캡슐화를 하게되면 안전성과 효율성을 보장할 수 있다. 각 계층마다 메타정보를 추가하며 패킷을 만들기 전에 수행된다.
(데이터를 보내는 쪽에서 진행)
굳이 딥하게 알아볼 필요까진 없고 "이런 과정을 통해서 패킷이 만들어지구나"라는 느낌만 가져가면 된다. 우리는 어떤 과정으로 만들어지는지 이해하기 위함이니까.
2. 2 - 2 역캡슐화(Dncapsulation)
역캡슐화는 캡슐화의 반대이다. 캡슐화는 송신측에서 그니까 보내는 컴퓨터에서, 역캡슐화는 수신측에서 즉, 받는 컴퓨터에서 진행된다.
데이터만 받기 위함이다.
(데이터를 받는 쪽에서 진행)
자세히..
그림 출처: https://better-together.tistory.com/110
이제 제대로 패킷의 생성 원리를 알아보자.
User가 Process에 입출력을 시도하면 TCP에 만나게 되는데 그 때 패킷이 생성되며, TCP를 만나면 Stream 데이터를 일정 단위로 분해 하는데 이걸 세그먼트(Segment)라고 한다. 이 분해한 데이터를 캡슐화해서 Packet으로 만든 다음 MAC 주소를 포함해 Frame을 만들어 전송한다.
* NIC란? 컴퓨터를 네트워크에 연결하여 통신하기 위해 사용하는 하드웨어 장치이다.
* MAC Address란? 간결하게 하드웨어 주소(그 기계의 고유번호)이다.
근데 왜 MAC, IP 주소 둘 다 필요할까? IP 주소가 해당 컴퓨터라는 걸 보증할 때 사용된다. 정확하게 "이 컴퓨터가 내가 전송하려는 컴퓨터구나"라고 알리기 위함이다. IP 주소는 변동 가능성이 있기 때문에 불안하다.
이러한 이유로 Frame에서 MAC 주소를 추가해서 인터넷으로 전달한다.
마찬가지로 택배에 비유해보겠다. 많은 내용물들을 쪼개서(Segment) 택배 상자에 담고, 택배가 어디로 가여할지 모르니까 송장도 붙인다. 여기까지 과정이 캡슐화이다.(Packet) 그리고 택배를 트럭에 실어 전달하는데 이 과정이 Frame이다.
참고 자료
잘못된 부분이나 부족한 부분이 있을 수 있습니다. 댓글로 남겨주시면 감사하겠습니다. 😊