이 험난한 세상에서어어~

1. 네트워크 본문

이론/http

1. 네트워크

토끼띠NJW 2023. 7. 6. 14:35

들어가기 전에

이 글은 김영한 님의 '모든 개발자를 위한 HTTP 웹 기본 지식'을 기반으로 하고 있습니다.

HTTP 웹 기본 지식을 탄탄하게 하고 싶다면 추천입니다!

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

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

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연소 기술

www.inflearn.com

컴퓨터들은 어떻게 서로 정보를 주고 받는 걸까?

요즘 세상에 컴퓨터 한 번 안 써본 사람들은 없을 것이다. 스마트폰이 널리 보급되고 자유자제로 인터넷에 접속할 수 있는 시대. 그렇다면 우리가 보고 있는 화면 속의 정보는 어떻게 어떤 방식으로 오게 되는 것일까?

 

바로 서버 컴퓨터에서 네트워크를 통해  정보를 가지고 오게 된다.

서버 컴퓨터는 우리가 생각하는 일반적인 컴퓨터와 다르게 엄청 크고 비싸다. 서버실은 열기를 견디기 위해 냉각 장치를 구비하고 있는데, 천장을 높게 만들거나 바다에 집어넣는 것이 이 때문이다.

 

아래는 픽사베이에서 서버 실을 검색해서 찾은 이미지다. 개인적으로 현장실습으로 모 기업의 서버실을 구경 간 경험이 떠오른다.

https://pixabay.com/ko/photos/%EC%84%AC%EA%B8%B0%EB%8A%94-%EC%82%AC%EB%9E%8C-%EC%9A%B0%EC%A3%BC-%EC%84%9C%EB%B2%84%EB%A3%B8-2160321/

 

만일 클라이언트와 서버가 직접적으로 연결이 되어 있다면 큰 문제 없이 정보를 주고 받을 수 있을 것이다. 하지만, 클라이언트와 서버가 너무 멀다면? 너무 멀어서 직접적으로 연결할 수 없다면? 이때 우리가 잘 아는 인터넷이 등장한다.

 

인터넷

간단히 말하자면 IP와 TCP로 제공되는 네트워크라고 할 수 있다. 덕분에 클라이언트와 서버를 여러 노드들로 연결해 굳이 직접적인 연결이 없어도 통신을 가능하게 만들어주는 것이다.

 

이렇게 인터넷을 통해서 통신이 가능하다고 했는데, 어떻게 통신하는지를 조금 더 세부적으로 알아보자.

각 컴퓨터의 주소 IP 주소

IP는 인터넷 프로토콜의 약자로 인터넷 규약이라고 풀어쓸 수 있다. 즉 '규약'이라는 단어에서 볼 수 있듯이 컴퓨터가 서로 통신하기 위해 만들어놓은 약속이라는 의미다. OSI 7계층에 존재하는데 이건 넘어가고 여기서는 IP 주소만을 다룰 것이다.

 

IP 주소란 각 컴퓨터를 구분할 수 있는 텍이라고 보면 쉬울 것이다. 위에서 클라이언트와 서버는 인터넷을 통해 통신한다고 했다. 인터넷에는 정말 셀 수 없을 정도로 많은 컴퓨터들이 서로 연결되어 있기 때문에 내가 정보를 보낼 컴퓨터를 식별할 텍이 필요하다. 이것이 바로 IP 주소이다.

 

IP에는 IPv4가 있고 IPv6이 있는데, IPv4는 할당이 중지되어 IPv6만 사용되고 있다. 

 

두 개의 컴퓨터 A와 B가 있다고 해보자. 컴퓨터 A는 컴퓨터 B에게 어떠한 정보를 보내고 싶다. 다만, 두 컴퓨터는 직접적으로 연결되어 있지 않기 때문에 인터넷을 이용해야 한다. 이때 컴퓨터 A는 자신이 전송할 데이터를 패킷이라는 통신 단위로 감싸고 여기에 자신의 IP 주소와 B의 IP주소를 써 놓는다(실제로는 더 많은 정보가 들어간다). 이렇게 보내면 컴퓨터 A가 보내 패킷은 목적지 IP를 이용해 인터넷을 떠돌다가 컴퓨터 B에게 도착할 수 있는 것이다.

 

하지만 여기서 문제!

먼저 IP 프로토콜은 비연결성이라 상대 컴퓨터가 정보를 받을 상태가 아니라도 정보를 보낸다.

또한 큰 패킷의 경우 나눠서 보낼 때에 중간에 순서가 뒤바뀌거나 혹은 사라질 수 있다.

