HTTP 기초 - TCP, UDP

Aiden·2022년 2월 4일
1

HTTP

목록 보기
3/13
post-thumbnail

이전 포스팅에서는 인터넷 통신과 IP 에 대해 알아보면서 다양한 한계점까지 살펴보았다.

IP 의 한계점으로는 크게 세 가지가 있었는데 아래와 같았다.

  • 비연결성
  • 비신뢰성
  • 프로그램 구분

다시 정리해보면, IP 는 복잡한 인터넷망에서 원하는 목적지까지 패킷을 안정적으로 전송할 수 있도록 돕는 필수적인 프로토콜이었으나 비연결성, 비신뢰성, 프로그램 구분의 한계점이 존재했다.

따라서, 이번 포스팅에서는 이러한 IP 의 다양한 문제점들을 해결해줄 수 있는 프로토콜에 대해 설명하고자 한다.

TCP/IP 4 Layer Model

TCP/IP 4 Layer Model 은 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 활용되는 통신규약의 모음이다

각 프로토콜에 대해 설명하기 전에, IP 와의 관계를 명확히 하기 위해 TCP/IP 4 Layer Model 에 대해 간단히 살펴보자.

위 인용문에서 알 수 있듯이, TCP/IP 4 Layer Model 은 통신규약들의 집합체이다.

하지만 단순히 프로토콜들을 모아놓은 모델이라기보다는 각 프로토콜의 역할을 기준으로 계층마다 구분해놓은 일종의 스택이다.

아래 그림을 참고하자.

TCP/IP 4 Layer Model 은 그림처럼 위에서부터

  • Application Layer
  • Transport Layer
  • Internet Layer
  • Network Access Layer

이렇게 4개의 계층으로 이루어져 있고, 각 계층에는 그 역할과 특성에 따라 프로토콜들이 내부에 속해있다.
일종의 프로토콜 분류표로 봐도 무방하다.

각 계층을 차례대로 간단히 살펴보면,

Application Layer 는 4 계층으로 응용 계층 이라고도 불린다.

  • 사용자와 가장 가까운 계층이다.
  • 사용자가 Software 와 상호작용할 수 있도록 돕는다.
  • HTTP, SSH, Telnet, FTP, SMTP 등의 프로토콜들이 속해있다.

Transport Layer 는 3 계층으로 전송 계층 이라고도 불린다.

  • 노드 간 연결 제어 및 흐름 제어와 신뢰성을 제공한다.
  • TCP, UDP 가 대표적이다.

Internet Layer 는 2 계층으로 인터넷 계층 이라고도 부른다.

  • 최종 목적지까지 데이터가 정확하게 전달될 수 있도록 연결을 담당한다.
  • 목적지까지의 경로를 설정하는 라우팅(Routing)기능을 담당한다.
  • IP, ARP, RARP, ICMP 등이 대표적이다.

Network Access LayerNetwork Interface Layer 혹은 네트워크 연결 계층 으로 불리며, 1 계층이다.

  • 가장 기본적인 1 계층으로, 데이터의 물리적인 전송을 정의하는 계층이다.
  • 하드웨어의 물리주소인 MAC 주소를 활용하여 장비 간 데이터 전송을 담당한다.
  • Ethernet, PPP, Token Ring 등이 속한다.

각 계층은 서로 데이터를 전달하며 상호작용하고, 이 과정에서 계층을 지날 때마다 새로운 헤더 정보가 씌여지거나 벗겨진다.

이렇게 네트워크를 위한 전반적인 프로토콜들을 계층화함에 따라 각 계층은 Loosely Coupled 되어 상호작용할 수 있게 되었다.

이는 각 계층이 유연하게 상호작용하면서도 서로 간 간섭을 최소화할 수 있다는 이점과 유지보수에 있어 편리하다는 이점을 가지게 해준다.

이전 포스팅에서 살펴본 IP 는 2 계층인 Internet Layer, 오늘의 주제인 TCP, UDP 는 3 계층인 Transport Layer 에 속해있는 것을 확인할 수 있다.

결론적으로 우리는 IP 의 한계점을 극복하기 위해 상위 계층에 TCP 를 얹어 사용하는 방안을 채택할 수 있는 것이다.

⛔국제 표준화 기구(ISO) 에서 정의한 OSI 7 Layer Model 도 네트워크 통신 구조를 계층으로 나누어 설명한 모델입니다. 다만, 이번 포스팅에서는 IP, TCP, UDP 에 초점을 맞추기 위해 비교적 단순화된 모델인 TCP/IP 4 Layer Model 만을 살펴보았습니다.⛔

