[HTTP 통신] 정리노트 - 1

모든 개발자를 위한 HTTP 웹 기본 지식 패킷 데이터 전송

시작

인터넷 통신


인터넷에서 클라이언트와 서버간 통신을 어떻게 주고받을까? 예로 나는 한국에 있는데, 친구는 외국에 있는 경우 복잡한 인터넷 망에서 어떻게 통신이 성공할 수 있을까? 이를 위해선 IP에 대해 알고 있어야 합니다.

IP(인터넷 프로토콜)


인터넷 프로토콜은 지정한 IP주소로 패킷 통신 단위의 데이터를 전달합니다. IP가 다음과 같다고 가정합시다.

  • 클라이언트
    • 100.100.100.1
  • 서버
    • 200.200.200.2

패킷단위의 데이터는 전송 데이터와 같이 다음과 같은 정보를 씌워 보냅니다.

  • 출발지 IP
  • 목적지 IP

HTTP-capture1

출발지 IP와 목적지 IP 그리고 전송데이터를 포함한 패킷 통신단위의 데이터를 목적지 IP에 보내게 됩니다. 인터넷 망에서 여러 노드를 거쳐가면서 목적지 IP를 찾고 목적지 서버에 도달하게 됩니다.
응답 또한 서버에서 클라이언트에게 보내야하는데, 출발지 IP를 찾아 마지막에는 출발지로 응답을 보내게 됩니다.

하지만 이런 IP 프로토콜 또한 한계가 존재합니다.

IP 프로토콜의 한계

IP프로토콜의 한계는 다음과 같습니다.

  • 비연결성이기 때문에, 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송하게 됩니다.
  • 비신뢰성이기 때문에, 중간에 노드 서버가 중지되어 패킷이 사라질 수 있으며 패킷 데이터가 순서대로 오지 않을 수 있습니다.
    • 출발지 : Hello world!
    • 목적지 : world! Hello 이러한 한계를 극복하기 위해 TCP와 완전한 한계를 극복해주진 않지만 약간의? 도움을 주는 UDP도 탄생하게 됩니다.

TCP와 UDP


우선 알아보기 앞서 인터넷 프로토콜 스택의 4계층을 보고 갑시다.

HTTP-capture2

  • 애플리케이션 계층 : HTTP, FTP
  • 전송 계층 : TCP, UDP
  • 인터넷 계층 : IP
  • 네트워크 인터페이스 계층 : LAN 카드 이 IP라는 것을 살짝 TCP로 옮겨서 보완해준다고 보면 됩니다. (영한님 피셜)

애플리케이션에는 웹 브라우저가 있겠죠. 친구에게 웹에서 채팅을 보낸다고 해봅시다. 패킷은 아래와 같이 전송하게 됩니다.

HTTP-capture3

  1. 사용자는 친구에게 Hello, world!메시지를 전송 데이터에 보낸다.
  2. Socket을 통해 전송 계층에 내려가고 전송데이터 외부에 TCP 정보가 래핑된다.
  3. 인터넷 계층으로 내려가 또 다시 외부에 IP정보가 래핑되어 IP패킷이 만들어진다.
  4. 네트워크 계층의 LAN 카드를 거쳐 Ethernet Frame정보가 래핑되어 인터넷을 뚫고 서버에 도달하게 된다.

위 2번에서 래핑되는 TCP 정보에는 다음과 같은 정보가 포함됩니다. 그리고 이를 TCP 세그먼트라고 부릅니다. IP 패킷으로 래핑되면 IP 패킷이 됩니다.

  • 출발지 PORT
  • 목적지 PORT
  • 전송제어
  • 순서
  • 검증 정보 등..

이러한 TCP의 특징은 다음과 같습니다.

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


  • 연결지향 : TCP 3 way handshake (가상 연결)
    • 연결 이후 메시지를 전송한다.
  • 데이터 전달 보증
    • 메시지를 보낼 때 패킷이 누락되면 목적지에 도달하지 못했음을 알 수 있다.
  • 순서 보장

