CS

[Network] 프로토콜 스택이란 무엇인가?

Joonfluence 2020. 11. 17.

네트워크에 대한 설명을 할 때, 빠지지 않는 것이 있다면 'OSI(Open System Interconnection) 7계층 참조 모델'과 'TCP/IP Protocol'입니다. 둘 다 계층형 구조로 네트워크를 설명한다는 공통점이 있지만, TCP/IP 프로토콜의 계층은 OSI 모델의 계층과 정확하게 일치하지 않습니다. OSI 표준 모델은 장비 개발과 통신 자체를 어떻게 표준으로 잡을지 사용되는 반면, 실질적인 통신을 설명할 땐 TCP/IP 모델을 주로 사용하곤 합니다.

OSI 7 Layer와 TCP/IP 4 Layer

그 중 오늘은 프로토콜 스택에 대해서 알아보겠습니다. 프로토콜 스택이란 데이터 통신에 활용되는 프로토콜의 구조에 관한 개념으로, 계층화된 구조(스택 구조)로 모여 있는 프로토콜의 집합을 의미합니다. 프토토콜 슈트(Protocol Suite) 또는 프로토콜 패밀리(Protocol Family)라 불리기도 하죠. 프로토콜 스택이 스택이라 이름 붙여진 까닭은 자료구조의 스택과 유사한 모습의 구현체이기 때문이라고 합니다. 프로토콜 스택은 여러 프로토콜의 집합이므로 개념을 이해하는 가장 좋은 방법은 구성 요소들을 찬찬히 살펴보는 것입니다. 각각의 구성 요소는 다음과 같습니다.

프토토콜는 5개의 계층으로 구성되었는데, 내용은 다음 그림과 같다.

계층별 역할

* 참고로 언급한 순서대로 데이터 전송이 이루어집니다.

가장 첫번째 계층은 Application(응용) 계층입니다. HTTP, SMTP(간이 우편 전송 프로토콜), FTP(파일 전송 프로토콜) 등이 해당되며, 송수신측 사이에 주고 받는 서비스에 따라 응용 계층의 프로토콜이 달라집니다. 만약 웹 브라우저(클라이언트)가 웹 서버에 요청한 데이터가 HTML 문서라면 HTTP 프로토콜이 사용됩니다. 그리고 클라이언트가 데이터를 요청할 때는 GET, POST, PATCH, DELETE 등 HTTP 메서드, 네트워크 상 자원의 위치를 나타내는 정보인 URL 그리고 사용하는 HTTP 버젼 정보와 함께 정보를 요청합니다. 그 외에도 클라이언트가 서버에 요청하는 정보가 메일, 파일 등이면 각각 SMTP 프로토콜, FTP 프로토콜이 사용됩니다.

두번째 계층은 Transport(전송) 계층입니다. 이 계층은 데이터 전송의 신뢰성을 보장하기 위한 계층으로, 송신 측에서 수신 측으로 패킷이 정상적으로 전달되었는지 확인하는 역할을 수행합니다. 또한 TCP(전송 제어 프로토콜)와 UDP(사용자 데이터그램 프로토콜)로 나뉘며, 각 프로토콜마다 서로 다른 특성을 갖습는다. TCP는 신뢰성과 정확성을 추구하는 연결형 통신 프로토콜을 따르기 때문에 신뢰할 수 있는 연결을 위해 3-way 핸드셰이크 과정을 거칩니다. 이 때 브라우저나 메일 등의 일반적인 애플리케이션이 데이터를 송/수신할 경우에는 TCP가 주로 활용됩니다. 반면 UDP는 효율성을 추구하는 비연결형 통신 프로토콜을 따르므로 핸드셰이킹 과정도 생략됩니다. 주로 데이터 전송의 정확성보다 신속성이 강조되는 스트리밍 방식의 동영상 서비스에 활용됩니다. 혹은 DNS 서버에 대한 조회 등 짧은 제어용 데이터를 송/수신할 경우에는 UDP를 씁니다.

세번째 계층은 Network(네트워크) 계층입니다. 이 계층은 데이터를 원하는 목적지로 전송하는 역할을 수행합니다. 송/수신 기기 사이에는 라우터란 네트워크 장비가 있는데, 데이터 패킷들이 바로 이들을 거쳐 수신 측으로 전달됩니다. 라우터는 데이터의 목적지가 정해지면 해당 목적지까지 어떤 경로로 가는 것이 효율적인지 파악합니다. 또한 경로를 결정하기 앞서, 원하는 네트워크를 식별하기 위한 목적지의 주소 정보인 IP 주소를 확인하는데, 목적지 IP 주소까지 어떤 경로를 거쳐 데이터를 보낼지 결정하는 것을 라우팅이라고 합니다.

