[Network] 인터넷 네트워크

공부하는 감자·2024년 1월 12일
0

Network

목록 보기
1/12

인터넷 네트워크

인터넷이란?

위키백과에 따르면 다음과 같다.

컴퓨터로 연결하여 TCP/IP 통신 프로토콜을 이용해 정보를 주고 받는 컴퓨터 네트워크이자, 네트워크와 장치 사이의 통신을 목적으로 상호 연결된 ‘글로벌 컴퓨터 네트워크 시스템’이다.

간단하게 말하면 여러 컴퓨터들이 서로 연결되어 있는 컴퓨터 네트워크 통신망을 말한다.

인터넷 통신

인터넷에서 컴퓨터 둘이 통신한다고 하자.

  • 요청을 하는 쪽은 클라이언트
  • 요청을 받는 쪽은 서버

케이블로 연결된 컴퓨터 간 통신

케이블로 연결된 컴퓨터 두 대가 있다. 그렇다면 클라이언트가 요청을 하면 서버에서 바로 해당 요청을 받고 응답을 해주면 된다.

다른 공간의 컴퓨터 간 통신

그런데, 다른 공간에 컴퓨터 두 개가 있다고 하자. 그렇다면 클라이언트가 요청을 하려면 인터넷 망을 통해야 한다.

이 인터넷은 중간에 어떤 과정을 거칠 지 모른다. 이 복잡한 과정을 어떻게 헤쳐 나가는지 이해하려면 인터넷 프로토콜이라고 하는 것을 알아야 한다.

IP (Internet Protocol)

복잡한 인터넷망에서 메시지를 컴퓨터 A에서 컴퓨터 B로 보내려면 최소한의 규칙이 있어야 한다.

인터넷에 연결된 컴퓨터(Host)에 IP 주소라는 식별자를 부여함으로써 이 통신을 가능하게 해준다.

인터넷 프로토콜의 역할

클라이언트와 서버에 각각 IP 주소를 부여 한다. 그러면 이 주소에 메시지를 전달할 수 있도록 정해놓은 규칙을 인터넷 프로토콜이라고 한다.

메시지는 IP 패킷이라는 규칙을 정해 보낸다.

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

IP 패킷 정보

데이터에 출발지 IP, 목적지 IP를 추가하여(감싸서) 보낸다.

패킷 전달

인터넷 망에는 노드라고 불리는 것들이 있고, 이 노드들을 통해 IP 패킷이 전달된다. 노드들끼리 목적지 IP까지 쭉 던진다.

그러면 목적지 IP에서 데이터를 받은 후, 다시 출발지 IP와 목적지 IP를 넣고 메시지를 돌려준다(응답).

IP 프로토콜의 한계

그런데, 이 방식에는 다음과 같은 한계가 있다.

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
    • 클라이언트는 받은 대상이 없거나 서비스 불능 상태인 것을 모른다.
  • 비신뢰성
    • 중간에 노드(서버)들을 거치다가 문제가 생겨서 패킷이 소실될 수 있다.
    • 대용량의 데이터를 나눠서 보낸다고 했을 때, 보내는 패킷들이 모두 같은 경로로 보내지는 것이 아니기 때문에 순서가 보장되지 않는다.
  • 프로그램 구분
    • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우, 구분하는 것에 한계가 있다.

TCP와 UTP

IP 프로토콜에서 발생했던 문제들을 TCP 프로토콜이 해결해준다.

OSI 7 계층과 인터넷 프로토콜 스택의 4계층

그림은 ‘널널한 개발자’ 분의 유튜브 강의에서 따와서 그렸다.

OSI 7 계층

이 계층에 대해서는 여기에서 자세히 다루지 않고, 뒤에 가서 다룰 예정이다. 실제로 OSI 7 계층이라는 건 ‘개념’에 속한다.

이론을 먼저 다루는 것보다는, 이 ‘개념’을 구체화한 HTTP와 TCP/IP 등을 우선 공부하고 정리한다.

DoD model: TCP/IP Protocal Stack

