[HTTP][1] 인터넷 네트워크

kiteB·2021년 9월 2일
1

HTTP

목록 보기
1/8
post-thumbnail

[ 강의 소개 ]

로드맵의 세 번째 강의는 인프런 - 모든 개발자를 위한 HTTP 웹 기본 지식이다.

모든 HTTP 기반 개발 실무에 쓰이는 핵심 내용을 제대로 다질 수 있는 강의이다.

오늘은 첫 번째 섹션인 인터넷 네트워크에 대해 배워볼 것이다.


[ 인터넷 통신 ]

💡 인터넷(Internet)이란?

인터넷이라는 용어는 여러 통신망을 하나로 연결한다는 의미의 인터 네트워크(inter-network)에서 시작되었으며, 이제는 전 세계 컴퓨터들을 하나로 연결하는 거대한 컴퓨터 통신망을 의미한다.

복잡한 인터넷망에서 통신하기 위해서는 최소한의 규칙이 있어야 한다. 이를 인터넷 프로토콜, IP라고 한다.


[ IP (인터넷 프로토콜) ]

💡 IP (Internet Protocol)

인터넷 환경에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약(프로토콜)의 모음


1. IP의 역할

지정한 IP Address패킷(Packet)이라는 통신 단위로 데이터를 전달한다.

  • 패킷: 패킷은 출발지 IP, 목적지 IP 등의 정보를 담고 있다.

2. 패킷 전달 과정

패킷을 전달할 때, 패킷의 출발지 IP, 목적지 IP를 확인하면서 전달하며 최종 목적지까지 전달한다.


3. IP 프로토콜의 한계

✅ 비연결성

: 패킷을 받을 대상이 없거나 서비스 불능 상태인 경우에도 패킷을 전송한다.


✅ 비신뢰성

: 패킷이 중간에 사라지거나(패킷 소실),
하나의 정보를 담고 있는 패킷이 너무 커서 나눠서 보내질 때 뒤죽박죽으로 오는 경우가 있다.


✅ 프로그램 구분

: IP 프로토콜만으로는 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 구분이 어렵다.


[ TCP, UDP ]

위에서 본 IP 프로토콜의 한계를 해결할 수 있는 것이 바로 TCP이다.

1. 인터넷 프로토콜 스택의 4계층


2. TCP (Transmission Control Protocol, 전송 제어 프로토콜)

신뢰할 수 있는 프로토콜

✅ TCP/IP 패킷 정보

포트 정보를 담고 있어서 IP의 한계를 해결할 수 있게 되었다!


✅ TCP 특징

1. 연결 지향 - TCP 3 way handshake (가상 연결)
2. 데이터 전달 보증
3. 순서 보장

  • 신뢰할 수 있는 프로토콜로, 현재는 대부분 TCP를 사용한다.

1. TCP 3 way handshake

  • 서버-클라이언트는 서로를 신뢰할 수 있게 된다.
  • 물리적인 연결은 아닌, 논리적인 연결이 된 것이다.

2. 데이터 전달 보증

ACK을 통해 데이터를 잘 받았는지 알 수 있다.


3. 순서 보장

패킷이 순서대로 오지 않았으면, 데이터 재전송을 요청한다.


2. UDP (User Datagram Protocol, 사용자 데이터그램 프로토콜)

  • IP 프로토콜과 거의 비슷하지만 포트 번호, 체크섬 등이 추가되었다.
  • 애플리케이션에서 추가 작업이 필요하다.

✅ UDP 특징

  • 비연결형 (3 way handshake❌)
  • 데이터 전달을 보증하지 않는다.
  • 순서를 보장하지 않는다.


오잉 저것만 보면 좋은 점이 없는 것 같은데, UDP를 왜 쓰는걸까?

💡 TCP는 높은 오버헤드를 가질 수 있기 때문이다!
전송 데이터도 커지고, 신뢰성 있는 데이터 전송을 위해서 재전송 등, 추가적인 작업이 필요하다.

반면에 UDP는 신뢰성을 보장하지는 않지만, TCP에 비해 단순하고 매우 빠르다!
그래서 성능과 연속성이 중요하며, 데이터 손실은 상대적으로 중요하지 않은 동영상 스트리밍 등에 사용된다.

🔗 UDP를 사용하는 이유에 대해 더 자세히 알고 싶다면?


[ PORT ]

같은 IP 내에서 프로세스를 구분하기 위해서 사용한다.

위에서 패킷이 도착지 IP 주소를 통해 최종 목적지까지 도착한다고 했다.
이때 해당 IP에 도착했을 때, 프로세스가 여러 개라면,,?