아래는 TCP/IP 4 Layer Model 을 기반으로 어떠한 방식으로 네트워크가 구성될 수 있는지에 대해 좋은 예시를 보여준다.

최상위 계층인 Application Layer 에서는 우리가 사용하는 웹 브라우저, 네트워크를 사용하는 게임, 채팅 프로그램 등이 위치할 수 있다.

그리고 그 하위에 OS 단에서는 TCP, UDP 의 Transport Layer 와 IP 가 속한 Internet Layer 의 모습을 확인할 수 있다. OS 는 우리가 익히 알고 있는 Window, MacOS, Linux 등의 운영체제가 될 것이다.

그리고 가장 하위에 Network Interface Layer 에는 실제 네트워크와 직접적으로 관련된 LAN Driver, LAN Card와 같은 LAN 장비들이 속해있다.

이제, 구성된 각 계층의 프로토콜들은 아래와 같이 상호작용한다.

채팅 프로그램으로 Hello, world! 라는 메시지를 전송하는 예시이다.

채팅 프로그램에서 메시지를 입력하면, SOCKET Library 를 통해 해당 데이터가 하위 계층의 TCP로 전달된다.

이후, OS 단에서는 TCP 가 데이터를 받고, TCP 관련 정보가 담긴 헤더를 씌워 다음 하위 계층인 IP 로 전달한다.

IP 에서는 다시 데이터를 받고, IP 관련 정보가 담긴 헤더를 그 위에 씌워 다음 하위 계층인 LAN Card 로 전달한다.

LAN Card 에서는 데이터를 받아 인터넷을 통해 내보낼 때, Ethernet Frame 이라는 정보를 씌워 내보낸다.
Ethernet Frame 에는 LAN Card 의 MAC 주소와 같은 물리적인 정보들이 포함되어 있다.

이렇게, 각 계층의 프로토콜들은 자신들의 정보를 데이터 위에 거듭 씌워가며 전달한다. 하위 계층으로 내려갈 때마다 각 계층의 정보들이 누적되어 있는 데이터로 가공되는 것이다. 데이터를 수신하는 쪽에서도 각 계층 순서가 바뀌며 헤더가 차례차례 벗겨질 뿐 이와 같은 원리로 이루어진다.

즉, IP 는 상위 계층에 위치한 TCP 를 통해 그 정보를 내려받게 되며 결론적으로 이러한 구조는 IP 의 한계점을 극복할 수 있는 방안이 된다.

TCP

Transmission Control Protocol 의 약어로 전송 제어 프로토콜 이라고도 불리며 데이터를 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다

이제 TCP 에 대해서 본격적으로 살펴본다.

앞선 TCP/IP 4 Layer Model 에서 TCP 는 3 계층인 Transport Layer 에 위치하고 있었다. 이는 IP 가 속한 2 계층, Internet Layer 의 상위 계층으로 데이터에 헤더 정보를 씌워 하위 계층으로 전달하는 역할을 수행했다.

그렇다면, TCP 의 헤더에는 어떠한 정보들이 담겨있기에 IP 의 여러가지 문제점들을 해결할 수 있다는 것일까?

TCP 와 IP 를 거친 데이터의 구조를 잠시 살펴보자.

위 그림은 데이터에 TCP 헤더가 씌워져 IP 계층으로 전달된 후, 다시 IP 헤더가 씌워진 모습이다. 각 계층을 지나면서 해당 프로토콜들이 데이터에 헤더를 씌워 전달한다고 설명했었는데, 바로 이러한 모습이 될 것이다.

여기서 초록색 TCP 의 헤더 정보를 보면, IP 와는 다르게 Source PortDestination Port 가 추가되어있다.
이외에도 전송 제어순서 검증과 관련한 정보들이 함께 담겨있다.

즉, TCP 헤더에 담긴 이러한 정보들 덕분에 IP 의 한계점인 비연결성과 비신뢰성, 프로그램 구분의 어려움이 해결되는 것이다.

그럼 TCP 의 세부적인 특징들을 알아볼 차례다.

TCP 특징

  • 연결지향적
  • 데이터 전달 보증
  • 순서 보장
  • 신뢰할 수 있는 프로토콜

TCP 는 전송 제어 프로토콜이라는 이름에서도 알 수 있듯이, 데이터들을 안정적으로, 순서대로, 에러없이 교환하기 위해 전송 제어를 위한 다양한 기능을 가진다.

그 중 연결지향성은 송신자와 수신자가 서로 연결이 되었는지를 먼저 확인한 뒤 데이터를 교환한다는 의미이다.

