본문 바로가기

Network

인터넷 네트워크

728x90
목차
- 인터넷 통신
- IP (Internet Protocol)
- TCP, UDP
- PORT
- DNS

 

인터넷 통신 

인터넷을 통한 통신을 말한다. 

 

클라이언트가 요청을 보내서 서버가 응답을 보내는 상황이라고 할 때

클라이언트 -> 서버로 바로 보낼 수 있는 것이 아니라, 클라이언트 --- 인터넷 ---> 서버로 데이터가 이동한다.

 

복잡한 인터넷 망

이 때, 인터넷은 복잡한 망(복잡한 노드들의 구조)으로 되어 있기 때문에 IP가 필요하다.

 


IP (인터넷 프로토콜)

복잡한 인터넷 망에서 한국에 있는 소깡이가 미국에 있는 히루에게 "똥방구"라는 메시지를 보내기 위해서는 최소한의 규칙이 필요하다.

-> 이것이 IP를 통해서 가능해진다. 

 

IP 주소 부여

위의 그림과 같이 서버에 클라이언트와 서버의 IP 주소가 있어야 한다.

 

IP(인터넷 프로토콜)의 역할

- 지정한 IP 주소(IP Address)에 데이터 전달

- 패킷(Packet)이라는 통신 단위로 데이터 전달 

 

IP 패킷 정보 

이 때 메시지를 그냥 보내는 것이 아니라 IP Packet이라는 규칙이 있다.

 

IP Packet에 포함된 데이터는 아래와 같다.

  • 출발지 IP
  • 목적지 IP
  • 데이터
  • 기타 ..

 

클라이언트 패킷 전달 

클라이언트에서 시작해서 서버로 이동하기까지 인터넷 망은 노드로 연결되어 있다.

그리고 각 노드들은 모두 IP(인터넷 프로토콜)을 따르고 있어서 위의 IP Packet 정보를 읽을 수 있다. 그러므로 각 노드들은 패킷의 정보를 읽어서 해당 데이터가 목적지(200.200.200.2)까지 도착할 수 있도록 패킷을 던진다. 

 

서버 패킷 전달

같은 방식으로 서버의 응답도 클라이언트에게 전달된다. 

 

IP 프로토콜의 한계

그러나, 위와 같은 방법 (IP 주소를 부여해서, 찾아가는 방식)은 한계가 있다.

  • 비연결성 
    패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
    (ex, 히루가 미국에 없는데 일단 보내는 것 -> 받을 사람이 없음)

 

  • 비신뢰성
    • 중간에 패킷이 사라진다면?
    • 패킷이 순서대로 오지 않는다면? 

 

  • 프로그램 구분 
    • 같은 IP를 사용하는 서버에서 통신하는 앱이 두 개 이상이라면?
      (ex, 하나의 컴퓨터에서 게임도 하고 음악도 듣고 있는 상황일 때)

 

비연결성

대상이 서비스 불능임에도 패킷 전송 

대상 서버가 패킷을 받을 수 있는 상태인지 모른다.

 

 

패킷 소실

중간에 서버에서 문제가 생겨서 패킷이 유실이 된다면? 

 

 

 

패킷 전달 순서 문제 발생 

전달하는 데이터가 너무 많은 경우에는 두 개로 나눠서 데이터를 보내기도 한다.

Hello,를 1번 노드로 보내고 다음 world!를 보낼 때 내부적으로 더 빠른 노드를 발견해서 2번으로 보내게 되어 서버에서 Hello, wordl! 순서로 데이터를 받는 것이 아니라 wordl! Hello,로 받을 수도 있다. 

 


TCP/UDP

TCP

위에서 보았던 IP의 한계들을 TCP가 해결해준다.

UDP는 해결해주지 않지만 몇가지 도움 되는 것들이 있다.

 

 

프로토콜 계층

인터넷 프로토콜 스택의 4계층은 아래와 같다.

  1. 애플리케이션 계층 (HTTP/FTP)
  2. 전송 계층 (TCP/UDP)
  3. 인터넷 계층 (IP)
  4. 네트워크 인터페이스 계층 

 

실제로 사용자가 느낄 수 있는 계층은 아래와 같다. 

채팅 프로그램을 통해서 Hello라는 데이터가 담긴 정보를 서버에 보낸다고 할 때,

- 데이터는 소켓 라이브러리를 통해서 다음 계층으로 전달이 되고

- OS에서는 이 데이터를 TCP로 한번 감싸고,

- 다시 IP로 감싼다. (그래서 IP > TCP > 실제 데이터 구조로 되어 있다.)

- 그리고 이 데이터는 네트워크 인터페이스를 통해서 서버로 전달된다. 

 

TCP/IP 패킷 정보 

기존 IP 패킷에는 출발지 IP, 목적지 IP, 데이터 (기타) 등의 정보가 들어갔지만, TCP/IP 패킷에는 IP 패킷 안에 TCP 세그먼트가 들어있다.

이 TCP 세그먼트는 

  • 출발지 PORT
  • 목적지 PORT
  • 전송 제어
  • 순서
  • 검증 정보 

