[HTTP] 인터넷 네트워크

지수·2023년 4월 2일
0
post-thumbnail

해당 포스트는 인프런 김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 기반으로 작성되었습니다. 👍

인터넷 상에서 컴퓨터 둘은 어떻게 통신할까?

요청을 보내는 쪽인 클라이언트, 요청에 응답하는 쪽인 서버
이 둘은 인터넷을 사이에 두고 어떻게 통신할까?

어느 날 당신은 어머니로부터 심부름 미션을 받게됩니다..!

철수야 옆 동네 미영 아주머니 집에 이거 주고 와-!
당신이 미영 아주머니가 누군지도, 미영 아주머니 집이 어디인지도 모른다면, 심부름을 다녀올 수 있을까요? 🙄
당연히 갈 수 없습니다. 어딘지도 모르는걸요!

그럼 당신은 아마 되물을 것입니다. 거기 주소가 어떻게 되는데요???

특정 위치에서 다른 위치로 무언가를 보낼 때 우리는 주소가 필수적으로 필요합니다.
때문에 컴퓨터 간 통신에도 주소가 필요합니다.




1. IP(Internet Protocol)

IP 주소

모든 컴퓨터는 각각 고유한 IP 주소를 갖습니다.
이 IP 주소로 서로 데이터를 주고 받는 것 입니다.

IP 패킷

한 컴퓨터에서 다른 컴퓨터로 데이터를 보낼 때,
컴퓨터는 보낼 데이터를 IP 패킷(Packet)이라는 상자에 넣어 보냅니다.

마치 택배 상자에 보내는 이 주소와 받는 이 주소를 작성하는 것처럼,
IP 패킷에는 출발지 IP, 목적지 IP 등의 정보가 포함되어 있습니다.

클라이언트가 서버에 보내는 패킷은 클라이언트 패킷, 서버가 클라이언트에게 보내느 패킷은 서버 패킷이라고 합니다.

IP 프로토콜의 한계

하지만, 복잡한 인터넷을 거쳐 통신하는데 IP 프로토콜만으로는 한계가 있습니다.
IP 프로토콜은 다음 3가지 한계를 가지고 있습니다.

1) 비연결성

: IP 프로토콜은 패킷을 받을 대상이 없거나, 서비스 불능 상태에서도 이를 확인하지 못하고 패킷을 전송합니다.
그리고 그 패킷이 도착했는지, 도착하지 못했는지도 알 수 없습니다.

친구가 이사를 갔거나, 집을 비웠는데도 이를 알지 못하고 택배를 보내는 것과 유사합니다.

2) 비신뢰성

: 복잡한 인터넷을 거치다보면 패킷이 중간에 사라질수도, 순차적으로 보낸 패킷이 어그러진 순서로 도착할 수도 있습니다.
이는 패킷이 전송될 때 인터넷의 여러 노드를 거치게 되는 과정에서 발생합니다.

그런데 IP 프로토콜만으로는 이 문제를 해결할 수 없습니다.

3) 어플리케이션별 패킷 구분 불가

: 하나의 컴퓨터로 여러 개의 어플리케이션을 구동하면,
동일한 IP로 여러 서버와 통신해야하는 상황이 발생합니다.

이 경우 IP 프로토콜은 어떤 패킷이 어떤 어플리케이션을 위한 패킷인지 구분하지 못합니다.




2. TCP와 UDP

TCP(Transmission Control Protocol)

UDP(User Datagram Protocol)

TCP와 UDP는 IP 프로토콜을 한 꺼풀 감싸, IP 프로토콜의 한계를 해결합니다.

아래는 인터넷 프로토콜 스택의 4계층과,
인터넷을 통해 서버로 데이터를 전송시 캡슐화된 패킷 형태를 나타낸 이미지입니다.

애플리케이션 단에서 생성된 데이터
SOCKET 라이브러리를 통해 운영체제 단으로 전달되고,
운영체제 단에서 TCP 정보가 생성되어 데이터를 감싸고,
IP 패킷을 생성하여 IP 정보와 함께 TCP 데이터를 감쌉니다.
마지막으로 네트워크 인터페이스 단에 도달하면 LAN 설정으로 마지막 겹을 감싼 뒤,
인터넷을 통해 서버에 전달됩니다.

이 과정에서 TCP는 IP의 한계를 해결합니다.

TCP/IP 패킷 정보

기존 IP 패킷에는 출발지 IP, 목적지 IP, 전송 데이터가 포함되어있었습니다.
그런데 내부에 전송 정보를 가진 TCP 정보를 포함하면 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보등이 추가적으로 포함됩니다.

[출발지 IP, 목적지 IP, 전송 데이터, ... [출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보, ...]]