따라서 IP 가 수신자의 서비스 가능 상태를 확인하지 않고 데이터를 전송하는 문제점을 해결해줄 수 있다.

수신자의 컴퓨터가 꺼져 있거나, 서비스 불능 상태일 때는 정상적으로 연결이 불가능하기 때문에 사전에 이를 확인한 후 데이터를 전송해줄 수 있게 된 것이다.

다음으로 TCP 는 데이터 전달 보증이 가능하다.

IP 에서는 전송한 패킷이 중간에 누락 되었을 경우, 송신자는 이 사실을 알 수 없었다. 데이터가 올바르게 수신자에게 전달되었는지 확인할 수 있는 방법이 없었던 것이다.

하지만, TCP 는 수신자가 데이터를 정상적으로 받았는지에 대한 여부를 송신자가 알 수 있게 해주어 IP 의 문제점을 해결해 줄 수 있다.

이 뿐 아니라, TCP 는 전달되는 데이터에 대한 순서를 보장 해준다.

IP 에서는 전송하는 데이터의 길이가 긴 경우 각각을 분할하여 전송했고, 분할된 데이터들은 서로 다른 경로로 전송될 수 있었다. 단, 이렇게 다른 경로로 전달된 각 데이터들에 대해 IP 는 순서를 보장해주지 않았다.

하지만, TCP 는 다른 경로로 도착한 데이터들에 대해서도 송신자가 전송한 데이터의 순서와 일치하도록 이를 보장한다. 앞서 살펴본 TCP 헤더 내의 다양한 정보들이 바로 이러한 기능들이 가능하도록 해주는 것이다.

따라서, TCP 를 신뢰할 수 있는 프로토콜 이라고 부르기도 하며, 요새는 대부분의 애플리케이션들이 TCP 를 사용한다.

이제, TCP 의 각 특징들에 대해 좀 더 자세히 알아보도록 하자.

TCP 3 Way Handshake

TCP/IP Protocol 을 사용하는 애플리케이션이 데이터를 전송하기 전에 상대방 컴퓨터와 세션을 수립하는 과정이다

TCP 의 연결지향성TCP 3 Way Handshake 에 의해 가능해진다.
이는 TCP 가 상대방 컴퓨터와 세션을 수립하는, 즉 정상적인 연결을 확인하는 과정이다.

즉, TCP/IP Protocol 을 사용하면 데이터를 상대방에게 전달하기 이전에 TCP 3 Way Handshake 의 과정을 먼저 거치게 된다.

아래의 그림은 TCP 3 Way Handshake 의 과정을 그린 그림이다.

그림에서 클라이언트 컴퓨터가 먼저 서버 컴퓨터로 SYN 패킷을 전송한다. 이는 Synchronize Sequence numbers 를 의미하며, 연결 요청 메시지이다.

이를 전달받은 서버 컴퓨터가 ACK 패킷을 보낸다. 이는 Acknowledgment 의 약어로 연결 요청을 승인한다는 의미이며, 이 때 SYN 패킷과 함께 보낸다.

서버 컴퓨터로부터 SYN ACK 을 전달받은 클라이언트 컴퓨터는 다시 ACK 패킷을 서버 컴퓨터에게 전송한다. 이 때, 데이터를 함께 보낼 수 있으며 지금부터는 정상적인 연결이 완료되어 데이터가 교환될 수 있다.

  1. Client ➡️ Server SYN
  2. Server ➡️ Client SYN ACK
  3. Client ➡️ Server ACK

결론적으로 TCP 3 Way Handshake 는 위의 3 단계를 거쳐 진행되고, 데이터를 전송하기 전에 신뢰성있는 연결을 보장하기 위한 TCP 의 연결지향성을 가능케 한다.

주의할 점

TCP 3 Way Handshake 는 가상 연결이다

다만, 기억해야 할 점은 TCP 3 Way Handshake 는 가상 연결을 의미한다는 것이다.

즉, 클라이언트와 서버 컴퓨터가 서로 연결이 완료되었고 데이터를 정상적으로 교환할 수 있는 상태가 되었음을 논리적으로 확인하는 과정일 뿐이지 실제 물리적으로 두 컴퓨터가 연결을 시도하는 과정은 아니라는 것이다.

따라서, TCP 3 Way Handshake 을 통해 SYN 패킷과 ACK 패킷이 정상적으로 교환되었으므로 두 컴퓨터가 서로간 데이터를 교환할 수 있는 상태임을 단순히 확인하게 된 것이고, 중간 인터넷망에 위치한 수많은 노드들은 두 컴퓨터가 연결되었다는 사실을 인지할 수 없다. 물리적으로 연결되는 과정이 아니기 때문이다.