패킷에 IP 주소만 담겨져 있다면 많은 프로세스 중 어떤 것을 선택해야 할지 모를 것이다 ㅠㅠ

TCP/IP 패킷을 다시 한번 확인해보자!

TCP 세그먼트에 PORT 정보가 있는 것을 확인할 수 있다.
포트 번호를 통해 어떤 프로세스를 선택해야 하는지 알 수 있다!

  • 보통 IP 주소를 아파트, 포트 번호를 동 호수에 비유한다.

📌 PORT 번호

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023: 잘 알려진 포트 번호로, 사용하지 않는 것이 좋다!
    • FTP: 20, 21
    • TELNET: 12
    • HTTP: 80
    • HTTPS: 443

[ DNS ]

IP 주소는 여기저기 많이 사용된다.
하지만 이 IP 주소는 길어서(Ex. 200.200.200.2xx) 기억하기 어렵기도 하고, 변경될 가능성도 있다.

매번 이러한 IP 주소를 외워서 사용해야 한다면 정말정말 귀찮을 것이다. 😵
그래서 DNS라는 것을 사용한다!

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

: 도메인명을 IP 주소로 바꾸거나 그 반대로 변환해준다.

DNS는 쉽게 생각해서 핸드폰 전화번호부라고 생각하면 된다.

  • 🐱: 010-1234-5678 → 야옹이
  • 🐶: 010-9999-8888 → 멍멍이

이렇게 전화번호를 "야옹이"나 "멍멍이"로 저장해두면, 나중에 번호를 굳이 입력하지 않아도 "야옹이" 이름으로 전화를 걸 수 있다. "야옹이" 이름이 전화번호부를 통해 전화번호로 변환되는 것이다.

전화번호부와 비슷하게, IP 주소와 도메인명을 저장해두고, 도메인명으로 요청하면 알아서 IP 주소로 변환해준다. 만약 DNS가 없다면, 우리가 네이버나 구글을 접속할 때 IP 주소를 매번 입력해야 했을 것이다😣


[ 📘 오늘의 TIL 정리 ]

  • 복잡한 인터넷망에서 메시지를 보내기 위해서는 최소한의 규칙인, IP 프로토콜이 있어야 한다.
  • IP는 패킷이라는 통신 단위로 데이터를 전달한다.
    • 패킷은 출발지 IP, 목적지 IP 등의 정보를 포함한다.
    • IP 프로콜은 비연결성, 비신뢰성, 프로그램 구분이 어렵다라는 한계가 있다.
      • 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태인 경우에도 패킷을 전송한다.
      • 비신뢰성: 패킷이 중간에 사라지거나, 메시지 도착 순서를 보장하지 못한다.
      • 프로그램 구분 어렵다: 같은 IP 내에서 프로세스 구분이 어렵다.
  • IP 프로토콜의 한계를 해결할 수 있는 것이 바로 TCP이다.
    • TCP는 전송 제어 프로토콜로, 신뢰할 수 있는 프로토콜이다.
    • IP 프로토콜 + 포트
    • TCP는 연결 지향, 데이터 전달 보증, 순서 보장이라는 특징을 갖는다.
      • 연결 지향: 3 way handshake 과정을 통해 서버-클라이언트는 서로를 신뢰할 수 있게 된다.
      • 데이터 전달 보증: ACK을 통해 데이터를 잘 받았는지 알 수 있다.
      • 순서 보장: 패킷이 순서대로 오지 않으면, 데이터 재전송을 요청한다.
  • UDP사용자 데이터그램 프로토콜이다.
    • "IP 프로토콜 + 포트, 체크섬 기능 추가"라고 생각하면 된다.
    • 필요하면 애플리케이션에서 기능을 확장할 수도 있다.
    • UDP는 비연결형, 데이터 전달 보증 ❌, 순서 보장 ❌이라는 특징을 갖는다.
  • TCP는 신뢰성 있는 데이터 전송을 할 수 있지만, 높은 오버헤드를 가질 수 있으며,
    UDP는 신뢰성을 보장하지는 않지만 TCP에 비해 단순하고 매우 빠르다.
  • 포트같은 IP 내에서 프로세스를 구분하기 위해서 사용한다.
    • 보통 IP 주소를 아파트, 포트 번호를 동 호수에 비유한다.
  • IP는 기억하기 어렵고 변경 가능성이 있으므로 DNS라는 것을 사용한다.
    • DNS는 도메인 네임 시스템으로, 도메인명을 IP 주소, 또는 그 반대로 변환해준다.

[ 참고자료 ]

인터넷
UDP를 사용하는 이유

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글