본문 바로가기


냐옹아 멍멍해봐(How to Speak IT)/테크(IT) 문법

쉽게 이해하는 네트워크 16. TCP/IP 전송 계층(트랜스포트 계층)과 포트(Port) 번호

반응형

전송 계층의 역할, 특징, 통신 방식 및 애플리케이션을 식별하는 포트 번호

 

TCP/IP 전송 계층(Transport Layer)과 포트 번호 

 

전송 계층(Transport Layer)의 역할

앞서 살펴본 것처럼, 네트워크 인터페이스 계층과 인터넷 계층의 역할로 수신지 컴퓨터까지 데이터를 보낼 수 있습니다. 특히 인터넷 계층의 IP 프로토콜은 수많은 네트워크가 복잡하게 얽힌 인터넷에서 수신지 컴퓨터까지 경로를 찾아 패킷을 전송하는 중요한 역할을 합니다.

 

인터넷 계층이 패킷 전송이라는 중요한 역할을 담당하지만 수신지까지 최적의 경로를 찾아 패킷을 전송할 뿐 수신지 컴퓨터가 인터넷에 존재하는지, 수신지 컴퓨터가 존재하더라도 패킷을 수신할 준비가 되어 있는지, 패킷을 수신할 준비가 되어 있더라도 전송 과정에서 패킷이 손상되거나 유실되지는 않았는지 등의 문제들은 신경 쓰지 않습니다. 즉, IP 프로토콜은 통신하는 호스트 간에 패킷을 전달하기 위해 최선의 노력(Best-effort delivery service)을 하지만 패킷의 전송 순서나 완전성을 보장하지 않기 때문에 비신뢰형 서비스(unreliable service)라고도 합니다.

 

패킷이 전송 과정에서 아무 문제 없이 제대로 수신지 컴퓨터에 도착할 수 있도록 패킷 전송을 제어하는 역할은 전송 계층이 담당합니다. 전송 계층은 네트워크 혼잡 상황에 따라 패킷의 전송량을 조절하여 패킷의 흐름을 제어하고 패킷 전송의 오류를 점검해서 수신지 컴퓨터까지 패킷이 제대로 도착했는지 확인하는 역할을 합니다. 다시 말해 전송 계층은 수신지 컴퓨터까지 신뢰할 수 있는 데이터를 전송하기 위해 필요한 계층입니다.

 

데이터를 전송하는 궁극적인 목적은 애플리케이션이 데이터를 처리하여 애플리케이션의 목적에 따른 서비스를 제공하기 위한 것입니다. 따라서 데이터는 수신지 컴퓨터가 아니라 수신지 컴퓨터 내의 애플리케이션까지 전송되어야 최종 목적지에 도착하게 됩니다.

 

애플리케이션이라는 최종 목적지까지 데이터 전송을 책임지는 것이 전송 계층의 또 다른 역할입니다. 즉, 전송 계층은 다양한 애플리케이션이 동작하는 컴퓨터 내에서 어떤 애플리케이션이 사용하는 데이터인지 식별하여 수신지 컴퓨터에 도착한 데이터를 수신지 컴퓨터 내의 애플리케이션에 배분하는 역할을 합니다. 인터넷 계층이 컴퓨터(호스트) 간의 데이터 통신을, 전송 계층이 애플리케이션 간의 데이터 통신을 구현한다고 볼 수 있습니다. 인터넷 계층이 호스트를 식별하기 위해 IP 주소를 사용하는 것처럼, 전송 계층에서는 애플리케이션을 식별하기 위해 포트 번호를 사용합니다.

 

<그림 1> 전송 계층의 역할

 

전송 계층의 특징

네트워크 인터페이스 계층과 인터넷 계층이 컴퓨터와 컴퓨터 간의 데이터 전송을 담당했다면 전송 계층은 컴퓨터 내부에 있는 애플리케이션까지의 데이터 전송을 담당합니다.

 

