Web/Network

[Web] 프로토콜(Protocol) : HTTP, TCP, UDP, IP + Port(포트번호) 그리고 OSI 7 Layer

생각많은 프로그래머 2024. 2. 10. 00:38
먼저, 프로토콜이란 무엇일까?
 
 
프로토콜이란?
 
클라이언트와 서버가 서로 통신하기 위해서는 통신방법에 대한 약속이 필요한데,
이때 이 약속이 프로토콜이다. "통신규약"이라고 말한다.
 
웹 통신에 주로 쓰이는 IP, TCP, UDP, HTTP 모두 프로토콜에 해당하며
이번에는 위 4가지 프로토콜에 대해 자세히 다루고자 한다.
 
프로토콜은 아래의 OSI 7 Layer에 의해 좀 더 명확히 이해할 수 있다.
 
 
 

OSI 7 Layer(OSI 7계층) ?

 

OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말한다. 

다양한 프로토콜에 대해서 바이블로서 정의하는 역할을 한다.

우리는 OSI 7 Layer(OSI 7계층)를 통해 통신이 일어나는 과정을 단계별로 파악할 수 있다.

 

OSI 7 Layer

각 Level에 대해 좀 더 상세히 알아보자.

 

Level Layer Protocol 특징
7 Application Layer
(응용 계층)
HTTP, DNS, FTP 최종 사용자가 직접 접하는 응용 소프트웨어와 사용자 인터페이스를 제공하는 계층
6 Presentation Layer
(표현 계층)
ASCII, JPEG 데이터의 표현 방식을 정의하고 암호화, 압축 등의 데이터 변환을 수행함. 데이터 형식 변환, 압축, 암호화 등을 다룸
5 Session Layer
(세션 계층)
NetBLOS, TLS 통신 세션을 설정, 유지, 해제하는 역할을 함. 세션 복구, 동기화 등을 다룸
4 Transport Layer
(전송 계층)
TCP, UDP 종단 간 통신을 제어하고 신뢰성 있는 데이터 전송을 담당함. 데이터의 분할 및 재조립, 흐름 제어, 오류 제어 등을 수행함
3 Network Layer
(네트워크 계층)
IP, ICMP, ARP 여러 네트워크를 거치는 경로를 선택하고 데이터를 목적지까지 전달하는 역할을 함. 라우팅, IP 주소 할당 등을 다룸
2 Data Link Layer
(데이터 링크 계층)
Ethernet, PPP 물리적인 링크로 전송된 데이터를 프레임 단위로 관리하고 오류 검출 및 복구를 수행하는 계층. 이더넷, Wi-Fi 등의 MAC 주소를 다룸.
1 Physical Layer
(물리 계층)
RS-232, X.25/X.21 전기적, 물리적인 특성을 이용하여 데이터를 전송하는 계층. 주로 전송 매체, 전송 속도, 전기적 특성 등을 다룸

 

* 아주 간단하게 구분하여 설명하면,
엔지니어는 Level 1~3에서 물리적인 연결 관련된 업무를 주로 담당하고
개발자는 주로 Level 4~7에 해당하는 논리적인 연결과 관련된 업무를 
담당한다고도 말할 수 있다. 물론 언제나 그렇다는 것은 아니다!

 

 

IP 와  Port 번호
 

웹 통신에 대해 이해하려면 먼저 IP주소와 Port번호에 대한 이해가 필요하다.

예를 들어 물건을 보낼 때는 받는 이의 주소(배송지 주소)가 꼭 필요한데,

이를 웹 통신으로 보면 배송지 주소가 IP주소+Port번호 를 의미한다. 

 

IP주소는 클라이언트의 요청을 물리적인 장치인 서버까지는

안내해 줄 수 있지만, 해당 서버 내에서 돌아가고 있는 서버 애플리케이션까지

전달해 주기에는 정보가 부족하다. 

각각의 서버 애플리케이션에 정확하게 요청을 전달하기 위해서는 

Port번호라는 추가 정보가 필요한 것이다.

 

IP와 포트번호는 절대 중복되면 안되는데,

그 이유는 목적지를 찾아가려면​ IP와 포트번호가

정확히 지정되어 있어야 하기 때문이다.

 
IP주소는 크게 4개의 숫자 필드로 구성된다.
여기에 :(콜론)을 붙이고 숫자가 오는데 이 번호를 포트(Port)번호라 한다.
_______ . _______ . ______ . ________  : 0000

 

IP 주소는 일반적으로 IPv4에서 32비트로 표현된다.

각 필드마다 0부터 255까지의 값을 가질 수 있으며,

필드당 8bit(비트)의 메모리가 할당된다.   

총 4개의 필드가 있으므로

IP 주소는 총 32비트의 메모리를 차지한다.

 

보통 '192.168.X.X'인 주소가 자신이 사용하고 있는

네트워크 망의 사설 IP주소에 해당한다.

 

로컬호스트(Localhost)는 자기 자신의 IP주소를 의미하며

범위는IPv4를 기준으로 127.0.01 ~ 127.255.255.254 이다.

일반적으로 로컬호스트의 IP주소로는 127.0.0.1을 사용하고

해당 주소로 접속한다는 것은 곧 자기 자신에게 접속한다는 의미이다.

 

 

포트는 0 ~ 65535번까지의 값을 가질 수 있으며

다음과 같이 세 가지로 나눌 수 있다.

- 0 ~ 1023번 : 잘 알려진 포트(Well Known Port)

- 1024 ~ 49151번 : 등록된 포트(Registered Port)

- 49152 ~ 65535번 : 동적 포트(Dynamic Port)

 

