[HTTP] #1. 인터넷 네트워크 - 김영한(인프런)

bien·2023년 5월 31일
0

HTTP

목록 보기
1/7

1. 인터넷 통신

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

바로 옆에 이어져있는 컴퓨터라면 단순히 선을 통해 의사소통할 수 있을것이다. 그러나 우리는 컴퓨터를 이용해 저 바다 건너 미국과도 의사소통할 수 있다. 이같은 의사소통은 어떻게 가능한 것일까?

2. IP(인터넷 프로토콜)

내가 멀리 있는 미국 친구와 의사소통하기 위한 최소한의 규칙, IP.
내가 주소를 가지고 있고, 내 친구도 주소를 가지고 있어야지만 의사소통이 가능하다. IP는 이 주소를 의미한다!

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

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

IP 패킷 정보

메시지를 보내는 것이 아니라 IP패킷이라는 규칙을 통해 전송한다.

클라이언트 패킷 전달

그냥 데이터를 보내는 것이 아니라 내 주소(출발지 IP), 미국 친구 주소(목적지 IP) 두개를 내 데이터 밖에다가 적어서 IP패킷을 만든다음 전송시킨다.

그러면 (출발지 주소, 목적지 주소, 데이터 내용)을 들고 나와 친구 컴퓨터 사이의 인터넷 서버(노드)들이 통신 규약을 통해 서버까지 내 패킷을 던져준다.

서버 패킷 전달

다시 돌려받는 것 역시 나와 동일하게 시행된다. 미국 친구가 자신의 주소와 내 주소를 입력하고, 전송하고자 하는 데이터인 "OK"를 안에 담아서 보내준다.

인터넷 망이 되게 복잡해서 내가 던져준 서버랑 다른 서버 경로를 따라서 친구의 데이터가 올 수도 있다.

IP 프로토콜의 한계

이처럼 패킷에 전송하고자 하는 데이터를 담아서 전송하는 방식에는 한계가 있다.

  1. 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송.

미국에 친구한테 보냈는데 그 친구의 PC가 꺼져있거나, 주소가 바뀌거나 등등 서비스가 제대로 전송되지 않았더라도 패킷은 그냥 전송되고 나는 모른다는 문제점이 있음.

  1. 비신뢰성

    • 중간에 패킷이 사라지면?
    • 패킷이 순서대로 안오면?
  2. 프로그램 구분

    • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?

하나의 PC에서 음악도 듣고 게임도하는 등 여러개의 애플리케이션을 사용하면 여러개의 애플리케이션이 같은 IP를 사용하게 된다. 이러면 데이터를 전송했을때 어느 애플리케이션이 이 데이터를 받는 주체인지 알 수 없다는 문제점이 생긴다.

대상이 서비스 불능, 패킷 전송

친구가 이사간줄 모르고 우편물 보내듯이 서버가 받을 수 있는 상태가 아님에도 나는 계속 편지를 보낸다. 거기다 편지가 제대로 전달되지 못했음을 인식하지 못한다.

패킷 소실

중간에 특정 노드에 문제가 생겨 내가 보낸 패킷이 소실될 수 있다. (내가 보낸 데이터가 전송되던 중 광케이블을 멧돼지가 들이받아 손상이 가는 등...)

패킷 전달 순서 문제

패킷의 크기가 매우 클때가 있음. 한번에 보낼 양이 너무 많으면 1500byte정도로 끊어서 보냄. 2개의 패킷을 보냈는데 노드를 다르게 탈 수 있음. 그래서 서버가 내가 전송한 순서와 다른 순서로 데이터를 받을 수 있다.

이처럼 IP만 사용하는 것으로는 여러 문제점이 야기된다. 이를 해결하기 위해 고안된 것이 TCP프로토콜

3.TCP, UDP

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

IP위에 TCP계층을 살짝 얹음으로써 IP의 기능을 보완한다는 개념

프로토콜 계층

  1. 프로그램이 Hello, world! 메시지 생성
  2. SOCKET 라이브러리를 통해 (OS에) 전달
  3. TCP 정보 생성, 메시지 데이터 포함 (데이터 밖에 TC 정보를 씌움)
  4. IP 패킷 생성, TCP 데이터 포함 (데이터 밖에 TC 씌운 거기 위에다 또 IP정보 씌움)
  5. 그리고 LAN카드를 통해 나갈때 Ethernet frame이 포함되어서 나감

Ethernet frame: 랜카드에 등록된 맥 주소등 실제 물리적 정보가 포함되어 있다.

TCP/IP 패킷 정보

IP패킷
출발지 정보와 목적지 정보가 들어있다.
패킷(Packet): package와 bucket의 합성어로 소포 또는 한 묶음이란 뜻.

TCP 세그먼트
전송제어, 순서, 검증 등의 정보가 추가된다. IP만으로 해결되지 않던 순서제어들의 문제들을 해결할 수 있다.

전송데이터
그 안에다가 내가 원하는 정보를 담는다.

TCP 특징

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

  • 연결지향: TCP 3 way handshake(가상 연결)
    쟤랑 나랑 연결이 됐음을 확실히하고 메시지를 보낸다. 수신자의 컴퓨터가 꺼져있는 등 메시지 수신의 불확실성 해결.

  • 데이터 전달 보증
    내가 패킷을 보냈는데 중간에 누락되면 내가 그것을 알 수 있다.

  • 순서 보장

실제로는 더 많은 기능들이 있다. TCP는 신뢰할 수 있는 프로토콜. 현재는 대부분 TCP를 사용한다.

TCP 3 way handshake

  1. TCP 프로토콜로 연결하면 서버로 "SYN"이라는 메시지를 보낸다.
  2. 수신측에서 메시지 수신함을 알리며, 자신의 메시지도 받아달라는 의미로 "SYN+ACK"를 보낸다.
  3. 발신측에서 정상 수신의 의미로 "ACK"를 보낸다.
  4. 이같은 과정을 거친 이후에 데이터를 전송한다.

