[네트워크] 전송 계층

windowook·2024년 6월 26일
post-thumbnail

🌱 신뢰할 수 없는 통신과 비연결형 통신

IP는 신뢰할 수 없는 프로토콜이자 비연결형 프로토콜입니다.

신뢰할 수 없는 통신

신뢰할 수 없는 통신은 IP 프로토콜이 패킷이 수신지까지 제대로 전송되었다는 보장을 하지 않는 특징입니다. 통신 과정에서 패킷의 데이터가 손상되거나 중복된 패킷이 전송되었더라도 이를 확인하지 않고 재전송도 하지 않으며, 순서대로 패킷이 도착할 것이라는 보장도 하지 않는다는 의미입니다.

비연결형 통신

송수신 호스트 간에 사전 연결 수립 작업을 거치지 않는 특징을 의미합니다. IP가 이러한 방식의 통신을 사용하는 이유는 성능 때문입니다.

모든 패킷이 제대로 전송되었는지 일일이 확인하고, 호스트 간에 연결을 수립하는 작업은 일반적으로 패킷의 빠른 송수신과는 배치되는 작업입니다. 그래서 성능상의 이점을 위해서 위와 같은 통신 방식을 사용합니다.

동영상 스트리밍 서비스나 실시간 영상 통화처럼 1, 2개 쯤의 패킷 손실은 감수하더라도 빠른 전송이 우선시되면 IP를 사용하는 것이 적합합니다. 화질에 문제가 생겨도, 영상 재생에 문제를 주진 않기 때문입니다. 모든 경우에 신뢰성 있는 전송이 필요하지 않은 경우입니다.

🌱 전송 계층

IP의 한계를 보완하는 계층. 전송 계층은 연결형 통신 가능하게 합니다. TCP는 두 호스트가 정보를 주고받기 전에 마치 가상의 회선을 설정하듯이 연결을 수립합니다. 송수신하는 동안에는 연결을 유지하고 송수신이 끝나면 연결을 종료합니다.

또한 전송 계층은 신뢰성 있는 통신을 가능하게 합니다. TCP는 패킷이 수신지까지 올바른 순서대로 확실히 전달되는 것을 보장하기 위해 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등 다양한 기능들을 제공합니다.

하지만 항상 연결형 통신, 신뢰성 있는 통신이 필요하지 않으니 전송계층에서는 TCP말고 UDP라는 프로토콜도 사용합니다. UDP는 신뢰할 수 없는 통신, 비연결형 통신을 가능하게 하여 빠른 전송 목적입니다.

🌱 포트

패킷의 최종 수신 대상은 특정 애플리케이션 프로세스입니다. 만약 어떤 패킷을 수신할 애플리케이션에 대한 정보가 패킷에 포함되어 있지 않다면 해당 패킷을 어떤 애플리케이션에 전달해야할 지 알 수 없습니다. 그래서 패킷에 특정 애플리케이션을 식별할 수 있는 정보가 포함되어있어야 하는데, 이게 포트입니다.

포트의 분류

포트 번호를 통해 특정 애플리케이션 분류 가능합니다. 패킷 내 수신지 포트와 송신지 포트를 통해 송수신지 호스트의 애플리케이션을 식별합니다.

포트 번호
16비트로 표현 가능하며, 사용 가능한 포트의 수는 2^16개입니다.
여기서 할당 가능한 포트 번호는 0번부터 65,535번까지 총 65,536개가 존재합니다.

잘 알려진 포트0 ~ 1023
등록된 포트1024~49151
동적 포트49152~65535

잘 알려진 포트
시스템 포트입니다.
이름 그대로 범용적으로 사용되는 애플리케이션 프로토콜이 일반적으로 사용하는
'널리 알려진, 유명한' 포트 번호를 의미입니다.

20, 21FTP
22SSH
23TELNET
53DNS
67, 68DHCP
80HTTP
443HTTPS

