강의와 책과 스터디

HTTP.01.인터넷 네트워크

우당탕 오리의 개발모험 2023. 3. 23. 15:45

데이터를 주고받는 '통신'을 제대로 하기위한 고군분투 극복이야기.

인터넷 통신

통신 : 서로 다른 두 컴퓨터가 데이터를 주고받는 것.
엄청 멀리 떨어진 컴퓨터끼리 통신은 어떻게 할까? => '인터넷'을 통해서 데이터를 전달한다

문제1.인터넷 통신은 어떻게 할까?

근데, 인터넷을 이용하면 수많은 '노드'를 거쳐가고, 모든 데이터가 똑같은 노드를 거쳐가는 것도 아니다.
정보의 바다 인터넷에 데이터를 떨구면 어떻게 목적지를 찾아갈 수 있을까???

인터넷의 수많은 노드들을 통과하는데 어떻게 목적지 Server에 도달할까?

IP(인터넷 프로토콜)

정답! 각 컴퓨터에 고유한 IP를 부여하고, 데이터에게 목적지IP를 들려보낸다.

전달하는 데이터에 출발지IP Address, 목적지IP Address를 적어두면 수많은 노드를 거치더라도 목적지를 잃지 않는다.

동일한 이유로 서버로부터 응답도 제대로 받을 수 있다.

패킷?

패킷은 통신 할때 한 번에 보낼 수 있는 데이터 단위이다.
당연히 한 번에 엄청나게 고용량 데이터를 한 번에 보낼 수 없다. 쪼개서 보내야지. 이 때 쪼갠 단위를 '패킷'이라고 한다.
간단하게 패킷 구성을 보면 이렇다

IP패킷 = 출발지IP + 목적지IP + 데이터

IP의 한계

근데, 출발지/목적지를 안다고 모든 문제가 해결되는게 아니다.

  • 비연결성
  • 비신뢰성
  • 프로그램 구분

비연결성

아니, 길고긴 인터넷을 거쳐서 목적지에 도착하나 했더니 목적지가 없어졌다면??

즉, 서버가 서비스 불능상태인지 아닌지 알 수 없다. 그냥 막 패킷 보내는 거다.

비신뢰성 + 순서 비보장

그 많은 노드를 거치다가 패킷이 중간에 없어질 수 있다!

한 데이터는 여러 패킷으로 조각내서 보낸다. 서버에 모든 패킷이 도착해서 봤더니 순서가 뒤죽박죽일 수 있다.

모든 패킷이 인터넷에서 같은 노드를 통해서 전달되는게 아니니까!

프로그램 구분

서버 1대에서 돌아가는 프로세스가 1개만 있을리 없다.
도착지에 도착하고 봤더니 프로그램이 여러개 띄어져있으면 도대체 어느 프로그램에게 패킷이 최종 도착해야하는지 알 수 없다.

TCP, UDP

인터넷 프로토콜 계층

IP통신의 한계 극복 방법! TCP(or UDP) 정보를 패킷에 포함한다.

port는 한 컴퓨터에서 실행되는 여러 어플리케이션(프로세스)를 구분하기 위한 상세 주소다.

TCP,UDP는 IP패킷에 여러 상세정보를 추가해서 그 한계를 극복하려고 한다

IP통신의 3가지 한계를 해결하기위해 상세정보를 추가해서 데이터 패킷을 만든다. 단순 ㅎㅎ

TCP패킷 = 출발지PORT + 목적지PORT + 전송제어 + 순서 + 검증정보... + (출발지IP + 목적지IP + 데이터)

TCP 특징

  • 연결지향 (Three Handshake)
  • 데이터 전달 보장
  • 순서 보장
  • 신뢰할 수 있다
  • 현재 대부분 TCP를 사용한다

연결지향 (TCP 3 Way HandShake)

도착지 서버가 정상적인 것을 확인하기 위해 패킷 전달 전에 연결(물리적연결X)을 확인한다.

  1. 클라이언트가 'SYN' 전송요청을 보낸다
  2. 서버가 잘 받았다고 'SYN' + 'ACK' 응답을 보낸다
  3. 클라이언트도 응답 잘 받았다고 'ACK' 를 보낸다.
  4. 오케 연결확인 됐으니까 이젠 진짜로 데이터 보낸다.

요즘은 더 빠른 통신을 위해 3번에 데이터를 같이 보낸다.

SYN(씬), ACK(엑크)

데이터 전달 보장

  1. 클라이언트가 데이터를 보내면
  2. 서버가 잘 받았다고 응답한다

순서 보장

패킷에 순서정보가 포함된다.

서버에서 도착한 패킷들을 순서대로 조합해서 완벽한 데이터를 열어볼 수 있다.

PORT

한 서버에 여러 애플리케이션에 각각 다 요청해야하면 IP주소만으로 안되잖아!

정답! PORT주소도 알면 된다.

PORT는 같은 IP 내에서 프로세스를 구분해준다.

  • 0 ~ 65535 할당 할 수 있다.
  • 하지만, 0 ~ 1023 은 마치 약속처럼 사용되는 포트니 쓰지 않는게 좋다.
    • FTP : 20, 21
    • TELNET : 23
    • HTTP : 80
    • HTTPS : 443
    • ......

DNS

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

IP의 단점

  1. 숫자 덩어리... 사람은 기억하기 힘들다.
  2. IP는 자꾸 바뀐다.
    특히, 요즘에 out-scaling 이 많이 사용되고, 컨테이너 기반의 배포가 이루어지면서 IP는 자주 바뀔 수 있다.
    즉, IP만으로는 서버 주소를 항상 보장할 수 없다는 말이다.
  3. 동일한 서비스가 여러대 서버로 실행될 수 있다. 즉, IP가 여러개일 수 있다.

그래서! 자꾸 바뀌는 IP를 DNS에 등록하고 DNS를 목적지 주소로 쓰자

IP가 여러개든, 자꾸 바뀌든 DNS에만 잘 등록해주면 된다.

그럼 클라이언트는 DNS만 알면 언제든 확실하게 목적지 서버를 알 수 있는 것이다!


이 글은 인프런 김영한 님의 강의 '모든 개발자를 위한 HTTP 웹 기본 지식'를 공부하고 개인적으로 정리한 글입니다.