네트워크 인터페이스 계층과 인터넷 계층에서는 컴퓨터에서 컴퓨터로, 랜 케이블 같은 전송 매체를 통해 스위치나 라우터 같은 네트워크 장비를 거쳐 데이터가 전송되기 때문에 물리적인 데이터의 이동 통로가 존재하고, 물리적인 이동 통로 상에서 데이터의 흐름을 논리적으로 제어합니다. 물리적인 공간의 이동이 있기에 머릿속으로 쉽게 상상할 수 있고, 노드와 링크로 추상화해서 이해하기도 수월합니다.

 

반면 애플리케이션까지 데이터가 이동하는 것은 컴퓨터 내부에서 일어나는 일이기에 상상하기 쉽지 않고, 상상할 수 없는 것을 추상화해서 이해한다는 것은 더욱 어렵습니다. 전송 계층을 보다 쉽게 이해하기 위해 애플리케이션 간에 가상의 연결 통로가 존재한다고 상상하는 것이 좋습니다.

 

컴퓨터 내에 동작하는 다양한 애플리케이션들이 동시에 송수신하는 데이터를 구별하기 위해 전송계층에서는 애플리케이션마다 가상의 연결 통로를 만들어 데이터를 전송하기 때문입니다. 통신을 시작하기 전에 통신하고자 하는 애플리케이션끼리만 사용이 가능한 가상의 연결 통로를 확보하고, 이 전용 통로로만 데이터를 전송하여 정확하고 신뢰할 수 있는 데이터의 전송을 보장하는 것입니다.

 

통신하고자 하는 애플리케이션 간에 가상의 연결 통로를 만드는 작업을 연결 확립이라 하고 연결 통로의 출입구, 즉 애플리케이션과 연결 통로의 인터페이스를 포트(port)라고 하며 포트를 식별하기 위한 주소를 포트 번호라고 합니다.

 

<그림 2> 전송 계층의 특징 - 가상 연결 통로 

 

애플리케이션의 식별과 포트 번호

택배나 우편물 배송을 의뢰할 때 집주소와 함께 받는 사람의 이름을 적습니다. 집주소에 의해 택배나 우편물이 수신지인 집까지 배달되면 받는 사람의 이름을 보고 누구 앞으로 온 것인지를 판단합니다. 인터넷에서는 IP 주소가 집 주소, 포트 번호가 받는 사람의 이름과 같은 역할을 합니다. 한 집에 여러 사람이 거주하는 것처럼 한 컴퓨터에서 여러 가지 애플리케이션이 동작하기 때문에 애플리케이션을 식별하는 번호가 필요한 것입니다.

 

인터넷 계층에서 IP 주소를 보고 수신지 컴퓨터로 데이터를 전송하면 전송 계층에서 포트 번호를 보고 어떤 애플리케이션이 사용할 데이터인지 식별합니다. 한마디로 포트 번호(Port Number)는 동일한 컴퓨터 안에서 통신을 하고 있는 애플리케이션을 식별할 때 사용하는 애플리케이션의 주소라고 할 수 있습니다.

 

전송 계층의 데이터 단위인 세그먼트의 헤더에 송신 애플리케이션과 수신 애플리케이션의 포트 번호 정보가 담겨 있기 때문에 어떤 애플리케이션이 사용할 데이터인지 구분하고 데이터를 배분할 수 있는 것입니다.

 

포트 번호의 종류

16비트를 사용하는 포트 번호는 0~65535번까지 65536(2의 16승) 개의 번호를 사용할 수 있습니다. IP 주소를 관리하는 ICANN은 아래 <그림 3>과 같이 포트 번호를 크게 세 종류로 구분하였습니다.

 

ICANN 자세히 ⇒ IP 주소

 

<그림 3> 포트 번호의 종류

 

서비스를 제공하는 서버 호스트에 고정된 공인 IP 주소를 할당하고, 서비스를 요청하고 제공받는 클라이언트에 유동 IP 주소를 할당한 것처럼, 서버 애플리케이션은 정해진 포트 번호를 할당하지만 클라이언트 애플리케이션은 정해진 포트 번호 없이 포트 번호가 필요할 때마다 동적으로 할당됩니다.

 

IP 주소 할당 자세히 ⇒ IP 주소의 할당

 

