JS/TIL(Today I Learned)

2024-12-22 <전송 계층>

프린스 알리 2024. 12. 22.

전송 계층: IP의 한계를 극복하는 방법

전송 계층이란?

네트워크 계층과 응용 계층 사이에 존재한다.

전송 계층의 역할

IP의 한계를 보완해준다. => 신뢰할 수 있는 통신연결형 통신 기능을 제공한다.
사용자가 사용하는 프로그램을 식별해준다. => 포트 번호를 통해 응용 계층의 프로세스를 식별한다.

전송 계층의 역할(1) - 전송 계층은 IP의 한계를 보완한다!

IP가 뭐였더라? 복습해보기

인터넷 프로토콜의 주요한 역할은 데이터를 패킷 단위로 전달하는 것이었다. 그러기 위해 패킷에 주소(IP 주소)를 부여하고 최적의 경로(라우팅)를 설정하는 기능을 가지고 있었다.
사실 이 방식에는 두 가지 특징이 있었으니, 바로 다음과 같다.

Internet Protocol(네트워크 계층) => 신뢰성이 없는 통신 + 비연결형 통신.


잠깐, IP 통신이 비신뢰성이고 비연결형이라니? 나름 패킷에 주소도 붙여주고 경로까지 찾아주는데 어째서 이런 특징을 가지고 있다는 것일까? 대체 왜 신뢰성도 없고, 비연결형 통신이라는 걸까? 이에 대해 자세히 알아보도록 하자.

 

신뢰할 수 없는 통신이란?

  • 패킷이 수신지까지 제대로 전송되었다는 보장을 하지 않음
  • 통신 과정에서 패킷이 잘못 전송되어도 이를 확인하지 않음
  • 재전송도 하지 않으며, 순서대로 패킷이 도착할 것이라는 보장도 하지 않음
    => 최선형 전달(Best Effort Delivery)

비연결형 통신이란?

  • 송수신 호스트 간에 사전 연결 수립 작업을 거치지 않음
  • 그저 수신지를 향해 패킷을 보내기만 할 뿐

즉, IP 통신은 목적지 네트워크를 향해 전달하는 일만 열심히할 뿐, 내용물의 순서나 무결성을 온전히 보장하진 못한다.

그렇다면 IP는 왜 신뢰할 수 없는, 비연결형 통신을 할까?

  • 왜냐하면 그게 더 성능엔 좋으니까! 마냥 나쁘다면 이런 통신을 할 리가 없을 것이다.
  • 또, 신뢰성 있는 전송이 언제나 필요한 것도 아니다.
  • 제대로 오든 말든 일단은 빠르게 주고 받아야 하는 때도 있는 법

그래서! 전송 계층의 프로토콜은 통신의 목적에 따라 달라진다.

=> 만약 신뢰할 수 있는, 연결형 통신이 필요하다면? TCP
=> 필요하지 않다면? UDP

TCP

  • 연결형 통신을 가능하게 한다. 송수신하는 동안에는 연결을 유지하고, 송수신이 끝나면 연결을 종료한다.
  • 신뢰할 수 있는 통신을 가능하게 한다. 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등 다양한 기능들을 제공한다.

UDP

  • 신뢰할 수 없는 통신, 비연결형 통신을 가능하게 한다.
  • TCP보다 비교적 빠른 전송이 가능하다.

전송 계층의 역할(2) - 전송 계층은 사용자가 사용할 애플리케이션을 식별한다!

포트를 활용한 애플리케이션 식별

두 대의 컴퓨터가 사진 파일 패킷을 주고받고 있었다고 가정해보자.

패킷을 그냥 보내기만 하면 끝인 걸까? => NO!

사용자가 실행 중인 수많은 프로그램 중 어느 애플리케이션에 그 사진이 필요한지, 컴퓨터는 판단을 내려야만 한다.

이때, 판단의 기준이 되는 것이 포트(Port))이다.

포트(Port)란?

네트워크 통신을 통해 데이터가 전송될 때, 운영 체제 통신에서의 종단점을 뜻한다. 주소에 비유하자면 'OO아파트 @@동 XX호'에서의 XX호처럼 데이터 패킷의 최종 주소라고 볼 수 있겠다.

 