등록된 포트
흔히 사용되는 애플리케이션 프로토콜에 할당하기 위해 사용합니다.

동적 포트
사설 포트, 임시 포트입니다.
인터넷 할당 번호 관리 기관에 의해 할당된 애플리케이션 프로토콜이 없고, 특별히 관리되지 않는 포트 번호라 자유롭게 사용할 수 있는 포트입니다.

서버냐 클라이언트냐에 따라서도 포트 번호가 나뉘는데, 서버로서 동작하는 프로그램의 포트 번호는
사전에 암묵적으로 정해진 경우가 많습니다.

반면 클라이언트로서 동작하는 프로그램은 동적 포트 번호 중에서 임의의 번호가 할당되는 경우가 많습니다. 클라이언트의 대표적인 예시는 웹 브라우저에 해당합니다. 웹 브라우저를 통해 특정 웹 사이트에 접속하는 상황을 생각해보면 웹 브라우저 프로그램과 서버 프로그램이 서로 패킷을 주고받는 상황입니다.

이때 웹 브라우저 프로그램에서는 동적 포트 내의 임의의 포트 번호가 자동 할당됩니다. IP 주소와 포트 번호에 대한 정보가 함께 주어지면 특정 호스트에서 실행 중인 특정 애플리케이션 프로세스를 식별할 수 있습니다. 그래서 포트 번호는 IP 주소:포트 번호 형태로 표기되는 경우가 많습니다.

🌱 포트 기반 NAT

변환의 대상이 되는 IP 주소 쌍들이 명시되어있는 테이블입니다.

하나의 공인 IP 주소를 여러 사설 IP 주소로 변환시키는 것이 가능한 이유는 포트 기반의 NAT, NAPT 덕분입니다.

APT라고 부르기도 하는데, NAPT는 포트를 활용해 하나의 공인 IP 주소를 여러 사설 IP 주소가 공유할 수 있도록 하는 NAT의 일종입니다. NAPT는 NAT 테이블에 변환할 IP 주소 쌍과 더불어 포트 번호도 함께 기록하고 변환합니다.

네트워크 외부에서 사용할 IP 주소가 같더라도 포트 번호가 다르면 네트워크 내부의 호스트를 특정할 수 있어서 다수의 사설 IP 주소를 그보다 적은 수의 공인 IP 주소로 변환할 수 있습니다.

🌱 포트 포워딩

네트워크 내 특정 호스트에 IP 주소와 포트 번호를 미리 할당하고, 해당 'IP 주소:포트 번호'로써 해당 호스트에게 패킷을 전달하는 기능입니다.

🌱 ICMP

ICMP는 IP 패킷의 전송 과정에 대한 피드백 메세지를 얻기 위해 사용하는 프로토콜입니다.

ICMP 메세지의 종류 두 가지

  • 전송 과정에서 발생한 문제 상황에 대한 오류 보고
  • 네트워크에 대한 진단 정보

ICMP 메세지는 타입과 코드로 정의합니다.
타입과 코드는 ICMP 패킷 헤더에 포함되어 있는 정보입니다.

ICMP 패킷 헤더의 타입 필드에는 ICMP 메세지의 유형이 번호로 명시되고, 코드 필드에는 구체적인 메세지 내용이 번호로 명시됩니다.

오류 보고

오류 보고를 위한 ICMP 패킷으로는 수신지 도달 불가와 '시간 초과'가 존재합니다.

라우터에게 전달된 패킷의 TTL 필드가 0이 되면 해당 라우터는 송신지 호스트에게 시간 초과 타입 → TTL 만료 코드 ICMP 패킷을 전송합니다.

패킷을 전달받은 라우터가 수신지 네트워크로 향하는 경로를 찾을 수 없을 때에는 수신지 도달 불가 타입 → 네트워크 도달 불가 코드 ICMP 패킷을 전송합니다.

네트워크상의 정보 제공

ping이 대표적인 ICMP 기반의 명령어입니다.

profile
안녕하세요

0개의 댓글