TCP 3 Way Handshake 을 통해 연결을 확인한 두 컴퓨터가 물리적인 전용선이나 회선을 통해 독립적인 경로를 할당받은 상태가 아니라는 사실을 꼭 기억하여야 한다.

데이터 전달 보증

TCP 3 Way Handshake 가 완료되어 두 컴퓨터 간 연결 상태가 정상적임을 확인했다고 하더라도, 다양한 요인에 의해 전송되는 데이터가 손실 및 누락될 수 있다.

따라서, TCP 는 이러한 경우에도 데이터 전송에 대한 완료 여부를 송신자에게 반환한다.

TCP 의 데이터 전달 보증 과정은 아주 간단하다.

우리가 상대방에게 택배를 보냈을 때, 상대방이 정상적으로 택배를 수령받았는지 알 수 있는 가장 쉬운 방법은 무엇일까?
다양한 방법이 있겠지만, 역시 상대방에게 직접 듣는 편이 가장 확실할 것이다.

TCP 의 데이터 전달 보증 과정도 동일하다.

TCP/IP Protocol 을 사용하게 되면, 위의 그림과 같이 데이터 전송 후 그 결과를 반환해준다.

클라이언트 컴퓨터가 서버 컴퓨터에게 데이터를 전송하고 난 뒤, 서버 컴퓨터는 데이터를 잘 받았다는 확인 응답을 클라이언트 컴퓨터에게로 다시 전달해주는 것이다.

이를 통해 사용자는 데이터 전송이 성공적으로 수행되었음을 확인할 수 있다.

순서 보장

TCP 의 순서 보장은 내부적인 최적화 로직에 따라 다르겠지만, 기본적으로 다음 그림과 같이 진행된다.

우리가 보내야할 데이터의 길이가 길어 3 개의 패킷으로 나누어 보냈다고 가정하자.

이 때, 각 패킷은 서로 다른 노드를 밟아 다른 경로로 전송될 수도 있다.
그리고 우리의 패킷들은 결과적으로 1 ➡️ 3 ➡️ 2 의 순서대로 서버 컴퓨터에 도착했다. 패킷 1 은 정상적으로 처음에 도착했지만, 두 번째 도착한 패킷부터는 순서대로 도착하지 않은 것이다.

이 때, 서버 컴퓨터는 순서가 잘못 도착했으므로 패킷 2 부터 다시 보내라는 요청을 클라이언트 컴퓨터에게로 전송한다. 그러면 클라이언트 컴퓨터는 패킷 2 부터 순서대로 도착하지 않았다는 사실을 알게 되고 패킷 2 부터 순서대로 다시 전송하게 될 것이다.

기본적으로 TCP/IP Protocol 의 순서 보장은 위와 같은 방식으로 이루어진다.

가장 중요한 것은 앞서 살펴본 TCP 의 모든 특징들이 바로 TCP 헤더에 담긴 전송 제어 순서 검증 정보 등의 정보들을 통해 가능해진다는 것이다.

UDP

User Datagram Protocol 의 약어인 UDP 는 TCP 와 함께 전송 계층에 위치한 단순 메시지 교환 프로토콜이다

이제 TCP 와 함께 IP 의 상위 계층에 위치해있던 UDP 에 대해 알아보고자 한다.

UDP 는 일반적으로 하얀 도화지에 비유된다.
다양한 제어 기능을 제공하던 TCP 와는 다르게 기능이 거의 없이 단순한 구조를 가지고 있기 때문이다.

UDP 는 TCP 의 연결지향적 특징을 담당하던 TCP 3 Way Handshake 도 존재하지 않고, 데이터 전달을 보증해주지도 않으며 데이터의 순서를 보장해주지도 않는다.

즉, 우리가 이전 포스팅에서 다뤘던 IP 와 크게 다르지 않다.

그렇다면 도대체 IP 의 상위 계층에서 UDP 가 하는 역할은 무엇일까?

UDP 의 특징

UDP 는 상대적으로 기능이 없는 IP 와 유사하지만, PORT 정보와 데이터의 무결성 검사값인 Checksum 정보를 가지고 있다.
앞서 살펴본 TCP 헤더에서도 PORT 정보가 존재했었다. Source PORTDestination PORT 정보가 그것이다.

또한, UDP 는 나름대로의 장점을 가지고 있다. 바로 속도면에서 우월하다는 점이다.

TCP 3 Way Handshake 를 떠올려보자.
데이터를 전송하기 위해서 TCP 는 복잡한 과정을 거쳐야 하고, 데이터를 전송한 후에는 잘받았다는 서버의 응답도 받아야 한다.
심지어, TCP 의 헤더에는 다양한 정보가 담기게 되니 용량도 많이 차지하고 그에 따라 데이터 전송 속도도 기대할 수 없게 될 것이다.