포트 번호는 16비트로 표현 가능한 2진수 비트열로 구성되어 있으며, 0부터 65536번까지 존재한다. MySQL을 로컬에 설치해봤다면 해당 프로그램이 기본적으로 3306 포트를 이용하고 있음을 알 수 있을 것이다. 많고 많은 프로그램들 중 MySQL이 3306번 포트를 이용한다는 게 어떤 의미였는지, 이제 짐작이 간다. 우리는 3306번 포트로 MySQL 에 필요한 정보를 주고 받았던 것!

포트의 분류

포트 종류 포트 번호 범위
잘 알려진 포트(well-know port) 0~1023
등록된 포트(registered port) 1024~49151
동적 포트(dynamic port) 49152~65535

잘 알려진 포트(well-know port)

  • 0~1023번까지의 포트
  • 시스템 포트(system port)
  • 범용적으로 사용되는 애플리케이션 프로토콜이 일반적으로 사용하는 포트 번호를 의미

EC2에서 서버를 대여받을 때 22번 포트가접근 가능하게 설정되어 있는 걸 본 적이 있을 것이다. 그 포트를 사용 중이던 애플리케이션이 바로 SSH였다는 사실, 알고 있었는가?

등록된 포트(registered port)

  • 1024~49151번까지의 포트
  • 잘 알려진 포트에 비해서는 덜 범용적
  • 흔히 사용되는 애플리케이션 프로토콜에 할당하기 위해 사용

동적 포트(dynamic port), 사설 포트(private port), 임시 포트(ephemeral port)

  • 특별히 관리되지 않는 포트 번호 범위: 자유롭게 사용 가능
  • 서버는 대부분 잘 알려진 포트와 등록된 포트 사용
  • 클라이언트는 대부분 동적 포트 사용

IP 주소와 포트 번호의 형식

=> 192.168.0.15:8000


내 컴퓨터(192.168.0.3)의 슬랙 프로그램은 35.74.215.78호스트의 HTTPS라는 애플리케이션 프로세스와 통신 중!

포트 기반 NAT: 포트를 활용하는 기술

NAT란?

내부 네트워크에서 사용하는 IP와 외부 네트워크에서 사용하는 IP를 변환해주는 기술. NAT 테이블에 변환할 IP주소 쌍을 가지고 있다. 위에서의 192.168.0.3라는 IP에 '로컬 주소'라고 이름이 명명되어 있는 이유가 바로 이 기술 덕분이다.

 

 

내 컴퓨터는 외부 네트워크에서 다른 IP 주소를 쓰고 있겠지만, 로컬 네트워크에서는 192.168.0.3라는 IP 주소를 사용하고 있다는 것! 하지만 이런 방식엔 문제가 있다. 바로 사설 IP 주소의 개수만큼 공인 IP 주소가 필요하기 때문이다.

이러한 한계를 바로 포트 기반의 NAT(NAPT) 가 극복할 수 있다.

NAPT

  • NAPT 또는 APT
  • NAPT는 NAT 테이블에 변환할 IP주소 쌍과 더불어 포트 번호도 함께 기록하고 변환한다.
  • 하나의 공인 IP 주소를 여러 사설 IP 주소가 공유할 수 있다.(1:N의 관계)
  • 192.168.0.5와 192.168.0.6는 서로 다른 IP 주소를 가지고 있지만 외부 네트워크에서 같은 IP주소를 사용할 수 있다. 왜냐? 서로 다른 포트 번호를 사용하고 있기 때문!


출처

[네트워크 기초 강의] 28강. 전송 계층의 개요: IP의 한계와 포트

'JS > TIL(Today I Learned)' 카테고리의 다른 글

2024-12-24  (2) 2024.12.24
2024-12-23 <복잡한 IOCP 쉽게 이해하기>  (5) 2024.12.23
2024-12-20 <트러블 슈팅>  (2) 2024.12.20
2024-12-19  (4) 2024.12.19
2024-12-18  (4) 2024.12.18

댓글