서버 애플리케이션에 할당된 번호가 웰 노운 포트와 등록된 포트이고, 클라이언트 애플리케이션에 배정된 번호가 동적 포트입니다.

 

웰 노운 포트(well-known port) 번호는 HTTP(웹), FTP(파일 전송), SMTP(이메일 전송) 등과 같이 인터넷에서 널리 사용되는 서버 애플리케이션이 사용하도록 예약된 번호로 0 ~ 1023 까지의 번호가 할당되어 있습니다. 대표적으로 HTTP 프로토콜을 사용하는 웹 서비스는 포트 80번을 사용합니다.

 

많은 클라이언트가 접속하는 서버 애플리케이션에는 미리 할당한 포트 번호를 열어 놓아 언제든 클라이언트가 편리하게 접속할 수 있게 한 것입니다. 반드시 정해진 포트 번호를 사용해야 한다는 절대적인 규칙이 있는 건 아니지만*, 웰 노운 포트 번호를 다른 용도로 사용하면 혼란을 야기할 수 있으므로 특별한 이유가 없다면 정해진 용도 외에는 사용하지 않는 것이 좋습니다.

 

*. 서버가 포트 80번이 아닌 다른 포트 번호를 웹 서비스용으로 사용할 때는 서버에 접속하려는 클라이언트도 포트 80번이 아닌 해당 포트 번호로 접속해야 합니다. 따라서 웹 페이지의 포트 번호를 80번이 아닌 다른 번호로 할당하면 해당 포트 번호를 아는 사람만이 웹 페이지에 접속할 수 있습니다.

 

<그림 4> 주요 웰 노운 포트 

 

등록된 포트(registered port) 번호는 웰 노운 포트 번호 이외에 자주 이용되는 서버 애플리케이션을 식별하기 위한 포트 번호로 1024 ~ 49151 까지의 번호가 할당되어 있습니다.

 

클라이언트 애플리케이션이 포트 번호가 필요할 때 할당할 수 있도록 배정된 번호를 동적 포트라고 하며 49152 ~ 65535 까지의 번호를 사용합니다. 클라이언트 애플리케이션은 자신의 포트 번호를 미리 결정하지 않고, 운영체제에 의해 포트 번호가 필요할 때마다 동적 포트 번호 범위 내에서 사용되지 않고 있는 임의의 번호가 자동으로 할당됩니다. 운영체제는 애플리케이션 별로 동일한 값이 할당되지 않도록 포트 번호를 관리하면서 동적으로 포트 번호를 할당해 줍니다. 따라서 통신이 시작되기 전까지 애플리케이션이 어떤 포트를 사용할지 알 수 없으며 사용하는 포트도 통신할 때마다 달라집니다.

 

<그림 5> 클라이언트 애플리케이션의 포트 번호 동적 할당

 

포트를 이용한 다중 연결

웹 브라우저로 여러 웹 페이지를 보거나, 동시에 여러 애플리케이션으로 인터넷에 접속하고 있을 때 서로 다른 데이터가 오고 가는 상황에서도 애플리케이션끼리 혼선이 생기지 않는 것은 전송 계층이 포트를 여러 개 사용하여 각각 따로 통신을 하기 때문입니다.

 

전송 계층이 포트 번호로 애플리케이션을 식별하여 데이터를 각 애플리케이션에 배분한다고 했습니다. 이를 달리 표현하면 포트는 데이터가 전송 계층과 응용 계층 사이를 이동할 수 있는 출입구 역할을 하고, 각 출입구를 구별하기 위해 번호를 붙인 것이 포트 번호라 할 수 있습니다. 예를 들어, 웹 브라우저라는 애플리케이션은 포트 번호가 80번인 통로로만 데이터를 보낼 수 있고, FTP 애플리케이션은 포트 번호가 21번인 통로로만 데이터를 보낼 수 있는 것입니다.

 