네번째 계층은 Data Link(데이터 링크) 계층입니다. 송/수신측 사이에 경로가 결정되었으면, 링크 계층은 한 노드에서 인접한 노드로 패킷을 보내기 위한 역할을 합니다. 앞서 언급한 계층들을 모두 거친 상태라면, 데이터는 서버의 LAN(건물 안이나 특정 지역을 범위로 하는 지엽적인 네트워크)까지 도착한 것입니다. 이제 데이터 링크 계층에서는 네트워크 장비 간에 신호를 주고받는 규칙을 정합니다. 이는 랜에서 데이터를 정상적으로 주고 받기 위해 필요합니다. 그 중 가장 많이 사용되는 규칙이 이더넷입니다.

우리에게 익숙한 형태의 '허브'. 이 곳에 여러 랜선을 꽂을 수 있다.

이더넷은 스위치나 허브(컴퓨터들을 LAN에 접속시키는 네트워크 장치)에서 데이터를 주고 받는 규칙을 전송합니다. 대표적으로 여러 컴퓨터가 동시에 데이터를 전송해도 충돌이 일어나지 않는 규칙이 있습니다. 그 외에도 컴퓨터 여러 대가 동시에 데이터를 보내면 데이터들이 서로 부딪힐 수 있는데, 이를 충돌(Collision)이라고 합니다. 이를 위해 데이터를 보내는 시점을 늦추며, 그 방법을 CSMA/CD라고 합니다.

마지막 계층은 Physical(물리) 계층입니다. 컴퓨터와 네트워크 장비를 연결하고 컴퓨터와 네트워크 장비 간에 전송되는 데이터를 전기 신호로 변환하는 계층입니다. 기본적으로 네트워크 통신에서는 0과 1만 사용되는데, 컴퓨터 내부에 존재하는 네트워크 장비인 랜 카드는 이러한 비트열을 전기 신호로 변환하는 역할을 수행합니다.

실제 데이터 전송 과정

이제 데이터 송/수신을 위한 모든 네트워크 프로토콜을 알아보았으니, 실제 데이터가 전송되는 과정을 살펴보자. 앞서 언급했던, 웹 브라우저와 웹 서버 간 HTTP 문서를 송/수신이 경우를 더 살펴봅시다. (단, 3-way 핸드셰이크는 이미 완료되어 연결이 확립된 상황을 가정하겠습니다.)

먼저 웹 브라우저가 URL을 분석하여, DNS 서버로부터 IP 주소를 받아온 상황에서 웹 서버로의 통신을 시작합니다. 그리고 웹 브라우저는 응용계층에서 HTTP 리퀘스트 메세지(해당 페이지에 대한 정보를 요청)를 웹 서버에 보냅니다. 해당 메세지를 송신하기 위해 OS의 내부에 있는 네트워크 제어용 소프트웨어(프로토콜 스택)를 호출합니다. 이 동작은 곧 전송계층에 해당하는 TCP 혹은 UDP를 통하여 데이터 송/수신 동작을 실행합니다. 이 과정에서 클라이언트 측 포트 번호(Source Port)와 서버 측 포트번호(Destination Port)가 TCP Header에 추가되어 세그먼트라는 이름으로 추가됩니다. 그리고 네트워크 계층을 통해 각각의 송신 측, 수신 측 IP 주소가 추가됩니다. 또한 Data Link Layer에서는 MAC 주소가 헤더에 추가됩니다. 이는 이더넷에서는 IP 주소 대신 MAC 헤더(랜의 주소 정보를 나타내는 데이터)가 사용되기 때문입니다. 그리고 이 메세지는 Physical Layer의 랜 카드를 통해 데이터가 전기 신호로 변환됩니다. 변환된 전기 신호는 스위치 A에서 라우터 A로 전송됩니다. 라우트 A에선 여러 계층에서 전송 받은 데이터를 분석해 알맞은 경로인 라우터 B로 데이터를 전송합니다. 그런 후 스위치 B는 웹 서버에 데이터를 전기 신호로 전달합니다. 이 과정을 모두 거치면, IP 주소에 해당하는 웹 서버에 데이터가 성공적으로 송신됩니다.

마무리

부족하거나 궁금한 점은 언제든 댓글로 남겨주세요. 이상으로 긴 글 읽어주셔서 감사합니다.

참고자료

https://ryusae.tistory.com/4

http://blog.naver.com/netrance/110112688107

https://microchipdeveloper.com/tcpip:tcp-ip-five-layer-model

https://whenday.tistory.com/18

반응형

댓글