각 프로토콜에 대한 설명 전에 OSI 7계층에 대해 알아보자.
OSI 7계층은 국제표준화기구에서 개발한 모델로
네트워크 프로토콜 디자인과 통신을 계층으로 나눠 설명한 것이다.
각 단계를 7계층으로 나눔으로써 통신 과정 중에 특정한 곳에 이상이 생길 경우
다른 단계의 장비 및 소프트웨어를 건드리지 않고 장애를 일으킨 단계에서 해결할 수 있다.
그 중에서도 전송(Transport) 계층은 송신자와 수신자를 연결하는
통신 서비스를 제공하는 계층으로, 데이터의 전달을 담당한다.
이 때 데이터를 전송하기 위해 사용하는 프로토콜이 있다.
바로 이에 해당하는 프로토콜이 TCP, UDP 프로토콜이다.
TCP(Transmission Control Protocol)
전송을 제어하는 프로토콜(규약)
TCP 프로토콜은 인터넷 상에 데이터를
메시지 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
일반적으로 TCP와 IP를 함께 사용하는데
IP가 데이터의 배달을 처리한다면, TCP는 패킷을 추적하고 관리하게 된다.
TCP는 연결형 서비스를 지원하는 프로토콜로 기본적으로 인터넷 환경을 기본으로 사용한다.
TCP 프로토콜의 기본적인 특징은 다음과 같다.
● TCP 특징
- 연결형 서비스로 가상 회선 방식을 제공
- 3-way handshaking 과정을 통해 연결을 설정
- 4-way handshaking 과정을 통해 연결을 해제
- 흐름제어 및 혼잡제어
- 높은 신뢰성을 보장
- UDP보다 속도가 느림
- 전이중(Full-Duplex), 점대점(Point to Point) 방식
TCP는 발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다.
이는 가상회선방식을 제공한다는 말과 동일하다.
3-way handshaking 과정을 통해 목적지와 수신지를 명확히 하여 전송을 보장하고, 연결을 설정한다.
TCP가 이러한 특징을 갖는 이유는 바로 연결형 서비스로 신뢰를 보장하기 때문이다.
이러한 이유 때문에 3-way handshaking 과정을 사용하고,
데이터의 흐름제어나 혼잡제어와 같은 기능을 수행하는 것이다.
이러한 기능은 CPU를 사용하기 때문에 속도에 영향을 미쳐 UDP보다 속도가 느리다는 단점이 있다.
그렇기 때문에 TCP 프로토콜은 연속성을 따지기 보다는 신뢰성 있는 전송이 필요할 때 주로 사용된다. ex) 파일 전송
● TCP 서버 특징
- 서버 소켓은 연결만을 담당
- 연결 과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용됨
- 가상회선 패킷 교환 방식을 사용
- 스트림 전송으로 전송 데이터의 크기가 무제한
- 패킷에 대한 응답을 해야 하기 때문에 성능이 낮음 (시간 지연, CPU 소모 ...)
- 스트리밍 서비스에 불리 (손실된 경우 재전송 요청을 하기 때문)
● TCP 서버 - 클라이언트의 핵심 동작
UDP(User Diagram Protocol)
사용자 데이터그램 프로토콜 (규약)
UDP 프로토콜은 데이터를 데이터그램 단위로 처리하는 프로토콜이다.
여기에서의 데이터그램이란 독립적 관계를 지니는 패킷이라는 뜻이다.
즉 UDP는 TCP와 달리 비연결형 프로토콜이라는 말이 된다.
UDP는 연결을 위해 할당되는 논리적인 경로가 없기 때문에
각각의 패킷은 독립적인 관계를 갖고 서로 다른 경로로 전송된다.
UDP 프로토콜의 기본적인 특징은 다음과 같다.
● UDP 특징
- 비연결형 서비스로 데이터그램 방식을 제공
- 정보를 주고 받을 때, 별 다른 신호 절차를 거치지 않음
- UDP 헤더의 ChekSum 필드를 통해 최소한의 오류만 검출
- 신뢰성이 낮음
- TCP 보다 속도가 빠름
UDP는 비연결형 서비스이므로 연결을 설정하고 해제하는 과정이 존재하지 않는다.
서로 다른 경로를 독립적으로 처리하지만 패킷에 순서를 부여하여 재조립을 하거나
혼잡제어, 흐름제어와 같은 기능 또한 처리하지 않기 때문에
TCP보다 속도가 빠를 뿐만 아니라 네트워크 부하가 적다는 장점이 있지만
데이터 전송의 신뢰성을 보장하지는 못한다는 단점이 있다.
● UDP 서버 특징
- UDP는 연결 설정 과정이 없기 때문에, 서버와 클라이언트 소켓의 구분이 없음
- 소켓 대신 IP 기반으로 데이터를 전송
- 서버/클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있음
- 데이터그램(메시지) 단위로 전송됨
- 흐름제어가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없음
- 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용됨
● UDP 서버 - 클라이언트의 핵심 동작
HTTP (Hypertext Transfer Protocol)
인터넷 상에서 데이터를 주고받기 위한 서버/클라이언트 모델을 다루는 프로토콜(규약)
먼저 위에서 참조한 TCP/IP 4계층에 대해 다시 상기시켜보자.
TCP/IP 4계층에서
HTTP는 응용 계층 프로토콜, TCP는 전송 계층 프로토콜이다.
HTTP 프로토콜은 요청이 들어왔을 때 반드시 응답이 돌아오는 비연결지향적인 단방향 통신이다.
이는 어떤 종류의 데이터든지 전송할 수 있도록 설계되어 있다.
HTTP로 보낼 수 있는 데이터는 HTML문서, 이미지, 동영상, 오딩, 텍스트 문서 등 여러 종류가 있다.
● HTTP 특징
- Connectionless & Stateless 방식으로 작동
서버에 접속 => 클라이언트 => 요청 => 서버 => 응답을 받음 => 클라이언트 => 연결 해제
기본적으로는 자원 하나에 대해 하나의 연결을 만든다.
이러한 작동 방식은 각각 아래의 장단점을 가진다.
장점:
- 불특정 다수를 대상으로 하는 서비스에 적합한 방식임
- 수십만명이 웹서비스를 이용할 시에도 최소한의 접속 유지가 가능 => 더 많은 유저의 요청 처리 간으
단점:
- 응답을 받은 즉시 연결을 해제하기 때문에, 클라이언트의 이전 상태를 알 수가 없음 (Stateless)
- 클라이언트의 이전 상태 정보를 알 수 없을 시, 웹 서비스에 문제가 생길 수 있음
● HTTP 서버-클라이언트 동작
1. 사용자가 웹 브라우저에 URL 주소를 입력
2. DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경을 요청함
3. 웹 서버와 TCP 연결을 시도
ㅤㅤ⦁ 3-way handshaking
4. 클라이언트가 서버에게 요청함
5. 서버가 클라이언트에게 데이터를 응답함
6. 서버-클라이언트 간 연결 종료
ㅤㅤ⦁ 4-way handshaking
7. 웹 브라우저가 웹 문서 출력
'Study' 카테고리의 다른 글
[디자인 패턴] MVC, MVP, MVVM (0) | 2022.07.26 |
---|---|
[STUDY] JAVA 웹 개발 코스 - 개발 언어 (0) | 2022.06.30 |
[JAVA] 동기, 비동기와 멀티스레딩 (0) | 2022.06.17 |
[JAVA] Process(프로세스)와 Thread(스레드) (0) | 2022.06.01 |
[JAVA] JVM의 Garbage Collector (0) | 2022.05.17 |