따라서 응용 계층에서 웹 브라우저가 보내는 데이터를 전송 계층의 80번 포트로 전송해야만 응용 계층과 전송 계층 간에 통신이 가능한 것입니다. 이처럼 응용 계층과 전송 계층이 같은 포트를 사용해야 통신이 가능하기 때문에 전송 계층에서는 포트를 여러 개 사용하여 응용 계층의 애플리케이션들과 각각 따로 통신을 하며 데이터를 전송하는 것입니다. 즉, 포트 번호를 사용하여 여러 애플리케이션이 동시에 통신하는 다중 연결이 이루어집니다.

 

<그림 6> 포트를 이용한 다중 연결

 

IP 주소와 포트 번호의 조합으로 통신 상대방 식별

아래 <그림 7>와 같이 클라이언트 1에서 웹 브라우저 창을 2개를 열고, 각 창마다 구글의 웹 사이트에 접속하는 경우 통신 ①과 통신 ②이라는 별개의 통신이 일어납니다. 이처럼 동일한 서버 상에 있는 웹 페이지를 동시에 열람하는 경우, 통신 ①과 통신 ②는 클라이언트 1과 웹 서버라는 두 컴퓨터 사이에서 발생하기 때문에 송신지 IP 주소, 수신지 IP 주소, 수신지 포트 번호가 동일합니다. 이때 통신 ①과 통신 ②이 각각 다른 통신이라는 것은 송신지 포트 번호로 구분합니다.

 

서버의 포트 번호는 고정되어 있기 때문에 여러 클라이언트가 서버와 통신하는 과정에서 같은 포트로 요청이 몰리게 됩니다. <그림 7>에서 클라이언트 1과 클라이언트 2가 웹 서버에 접속하는 경우 통신 ①과 통신 ③이 발생합니다. 클라이언트의 포트 번호는 통신을 할 때 랜덤하게 할당되기 때문에 같은 포트 번호가 할당될 수도 있습니다. 따라서 통신 ①과 통신 ③은 송신지 포트 번호, 수신지 포트 번호, 수신지 IP 주소가 같습니다. 이때 통신 통신 ①과 통신 ③을 구별하는 것은 송신지 IP 주소입니다. 인터넷에서 IP 주소는 호스트마다 유일한 번호로 할당되기 때문에 포트 번호가 동일하더라도 통신 상대방을 식별할 수 있습니다.

 

이처럼 IP 주소와 포트 번호의 조합으로 애플리케이션이 통신하는 상대방을 식별할 수 있기 때문에 한 클라이언트가 여러 서버에 접속하더라도, 한 서버에 여러 클라이언트가 접속하더라 혼선없이 통신이 가능한 것입니다.

 

<그림 7> IP 주소와 포트 번호의 조합으로 통신 상대방 식별

 

포트 번호를 이용한 웹 서버와 웹 브라우저의 통신

