모든 개발자를 위한 HTTP 기본지식 1편 🌎

lecture

IP (인터넷 프로토콜)

IP 프로토콜의 역할

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

예시 : 현재 미국에 있는 John에 Hello world를 보내려한다.

기본적으로 IP 패킷정보에는 출발지 IP, 목적지 IP 등이 포함되어있다.

클라이언트(100.100.100.1)에서 목적지로 보내기 위해 서버(200.200.200.2)로 Hello, world!를 보낸다. IP 프로토콜에 규약에 의해서 메세지 정보를 담은 IP 패킷을 받은 노드들을 타면서 최종적으로 미국에 있는 목적지에 도착하도록 보낸다.

응답을 받은 미국에 있는 John도 마찬가지로 응답을 받았다는 응답 메세지를 보내기 위해 목적지인(100.100.100.1)로 노드를 타고 보냄. 인터넷망이 복잡하기때문에 서로 다른 노드를 타고 IP 주소를 찾아가기도 한다.

IP 프로토콜의 한계

  • 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성 : 중간에 패킷이 사라지거나 패킷이 순서대로 안와도 해결이 불가
  • 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션 둘 이상이면 이를 구분하지 못한다.

패킷들을 보내놓고 위와 같은 문제가 발생하면 발송자 입장에서는 알 수 있는 방법이 없다.. 그러므로 데이터 손실률이 꼭 100%만은 아니다.

이러한 문제들을 해결하기 위해서 TCP와 UDP가 있다.

TCP / UDP

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

  • 애플리케이션 계층 - HTTP,FTP
  • 전송 계층 - TCP, UDP
  • 인터넷 게층 - IP
  • 네트워크 인터페이스 계층

TCP / IP 패킷 정보

  • IP 패킷 : 출발지 IP, 목적지 Ip, 기타..

  • TCP 세그먼트 : 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증정보..

이 두개가 전송데이터를 감싸써 보내지게 됨

TCP 특징 : 전송 제어 프로토콜 (Transmission Control Protocol)

  • 연결지향적 - TCP 3 way handshake (가상연결)을 사용해서 목적지와 연결이 잘 되어있는지 확인함

클라이언트와 서버가 SYN(접속 요청), ACK(요청 수락)를 주고 받으면서 서버와 클라이언트가 서로 연결을 확인하고 통신을 할 준비를 함

하지만 물리적으로 출발지와 목적지가 연결된 것은 아니다. 클라이언트와 서버와 어느정도 연결되었다고 논리적인 가정만 하고 통신을 시작하는 것이기 때문에 옛날 전화국처럼 전화 포트를 빼서 연결하는 그런 개념이 아니다.

  • 데이터 전달 보증 - 데이터가 누락되지 않게 목적지가 데이터를 받을 상태가 되어있는지 확인함

데이터를 전송하면 서버에서 데이터를 잘 받았다고 답장을 해줌

  • 순서 보장

클라이언트에서 보낸 패킷의 순서를 서버가 확인하여 순서대로 보내지 않을 경우에 확인해서 다시 순서를 재조정 하라고 통신한다. 서버에서 어느정도 최적화가 가능하나 기본적으로는 서버가 클라이언트에 제대로 보내도록 명령한다.

  • 신뢰할 수 있는 프로토콜

현재 대부분 TCP를 사용함 그러므로 매우 서버와 클라이언트 간의 속도와 안정성을 높이기 위해서 매우 엄격하고 지켜야할 규약들이 있다.

UDP 특징 : 사용자 데이터그램 프로토콜(User Datagram Protocol)

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

  • 연결지향 - TCP 3 way handshake X

  • 데이터 전달보증 X

  • 순서보장 X

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

정리하자면 IP와 거의 같고 PORT, 체크섬 기능 정도만 추가되어있다. 또한 애플리케이션에서 추가 작업이 필요하다.

UDP는 TCP에 비해서 안전하지도 않고 순서도 보장되어 있지 않는데 왜 쓰는 것일까?

이유는 간단하다. 하얀 도화지와 비슷하기 때문에 개발자의 역량만 훌룡하다면 TCP보다 훨씬 빠르고 최적화된 안정장치로 보낼 수 있다는게 장점이다. 즉 커스텀이 가능한 순정과 비슷하다.

PORT

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

현재 게임을 하며 화상통화를 하며 웹브라우저까지 하고 있다면 어떻게 될까❓

서버와 통신을 하며 패킷을 주고 받는데 어떻게 구별할까❓

TCP 세그먼트에 출발지 PORT와 목적지 PORT가 있다. 같은 IP내에서 프로세스를 더 디테일하게 구별하기 위해서 PORT가 존재.

IP가 아파트면 PORT는 몇동 몇호

PORT는 0 ~ 65535 할당 가능

HTTP - 80

HTTPS - 443

DNS

IP는 기본적으로 기억하기 어렵다는 단점이 있다. 그리고 IP는 인터넷 사정에 따라 변경 될 수 있으며, 의도적으로도 바꿀 수도 있다. 이를 해결하기 위해서 DNS(Domain Name System)가 존재함. 도메인 네임 시스템이라 불린다.

  • 전화번호부 - 도메인을 어디서 사서 등록이 가능하다.

  • 도메인 명을 IP 주소로 변환


  • 요약하자면 인터넷 통신을 하기 위해서는 IP 주소가 필요함.

  • 근데 IP 프로토콜만을 가지고 메세지가 잘 도착했는지 신뢰하기도 어렵고 순서에 문제가 생길 수 있기에 TCP가 이것을 해결.

  • UDP는 사용자 확장 가능한 통신 방법이다. 매우 빠르고 변경 가능한 것이 장점이다.

  • PORT는 같은 IP 안에서 발생하는 다양한 어플리케이션의 패킷 전송/전달을 수행하기 위한 내부 세분화된 주소이다. IP는 아파트, PORT는 동,호수

  • DNS는 IP 변하기 쉽고, 외우기 어렵기 때문에 전화번호부 처럼 등록하여 고유 IP 주소를 갖는 것.