전송 계층(Transport Layer)의 역할
하위 계층인 인터넷계층은 최적의 경로로 패킷을 전송하는 중요한 역할을 담당하지만, 수신지 컴퓨터가 인터넷에 존재하는지, 수신지 컴퓨터가 패킷을 수신할 준비가 되어있는지, 전송 과정에서 패킷이 손상되거나 유실되지는 않았는지에 대한 문제는 신경쓰지 않는다. 즉 IP 프로토콜은 패킷을 전달하기 위한 최선의 노력 (Best-effort delivery service)를 하지만, 패킷의 전송 순서나 완전성을 보장하지 않으므로 비신뢰형 서비스(unreliable service)라고도 한다. 패킷이 전송 과정에서 아무 문제 없이 제대로 수신지 컴퓨터에 도착할 수 있도록 하는 일은 전송 계층이 담당한다.
또한 데이터는 수신지 컴퓨터에 도달하는 것이 목표가 아니라 수신지 컴퓨터 내의 애플리케이션까지 전송되어야 최종 목적지에 도착하게 된다. 이때 전송 계층은 다양한 애플리케이션이 동작하는 컴퓨터 내에서 어떤 애플리케이션이 사용하는 데이터인지 식별하여 수신지 컴퓨터에 도착한 데이터를 수신지 컴퓨터 내의 애플리케이션에 배분하는 역할을 한다. 즉 인터넷 계층이 컴퓨터(호스트)간의 데이터 통신을, 전송 계층이 애플리케이션 간의 데이터 통신을 구현한다고 할 수 있다. 인터넷 계층에서 호스트를 구별하기 위해 IP 주소를 사용했던것 처럼, 전송 계층에서는 애플리케이션을 식별하기 위해 포트 번호를 사용한다.
전송 계층의 특징
네트워크 인터페이스 계층과 인터넷 계층에서는 물리적인 이동 통로를 통해 데이터가 이동했기 때문에 데이터 흐름을 논리적으로 이해하기 수월했다. 반면 전송 계층에서 컴퓨터 내에 어플리케이션 까지 데이터가 이동하는 것은 내부적으로 일어나기 때문에 추상화하기 어렵다. 따라서 전송 계층을 쉽게 이해하기 위해 그림2와 같이 어플리케이션 간에 가상의 연결 통로가 존재한다고 상상하자.
전송 계층에서 애플리케이션끼리 통신을 시작하기 전에 통신하고자 하는 애플리케이션끼리만 사용이 가능한 가상의 연결 통로를 확보한다. 이렇게 애플리케이션간의 가상의 연결 통로를 만드는 작업을 연결 확립이라 하고, 연결 통로의 출입구, 즉 애플리케이션과 연결 통로의 인터페이스를 포트(port)라고 하며, 포트를 식별하기 위한 주소를 포트 번호라고 한다.
애플리케이션의 식별과 포트 번호
인터넷 계층에서 IP 주소를 보고 수신지 컴퓨터로 데이터를 전달하면 전송 계층에서는 포트 번호를 보고 어떤 애플리케이션이 사용할 데이터인지 식별한다. 따라서 포트번호(Port number)는 한 컴퓨터 내에서 통신을 하고있는 애플리케이션을 식별할 때 사용하는 애플리케이션의 주소라고 할 수 있다.
전송 계층의 데이터 단위인 세그먼트의 헤더에 송수신 애플리케이션의 포트 번호에 대한 정보가 담겨있다.
포트 번호의 종류
포트 번호는 16비트를 사용하여 총 2의16승(0~65535)개를 사용할 수 있다. 포트 번호는 그림3처럼 크게 세 종류로 구분할 수 있다.
서버 애플리케이션은 정해진 포트 번호를 할당하지만, 클라이언트 애플리케이션은 포트 번호가 필요할 때마다 동적으로 할당된다. 서버 애플리케이션에 할당된 번호가 웰 노운 포트와 등록된 포트이고, 클라이언트 애플리케이션에 배정된 번호가 동적 포트이다.
웰 노운 포트는 자주 사용되는 서버 애플리케이션에 미리 할당한 포트 번호를 열어 놓아 언제든 클라이언트가 편리하게 접속할 수 있도록 하며 0 ~ 1023번을 사용한다. 반드시 정해진 포트 번호를 사용해야한다는 규칙이 있는 것은 아니지만, 웰 노운 포트번호를 다른 용도로 사용하면 혼란을 야기할 수 있기 때문에, 특별한 이유가 아니면 정해진 용도 외에는 사용하지 않는 것이 좋다.
등록된 포트 번호는 웰 노운 포트 번호 이외에 자주 이용되는 서버 애플리케이션을 식별하기 위한 포트 번호로 1024 ~ 49151까지의 번호가 할당되어 있다.
동적 포트는 클라이언트 애플리케이션이 포트 번호가 필요할 때 할당할 수 있도록 배정된 포트이며 49152 ~ 65535 까지의 번호를 사용한다. 클라이언트 애플리케이션은 자신의 포트 번호를 미리 결정하지 않고, 운영체제에 의해 포트 번호가 필요할 때마다 동적으로 사용 되지 않고 있는 임의의 포트가 할당된다. 따라서 사용하는 포트가 통신할 때마다 매번 달라진다.
포트를 이용한 다중 연결
웹브라우저로 여러 웹페이지를 보거나, 동시에 여러 애플리케이션으로 인터넷에 접속하고 있을 때 애플리케이션끼리 혼선이 생기지 않는 것은 전송 계층이 포트를 여러 개 사용하여 각각 따로 통신하기 때문이다.
따라서 그림 5에서 웹 브라우저라는 애플리케이션은 포트 번호가 80번인 통로로만 데이터를 보낼 수 있고, FTP 애플리케이션은 포트 번호가 21번인 통로로만 데이터를 보낼 수 있다. 이처럼 응용 계층과 전송 계층이 같은 포트를 사용해야 통신이 가능하기 때문에, 전송 계층에서는 포트를 여러 개 사용하여 응용 계층의 애플리케이션들과 각각 따로 통신을 하며 데이터를 전송한다(다중 연결).
IP 주소와 포트 번호의 조합으로 통신 상대방 식별
그림 6과 같이 클라이언트 1에서 웹 브라우저 창 2개를 열고, 각 창마다 구글의 웹 사이트에 접속하는 경우 통신 1과 통신 2라는 별개의 통신이 일어난다. 이 경우, 두 통신은 수신지 포트번호, 수신지 IP주소, 송신지 IP주소가 동일하지만, 송신지 포트 번호로 서로 다른 통신인 것을 구분한다.
또한 그림 6에서 클라이언트 1과 클라이언트 2가 웹 서버에 접속하는 경우, 통신 1과 통신 3이 발생하게 된다. 클라이언트의 포트 번호는 통신을 할 때마다 랜덤으로 할당되기 때문에 통신별로 같은 포트 번호가 할당될 수도 있다. 이 경우, 두 통신은 송신지 포트 번호, 수신지 포트 번호, 수신지 IP 주소가 동일하지만, 송신지 IP주소로 서로 다른 통신인 것을 구별한다. 인터넷에서 IP 주소는 호스트 마다 유일한 번호로 할당되기 때문에 포트 번호가 동일하더라도 통신 상대방을 식별할 수 있다.
이와 같이 IP주소와 포트 번호의 조합으로 애플리케이션 계층에서 통신하는 상대방을 식별할 수 있다.
포트 번호를 이용한 웹 서버와 웹 브라우저의 통신
웹 서비스를 제공하는 웹 서버는 공인 IP 주소를 공개하고, 포트 번호 80번을 사용한다. 예를 들어 “http://(IP주소 또는 도메인):(포트번호)” 형식으로 사용하는 것이다.
하지만 실제로는 http://www.google.com:80을 치는 대신 http://www.google.com만 입력해도 바로 접속이 가능하다. 왜냐하면 웹 브라우저를 사용하여 웹 서버에 접속하면, IP 주소(나 도메인)뒤에 포트 번호를 입력하지 않아도 자동으로 80번이 입력되기 때문이다. 만약 포트 번호가 80번이 아닌 웹 페이지에 접속하려면 웹 브라우저에 주소를 입력할 때 포트 번호도 같이 입력해야 한다.
웹 브라우저가 웹서버의 IP 주소와 포트번호로 웹 페이지를 제공하는 웹 서버 애플리케이션에 접속할 때, 브라우저가 설치 된 운영체제에서 웹 브라우저가 사용할 임의의 포트 번호를 할당한다. 웹 서버 애플리케이션은 이 포트 번호로 웹 브라우저와 통신하며 웹 페이지를 전송한다.
전송 계층의 통신 방식과 프로토콜
전송 계층의 또 다른 역할은 데이터를 수신지까지 문제없이(정확성, 신뢰성) 효율적으로 전송하는 것이다. 신뢰할 수 있고 정확한 데이터를 전달하는 통신을 연결형 통신이라고 하고, 효율적으로 데이터를 전송하는 통신을 비연결형 통신이라고 한다. 연결형 통신은 통신 상대방과 확인 과정을 거치며 통신하는 방식이고, 비연결형 통신은 상대방의 확인을 거치지 않고 일방적으로 데이터를 전송하는 방식이다.
그림 8과 같이 연결형 통신은 신뢰성과 정확성이 우선이므로 여러번의 확인 절차를 거친 뒤에 데이터를 전송하지만, 비연결형 통신은 효율성이 우선이므로 확인 절차를 생략하고 일방적으로 데이터를 전송한다. 보통 데이터의 정확성과 신뢰성이 중요한 웹이나 이메일 등에선 연결형 통신을 사용하며, 동영상과 같이 빠른 데이터 전송으로 원활한 스트리밍 서비스가 중요한 경우에는 비연결형 통신을 사용한다.
(출처: https://better-together.tistory.com/134)
본 내용은 제가 네트워크 공부를하며 위 블로그를 참고해 정리한 내용이어서 스스로가 이해하기 쉽도록 말을 길게 풀어 쓴 구간이 많습니다. 위 블로그에서 깔끔하고 상세하게 설명을 잘 하고 있기 때문에 공부를하는 분들은 위 블로그로 확인해보시는것도 추천드립니다~
'네트워크' 카테고리의 다른 글
[OSI 7-Layer] 표현 계층 (0) | 2023.04.22 |
---|---|
[OSI 7-Layer] 세션 계층 (0) | 2023.04.22 |
[TCP/IP] 응용 계층 (0) | 2023.04.22 |
[TCP/IP] 인터넷 계층 (0) | 2023.04.22 |
[TCP/IP] 네트워크 인터페이스 계층 (1) | 2022.11.29 |