TCP 특징

1) 연결지향

: TCP는 데이터를 전송해야할 대상과 연결이 되어있는지 우선 확인하고,
연결이 되어있을 경우에만 데이터를 전송합니다.

이를 통해 IP 프로토콜의 한계 중 비연결성을 해결할 수 있습니다.

TCP는 TCP 3 way handshake를 통해 연결 여부를 확인합니다.

TCP 3 way handshake의 과정은 다음과 같습니다.

  • 먼저, 클라이언트가 접속 요청을 의미하는 SYN을 서버로 전송합니다.
  • 서버가 클라이언트와 연결 가능한 상태라면, 클라이언트에게 요청 수락을 의미하는 ACK와 함께 접속 요청을 의미하는 SYN을 보냅니다.
  • 서버로부터 응답을 받은 클라이언트는 연결이 가능함을 확인하고, 서버 쪽에서 요청을 수락한다는 의미의 SYN을 보냅니다.

2) 데이터 전달 보증

: TCP를 포함하여 데이터를 전달하면
클라이언트가 전달한 데이터가 서버에게 잘 도착했을 시, 서버가 데이터를 잘 받았다는 내용을 클라이언트에게 다시 보냅니다.
때문에 데이터가 전송 중 누락/손실 되었을 경우, 이를 파악할 수 있습니다.

이를 통해 IP 프로토콜의 한계 중 비신뢰성을 해결할 수 있습니다.

3) 순서 보장

: TCP는 전송 정보에 순서를 포함하기 때문에, 설령 인터넷을 통해 전송한 데이터가 순서에 맞지 않게 서버에 도착하더라도
서버가 이를 파악하고, 순서가 어그러진 부분부터 데이터를 재발송할 것을 요청할 수 있습니다.

이를 통해 데이터 전송 순서가 보장되어,
IP 프로토콜의 한계 중 비신뢰성을 해결할 수 있습니다.

4) PORT를 통한 패킷 구분

: 이에 대해서는 아래 3. PORT에서 자세히 다루겠습니다.

ㄴ 신뢰할 수 있는 프로토콜 ⇒ 대부분 TCP 사용

UDP 특징

UDP는 TCP에 비해 기능이 적습니다.
하얀 도화지에 비유하기도 할 만큼, 기능이 거의없어 IP 프로토콜과 크게 다르지 않습니다.

UDP는 IP 프로토콜에 PORT와 체크섬 정도만 추가된 상태의 프로토콜입니다.

기능이 적은 만큼 단순하고 빠른 전송이 가능하기 때문에,
필요한 기능은 어플리케이션 단에서 추가 구현, 최적화하여 사용할 때 UDP를 사용합니다.



3. PORT

위의 TCP와 UDP는 모두 PORT 정보를 포함하고 있습니다.
IP 프로토콜에서는 없던 PORT를 통해 어플리케이션별 패킷 구분 불가라는 IP 프로토콜 한계를 극복할 수 있습니다.

하나의 IP로 한번에 두 개 이상 연결을 해야한다면?

지금까지 우리는
IP 프로토콜에 담긴 IP 주소를 통한 통신만을 생각했습니다.

그런데 하나의 IP를 가진 한 대의 컴퓨터로
음악 감상 어플리케이션, 게임 어플리케이션, 메신저 어플리케이션을 동시 실행한다면...
하나의 IP로 여러 개의 패킷이 전송되어 오게 됩니다.

이 경우 IP 프로토콜만으로는
어떤 패킷이 어떤 어플리케이션을 위한 것인지 구분할 수 없습니다.

이 때, PORT 정보가 있으면 같은 IP 내에서 프로세스를 구분할 수 있습니다.

김영한 님께서 수업 중에 IP와 PORT를 들어,
IP가 아파트라면, PORT는 몇 호인지를 말한다. 라는 비유를 말씀해주셨습니다.




4. DNS(Domain Name System)

IP 주소는

  • 기억하기 어렵고,
  • 변경될 수 있기 때문에

우리는 특정 IP에 접근할 때,
IP 주소 대신 도메인명을 사용하기도 합니다.

DNS은 일종의 전화번호부처럼 도메인명을 IP 주소로 바꾸어 주는 시스템입니다.

도메인 명을 사서 등록을 하고나면
길고 복잡한 IP 주소대신 해당 도메인명으로 IP에 접근할 수 있습니다.

네이버, 구글이 IP 주소대신 naver.com, google.com을 사용하는 것이 그 예입니다.




그럼 오늘의 TIL 끄읏-
다음 내용은 다음 포스팅에서!

profile
사부작 사부작

0개의 댓글