IP(인터넷 프로토콜)
복잡한 인터넷 망에서 멀리 있는 대상에게 정보를 전송해야하는 경우, IP 주소를 통해 이를 가능하게 합니다.
IP 주소는 통신 네트워크 상에서 각 장치를 식별하는 주소로, 어떤 데이터를 지정한 IP 주소에 전송합니다. 이때, 데이터는 패킷이라는 작은 통신 단위로 분할되어 전송됩니다.
(1) IP 패킷 정보
패킷은 패키지 + 버킷으로 택배를 보내는 상자 정도로 생각할 수 있습니다.
패킷에는 출발지 IP 주소와 목적지 IP 주소를 가지고 있습니다. 전송하면 네트워크 상의 노드를 통해 전달됩니다.
전송 과정에서 각 노드는 패킷을 받아 목적지 주소를 확인하고, 다음에 어디로 전송해야할지를 결정합니다. 이 과정은 라우팅이라고 하는데, 패킷은 이런 라우팅을 통해 최종적인 목적지에 도달합니다.
(2) IP 프로토콜의 한계
IP 주소를 부여하고 이를 찾아가는 방식에는 한계가 있습니다.
비연결성
우선 비연결성입니다. 비연결성은 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송하는 것입니다. 보내는 입장에선 목적지의 상황을 알지 못하기 때문입니다.
비신뢰성
그리고 비신뢰성의 문제가 있습니다. 만약 중간에 케이블이 끊겨 전달 도중에 패킷이 사라지더라도 알 수 없고, 패킷이 목적지에 순서대로 도착하지 않을 수 있습니다.
프로그램 구분
프로그램 구분 문제는 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러 개일때 발생합니다. IP 주소는 단순히 네트워크 상의 장치를 식별하는데에 사용되기 때문에 여러 어플리케이션이 동일한 IP 주소를 공유할 수 있습니다.
때문에 네트워크 상에서 패킷이 해당 서버로 전달되면, 서버 내부에서 어떤 어플리케이션으로 전달되어야 하는지 구분할 수 없는 문제가 발생합니다.
이러한 문제들은 IP 프로토콜 만으로는 해결할 수가 없습니다. 이런 문제는 TCP로 해결이 가능합니다.
TCP / UDP
TCP는 전송 제어 프로토콜(Transmission Control Protocol)입니다. 위 세가지 문제를 TCP로 해결할 수 있습니다.
(1) 인터넷 프로토콜 스택의 4계층
TCP는 인터넷 프로토콜 스택의 4계층 중 전송 계층에 해당합니다. IP 프로토콜은 인터넷 계층에 위치하고 데이터의 라우팅과 전송을 담당합니다. 여기서 TCP는 인터넷 계층인 IP 위에 놓여서 보완하는 역할을 수행합니다.
쉽게 그림으로 설명하자면, 만약 채팅 프로그램으로 Hello라는 메세지를 남기면 그 위에 TCP 정보를 한번 씌우고(녹색) 그 위에 IP 정보를 씌워(노란색) IP 패킷을 생성하는 것입니다.
생성된 패킷은 추상적으로 위 그림처럼 볼 수 있습니다. IP 프로토콜만으로는 해결하지 못했던 Port 정보 등이 포함되어있습니다.
(2) TCP 특징
TCP의 특징은 세 가지가 있습니다.
- 연결지향 - TCP 3 way handshake(가상 연결)
- 데이터 전달 보증 : 데이터 전달 중 누락시 확인 가능
- 순서 보장
각 특징들에 대해 살펴보겠습니다.
1. TCP 3 way handshake
TCP는 가상 연결을 설정해 통신을 수행하는데 이를 위해서 TCP 3 way handshake라는 과정을 거칩니다.
TCP 3 way handshake의 과정은 아래와 같습니다.
- 클라이언트가 서버로 SYN(Synchronize) 메시지를 보냅니다.
- 서버는 클라이언트에게 ACK(Acknowledgement)와 SYN을 함께 보냅니다.
이를 통해 서버와 클라이언트 사이의 가상 연결이 설정됩니다. - 클라이언트는 서버에게 ACK를 보내면서 연결 설정이 완료됩니다.
이러한 과정을 통해 논리적인 연결이 설정되며, 데이터 전송이 가능하게 됩니다.
2. 데이터 전달 보증
데이터 전송이 되면 서버에서 클라이언트에게 데이터를 수신했다고 알려주는 것입니다. 이를 통해 TCP는 데이터 전송 중에 오류가 발생한 경우에 이를 확인할 수 있고, 클라이언트도 이를 확인할 수 있습니다.
3. 순서 보장
전송된 데이터의 순서가 유지되도록 보장하는 것입니다. 데이터를 보낸 순서대로 서버에 도착하고, 중간에 순서가 잘못되면 서버가 다시 클라이언트에게 요청합니다.
UDP (User Datagram Protocol)
UDP는 TCP와 달리 연결 지향이 없고, 데이터 전달 보증 및 순서 보장이 이루어지지 않는 프로토콜입니다. 그래서 하얀 도화지에 비유할 수 있습니다. UDP는 기능이 거의 없는 프로토콜로 데이터 전송의 안정성 보다는 단순하고 빠른 통신을 제공하는 프로토콜입니다. 그래서 데이터 전송의 신뢰성 보다는 DNS 서비스나 비디오 스트리밍 등 속도와 효율이 필요한 경우 사용됩니다.
UDP는 IP 프로토콜과 거의 유사하지만, Port와 체크섬 정보를 추가로 포함하고 있는 것 입니다.
PORT
위에서 언급한, 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러 개일때 발생하는 프로그램 구분 문제를 해결하기 위한 것입니다.
포트 번호는 각 애플리케이션이 네트워크 상에서 고유하게 식별되는 번호입니다. 같은 IP 내에서 프로세스를 구분하기 위해 사용됩니다. 이를 통해서 동일한 IP 주소를 사용하는 서버에서도 포트 번호를 통해 여러 애플리케이션을 구분할 수 있습니다.
현실 세계에 비춰서 한 아파트에서 몇 동 몇 호를 구분해주는 것으로 비유해볼 수 있습니다.
포트 번호의 예시입니다. HTTP는 80, HTTPS 는 443 번호를 사용합니다.
DNS
IP는 변경될 수 있습니다. IP 주소가 변경되더라도 사용자들은 계속해서 서비스에 접근할 수 있어야하는데, 이를 위해 DNS(도메인 네임 시스템, Domain Name System)이 사용됩니다.
DNS 서버에 도메인 명으로 IP를 등록해놓으면 도메인으로 IP를 찾을 수 있습니다.
만약 google.com을 알고 IP 주소는 모르더라도 google.com 도메인을 DNS 서버로 요청하면 IP 주소를 응답해주고 그것을 통해 접근할 수 있습니다.
참고자료
[인프런 김영한 - 모든 개발자를 위한 HTTP 웹 기본 지식]
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
'Backend > HTTP' 카테고리의 다른 글
[HTTP] HTTP 상태코드 (모든 개발자를 위한 HTTP 웹 기본 지식 - 섹션 6) (0) | 2023.04.25 |
---|---|
[HTTP] HTTP 메서드 활용 (모든 개발자를 위한 HTTP 웹 기본 지식 - 섹션 5) (0) | 2023.04.25 |
[HTTP] HTTP 메서드 (모든 개발자를 위한 HTTP 웹 기본 지식 - 섹션 4) (0) | 2023.04.21 |
[HTTP] HTTP 기본 (모든 개발자를 위한 HTTP 웹 기본 지식 - 섹션 3) (0) | 2023.04.20 |
[HTTP] URI와 웹 브라우저 요청 흐름 (모든 개발자를 위한 HTTP 웹 기본 지식 - 섹션 2) (0) | 2023.04.18 |