위와 같이 신뢰할 수 있는 프로토콜 특징으로 대부분이 TCP를 사용하고 있다.

I 3 way handshake

3 way handshake는 다음과 같은 정보로 수행됩니다.

  • SYN : 접속 요청
  • ACK : 요청 수락

연결과정은 다음과 같습니다.
우선, 클라이언트는 서버에서 SYN(접속 요청)을 보내고, 이를 수신한 서버는 통신을 해도 좋다 라는 의미로 클라이언트에게 SYN+ACK(요청수락)을 보냅니다. 이후 클라이언트는 다시 한번 ACK(요청 수락)을 보내고 서버와 데이터를 주고 받으며 통신하게 됩니다.

요즘은 기술이 더 향상되어 마지막 단계에서 클라이언트가 서버에게 ACK를 보낼 때, 데이터도 같이 보낸다고 합니다.

단 위와 같은 과정은 논리적으로 연결된 것이지, 물리적으로 연결된 것은 아닙니다. 중간의 노드와 연결되었는지는 모릅니다.

II 데이터 전달 보증

데이터를 전송했을때, 서버는 응답을 보내주는데, 전송되지 않았다면 문제가 있음을 알 수 있습니다.

III 순서 보장

5개의 패킷을 보냈을 때, 2번 패킷이 전송되지 않았다면 서버는 2번 패킷부터 데이터를 다시 전송받습니다. 때문에 순서가 보장됩니다. TCP 세그먼트내 전송제어, 순서, 검증 정보 때문에 이런 장점을 가질 수 있습니다.

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


UDP는 IP 프로토콜과 거의 흡사합니다. 우선 아래와 같은 기능이 존재하지 않습니다.

  • 연결지향(TCP 3 way handshake)
  • 데이터 전달 보증 X
  • 순서 보장 X

하지만 다음과 같은 장점이 존재합니다.

  • 데이터 전달 및 순서가 보장되진 않으나, 단순하고 빠름

또한 IP 프로토콜의 단점인 동일한 IP에서 클라이언트 애플리케이션이 2개 존재하는 경우 구분을 하지 못했던 점을 PORT정보를 추가함으로서 구분을 가능하게하여 단점을 보완할 수 있습니다.
추가로 메시지에 대해 검증하는 데이터 체크섬도 포함됩니다.

이 UDP는 최근에 각광을 받고 있습니다. 과거에는 중요한 통신의 경우 TCP를 사용하고 동영상 데이터의 경우는 UDP를 사용하자 라는 인식이 있었습니다. 다만 그럼에도 90%이상이 TCP가 점유하고 있었습니다.

하지만 이후 HTTP3가 3way handshake과정도 최적화하자 라는 목적으로 UDP프로토콜을 사용함으로 각광받고 있습니다.

한 번에 둘 이상 연결한다? PORT

TCP/IP패킷에는 다음과 같은 정보가 저장되어 있습니다.

  • 출발지 IP/PORT
  • 목적지 IP/PORT
  • 전송 데이터

같은 아이피내 프로세스 구분을 가능케 하는 것이 PORT입니다.

포트는 0에서 65535까지 할당 가능합니다. 다만 0부터 1023까지는 규약처럼 정해진 포트가 있으므로 커스텀하게 사용하지 않는 것이 좋습니다.

  • FTP : 20, 21
  • TELNET : 23
  • HTTP : 80
  • HTTPS : 443

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

통신과정에서 IP는 변경될 수 있습니다. 또한 IP를 기억하기도 쉽지 않죠.
이때 도메인과 IP가 연결이 되어 있다면 도메인을 요청하면 연결된 IP로 데이터를 주고 받을 수 있게됩니다. 일종의 전화번호부와 같습니다.

  • google.com = 200.200.200.32