study/HTTP

HTTP 웹 기본 지식(1) - 인터넷 네트워크

올스왑 2022. 2. 13. 20:42

이 글은 인프런 김영한님의 강의 모든 개발자를 위한 HTTP 웹 기본 지식을 듣고 정리하는 글입니다.

 

인터넷 네트워크

 

컴퓨터 2대가 통신하려면 2대의 컴퓨터(클라이언트와 서버)를 연결해주면 된다. 하지만 2대가 아닌 세상의 모든 컴퓨터를 이렇게 연결하기에는 한계가 있다.

수많은 컴퓨터 중 2대가 서로 연결되려면 필요한 것들이 있다.

 

IP가 필요하다. Internet Protocol.

IP의 역할.

  • 지정한 IP 주소(IP Address)에 데이터 전달하는데,
  • 패킷(Packet)이라는 통신 단위로 데이터 전달한다. - 패킷은 패키지와 버킷의 합성어이다.
  • IP 패킷에는 출발지 ip, 목적지 ip, 기타 등등의 데이터와 실제 데이터를 담아 보낸다.
  • 그러면 IP프로토콜에 의해 전송된다.
  • 이렇게 클라이언트와 서버는 데이터를 주고 받는다.

그런데 ip 프로토콜에는 한계가 있다.

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송할 수 있다. 대상 서버가 패킷을 받을 수 있는 지 없는 지 알 수 없다.
  • 비신뢰성
    • 패킷 소실. 중간에 패킷이 소실 될 수 있다.
    • 패킷 전달 순서 문제 발생. 패킷이 순서대로 오지 않을 수도 있다. 보통 어느 특정 크기보다 데이터가 커지면 끊어서 보내는데, 끊어서 보내지는 데이터는 서로 다른 경로를 통해 올 수 있다. 그러면 순서가 바뀌어 도착하게 된다.
  • 프로그램 구분
    • 같은 IP 내에서 외부와 통신하는 애플리케이션이 여러개라면 IP만으로는 어떤 애플리케이션과 통신해야 하는 지 알 수 없다.

-> 이런 문제를 해결하기 위한 것이 TCP(/UDP) 이다.

 

 

TCP/UDP - IP 프로토콜의 한계를 해결해준다.

 

인터넷프로토콜 스택의 4계층 - 네트워크 인터페이스 계층, 인터넷 계층, 전송 계층, 애플리케이션 계층

더 쉽게 나누면, 네트워크 인터페이스, OS, 애플리케이션

 

TCP는 어떻게 IP의 한계를 해결하는가. TCP 세그먼트를 붙여 출발지, 목적지 PORT 정보와 순서, 전송 제어 등의 정보를 추가한다

 

TCP의 특징 - Transmission Control Protocol

  • 연결 지향 - TCP 3 way handshake. 검증된(?) 연결이 된다.
    • 먼저 클라이언트가 서버에게 SYN(접속 요청)을 보낸다.
    • 그러면 서버가 SYN 과 ACK(요청수락)을 보낸다.
    • 그 후 클라이언트가 ACK를 서버에게 보낸다.
    • 이후에 서버는 데이터를 전송한다. 이 과정이 먼저 된 후에 데이터가 전송된다.
    • 요새는 마지막 ACK 메시지를 보낼 때, 데이터를 보낸다.
    • 그런데 TCP 3 way handshake는 가상 연결(논리적 연결)이다. 사이에 있는 수많은 노드는 알 수 없다.
  • 데이터 전달 보증
    • 데이터를 전송하면 받은 컴퓨터가 데이터를 잘 받았다는 메시지를 보낸다.
  • 순서 보장
    • 패킷1, 패킷2, 패킷3 순서로 데이터를 보낸다. 실제로 받을 , 패킷1, 패킷3, 패킷2 순으로 받았다고 하자. 그러면 받은 컴퓨터는 패킷2부터 다시 보내라고 클라이언트에게 요청하다.(실제로 최적화에 따라는 다르지만)
    • 이것이 가능한 이유는 TCP 정보에 출발지PORT, 목적지PORT, 전송제어, 순서, 검증 정보 등이 들어있기 때문이다.
  • 신뢰할 있는 프로토콜
  • 현재는 대부분 TCP 사용

 

UDP TCP 같은 계층에 있다. User Datagram Protocol

  • 기능이 거의 없다.
  • 3 way handshake 없다.
  • 데이터 전달 보증, 순서 보장도 없다.
  • 데이터 전달 순서가 보장되지 않지만, 단순하고 빠르다.
  • 정리
    • IP와 거의 같다. 그런데 PORT와 체크섬 기능 정도만 추가된 것이다.
    • 애플리케이션에서 추가 작업이 필요하다.

 

 

TCP에서 추가된 정보인 Port는 뭔가

  • 한 번에 둘 이상을 연결해야 한다면? 게임과 채팅, 웹 브라우저 요청까지 동시에 한다면?
  • 그래서 패킷을 보내거나 받을 때, 어떤 애플리케이션에서 필요한지 알아야 한다.
  • IP 만으로는 구분할 수 없다. 한 컴퓨터니까. 그래서 PORT가 필요하다.
  • PORT를 통해 같은 IP 내에서 프로세스를 구분한다.

 

TCP/IP 패킷에는 출발지 IP PORT, 도착지 IP PORT 있다.

 

 

그림에서 브라우져가 서버와 통신할 때는 같은 포트 번호로 데이터를 주고 받는다.

 

포트 번호에 따라 잘 알려진 것이 있고, 마음대로 사용해도 되는 것이 있다.

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음

 

Dns - Domain Name System

  • IP를 알아야 통신을 할 수 있는데 IP를 모두 기억하기는 어렵다. 그리고 바뀔 수도 있다.
  • DNS는 전화번호부 같은 것이다.
  • DNS 서버에 IP와 도메인 이름을 등록하다.
  • 도메인 이름으로 DNS 서버에 접근하면 IP 주소를 반환한다.
  • 기억하기 어렵다는 단점과, IP주소가 바뀔수도 있는 단점이 해결된다.