전송 계층
전송 계층 📤
IP 프로토콜의(네트워크 계층) 한계 : 완벽히 보장하지 않는다.
네트워크 계층, 그 중에서도 핵심적인 IP(Internet Protocol)는 서로 다른 네트워크 간의 통신을 가능하게 하는 중요한 역할을 수행한다. IP 주소를 기반으로 데이터 패킷을 목적지까지 전달하는 “길”을 찾아주는 역할을 하지만, 한계가 있다.
- 비신뢰성(Unreliable) 패킷 전달 : “보장”은 없다.
- IP는 패킷을 목적지까지 최선의 방식으로 전달하려고 하지만, 패킷의 손실, 순서 변경, 중복 전송에 대한 어떠한 보장도 제공하지 않는다.
- 네트워크 혼잡, 라우터 오류 등 다양한 이유로 패킷이 중간에 사라지거나, 목적지에 순서가 뒤바뀐 채로 도착할 수 있으며, 심지어 중복된 패킷이 도착할 수 도 있다.
- 비연결성(Connetionless) : “확인” 없는 일방적인 전달
- IP는 데이터 전송 전에 연결을 설정하는 과정을 거치지 않는다. 각 패킷은 독립적으로 목적지로 전달되며, 수신 측에서 제대로 받았는지, 혹은 중간에 문제가 발생했는지에 대한 어떠한 피드백도 제공하지 않는다.
- 발신자는 그저 데이터를 던져놓을 뿐, 제대로 도착했는지 확인하지 않는다.
전송 계층 : IP의 한계를 극복하다
위와 같이 네트워크 계층의 IP 프로토콜은 기본적인 데이터 전송 기능을 제공하지만, 신뢰성과 연결성 측면에서 부족함을 보인다. 이러한 한계를 극복하기 위해 전송 계층(Transport Layer) 이 존재한다. 전송 계층은 애플리케이션과 네트워크 계층 사이에서 데이터를 중개하며, IP가 제공하지 못하는 다양한 기능을 제공한다. 대표적으로 TCP와 UDP가 있으며, 각각의 특성은 다음과 같다.
TCP
TCP는 신뢰성 있는 데이터 전송을 보장하는 프로토콜이다.
- 연결지향(Connection-oriented) : 데이터 전송 전에 송신자와 수신자 간의 연결을 먼저 설정한다.
- 신뢰성 보장(Reliable) : 패킷이 손실되거나 순서가 바귀면 이를 감지하고 재전송하여 정확한 순서로 데이터가 도착하도록 보장한다.
- 흐름 제어(Flow Control) 및 혼잡 제어(Congestion Control) : 네트워크 상태를 고려하여 과부하를 방지한다.
- 세그먼트화(Segmentation) : 데이터를 작은 조각(세그먼트)로 나누어 전송하고, 수신 측에서 이를 조립한다.
- 대표적인 사용 예시 : 웹 브라우징(HTTP/HTTPS), 이메일(SMTP), 파일 전송(FTP)
UDP
UDP는 빠른 데이터 전송을 목표로 하는 프로토콜이다.
- 비연결성(Connectionless): 데이터 전송 전에 연결을 설정하지 않으며, 일방적으로 데이터를 전송한다.
- 비신뢰성(Unreliable): 패킷이 손실되거나 순서가 바뀌어도 이를 보장하지 않는다.
- 빠른 속도: 신뢰성을 위한 추가적인 절차가 없기 때문에 TCP보다 빠르다.
- 브로드캐스트 및 멀티캐스트 지원: UDP는 같은 네트워크 내 여러 장치로 데이터를 전송하는 데 적합하다.
- 대표적인 사용 사례: 실시간 스트리밍, 온라인 게임, VoIP(인터넷 전화), DNS 조회
전송 계층의 주요 기능
전송 계층은 단순히 데이터를 전달하는 역할뿐만 아니라, 다음과 같은 핵심 기능을 수행한다.
- 다중화(Multiplexing) 및 역다중화
- 여러 애플리케이션이 동시에 네트워크를 사용할 수 있도록 각 애플리케이션의 데이터를 개별적으로 처리한다.
- 송신 측에서는 여러 애플리케이션에서 전송하는 데이터를 네트워크 계층으로 전달하고, 수신 측에서는 받은 데이터를 올바른 애플리케이션에 전달한다.
- 오류 검출 및 수정(Error Detection & Correction)
- TCP는 데이터 전송 중 오류가 발생하면 이를 감지하고, 재전송을 요청하여 데이터의 무결성을 보장한다.
- UDP는 오류 검출 기능은 있지만, 오류 수정 기능은 제공하지 않는다.
- 혼잡 제어(Congesion Control) 및 흐름 제어(Flow Control)
- 네트워크의 과부하를 방지하고, 송신 측과 수신 측 간의 데이터 전송 속도를 조절한다.
- TCP는 혼잡 상태를 감지하면 전송 속도를 줄이고, 네트워크가 안정화되면 다시 증가시킨다.
- 연결 설정 및 종료(Connection Establishment & Termination)
- TCP는 3-way handshake를 통해 연결을 설정하고, 4-way handshake를 통해 연결을 종료한다.
- UDP는 연결 설정 없이 데이터를 전송한다.
응용 계층을 식별하는 전송 계층(포트 번호)
TCP와 UDP가 데이터를 전송할 떄, 단순히 목적지 IP 주소만으로는 어떤 애플리케이션(프로그램)과 통신할 것인지를 알 수 없다. 같은 컴퓨터에서 웹 브라우저, 게임, 메신저 등 다양한 프로그램이 동시에 네트워크를 사용하고 있기 때문이다.
이를 해결하기 위해 전송 계층은 포트 번호(port number)를 사용한다.
- 포트 번호는 운영 체제에서 프로그램을 구분하는 고유한 숫자이다.
- 예를 들어, 웹 서버(HTTP) 는 기본적으로 80번 포트, HTTPS는 443번 포트를 사용한다.
- Well-Known Port(0 ~ 1023) : 주요 프로토콜이 사용하는 포트 (예:HTTP-80, HTTPS-443, SSH-22)
- Registered Port(1024 ~ 49151) : 특정 애플리케이션이 사용하는 포트
- Dynamic Port (49152 ~ 65535) : 클라이언트가 임시로 사용하는 포트
즉, IP 주소가 특정 장치를 식별하는 것이라면, 포트 번호는 해당 장치 내에서 특정 애플리케이션을 식별하는 역할을 한다.
포트 포워딩
포트 포워딩은 네트워크 장비(주로 라우터)에서 특정 포트로 들어오는 트래픽을 내부 네트워크의 특정 장비 및 포트로 전달해주는 기술이다. 비유하자면, 외부에서 오는 우편물을 특정 주소(IP 주소)의 특정 수신인(포트 번호)에게 전달해주는 것과 같다.
포트 포워딩이 필요한 이유
대부분의 집이나 사무실에서는 공유기(라우터)를 사용하여 인터넷에 접근한다. 이 때, 공유기는 NAT라는 기술을 사용하여 내부 네트워크의 연결 장비가 하나의 공인 IP 주소를 공유하도록 한다. NAT환경에서는 외부에서 내부 네트워크의 특정 장비에 직접 접속하는 것이 기본적으로 불가능하다. 외부에서는 공유기의 공인 IP 주소만 보이고, 내부 장비의 사설 IP 주소는 알 수 없기 때문이다. 또한, 공유기는 외부에서 들어오는 트래픽을 어떤 내부 장비로 전달해야 할지 알 수 없다.
이러한 환경에서 외부에서 내부 네트워크의 특정 장비에 접속해야 할 때 포트 포워딩이 필요하다. 예를 들어,
- 집에서 회사 서버에 접속 : VPN 서버를 통해 회사 네트워크에 접속해야 할 때
- 원격 데스크 톱 : 외부에서 집에 있는 컴퓨터에 원격으로 접속해야 할 때
- CCTV 접속 : 외부에서 가정에 설치된 CCTV 영상을 확인할 떄