TCP/IP 4 계층이라고 부르는 그 모델이다.

  • Application Layer
    • 네트워크와 관련된, kernel의 구성 요소를 User Mode Application으로 추상화한 파일은 Socket이라고 부른다.
  • Transport Layer
    • TCP와 UDP가 속해있다.
    • 개발자의 관점에서, 프로세스의 식별자인 Port 번호가 있다.
  • Internet Layer
    • IP가 속해있다.
    • 호스트(인터넷에 연결된 컴퓨터)의 식별자인 IP 주소가 있다.
  • Network Access Layer
    • Network Interface Layer라고도 부른다.
    • NIC(Network Interface Card),네트워크 랜 드라이버 등을 포함한다.
    • NIC에 대한 식별자는 MAC 주소가 있다.

프로토콜 계층

클라이언트에서 서버로 메시지를 전송할 때 보통 소켓 라이브러리를 사용한다.

  1. 소켓 라이브러리를 통해 OS 계층에 메시지를 전달한다.
  2. OS 계층에서 TCP가 정보를 생성해서, 메시지 위에 씌우고, 한 계층 내린다.
  3. OS 계층에서 IP가 정보를 생성해서 메시지 위에 씌운다. 이것을 IP 패킷이라고 한다.
  4. IP 계층에서 한 계층 내려와서, 네트워크 인터페이스를 통해 나갈 때 이더넷 프레임이라는 것이 포함되어서 나간다.
    • 이더넷 프레임은 랜카드에 등록된 MAC 주소같은 물리적인 정보들이 포함되어 있다.

패킷 정보

IP 패킷은 다음과 같이 구성되어 있다.

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

  • IP 패킷 안에는 TCP와 관련된 정보가 들어간다.
    • 출발지 PORT, 목적지 PORT
    • IP의 문제들을 해결하기 위해 전송 제어, 순서, 검증 정보 등이 들어가 있다.
  • TCP 정보 안에 실제 전송할 데이터가 있다.

TCP 특징

전송 제어 프로토콜(Transmission Control Protocol)의 약어로, 현재 대부분의 애플리케이션에서는 TCP를 사용한다.

TCP는 전송 제어, 순서, 검증 정보 등을 추가함으로써 신뢰할 수 있는 프로토콜이라고 이야기 한다.

다음 3가지 특징이 있다.

  • 연결지향
  • 데이터 전달 보증
  • 순서 보장

연결지향

클라이언트와 서버가 연결이 된 것인지 확인 후 메시지를 보낸다. 이렇게 확인하는 과정을 TCP 3 way handshake (가상 연결)이라고 한다.

  • 접속 요청: SYN
  • 요청 수락: ACK
  1. 클라이언트에서 서버에게 SYN 이라는 메시지를 보낸다.
    • 접속 요청
  2. 서버에서 메시지를 받으면, 클라이언트에게 SYN + ACK 라는 메시지를 보낸다.
    • 요청 수락 및 접속 요청
  3. 클라이언트는 다시 ACK 를 보낸다.
    • 요청 수락

이렇게 총 3번을 주고 받은 후에 연결이 된 것이고, 이 다음 데이터를 전송한다. 요즘에는 최적화가 되어서 마지막(3번) 단계에서 ACK 와 함께 데이터를 전송한다.

💡 여기서 말하는 연결은 ‘개념적 연결’이다. 클라이언트와 서버 사이에는 수많은 서버(노드)가 있어서 해당 노드들을 거치게 된다.

이 중간에 있는 노드들을 생각하지 않고, 단순히 응답을 주고 받을 수 있으니 논리적으로 연결이 되었구나 하고 생각하는 것이다.

데이터 전달 보증

데이터를 전달한 것을 보증해준다. 만약 중간에 패킷이 누락되었다면, 클라이언트가 그 사실을 알 수 있다.

  1. 클라이언트가 데이터를 전송한다.
  2. 서버가 데이터를 받은 후, 잘 받았다는 응답을 보낸다.
    • 만약 서버에게서 답이 없다면, 클라이언트는 데이터 전달에 문제가 있다는 것을 인지할 수 있다.

순서 보장

대용량 패킷을 3개로 나누어서 전달한다고 하자.

  1. 서버에게 1번 → 2번 → 3번 순으로 보낸다.
  2. 서버는 1번 → 3번 → 2번 순서대로 받았다.
  3. 순서가 잘못 왔으므로 받은 패킷을 버리고, 2번부터 다시 보내라고 요청한다.
    • 내부적으로 최적화하는 로직에 따라 다를 수 있다.
  4. 클라이언트는 2번부터 다시 보낸다.

따라서, 순서를 보장할 수 있다.

UDP 특징

