기록공간

[HTTP 강의] 1. 인터넷 네트워크 본문

Network/HTTP

[HTTP 강의] 1. 인터넷 네트워크

입코딩 2022. 1. 21. 15:42
반응형

인터넷 통신

HTTP도 결국 인터넷 망을 통해서 동작하기 때문에 인터넷 통신에 대해서 알 필요가 있다.

 

다음과 같이 두 개의 컴퓨터가 있다. 둘은 어떻게 통신을 하게 되는 걸까?

메시지를 주고받고 싶을 경우 선이 연결되어 있다면 단순하게 그냥 통신하면 될 것이다.

 

하지만 이게 인터넷을 통해야 한다면 말이 달라진다. 

 

인터넷 망은 단순히 선 하나를 통해 통신할 수 없다.

인터넷에 연결된 컴퓨터는 수없이 많고, 목적지까지의 거리도 엄청나게 멀 수 있기 때문이다.

 

인터넷 망은 매우 복잡하다. 인터넷 안에 수많은 노드들이 선을 통해 서로 연결되어 있다. 

이 선은 해저를 통하는 광케이블이 될 수도 있고, 심지어는 위성을 통할 수도 있다. 

 

그러면 이렇게 수많은 노드들을 거쳐서 목적지까지 도착하는 험난한 여정(?)을 위해서는 어떻게 해야 될까?

이를 위해서 IP가 탄생하게 되었다.

 

IP(Internet Protocol)

PC끼리 통신을 가능하게 해주는 것은 IP 주소가 있기 때문이다. 

물론 전제 조건이 있는데, 통신을 해야 할 서로의 PC가 모두 IP 주소가 존재해야 한다.

 

기본적으로 IP가 하는 역할은 다음과 같다.

 

  • 지정한 IP주소에 데이터 전달
  • 패킷이라는 통신 단위로 데이터 전달

패킷을 통해 보낸다고 하지만, 패킷은 단순히 전송할 데이터만 담지 않는다.

패킷 내에는 전송 데이터뿐만 아니라 출발지와 목적지 IP 등을 담고 있다.

 

이 정보들을 모두 담으면 클라이언트는 서버에 패킷을 전달하게 된다. 

이 패킷은 목적지 IP를 찾을 때까지 여러 노드들을 거치게 된다.

 

패킷이 서버에 도착하여 클라이언트에게 다시 메시지를 보낸다고 했을 때, 패킷 내용은 도착과 목적지만 반대가 됐을 뿐 거의 비슷하다.

물론 인터넷 망은 복잡하기 때문에 처음 클라이언트에서 보내온 경로와 다른 경로로 전송될 수도 있다.

 

이러한 IP 프로토콜에도 한계가 있는데, 다음과 같다.

 

비연결성

IP 프로토콜은 패킷을 받을 대상이 없거나 대상이 서비스 불능 상태여도 패킷을 전송한다.

클라이언트는 대상 서버가 패킷을 받을 수 있는 상태인지 모른다.

 

 

비신뢰성

패킷을 보낼 때 여러 문제점이 생길 수 있는데, 첫 번째 문제점은 중간에 패킷이 사라지는 패킷 소실이다.

패킷을 전송하는 과정에서 중간 노드가 꺼져있거나, 문제가 생긴다면 패킷이 소실될 수 있다.

 

두 번째 문제점은 패킷이 순서대로 오지 않는 전달 순서 문제이다. 

'Hello, world!'라는 메시지를 보낼 때 'Hello, '와 'world!'로 나누어 패킷을 전송한다고 가정하자.

'world!' 패킷이 더 최적의 경로로 먼저 도착하게 될 수 있는데, 그러면 'worldHello, '라는 메시지로 목적지에 도착하게 된다. 

 

그렇다면 이러한 한계점을 어떻게 극복할 수 있을까?

이러한 한계점을 해결해주는 것이 바로 TCP(UDP) 프로토콜이다.

 

TCP(UDP) 

TCP(UDP)는 인터넷 프로토콜 스택 4 계층에서 전송 계층에 해당한다. 

 

TCP는 IP가 속하는 인터넷 계층의 상위 계층인 전송 계층에 속하여, 네트워크 통신에서 인터넷 계층의 한계점을 보완해준다.

프로토콜 계층에 TCP, IP는 OS에 속하게 되며 전송 과정은 다음과 같다.

 

이더넷 프레임(Ethernet frame) 개념의 경우 네트워크의 최하위 계층을 설명하고 있다.

이는 MAC 주소와 같은 해당 하드웨어를 구분하는 정보이다.

 

앞서 IP가 출발지와 도착지 IP를 설명했다고 한다면, TCP는 여기서 더 나아가 출발지와 목적지 PORT 그리고 전송 제어와 순서 검증 정보 등이 들어오게 된다. 이를 가리켜 TCP 세그먼트(Segment)라고 한다.

 

 

TCP 특징은 다음과 같다.

 

  • 연결 지향 - TCP 3 way handshake
  • 데이터 전송 보증
  • 순서 보장

이처럼 TCP는 대부분 신뢰성에 중점을 둔 프로토콜이다.

현재는 대부분이 TCP 프로토콜을 사용하고 있다.  

 

TCP 3 way handshake

TCP 3 way handshake는 데이터 전송에 앞서서 먼저 연결을 하는 과정이다.

 

1. 데이터 전송 전에 먼저 클라이언트 측에서 'SYN' 메시지를 보낸다. (SYN: 연결해줘)

 

2. 서버가 'SYN'을 받으면 'SYN' + 'ACK' 메시지를 보낸다. (ACK: 왔네. 알겠어. SYN: 나도 연결해줘)

 