반면, UDP 는 아무런 기능이 없는 하얀 도화지와 같아서 원하는 기능을 커스터마이징하여 올려 쓸 수 있다. 구조적으로 이미 완성되어 있고, 다양한 애플리케이션 기반에서 작동하고 있는 TCP 의 구조를 바꿔내는 것보다 UDP 의 하얀 도화지에 기능을 올려 쓰는 것이 훨씬 쉽고 효율적인 것이다.

또한, UDP 는 기능이 없어 헤더가 굉장히 가볍다.
IP 와 TCP 의 헤더가 20 ~ 60 bytes 를 차지하는 반면에 UDP 의 헤더는 고작 8 bytes 를 차지하고 있다.
이는 UDP 의 빠른 전송 속도에도 직접적인 도움이 될 것이다.

위와 같은 이유로, 요새 UDP 가 각광을 받고 있기도 하다. 특히, 실시간 전송이 중요한 애플리케이션이나, 일반적으로 오류의 검사와 수정이 필요없는 프로그램에서 자주 사용한다.

PORT

하나의 아파트가 하나의 서버를 의미한다면, Port 는 해당 아파트 내에서 동, 호수를 의미한다

마지막으로 PORT 에 대해 알아보고자 한다.

앞서, UDP 와 IP 의 차이점으로 PORT 에 대해 언급하기도 했고, TCP 와 UDP 는 PORT 정보를 동일하게 가지고 있었다. 과연 PORT 의 역할은 무엇일까?

Port 는 IP의 한계점 중 하나였던 프로그램 구분을 가능하게 해준다.

이전 포스팅에서 하나의 컴퓨터에서 단일한 IP 주소를 사용하여 여러 애플리케이션을 동작시킬 때, IP 주소를 통해 들어온 다양한 데이터들이 어떤 애플리케이션의 데이터에 속하는지 내부적으로 구분하는 작업이 추가로 필요하다고 설명했었다.

그리고 Source IP AddressDestination IP Address 정보만을 가지고 있는 IP 에서는 이러한 프로그램의 구분이 불가능했었다.

아래 그림을 보자.

그림에서 클라이언트 컴퓨터는 100.100.100.1 의 IP Address 를 부여받았고, 이를 활용해 게임, 화상통화, 웹 브라우저의 총 3 가지 작업을 수행하고 있다.

이 상황에서 100.100.100.1 의 IP 주소로 들어온 데이터들이 각각 게임, 화상통화, 웹 브라우저 중에서 어떤 애플리케이션의 데이터일까?

IP 는 모른다.
하나의 IP Address 정보만을 가지고 들어온 데이터이기 때문이다.

따라서, 이를 구분하기 위해서는 TCP 와 UDP 가 공통적으로 헤더에 가지고 있는 PORT 에 대한 정보가 추가적으로 필요하다.

상대방에게 택배를 보낼 때, 아파트 이름만 적어서는 물건이 정상적으로 배송되기 어렵다. IP Address 에 해당하는 아파트 이름과 PORT 에 해당하는 동, 호수를 명확히 적어주어야만 제대로 배송될 것이다.

위처럼, Source PORT Number Destination PORT Number 에 대한 PORT 정보는 하나의 서버 내에서 다양한 애플리케이션들을 구분하는 역할을 수행하기 때문에 필수적이다.

정리하면, IP 는 목적지 서버를 찾아가기 위한 주소이며, PORT 는 그 서버 안에서 각 프로그램의 구분을 위해 IP Address 에 더해진 개념으로 볼 수 있다.

이제 우리는 PORT 정보를 IP Address 와 함께 사용하여 특정 서버 내의 특정 애플리케이션에게 정확하게 데이터를 전송해줄 수 있다.



이번 포스팅에서는 IP 의 한계점을 극복해줄 수 있는 TCPUDP 에 대해 알아보았다.

이 과정에서 TCP/IP 4 Layer Model 에 대해서도 학습하였고, TCP 3 Way Handshake PORT 와 같은 중요한 개념들도 살펴볼 수 있었다.

특히, TCP 가 어떠한 과정을 통해 연결지향성, 데이터 전달 보증, 순서 보장 , 프로그램 구분 과 같은 신뢰성 있는 통신 을 가능케하였는지는 굉장히 중요한 내용들이었다.

다음 포스팅에서는 Domain Name System DNS 에 대해 짧게 소개할 예정이다.





출처


0개의 댓글