전송 계층에 관하여
전송 계층
--
전송 계층은
신뢰할 수 있는 통신과 연결형 통신을 가능하게 하여
IP의 한계를 극복하고, 포트 번호를 통해 응용 계층의 애플리케이션 프로세스들을 식별하는 역할을 수행한다.
네트워크 계층의 IP는 "신뢰할 수 없는 통신"과 "비연결형 통신"을 수행하게 된다.
신뢰할 수 없는 통신 = IP 프로토콜의 패킷이 수신지까지 정상적으로 전달되었는지 보장하지 않는다.
즉, IP 프로토콜은 데이터 패킷을 목적지까지 전달해 주지만,
도중에 손실되거나 손상된 패킷이 있어도 이를 감지하거나 복구하지 않는다.
그리고 네트워크 혼잡, 라우터 문제 등으로 인해 패킷이 손실되거나 순서가 뒤바뀌거나, 중복되거나, 지연되면
IP는 이를 해결하지 않는다.
간단하게 "전송은 하지만 결과에 대해서는 어떠한 보장도 하지 않는다."
비연결형 통신 = 데이터를 전송하기 전에 연결을 설정하지 않는다.
즉, 송수신 호스트 간에 사전 연결을 하지 않고 (어떠한 경로로 보낼지 지정하지 않음)
그냥 목적지(수신지)를 향해 패킷을 전송하기만 한다.
그래서 데이터가 전송되더라도 도착 순서가 뒤바뀌거나 누락될 수 있으며,
연속적인 데이터 흐름을 보장하지 않는다.
IP는 왜 신뢰하지 않고, 비연결형 통신을 할까?
가장 주요한 이유는 "성능"이다.
모든 패킷을 제대로 전송했는지 확인하고, 호스트 간에 연결하는 작업을 수행하게 되면
패킷의 송수신은 느려지게 될 것이며, 상대적으로 많은 시간, 대역폭, 부하가 요구되어
성능상으로 악영향이 될 수 있다.
패킷의 종류는 매우 다양하다.
금융 서비스처럼 반드시 신뢰성 있는 전송을 보장해야 하는 경우도 있지만
스트리밍 서비스처럼 소량의 패킷 손실을 감수하더라도 빠른 전송이 우선시되는 경우가 있으므로,
항상 신뢰성 있는 전송을 해야 하는 것은 아니다.
--
IP의 한계 보완하기
--
1. 연결형 통신
연결형 통신을 지원하는 대표적인 전송 프로토콜로 TCP가 존재한다.
TCP는 두 호스트가 정보를 주고받기 전에 마치 가상의 회선을 설정하듯이 연결을 수립한다.
그래서 두 호스트가 송수신하는 동안에는 해당 연결을 유지하고, 송수신이 끝나면 연결을 종료한다.
2. 신뢰성 있는 통신
신뢰성 있는 통신 또한 TCP를 통해 가능하게 만든다.
TCP는 패킷이 수신지까지 올바른 순서대로 전달하는 것을 보장하기 위해
재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등 다양한 기능들을 제공한다.
이전에 말했던 것처럼
연결형 통신과 신뢰성 통신이 무조건 좋은 것만은 아니다.
높은 성능이 더 우선시 되는 통신에서는 비연결형 통신과 비신뢰성 통신을 사용하는 프로토콜이 필요할 때가 있다.
해당 프로토콜이 바로 UDP 프로토콜이다.
--
응용 계층과 연결하기 (포트, Port)
--
내트워크 외부에서 내 컴퓨터로 어떠한 데이터 패킷들이 라우팅 되어 전달되었다고 하면
여기서 끝이 아니라, 내 컴퓨터에서 어떤 (응용)프로그램으로 전달할지도 진행되어야 한다.
즉, 패킷은 실행 중인 특정 애플리케이션 프로세스까지 전달이 되어야 한다.
(패킷의 최종 수신 대상은 특정 프로세스다.)
여기서 패킷에는 어떤 애플리케이션(프로세스)에 전달할지 식별할 수 있는 정보가 포함되어 있는데
이것을 "포트(Port)"라고 부른다.
즉, 전송 계층에서는 "포트 번호"를 통해 특정 애플리케이션을 식별할 수 있다.
(전송 계층의 핵심 프로토콜인 TCP, UDP는 모두 포트 번호 필드인 "송신지 포트 번호"와 "수신지 포트 번호"를 포함)
포트 번호는 16bit로 표현이 가능하며,
사용 가능한 포트의 수는 2^16(65,536)개고 0 ~ 65,535 포트다.
여기서 포트 번호는 범위에 따라 3 종류로 나뉜다.
잘 알려진 포트(Well Known Port)는
범용적으로 사용되는 애플리케이션 프로토콜이 일반적으로 사용하는 포트로
시스템 포트(System Port)라고도 부른다.
등록된 포트(Registered Port)는
잘 알려진 포트에 비해서는 덜 범용적이지만,
흔히 사용되는 애플리케이션 프로토콜에 할당하기 위해 사용된다.
동적 포트(Dynamic Port)는
인터넷 할당 번호 관리 기간에 의해 할당된 애플리케이션 프로토콜이 없고,
특별히 관리되지 않는 포트 번호로 자유롭게 사용할 수 있는 포트다.
사설 포트(Private Port) 또는 임시 포트(Ephemeral Port)라고도 부른다.
포트 표기 방식 (IP 주소 : 포트 번호)
192.168.222.1 IP인 호스트에서 8080 포트로 실행 중인 프로세스를 가리키게 된다.
--
포트 기반 NAT (NAPT)
--
NAT은
IP 주소를 변환하는 기술이며,
주로 네트워크 내부에서 사용되는 "사설 IP 주소"와 네트워크 외부에서 사용하는 "공인 IP 주소"를 변환하는 데 사용된다.
그리고 이러한 변환을 위해 사용되는 것이 "NAT 변환 테이블"이다.
NAT 변환 테이블을 보면
변환 대상의 IP 주소가 서로 1:1 대응을 하고 있다.
즉, 사설 IP 주소 하나당 공인 IP 주소 하나가 대응된다.
다만 사실 IP 주소가 많아지면 그만큼 공인 IP 주소도 필요하게 된다.
그래서 요즘 NAT는 IP 주소를 1:1로 대응하지 않는 경우가 많다.
이렇게 가능한 이유는 바로 포트를 사용하기 때문이다.
여기서 포트 기반의 NAT를 "NAPT (Network Address Port Translation)"이라고 부른다.
(또는 APT (Address Port Translation)이라고도 부른다.)
--
'CS > 네트워크' 카테고리의 다른 글
[전송 계층] TCP의 오류, 흐름, 혼잡 제어 (0) | 2024.11.22 |
---|---|
[전송 계층] TCP와 UDP (0) | 2024.11.21 |
[네트워크 계층] 라우팅 (0) | 2024.11.19 |
[네트워크 계층] IP 주소 (0) | 2024.11.18 |
[네트워크 계층] ARP (Address Resolution Protocol) (0) | 2024.11.17 |