웹 서비스를 제공하는 웹 서버는 공인 IP 주소를 공개하고, 포트 번호 80번을 사용합니다. 따라서 웹 서버 애플리케이션에 접속하기 위해서는 웹 브라우저에 IP 주소(또는 도메인)와 함께 포트 번호도 같이 입력해야 합니다(http://IP 주소(또는 도메인) : 포트 번호). 포트 번호를 사용하지 않고 통신하면 웹 서버까지 데이터가 수신되지만, 웹 서버 애플리케이션에는 도착하지 못합니다.

구글의 웹 사이트에 접속하려면 웹 브라우저 주소창에 http://203.179.33.12:80 또는 http://www.google.com:80을 입력해야 합니다.

 

다만, 웹 브라우저를 사용하여 웹 서버에 접속할 때 IP 주소나 도메인 뒤에 포트 번호를 입력하지 않아도 자동으로 80번이 입력되기 때문에 포트 번호를 입력하지 않아도 웹 서버에 접속이 가능합니다. 만약 포트 번호가 80번이 아닌 웹 페이지에 접속하려면 웹 브라우저에 주소를 입력할 때 포트 번호도 같이 입력해야 합니다.

 

웹 브라우저가 웹 서버의 IP 주소와 포트 번호로 웹 페이지를 제공하는 웹 서버 애플리케이션에 접속할 때 웹 브라우저가 설치된 운영체제에서 웹 브라우저가 사용할 임의의 포트 번호를 할당합니다. 웹 서버 애플리케이션은 이 포트 번호로 웹 브라우저와 통신하며 웹 페이지를 전송하게 됩니다.

 

<그림 8> 포트 번호를 이용한 웹 서버와 웹 브라우저의 통신 

 

전송 계층의 통신 방식과 프로토콜

애플리케이션에 데이터를 배분하는 전송 계층의 또 다른 역할은 데이터를 수신지까지 문제없이(정확성, 신뢰성) 효율적으로 전송하는 것입니다. 신뢰할 수 있고 정확한 데이터를 전달하는 통신을 연결형 통신이라 하고, 효율적으로 데이터를 전송하는 통신을 비연결형 통신이라고 합니다.

 

연결형 통신은 통신 상대방과 확인해 가면서 통신하는 방식이고, 비연결형 통신은 상대방의 확인을 거치지 않고 일방적으로 데이터를 전송하는 방식입니다.

 

아래 <그림 9>과 같이 연결형 통신은 신뢰성과 정확성이 우선이므로 데이터를 전송 할 때 여러 번 확인 절차를 거치지만, 비연결형 통신은 효율성이 우선이므로 확인 절차 없이 일방적으로 데이터를 전송합니다. 두 가지 통신 모두 장단점이 있기 때문에 애플리케이션의 특징에 따라 선택하여 사용합니다. 보통 데이터의 정확성과 신뢰성이 중요한 웹이나 이메일에서는 연결형 통신을, 동영상 같이 빠른 데이터 전송으로 원활한 동영상 재생이 중요한 경우에는 비연결형 통신을 사용합니다.

 

<그림 9> 연결형 통신과 비연결형 통신

전송 계층의 연결형 통신에는 TCP 프로토콜이 사용되고, 비연결형 통신에는 UDP 프로토콜이 사용됩니다.

 

다음 포스팅에선 TCP 프로토콜에 대해 살펴 보도록 하겠습니다.

 


참고 자료

 

정기철, 「인공지능 시대를 위한 컴퓨터 과학 개론」, 한빛아카데미, 2020.

다케시타 다카후미 외 3인, 이영란 역, 「마스터링 TCP/IP 입문편」, 성안당, 2019.

ANK CO., Ltd., 이영란 역, 「TCP/IP가 보이는 그림책」, 성안당, 2019.

강환수 외 3인, 「컴퓨터 개론」, 인피니티북스, 2019.

진혜진, 「네트워크 개론」, 한빛아카데미, 2019.

삼성SDS 기술사회, 「정보통신」, 한울아카데미, 2019.

정진욱 외 4인, 「컴퓨터 네트워크」, 생능출판사, 2018.

김현정, 「소프트웨어 개념사전」, 궁리, 2019.

이영호 외 1인, 「당신이 지금 알아야 할 AWS」, 비제이 퍼블릭, 2019.

김종훈, 「소프트웨어 세상을 여는 컴퓨터 과학」, 한빛아카데미, 2018.

Gene, 김성훈 역, 「그림으로 배우는 네트워크 원리」, 영진 닷컴, 2020.

Ryuji Kitami, 이영란 역, 「그림 한 장으로 보는 최신 네트워크 용어 해설」, 정보문화사, 2016.

미즈구치 카즈야, 이승룡 역, 「모두의 네트워크」, 2018.

리브로웍스, 신상재 역, 「TCP/IP 쉽게, 더 쉽게」 , 제이펍, 2016.

Gene, 진솔 역, 「손으로 익히며 배우는 네트워크 첫걸음」, 한빛미디어, 2017.

아미노 에이지, 김현주 역, 「하루 3분 네트워크 교실」, 영진닷컴, 2016.

김석준, 「문과생을 위한 ICT 이야기 」, 커뮤니케이션즈북스, 2019.

James F. Kurose외 1인, 「컴퓨터 네트워킹」, 퍼스트북, 2017.

Tsutomu Tone, 이도희 역, 「성공과 실패를 결정하는 1%의 네트워크 원리」, 성안당, 2018.

백금란 외 1인, 「TCP/IP 이해하기」, 북스홀릭퍼블리싱, 2015.




반응형