오늘도 마찬가지로 과제를 진행하느라 바쁜 하루였다. 테스트 코드 작성이 익숙하지 않다보니 상당한 어려움을 느꼈다. 초기 세팅하는 부분이 쉽지가 않다보니 많이 헤맸던 것 같다. 익숙해질 수 있도록 연습을 많이 해야할 것 같다.
여기에는 오늘도 공부한 내용을 조금 정리해본다.
1. IP 주소
- IP의 한계
IP에는 한계라고 볼 수 있는 두 가지의 중요한 특징이 있다. IP는 신뢰할 수 없는 프로토콜(Unreliable Protocol)이고 비연결형 프로토콜(Connectionless Protocol)이다. IP를 통한 패킷의 전달은 신뢰성이 없는 통신이자 연결을 수립하는 과정이 없는 통신이다.
신뢰할 수 없는 통신은 IP 프로토콜이 패킷이 수신까지 제대로 전송되었다는 보장을 하지 않는 특징을 일컫는다. 통신 과정에서 패킷의 데이터가 손상되었더라도 이를 확인하지 않고, 재전송도 하지 않으며, 순서대로 패킷이 도착할 것이라는 보장도 하지 않는다. 이러한 전송 특성을 최선형 전달(Best Effort Delivery)라고도 부른다. 최선을 다해 전달은 하지만 어떠한 보장도 하지 않는 다는 뜻이다.
비연결형 통신은 말 그대로 송수신 호스트 간에 사전 연결 수립 작업을 거치지 않는다는 뜻이다. 수신지를 향해 패킷을 보내기만할 뿐이다.
IP가 이런 신뢰할 수 없는, 비연결형 통신을 하는 이유는 주로 성능 때문이다. 모든 패킷에 제대로 전송되었는지 일일히 확인하고, 호스트 간에 연결을 수립하는 작업은 패킷의 빠른 송수신과는 배치되는 작업이다. 더 긴 시간과 대역폭, 부하가 요구되기 때문에 성능상 악영향으로 이어질 수 있다. 반드시 신뢰성 있는 전송을 보장해야하는 경우도 있겠지만, 한두 개의 패킷 손실을 감수하더라도 빠른 전송이 우선시되는 경우도 있다.
이런 IP의 한계가 네트워크 계층과 응용 계층 사이의 전송 계층이 존재하는 이유와도 직결된다.
- 전송 계층
전송 계층은 연결형 통신을 가능하게 한다. 연결형 통신을 지원하는 대표적인 전송 프로토콜로 TCP가 있다. TCP는 두 호스트가 정보를 주고받기 전에 마치 가상의 회신을 설정하듯이 연결을 수립한다. 송수신하는 동안에는 연결을 유지하고, 송수신이 끝나면 연결을 종료할 수 있다.
전송 계층은 신뢰성 있는 통신을 가능하게 한다. 신뢰성 있는 통신 역시 TCP를 통해 가능하다. TCP는 패킷이 수신지까지 올바른 순서대로 확실히 전달되는 것을 보장하기 위해 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등 다양한 기능을 제공한다.
신뢰성 있는 통신이 항상 좋은 것만은 아니기 때문에, 때로는 비교적 높은 성능을 위해 신뢰할 수 없는 통신, 비연결형 통신을 지원하는 프로토콜이 필요할 때가 있다. 그렇기 때문에 전송계층에는 UDP라는 프로토콜도 존재한다. UDP는 TCP보다 비교적 빠른 전송이 가능하다.
- 포트
네트워크 외부에서 패킷들이 컴퓨터로 도착했다고 생각해보자. 컴퓨터에는 웹 브라우저를 비롯 다양한 프로그램이 실행중이다. 이 파일 패킷들이 컴퓨터에 도착했다고 수신이 끝난 것이 아니다. 패킷들은 웹 브라우저에 전달되어야 할 수도 있고 다른 프로그램에 전달되어야 할 수도 있다. 패킷은 실행 중인 특정 애플리케이션 프로세스까지 전달되어야만 한다.
수신이 아니라 패킷이 전송할 때에도 수신지의 호스트의 주소까지 전달했다고 해서 전송이 끝난 것이 아니다. 실행 중인 특정 애플리케이션 프로세스까지 전달되어야 한다. 패킷의 최종 수신 대상은 특정 애플리케이션 프로세스이다.
패킷을 수신할 애플리케이션에 대한 정보가 패킷에 포함되어 있지 않다면 해당 패킷을 어떤 애플리케이션에 전달해야 할지 알 수 없다. 즉, 패킷이 실행 중인 특정 애플리케이션까지 전달되려면 패킷에 특정 애플리케이션을 식별할 수 있는 정보가 포함되어 있어야 한다. 이러한 정보를 포트라고 한다.
전송 계층에서는 포트 번호를 통해 특정 애플리케이션을 식별한다. 패킷 내 수신지 포트와 송신지 포트를 통해 송수신지 호스트의 애플리케이션을 식별한다.
전송 계층의 핵심 프로토콜인 TCP와 UDP는 모두 포트 번호 필드인 송신지 포트 번호와 수신지 포트 번호를 포함한다. 포트 번호는 16비트로 표현 가능하고 사용 가능한 포트의 수는 65536개이다.
포트 번호는 번호의 범위에 따라 세 종류로 나뉜다.
포트 종류 | 포트 번호 범위 |
잘 알려진 포트 | 0 ~ 1023 |
등록된 포트 | 1024 ~ 49151 |
동적 포트 | 49152 ~ 65535 |
잘 알려진 포트(Well Known Port)
시스템 포트라고도 부르는 잘 알려진 포트는 범용적으로 사용되는 애플리케이션 프로토콜이 일반적으로 사용하는 널리 알려진 포트 번호를 의미한다.
아래와 같은 대표적인 예시들이 있다.
등록된 포트(Registered Port)
포트번호 1024번부터 49151번까지는 등록된 포트 번호이다. 잘 알려진 포트 번호에 비해서는 덜 범용적이지만, 흔히 사용되는 애플리케이션 프로토콜에 할당하기 위해 사용된다.
아래는 등록된 포트의 예시이다.
포트 번호 | 설명 |
1194 | OpenVPN |
2483,2484 | Oracle |
3306 | MySQL |
5432 | PostgreSQL |
6379 | Redis |
27017 | MongoDB |
8080 | HTTP 프록시 |
잘 알려진 포트와 등록된 포트는 인터넷 할당 번호 관리가관(IANA)이라는 단체에 의해 할당되어있다.
동적 포트(Dynamic Port)
사설 포트(Priavet Port), 임시 포트(Ephemeral Port) 라고도 불리며 포트번호 49152번부터 65535번까지의 포트 번호이다. 특별히 관리되지 않는 포트번호들이기 때문에 자유롭게 사용할 수 있다.
서버로서 동작하는 프로그램의 포트 번호는 사전에 암묵적으로 정해진 경우가 많은반면 클라이언트로서 동작하는 프로그램은 동적 포트 번호 중에서 임의의 번호가 할당되는 경우가 많다.
예를 들어, 웹 브라우저를 통해 특정 웹 사이트에 접속한다고 했을 때, 웹 브라우저 프로그램에는 동적 포트 내의 임의의 포트 번호가 자동으로 할당된다.
IP 주소와 포트 번호에 대한 정보가 함께 주어지면 특정 호스트에서 실행 중인 특정 애플리케이션 프로세스를 식별할 수 있다. 그래서 포트 번호는 일반적으로 다음과 같이 IP주소:포트 번호 형식으로 IP 주소와 함께 표기된다.
IP주소:포트 번호 예시 : 192 . 168 . 10 . 1 : 8000
2. 오늘 배운 것
- 테스트 코드 작성을 진행해보았는데 쉽지 않았다. 연습을 많이하고 습관화가 되도록 노력해야겠다.
'오늘 배운 것' 카테고리의 다른 글
24-07-01 NAPT (0) | 2024.07.01 |
---|---|
24-06-30 알고리즘 문제 풀이 (0) | 2024.06.30 |
24-06-27 알고리즘 문제 풀이 (0) | 2024.06.27 |
24-06-26 IP 주소 (0) | 2024.06.26 |
24-06-25 ARP와 IP 주소 (0) | 2024.06.25 |