처음에 서버가 꺼져 있었다면 1. SYN 단계에서부터 응답이 없었을 것이고, 이를 통해 서버가 수신에 문제가 있음을 알 수 있다.이같은 3단계 과정을 통해 클라이언트가 서버를 신뢰할 수 있고, 서버도 클라이언트도 서버를 신뢰할 수 있다.

요즘엔 기술이 좋아저서 3번 ACK를 전송하면서 데이터도 같이 전송한다.

근데 앞선 단락에서 TCP 3way handshake를 가상연결이라고 했다. 지금 이 연결은 진짜 연결이 아닌 개념적인 연결이다. 서로 논리적, 개념적 측면에서 연결된 것이고 그 사이의 수많은 노드들이 연결되었는지 알 수 없다. 나를 위한 전용 랜선이 확보되는 물리적인 연결이 아니라 논리적으로 연결된 것이다.

데이터 전달 보증

데이터 전송하면 서버에서 데이터를 잘 받았다고 답장해준다. 수신 문제를 알 수 있다.

순서 보장

순서가 잘못오면 서버에서 문제가 되는 패킷부터 다시 보내라고 연락을 준다.

이같은 장점들은 TCP 정보에 포함된 전송 제어, 순서, 검증과 같은 정보들을 토대로 시행하는 것. => 이런 측면때문에 TCP 프로토콜을 "신뢰할 수 있는 프로토콜"이라 부른다.

UDP 특징

사용자 데이터그램 프로토콜(User Datagram Protocol)
TCP랑 UDP는 IP계층 바로 위에 함께 위치하는 계층.

  • 하얀 도화지에 비유(기능이 거의 없음)

  • 연결지향: TCP 3 way handshake ❌

  • 데이터 전달 보증 ❌

  • 순서 보장 ❌

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

  • 정리

    • IP와 거의 같다. +PORT +체크섬 정도만 추가
    • 애플리케이션에서 추가 작업 필요

기능이 거의 없다. 다만 IP와 달리 PORT 기능이 추가되어 있다. 하나의 PC에는 하나의 IP가 배정되므로 하나의 IP를 통해 게임용 패킷, 음악용 패킷, 등등 다양한 패킷이 전송된다. 이때 이 패킷이 어느 애플리케이션을 위한 패킷인지 구분하는데 PORT가 사용된다. 또 전송된 메시지가 맞는지 검증해주는 체크섬 기능도 추가 된다.

그럼 UDP를 왜 쓸까? 3 way handshake나 정보의 수신여부 확인하기, 검증 정보등 TCP를 사용하면 전송속도도 느리고 용량도 크다. TCP는 이미 인터넷 기반으로 사용하고 있기 때문에 이 프로토콜을 손볼 수 없다. 내가 최적화를 원하는 경우에는 UDP를 사용하고, 그 위에 내가 원하는 기능을 애플리케이션을 통해 추가하면 된다.

요즘엔 UDP기능이 각광받고 있다. HTTP 3에서 TCP를 더 최적화하면서 UDP를 사용하고 있다.

4. PORT

한번에 둘 이상 연결해야 하면?

내가 게임하면서 친구랑 화상통화하고, 그러면서 웹 브라우저로 검색도 하고 있다. 이런 상황에서 하나의 PC가 여러 서버와 의사소통 해야 하는데, 여러 서버에서 서로 다른 애플리케이션에 관한 데이터를 전송해주는데, 같은 IP를 사용하면서 어떤 애플리케이션에 상응하는 데이터인지 파악하는게 힘들다.

TCP/IP 패킷 정보

TCP는 IP에 다가 PORT라는 개념이 추가되어서 목적지 서버를 찾는데 IP를 사용하고, 목적지 서버안에서 돌아가는 애프리케이션을 구분하는데 PORT를 사용한다.

패킷 정보

TCP/IP 패킷(TCP+IP)라 표현하고 그 안에는 (출발지 IP, 출발지 PORT, 목적지 IP, 목적지 PORT, 전송데이터)가 포함되어 있다.

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

각각의 애플리케이션이 서로 다른 PORT를 사용하고, 서버의 특정 포트로 전송한다. 수신측에서도 내 IP와 PORT까지 고려하여 데이터를 전송해준다.

IP:아파트 /// PORT: 몇동, 몇호.

PORT

  • 0 ~ 65535: 할당 가능
  • 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
    • FTP - 20,21
    • TELNET - 23
    • HTTP - 80
    • HTTPS - 443 (HTTP + 보안)

5. DNS

IP는 기억하기 어렵고, 변경될 수 있다. 사용자 입장에서 IP를 외워서 사용하고, 변경될때마다 새롭게 확인하는등 일일이 확인하는 것이 힘들다. 이를 해소하기 위해 고안된것이 DNS이다.

DNS

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

  • 전화번호부 전화번호부같은 서버를 제공한다.
  • 도메인 명을 IP주소로 변환 도메인명을 등록하고 이를 IP주소로 변경할 수 있다.

DNS 사용

도메인 명을 사면 IP를 연결해준다. 클라이언트는 사용이 편리한 도메인명을 사용하여 서버에 접근할 수 있다!

📌 인터넷 네트워크 정리

  • 인터넷 통신 : 어떻게 통신할까?
  • IP(Internet Protocol) : 주소개발 => 수신 불확실, 순서 불분명
  • TCP, UDP : 문제 해결+기능제공, 기본기능(PORT만 제공)
  • PORT: 몇동, 몇호
  • DNS: 쉽게 접근 가능한 IP의 별명
profile
Good Luck!

0개의 댓글