사용자 데이터그램 프로토콜(User Datagram Protocol)의 약어로, IP와 거의 같으며 PORT와 전송된 데이터의 오류 체크를 하기 위한 Checksum정도만 추가되었다.

즉, 연결을 확인하지도 않고 데이터의 전달을 보증하지도 않고 순서를 보장하지도 않는다.

하지만 서로 연결을 요청하고 확인하는 단계를 거치는 TCP보다 단순하고 빠르다.

인터넷은 이미 TCP 기반으로 쓰고 있기 때문에, TCP에는 손을 댈 수가 없다. 그런데 UDP는 아무것도 안되어 있기 때문에 애플리케이션 레벨에서 추가 작업을 할 수 있다.

TCP와 UDP의 사용

옛날에는 신뢰할 수 있는 정보들을 TCP로 보내고, 영상같은 깨져도 되는 것들은 UDP로 보내라고 배웠다.

그리고 시간이 흐르면서 영상같은 것에도 TCP 프로토콜을 사용하는 등, 90% 이상을 TCP가 점유했다.

그런데 최근에는 HTTP 3에서 3 way handshake 하는 시간을 줄여보고자 최적화를 하면서 UDP 프로토콜을 사용했다.

따라서 지금은 UDP 프로토콜이 뜨고 있다고 한다.

PORT

한 컴퓨터에 IP 주소가 하나 할당되어 있다.

이때, 컴퓨터에 SNS 사이트와 웹 브라우저, 음악 프로그램 등을 실행시킨 상태이다.

이 컴퓨터(클라이언트)가 웹에서 키워드를 입력한 후 엔터를 눌러 서버에게 검색을 요청했다.

이때, 서버에게서 받은 결과가 웹 브라우저의 응답 결과로 오는 것인지, 음악 프로그램에게 오는 것인지 알아야 한다.

이렇듯 웹 브라우저와 SNS 사이트를 구분하여 응답 결과를 웹 브라우저에게로 전달해주기 위해 쓰이는 것이 바로 포트이다.

즉, 같은 IP 내에 있는 프로세스의 식별자라고 생각하면 된다.

IP와 Port의 차이

  • IP는 목적지 서버를 찾는다.
  • PORT는 목적지 서버 안에서 돌아가는 애플리케이션들을 구분한다.
    • 서버에게 패킷을 보낼 때 IP와 포트가 포함되어 있으므로, 서버가 목적지 서버의 IP와 포트를 알 수 있다.

PORT의 특징

  • 포트 번호는 16비트이다. 즉, 0~65535까지 할당이 가능하다.
    • 0과 65535는 사용하지 않는다. (사용하면 안 된다)
  • 0~1023: 잘 알려진 포트로, 사용하지 않는 것이 좋다.

대표적인 포트 번호

  • FTP: 20번, 21번
  • TELNET: 23번
  • HTTP: 80번 (8080번도 자주 쓰인다)
  • HTTPS: 443번

DNS (Domain Name System)

컴퓨터 간에 통신할 때 IP 주소를 이용하는데, 이렇게 숫자로 구성된 IP 주소는 기억하기가 어렵다. 만약 IP 주소가 변경되면 다시 외워야 한다.

그래서 나온 것이 Domain Name System, 줄여서 DNS이다.

DNS는 인간이 기억하기 쉬운 도메인 명을 등록하면 IP 주소를 매핑하여, 도메인 명으로 IP 주소를 찾을 수 있게 해준다.

웹의 동작

  1. 웹에서 www.google.com라는 도메인 명을 입력한다.
  2. DNS 서버에 www.google.com이라는 도메인 명에 매핑된 IP 주소를 요청한다.
  3. DNS 서버가 IP 주소를 응답해준다.
  4. 이렇게 찾은 IP 주소로 접속한다.

IP가 변경될 경우

DNS에서 도메인 명에 매핑된 IP 주소를 바꾸면 되므로, 변경하여도 사용자는 도메인 명만 알고 있으면 된다.

Reference

인프런 강의

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

유튜브 강의

네트워크를 배우려는 사람들을 위해

참고 사이트

네트워크와 인터넷의 차이는? 초보자가 헷갈려할 수 있는 단어!

profile
책을 읽거나 강의를 들으며 공부한 내용을 정리합니다. 가끔 개발하는데 있었던 이슈도 올립니다.

0개의 댓글