잘 알려진 포트의 예시로는 4가지 정도를 들 수 있다.

 

20 : FTP(데이터 전송을 위해 사용)

21 : FTP(제어를 위해 사용)

80 : HTTP

443 : HTTPS 

 

주의할 점은 80번이 항상 HTTP의 포트번호라고 생각하면 안 된다는 점이다.

위 번호는 기본 포트번호로, 포트번호를 별도로 지정하지 않았을 경우에

프로토콜이 해당 포트번호를 사용한다는 의미이다.

직접 지정하면 다른 포트번호를 쓸 수 있고, 

실제로 충돌을 방지하기 위해 별도로 포트 번호를 지정하여 

사용하는 경우가 자주 발생한다. 

 

 

우리가 구글 홈페이지에 접속할 때는 보통 www.google.com

이라는 주소만 입력하여 접속한다.

포트번호가 없는 경우가 없는데도 접속이 되는 이유는 무엇일까?

 

그 이유는 웹 브라우저는 포트 번호를 명시적으로 적어 주지 않아도

해당 프로토콜의 기본 포트를 요청에 추가해 주기 때문에 그렇다.

우리가 요청을 보내는 프로토콜은 웹에서 요청하는 것이므로 

HTTP를 사용하는데, www.google.com 로 접속할 경우

프로토콜을 추가해 www.google.com:80 이라고 요청을 보내는 것이다.

여기서 80은 HTTP의 기본 포트번호에 해당한다.

 
요약 : 

- IP : 컴퓨터가 통신하기 위한 주소, 목적지 주소

- Port :  프로그램 간 통신번호, 목적지의 상세주소 정도로 이해

예) IP주소 : 포트번호는 다음과 같이 표현된다. (1521은 oracle의 기본 포트번호이다.)
 192.168.0.53 :1521 

 

 
         Client            -            Server 
웹서비스이용자    -    웹서비스 제공/처리
  (웹브라우저)              (아파치, 톰캣)
통신순서 
1. 요청 (c->s)
2. 처리 (s)
3. 응답 (s->c)
웹브라우저 예) 익스플로러, 크롬, five fox, 엣지, 웨일, etc.

 

client와 server는 지리적으로 떨어져있다. (원격 상태)

client가 요청할 때는 해당 IP주소와 포트번호가 있어야
 
알맞게 찾아가서 요청하기 때문에 두 가지가 꼭 필요하다.

 

client가 IP주소와 포트번호를 가지고 server에 요청하며
client는 TCP/IP프로토콜 방식으로 요청하고 
server도 위 방식으로 응답한다.

 

* TCP/IP 프로토콜 : 요청/응답방법은 TCP 로 쓰고 IP+Port번호로 요청/응답한다.

 

 

 

 TCP / UDP : 통신방식 

 

* TCP(Transmission Control Protocol) : 연결지향, 신뢰성 있는 전송
TCP는 UDP와 비교하여 속도 느린 편이고 비교적 작은 용량을 보낼 때 사용한다.
TCP로 통신하면 클라이언트 요청에 대한 서버의 응답이 없으면 클라이언트는 아무것도 하지 못한다.
**** 통신순서 : 연결설정 -> 데이터 전송 -> 연결종료
* UDP(User Datagram Protocol) : 비연결, 일방적인 전송
UDP는 TCP와 비교하여 속도 빠른 편이고, 큰 용량을 보낼 수 있다.
TCP와 달리 통신 시 연결설정단계가 없다.
****통신순서 : 일단 데이터 전송 -> 연결종료  ​

 

​간단히 요약하면,
TCP는 먼저 연결을 설정하고(= 상대편이 받을지 확인하고) ​통신하는 것이고
UDP는 (상대편이 받든 아니든) 무조건 보내는 것이다. 
TCP - 연결지향성, 신뢰성 높음, 트래픽 큼,  
UDP - 비연결성, 신뢰성 낮음, 트래픽 적음, 일방성

 

 

예를 들면, 전화는 TCP방식이라 할 수 있다.

상대편에게 전화를 걸어서 상대편이 받아야만 얘기할 수 있기 때문이다.

반면, 일방적으로 전송하면 되는 문자나 카카오톡 메시지는 UDP에 해당한다.

 

TCP는 시간이 오래 걸리지만 정확하게 보낼 수 있다.

UDP는TCP에 비해 대용량을 보낼 수 있다.

만약 카카오톡을 TCP로 전송한다면상대가 답을 할 때까지

 기다려야 하므로 매우 불편할 것이다..!

 
* 요약 정리 :

TCP는 연결을 지향하는 프로토콜로, 연속성보다 신뢰성 있는 전송이 중요할 때에

사용된다. TCP는 두 주체 간 연결을 수립하는 과정인 '3 WAY-Handshake'가

있어야만 통신이 가능하다. 실제 데이터를 주고받기 위한 준비에 서로 데이터를

주고 받는 시간이 소모된다. 

 

UDP는 TCP보다 단순하며, 빠르고 네트워크 부하가 적다는 장점이 있지만

신뢰성 있는 데이터 전송을 보장하지는 않는다. UDP는 연결을 맺지 않고,

전송 시 손실된 데이터가 있어도 재전송하지 않기 때문이다.

(이것은 네트워크 레이어 차원에서 지원하고 안 하고의 차이일 뿐

필요한 기능은 애플리케이션 레이어에서 구현할 수 있다.)


그렇기 때문에 신뢰성보다는 연속성이 중요한

실시간 스트리밍과 같은 서비스에 자주 사용된다.

이러한 TCP와 UDP의 장단점을 고려하여 적절하게 사용해야 한다.