인터넷 통신에서 클라이언트와 서버는 어떻게 통신할까요?
클라이언트 컴퓨터와 서버 컴퓨터 사이에 인터넷이라는 것이 존재합니다.
이 복잡한 인터넷 망은 수많은 노드들로 구성되어 있습니다.
그래서 이러한 복잡한 망을 처리하기 위해 각각의 컴퓨터에 IP(Internet Protocol) 주소라는 것을 부여했습니다.
IP프로토콜을 통해 다음과 같이, 클라이언트와 서버는 각각의 IP주소를 통해 Packet 단위로 데이터를 전달할 수 있게 됩니다.
IP 패킷은 S.A IP(출발지 IP), D.A IP(목적지 IP), 전송 데이터로 구성되어 있으며, 클라이언트에서 이 패킷을 전송할 때, 수많은 노드들을 거쳐 서버로 전송됩니다. 또한 같은 맥락으로 서버도 잘 받았다는 응답 패킷을 클라이언트로 전송하게 됩니다.
하지만 IP프로토콜 만으로 클라이언트와 서버 간 패킷 교환을 하기에는 한계가 있습니다.
- 비연결성 (패킷을 받을 대상이 없는 경우, 서비스 불능 상태에서도 패킷을 전송)
- 비신뢰성 (중간에 패킷이 사라지는 경우, 전송하는 과정에서 패킷 순서가 뒤죽박죽이어도 이를 고려하지 못함)
- 프로그램 구분(같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상인 경우를 구분하지 못함)
이러한 문제들을 해결하기 위해 생긴 프로토콜이 바로 TCP입니다.
TCP(전송 제어 프로토콜)은 위에 설명드린 IP의 문제점을 모두 해결할 수 있습니다.
TCP의 특징
- 연결지향- TCP 3 way handshake
- 데이터 전달 보증
- 순서 보장
- 신뢰성
이러한 다양한 장점이 있기에, 대부분의 통신에서는 TCP를 사용한다고 합니다.
TCP 3 way handshake
1. Client -> Server(SYN, 접속 요청)
2. Server -> Client(SYN + ACK, 요청 수락과 함께 접속 요청을 보냄)
3. Client -> Server(ACK, 요청 수락)
이 과정을 통해 TCP/IP 환경에서 클라이언트와 서버 간 논리적 연결이 가능해집니다.
UDP(사용자 데이터그램 프로토콜)는 TCP에 반해, 연결지향적이지 않고, 데이터 전달, 순서를 보장해주지 않습니다. 하지만 단순하고 빠르며 IP기능에 PORT기능과 체크썸정도 추가된 경우입니다. 그래서 비디오 재생이나 DNS조회에서 사용됩니다.
PORT
한 IP 내에서 여러 서버를 연결해야 하는 경우가 필요합니다. 이를 도와주는 역할이 PORT입니다.
포트는 같은 IP 내에서 프로세스(통신할 애플리케이션)를 구분해 줍니다. 그래서 포트의 존재로 인해, 한 서버에서 다른 애플리케이션을 실행할 수 있게 됩니다.
DNS(Domain Name System)
IP는 기억하기 어렵고, 변경될 수 있습니다. 이러한 문제점을 해결하기 위해 DNS가 생겨났습니다.
DNS는 흔히 전화번호부에 비유됩니다. 우선 DNS서버에서 도메인을 구매하고 IP주소를 등록해야 합니다. 그러면 클라이언트가 DNS서버에 접속하려는 도메인을 요청 보내면 DNS 서버에서는 해당 도메인의 IP주소로 변환되어 응답합니다. 이러한 과정이 있기에 IP정보가 변하더라도 DNS서버에 도메인명으로 요청을 보내 올바른 IP주소를 추적할 수 있게 됩니다.
<참고 자료>
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
'CS' 카테고리의 다른 글
[컴퓨터 구조] chpater1 정리(컴퓨터 구조 및 설계) (0) | 2023.04.07 |
---|---|
[컴퓨터 구조] 컴퓨터 시스템의 구성 (0) | 2023.04.07 |
[컴퓨터 구조] 컴퓨터의 혁명과 컴퓨터 종류 (0) | 2023.03.27 |
[컴퓨터 구조] 컴퓨터 구조를 알아야 하는 이유 (1) | 2023.03.27 |
Blocking & Non-Blocking, Synchronous & Asynchronous (0) | 2022.11.28 |