등이 포함되어 있고, 이 정보들을 바탕으로 IP 패킷에서의 한계를 보완할 수 있다. 

 

TCP 특징

Transmission Control Protocol (= 전송 제어 프로토콜)

TCP의 특징  IP 패킷의 한계 
연결 지향 
-> 상대가 받을 수 있는 것이 보장될 경우에 데이터를 전달 
비연결성 
데이터 전달 보증  패킷 소실 
순서 보장  패킷 전달 순서 문제 

그래서 TCP는 신뢰할 수 있는 프로토콜이며 현재는 대부분 TCP를 사용한다. 

 

 

TCP 3 way handshake

3번의 연결 과정을 통해서 클라이언트-서버가 서로 믿을 수 있게 된다.

 

3번의 연결 과정은 아래와 같다.

  1. syn
  2. syn + ack
  3. ack 

이 과정이 모두 마치면 서로 믿을 수 있는(-> 논리적으로 연결된 것을 의미, 실제로 어떠한 보장된 랜선이 존재하는 것은 아니다.) 상태가 되므로 이후에 데이터를 전송한다.

(3번 ack의 과정에서 요청 수락과 함께 데이터를 전달할 수도 있다.)

 

 

데이터 전달 보증 

클라이언트가 데이터를 전송하고 나서 서버에서 잘 받았다면 잘 받았다는 메시지를 보내준다.

(만약, 잘 받지 못했다면 응답이 오지 않으므로 문제가 생긴 것을 확인할 수 있다.)

 

 

순서 보장

- 클라이언트에서 패킷1, 패킷2, 패킷3 순서로 데이터를 전송했지만

- 서버에서 패킷1, 패킷3, 패킷2 순서로 데이터를 받았을 때,

 

-> 서버에서는 클라이언트에게 패킷1 이후의 데이터는 모두 날리고, 패킷2부터 다시 보내라고 한다.

(물론 서버 내부적으로 순서를 바꿀 수 있다.)

 

🤔 이렇게 보장할 수 있는 이유?

TCP 데이터 안에는 전송 제어 정보, 순서 정보, 검증 정보들이 추가되어 있다.
그러므로 이런 데이터를 바탕으로 위의 한계들이 해결이 된다.

 

UDP 특징

User Datagram Protocol (= 사용자 데이터그램 프로토콜)

 

특징 

  • 하얀 도화지에 비유 (기능이 거의 없다.)
  • 연결지향 - TCP 3 way handshake X
  • 데이터 전달 보증 X
  • 순서 보장 X

=> IP와 거의 같은데 +PORT, +체크섬 정도가 추가 

 

 

PORT?

- TCP정보에도 존재, IP에는 존재하지 않는다.

- 하나의 IP에서 여러 애플리케이션이 동작될 때 각 애플리케이션을 구분해주는 것 

 

 

기능이 별로 없는 것 같음에도 사용하는 이유?

- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다. 

- TCP는 사용자 최적화가 불가, UDP에서 변경할 수 있다. (애플리케이션에서 추가 작업 가능) -> UDP를 하얀 도화지에 비유 

 

 


PORT

a.k.a 항구

 

Intro

만약 한번에 둘 이상의 서버와 통신해야 한다면?

(ex, 히루랑 게임을 하면서 화상 통화를 하고 있다면?)

 

서버에서 응답값이 오게 되는데 해당 응답값이 게임에 대한 응답인지/화상 통화에 대한 응답인지 구분해야 한다.

반대로 보낼 때도 마찬가지이다.

 

이를 IP 패킷 정보만으로는 해결할 수 없다.

그래서 PORT가 필요 

 

TCP/IP 패킷 정보 

IP에 더해서 PORT 라는 개념도 존재 

 

IP - 목적지 서버를 찾는 것 

PORT - 서버 안에서 돌아가는 애플리케이션을 찾는 것 

 

즉 패킷 정보에는 아래의 정보들이 포함되어 있다.

  • 출발지 IP, PORT 정보
  • 도착지 IP, PORT 정보
  • 전송 데이터 정보 

 

PORT - 같은 IP 내에서 프로세스 구분 

IP 가 아파트 
PORT 가 몇 동/몇 호인지

 

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋다.
    • HTTP : 80
    • HTTPS : 443 

 


DNS 

짧고 간단하게 설명할 것 

 

Intro

  • IP는 기억하기 어렵다.
  • IP는 변경될 수 있다.

 

DNS

Domain Name System (도메인 네임 시스템)

 

DNS 서버가 있다면 위의 두 가지 문제를 해결할 수 있다.

마치 전화번호부처럼 사용할 수 있다.

 

 

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

 

 

 

'Network' 카테고리의 다른 글

[네트워크] HTTP 상태코드  (0) 2022.09.15
HTTP 메서드 활용  (2) 2022.09.06
HTTP 메서드  (0) 2022.08.30
HTTP 기본  (1) 2022.08.23
URL와 웹 브라우저 요청 흐름  (0) 2022.08.22