3. 클라이언트는 응답을 받으면 'ACK' 메시지를 보낸다. (ACK: 알겠어)

   (요즘은 기술이 발달하여 'ACK'와 함께 데이터도 보낸다.)

 

하지만, 이 과정은 개념적인(논리적인) 연결일 뿐이다. 컴퓨터끼리 서로 연결되었음을 약속하는 것이지 통신 과정에서 거치는 노드들은 연결되었다는 정보를 알지 못한다. 

 

데이터 전달 보증

클라이언트에서 데이터 전송 시 서버는 데이터를 잘 받았다고 알려준다.

 

 

순서 보장

클라이언트에서 패킷을 1, 2, 3 순서로 전송했다고 가정하자.

만약 서버에 패킷이 1, 3, 2 순서로 도착하였다면 서버는 패킷 2부터 다시 보내라고 응답한다.

 

이 모든 기능은 TCP 세그먼트 안에 정보를 가지고 있기 때문에 가능하다는 것을 꼭 상기하자.

 

UDP(User Datagram Protocol)

UDP는 사용자 데이터그램 프로토콜의 약자로 기능이 거의 없는 것이 특징이다.

TCP에서 제공하는 3가지 기능(3way handshake, 데이터 전달 보증, 순서 보장)을 제공하지 않는다.

대신 단순하기 때문에 빠른 것이 특징이다. Port와 체크섬 정도만 추가되고, 나머지는 IP랑 거의 같다.

 

TCP 프로토콜은 최적화를 위해 어떠한 작업을 할 수가 없다. 이미 전 세계에서 쓰고 있는 프로토콜을 어떻게 내 마음대로 바꿀 수 있을까?

그래서 UDP는 TCP보다 빠른 속도를 요구하는 곳에서 필요하다. TCP에서 제공하는 기능을 사용하고 싶은 경우 UDP를 쓰되 애플리케이션 단에서 추가 작업을 하는 방향으로 개발한다.

실시간 인터넷 방송이나 온라인 격투 게임처럼 속도가 중요한 곳에서 많이 쓰이고 있다. 

 

아직까지 TCP 프로토콜이 90%의 점유율을 가지고 있지만, 최근에는 UDP가 각광받고 있다.

그 이유는 HTTP 3 기술에서 UDP 프로토콜을 사용하기 때문이다.

 

Port

Port는 말 그대로 항구라는 뜻이다. 

클라이언트 PC가 인터넷을 통해 게임, 화상통화, 웹 브라우저 요청 등 많은 네트워크 서비스를 사용한다고 가정해보자.

 

이렇게 여러 애플리케이션을 사용하고 있는 경우, 전송하고 전송받을 때 어떤 IP주소로 데이터를 보내야 하고 어떤 애플리케이션으로 데이터를 받아야 하는지 알 수가 없다. 이러한 이유로 Port가 필요한 것이다.

 

TCP 세그먼트에 있는 출발지와 도착지 Port를 이용하여 각 프로세스를 구분하고, 어느 주소로 할지를 구분할 수 있다.

위 그림과 같이, 게임 정보를 게임 서버에 보낸다고 해보자. 게임 서버에도 여러 프로세스가 실행 중일 것이다. IP 주소는 알고 있지만 어느 프로세스로 보낼 것인지 알아야 할 것이다.

이미 클라이언트에서는 도착지 Port(11220)를 알고 있기 때문에 해당 포트로 데이터를 전송할 수 있다.

그러면 서버에서는 요청을 받은 후 출발지 Port(8090)을 알고 있기 때문에 다시 해당 포트로 결과 데이터를 전송할 수 있다.

 

Port라는 항구를 통해서 통신 데이터라는 배를 입항시키고 출항시킬 수 있게 해 준다고 생각하자.

이처럼 Port는 하나의 IP주소를 가지고도 각 프로세스가 알맞은 통신할 수 있게 해 준다.

 

Port는 0 ~ 62235(2byte 범위)까지 할당이 가능하다. 

0 ~ 1023 Port는 잘 알려진 Port로 사용하지 않는 것이 권장된다. 

 

주요 Port 번호를 나열하면 다음과 같다.

 

  • FTP - 20, 21
  • TELNET - 23
  • HTTP - 80
  • HTTPS - 443

 

DNS(Domain Name System)

IP는 최대 12개의 숫자로 구성되어 있기 때문에 정말 기억하기 어렵다. 

또한, IP 주소는 특정 사유로 변경될 수 있다. 해당 서버에 IP 주소를 내가 기억하고 있다 해도, 서버에서 IP 주소를 바꾸면 해당 서버에 더 이상 접속할 수 없게 된다.

이러한 IP의 단점을 극복하기 위해 DNS가 필요하다.

 

DNS는 마치 전화번호부와 같다.

다른 점이 있다면 이름에는 도메인 주소가 오고 전화번호에는 IP 주소가 온다.

이러한 도메인, IP 정보들은 DNS 서버에 등록되고, 클라이언트에서 도메인명을 DNS 서버에 요청하면 해당 IP 주소를 돌려준다. 

 

이렇게 하면 도메인 명이 바뀌지 않는 한, IP 주소가 바뀌어도 아무런 문제가 생기지 않는다.


해당 내용은 "김영한 - 모든 개발자를 위한 HTTP 웹 기본 지식"의 내용을 정리한 것입니다.

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com

 

반응형

'Network > HTTP' 카테고리의 다른 글

HTTPS란 무엇인가?  (0) 2021.09.13
[HTTP 완벽 가이드] HTTP 개관  (0) 2021.04.29
HTTP는 무엇인가?  (0) 2021.02.09
Comments