Image
Network/Basic

[인터넷 프로토콜] TCP란 무엇인가? 패킷 전송을 위한 정보의 관점에서 보는 TCP(Transmission Control Protocol)

*앞 글: IP, IP Address란 무엇인가?

 

[인터넷 계층] IP, IP Address란 무엇인가

IP IP는 Internet Protocol의 약자이다. 네트워크 호스트는 IP에서 정의된 규약(Protocol)을 이용해 네트워크 상에서 정보를 주고 받으며, 이 정보는 패킷(Packet) 단위로 전달 된다. 네트워크 호스트(Network H

kotlinworld.com

앞의 글에서 인터넷 계층의 IP Address만으로는 패킷 전달을 위해 여러 한계점이 있음을 살펴보았다.

  • 패킷을 받을 대상이 연결 상태임을 확인하지 않고 전송하기 때문에 받을 대상(호스트)이 서비스 불능 상태여도 패킷이 전송된다.
  • 순서가 있는 여러 개의 데이터를 보냈을 때 받는 데이터가 같은 순서로 받아질 것이란 보장이 안된다.
  • 패킷을 가지고 있던 호스트가 강제종료되어 패킷이 소실될 경우 패킷이 목적지까지 가지 못하고 소실될 수 있다.

이러한 한계점을 극복하기 위해 만들어진 것이 바로 TCP(Transmission Control Protocol)이다. 영어를 그대로 직역하면 전송 제어 프로토콜인데 TCP는 말 그대로 전송 제어를 위한 작업을 해주는 역할을 한다.

 

TCP의 역할

TCP는 두가지 역할을 한다.

  • 받을 대상 노드(호스트)가 서비스 가능(연결 가능) 상태인지 확인 및 연결을 수립하는 역할
  • 전송을 제어해주는 정보를 패킷에 추가해주는 역할

자 이제 TCP가 각 역할을 어떻게 수행하는지 살펴보자

 

TCP 3 Way Handshake을 통한 연결 수립

 받을 대상 노드(호스트)가 서비스 가능 상태인지 확인하기 위해서는 해당 노드가 활성 상태인지 확인하기 위해 통신을 해야 한다. TCP에서는 3 Way Handshake라는 방식으로 해당 노드와 통신을 수행하게 된다.

그림1. TCP 3 Way Handshake

 3 Way Handshake는 SYN, SYN-ACK, ACK 단계 3단계로 나뉜다. <그림1>과 같이 어플리케이션이 서버에 연결 요청을 보내는 상황을 가정하자. 각 단계는 다음과 같은 역할을 수행한다.

SYN 단계
어플리케이션이 서버에 통신을 위한 연결을 요청하는 단계

SYN-ACK 단계
서버가 어플리케이션에 자신이 활성 상태임을 알리고 어플리케이션에서도 포트를 열어 연결을 활성화하라는 요청 메세지를 전송

ACK 단계
어플리케이션이 서버의 요청 메세지를 수락하여 연결이 수립

 

전송 제어를 위한 정보를 추가

전송을 제어해주는 규약(Protocol)에 대한 정보를 패킷에 추가한다. 대표적으로 Port 정보, 순서 정보가 있다.

 

Port 정보는 패킷이 어떤 프로세스에 전달되어야 할지에 대한 정보로, 프로세스간 통신을 위해 사용되는 정보이다. 즉, IP Address을 이용해 기기에 패킷이 전달되면, 이 패킷을 어떤 프로세스가 처리해야 하는지에 대해 명시해놓은 것이 Port이다. 자세한 사항은 아래 글을 참조하자.

 

[전송 계층] 포트(Port)란 무엇인가?

IP Address의 한계점 IP Address를 할당 받은 기기가 있다고 가정한다. 이 기기를 컴퓨터라고 생각해보자. 만약 IP Address만을 이용해 컴퓨터로 데이터를 보낸다면 컴퓨터는 그 데이터를 받을 것이다.

kotlinworld.com

전송 제어 정보 중 하나인 순서 정보는 전달해야 하는 패킷이 여러개로 나뉘어져 있을 경우 각 패킷이 어떤 순서로 처리되어야 하는지에 대한 정보이다.

 

위에서 다룬 2가지 전송 제어 정보를 보면 전달 받은 패킷이 어떤 프로세스에서 처리되어야 하고, 어떤 순서로 처리되어야 하는지에 대한 정보를 처리해준다. 즉, TCP의 역할은 다음과 같다.

TCP에서는 전송을 받았을 때 어떻게 처리되어야 하는지에 대한 정보를 추가해준다.

 

이 과정을 통해 중간에 빠진 패킷이 있거나, 중간에 빠진 정보가 있을 시 요청자에게 해당 패킷을 다시 보내도록 요청함으로써 데이터 전달 보증 또한 가능하도록 만들어준다.

 

 

정리

전송 계층의 TCP는 인터넷 계층의 IP위에 올라가 IP의 부족한점(비연결성, 전송제어 정보 없음)에 대한 보완을 해주는 역할을 한다. 

우리는 이러한 통신 방식을 TCP/IP 통신이라 부른다.

 

HTTP와 TCP/IP

우리가 잘 아는 HTTP는 이 두 계층(IP, TCP) 위에 올라가 어플리케이션 단에서 데이터(패킷)을 전송하는 역할을 한다. 

 

그림2. 인터넷 프로토콜 스택

*HTTP3 부터는 최적화를 위해 UDP를 사용한다. UDP에 관해서는 이후 글에서 설명한다.

*현재 주로 사용되는 HTTP 기술은 HTTP/2, HTTP/1.1이다.

 

다음 글에서는 IP와 TCP 위에 올라가는 HTTP가 IP와 TCP를 가지고 어떻게 다른 프로세스와 통신을 수행하는지 자세히 살펴보자.

 

반응형

 

이 글의 저작권은 '조세영의 Kotlin World' 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.

 

 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com