network

[network] 혼자 공부하는 네트워크 04-1 전송 계층 개요: IP의 한계와 포트(241017)

hail2y 2024. 10. 17. 23:48

방학 때 네트워크 강의를 쭉 들었었는데 그 후로 시간이 꽤 지났다.(네트워크 지식도 옅어졌다) 강의만 듣고 따라가기에는 놓치는 내용들이 있을 수 있어서 책으로도 공부해 보려고 했으나 진도가 안 나갔다. 그래서 강의 업로드 일정에 맞추어 공부를 미루게 되었고.. 드디어 강의가 어제 업데이트되어서 지금 이렇게 글을 쓴다. 핳.. 그래도 올라오는 모든 강의들에 대해서는 꼭꼭 글로 정리할 것이다! 

서론이 길었고 이제 오늘의 주제를 살펴보자🏃‍♂️🏃‍♀️

전송 계층

  • 네트워크 계층과 응용 계층 사이에 위치하는 계층
  • 대표적인 기능: IP 한계 보완, 응용 계층의 프로세스 식별
    - IP 한계 보완: 신뢰할 수 있는 통신과 연결형 통신 기능 제공
    - 응용 계층의 프로세스 식별: 포트 번호 활용

cf. TCP/IP 모델 확장: 물리계층 - 데이터링크 계층(MAC) - 네트워크 계층(IP) - 전송 계층 (port) - 응용 계층

https://www.youtube.com/watch?v=RYntXWKDqLo&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=31&t=2s

IP 한계를 보완하는 전송 계층

- IP의 특징

  • 신뢰할 수 없는 (비신뢰성) 프로토콜(= unreliable protocol)
  • 비연결형 프로토콜(= connectionless protocol)
  • IP 패킷의 전달 = 신뢰성이 없는 통신 + 비연결형 통신

① 신뢰할 수 없는 통신

  • 패킷이 수신지까지 제대로 전송되었다는 보장을 하지 않음
  • 통신 과정에서 패킷이 잘못 전송되어도 이를 확인하지 않고, 재전송도 하지 않으며, 순서대로 패킷이 도착할 것이라는 보장도 하지 않는다

② 비연결형 통신

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

이렇게 통신하는 이유는 성능 때문이다. 신뢰할 수 있는 연결형 통신은 성능에 악영향을 준다. 그리고 반대로 이렇게 통신을 하고 있다는 것은 이렇게 해도 괜찮다는 것. 즉, 신뢰성 있는 전송이 모든 경우에 필요한 것이 아니라는 것이다. 전송 계층에서는 바로 이 한계를 보완한다. 

전송 계층의 대표적인 프로토콜에는 TCP(연결형), UDP(비연결형) 두 가지가 있다. 

TCP

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

UDP

  • 신뢰할 수 없는 통신, 비연결형 통신을 가능하게 함: 네트워크 계층의 IP의 껍데기
  • TCP보다는 비교적 빠른 전송이 가능

 

응용 계층을 식별하는 전송 계층

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

  • 포트(port): 네트워크 상의 애플리케이션 식별 정보
  • 패킷이 최종적으로 향해야 할 곳은, 특정 컴퓨터가 실행하는 특정 프로세스
  • 따라서 하나의 컴퓨터에서 여러 프로세스를 실행 중일 때, 특정 프로세스로 잘 향하도록 이들을 식별해 주는 것이 포트(port)
  • IP 주소로 호스트 컴퓨터를 특정하고, 헤더 송수신지 포트 정보를 통해 특정 프로세스로 향하도록 함

http://networking.khu.ac.kr/html/2009_spring_B3614202_ComNet.html

+ 관련 유튜브 동영상

포트의 분류

  • 패킷 내 수신지 포트와 송신지 포트를 통해 송수신지 호스트의 애플리케이션을 식별
  • 16비트로 표현 가능: 사용 가능한 포트의 수는 2^16(65,536)개
    - 할당 가능한 포트 번호: 0번~65535번
  • 잘 알려진 포트(well-known port) - 0~1023
  • 등록된 포트(registered port) - 1024~49151
  • 동적 포트(dynamic port) - 49152~65535

https://www.youtube.com/watch?v=RYntXWKDqLo&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=31&t=2s

① 잘 알려진 포트(well-known port)

  • 0번~1023번까지의 포트
  • 시스템 포트(system port)
  • 범용적으로 사용되는 애플리케이션 프로토콜이 일반적으로 사용하는 포트 번호를 의미
well-known port 설명
20, 21 FTP
22 SSH
23 TELNET
53 DNS
67, 68 DHCP
80 HTTP
443 HTTPS

 

(이 포트들은 기본적으로 암기해 두는 것이 좋다.)

② 등록된 포트(registered port)

  • 1024번~49151번까지의 포트
  • 잘 알려진 포트(well-known port)에 비해서는 덜 범용적
  • 흔히 사용되는 애플리케이션 프로토콜에 할당하기 위해 사용
registered port 설명
1194 OpenVPN
1433 Microsoft SQL Server 데이터베이스
3306 MySQL 데이터베이스
6379 Redis
8080 HTTP 대체(백업용 포트로 활용)

 

이 두 가지 포트 종류, 잘 알려진 포트(well-known port)와 등록된 포트(registered port)는 인터넷 할당 번호 관리 기관인 IANA(Internet Assigned Numbers Authority)에서 할당해 준다. 포트 번호는 권고일 뿐 강제 사항은 아니라고 한다. 

https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

③ 동적 포트(dynamic port)

  • 49152번~65535번까지의 포트
  • 특별히 관리되지 않는 포트 번호 범위로 자유롭게 사용 가능
  • 서버는 대부분 잘 알려진 포트와 등록된 포트 사용
  • 클라이언트는 대부분 동적 포트 사용 ex. 웹 브라우저

https://www.youtube.com/watch?v=RYntXWKDqLo&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=31&t=2s


위의 내용을 정리해 보면, IP 주소와 포트 번호의 조합으로 특정 호스트에서 실행 중인 특정 애플리케이션 프로세스를 식별할 수 있음을 알 수 있다. 그 형태는 다음과 같다. 

[IP 주소]:[포트 번호] 

https://www.youtube.com/watch?v=RYntXWKDqLo&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=31&t=2s

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

  • NAT(Network Address Translation): 주로 사설 IP 주소(네트워크 내부)와 공인 IP 주소(네트워크 외부)를 변환
  • NAT 변환 테이블: 변환의 대상이 되는 IP 주소 쌍

https://www.ciscopress.com/articles/article.asp?p=25273
https://www.ciscopress.com/articles/article.asp?p=25273

  • 사설 IP 주소 하나당 공인 IP 주소 하나가 대응하는 경우: 많은 사설 IP 주소를 변환하기에 무리가 있다
  • 공인 IP 주소의 낭비: 사설 IP 주소의 수만큼 공인 IP 주소가 필요하기 때문

그렇기 때문에 포트 번호를 함께 사용하여 이 문제를 해결할 수 있다. 오늘날 사용하는 NAT는 대부분 포트 기반의 NAT로 볼 수 있다.

192.168.0.5와 192.168.0.6이 같은 공인 IP 주소인 1.2.3.4로 변환되더라도 포트 번호가 다르다면 같은 공인 IP 주소를 공유할 수 있게 된다. 반대로 포트 번호가 다르면 네트워크 내부의 호스트도 특정지을 수 있다.  

https://www.youtube.com/watch?v=RYntXWKDqLo&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=31&t=2s