마지막으로 컴퓨터에서는 하나 이상의 애플리케이션을 실행하는데, 이 애플리케이션들을 구분할 수 있는 방법이 없다.

 

이러한 문제를 해결하기 위해 TCP가 나오게 됐다.

 

TCP

TCP는 Transmitions control protocol로 IP와 다르게 연결을 지향한다. 이 방법을 TCP 3 way handshake라고 한다. Handshake라는 단어에서 보듯이 정보를 보내기 전에 클라이언트와 서버가 서로 연결되어 있는지 확인하는 방법이다. 

 

일단 A가 B에게 SYN 패킷을 보낸다. 그러면 B는 A에게 SYN과 함께 ACK 패킷을 보낸다. 이를 받은 A는 B에게 ACK를 보내면 3 way handshake가 이루어지는 것이다. 여기서 3 way handshcke는 직접적으로 연결되는 게 아닌 개념적으로 연결이 된 것이다.

 

TCP는 또한 데이터 전달을 보증한다. A가 B에게 데이터를 보내면 B는 자신이 데이터를 받았다는 신호를 보낸다. 또한 순서 보장도 하는데, 만일 패킷이 순서대로 도착하지 않았다면 잘못된 부분부터 다시 보내라고 요청을 할 수 있다. 

 

IP와 TCP를 이용해서 통신하는 과정

컴퓨터 A가 컴퓨터 B에게 정보를 보낸다고 가정하자.

 

그러면 컴퓨터 A에 있는 프로그램에서 데이터를 생성할 것이다. 이는 소켓 라이브러리를 통해 전달되어 먼저 TCP 정보를 포함하게 된다. 그리고 IP 정보를 포함한 뒤 MAC 주소 등까지 들어가게 되면 인터넷을 통해 컴퓨터 B에 전달이 된다.

 

 

이렇게 IP와 TCP를 이용하면 정보의 신뢰성을 얻으며 통신할 수 있다. 그러나 신뢰성이 굳이 필요 없는 통신을 하는데, TCP가 필요할까? 예를 들어 스트리밍 서비스 같은 곳에서 말이다.

 

바로 여기서 UDP라는 기술이 나오게 되는 계기가 된다.

UDP

UDP(user datagram protocol)는 TCP가 제공하는 신뢰성을 보장하지 않는다. 당연히 연결 지향 적이지 않고 데이터 전달을 보증하지도 않으며 순서를 보장하지도 않는다. 다만, 단순하고 빠른게 장점이라 굳이 신뢰성이 필요없는 정보를 통신해야 할때 쓰이는 방식이다.

 

PORT

TCP를 이용하면 IP의 문제가 다 해결되었을까? 연결성과 신뢰성은 해결되었을지 몰라도 각 컴퓨터의 애플리케이션을 구분하는 법은 아직 설명하지 않았다.

 

이를 위해서 PORT가 사용이 된다.

만일 컴퓨터 A에서 게임 애플리케이션이 돌아가고 있다고 해보자. 그렇다면 A는 게임 서버에게 정보를 요청하고 게임 서버는 해당 정보를 A에게 줄 것이다. 이때 해당 정보는 A의 어떤 애플리케이션으로 가야 할까. 여기서 PORT가 나온다. 정보의 TCP안에 게임 PROT가 존재해 A에서 여러 애플리케이션이 돌아가고 있더라도 게임 PORT를 이용해 정확한 애플리케이션을 찾는 방식이다.

 

0부터 1023까지는 잘 알려진 포트인데, 대표적인 것을 몇 개 보겠다.

HTTP, 80

HTTPS, 443

SSH, 22

DNS, 53

텔넷, 23

FTP, 20과 21

등등...

DNS

앞서 말했듯이 컴퓨터는 각자 IP 주소를 이용해서 서로를 찾는다. 그러나 IP주소는 복잡해서 기억하기 어렵고 또 변경될 수 있다. 이러한 문제를 해결하기 위해 DNS가 사용된다.

 

간단하게 말하자면 전화번호부라고 생각하면 된다.

 

컴퓨터 A는 컴퓨터 B에게 정보를 보내기 위해 컴퓨터 B의 IP 주소를 가지고 있을 필요가 없다. 그저 컴퓨터 B의 도메인 명을 가지고 DNS서버에서 해당 도메인 명에 맞는 IP 주소를 찾아오면 된다.

'이론 > http' 카테고리의 다른 글

섹션 5, HTTP 상태 코드  (0) 2023.07.19
섹션 4, HTTP 메서드  (0) 2023.07.08
섹션 2, 3  (0) 2023.07.07