모든 개발자를 위한 HTTP 웹 기본 지식 : Internet Network

jkky98·2024년 7월 2일
0

HTTP

목록 보기
7/8

컴퓨터간 통신

클라이언트 컴퓨터와 서버 컴퓨터가 존재할 때, 클라이언트의 요청은 인터넷 망을 통해 서버로 전달된다. 이 과정에서 클라이언트의 요청은 여러 노드들을 거쳐서 최종적으로 서버에 도달하게 된다. 인터넷은 수많은 노드들로 이루어져 있으며, 각 노드는 네트워크 상에서 데이터 전송을 위한 중요한 역할을 한다. 요청은 클라이언트에서 시작해 다양한 라우터와 서버들을 지나면서, 최종적으로 서버에 도달하는 방식으로 진행된다. 이러한 구조는 데이터 전송을 더욱 효율적이고 유연하게 만들어준다.

https://www.submarinecablemap.com/
실제로 한국의 인터넷 노드는 일본 노드의 자식 노드이다. KT 인터넷이 하나 미국과 직통하는 길을 가지고 있다고는 한다.(해저케이블의 광섬유는 실제로 1초에 지구를 7번을 도는 속도라고 한다.)

IP(internet protocol)

현실에서 보내는 사람과 받는 사람의 주소를 운송장에 적어 택배를 보내는 것처럼, 인터넷 통신에서도 IP(주소)를 사용하여 클라이언트와 서버의 IP 주소를 담아 데이터를 전달한다.

인터넷 통신은 패킷이라는 단위를 통해 데이터를 전송한다. IP 패킷에는 다음과 같은 정보가 포함된다:

  • 출발지 IP 주소: 데이터를 보낸 주체의 주소.
  • 도착지 IP 주소: 데이터를 받을 대상의 주소.
  • 기타 정보: 데이터 전송에 필요한 다양한 메타데이터.
  • 전송 데이터: 실제로 전달하고자 하는 데이터.

결과적으로, IP 패킷은 데이터를 전송하기 위해 필요한 주소 정보전송 데이터를 포함하는 기본 단위로 동작한다.

IP의 한계

만약 클라이언트가 IP 패킷을 인터넷망으로 보냈는데, 도착지 주소의 컴퓨터가 꺼져 있다면, 요청은 전송되었지만 응답을 받을 수 없다. 이 경우, 데이터를 받았는지, 받지 못했는지조차 알 수 없는 상태가 된다.

또한, 패킷을 여러 개 보냈을 때 다음과 같은 문제가 발생할 수 있다:
1. 패킷이 순서대로 오지 않는 문제: 데이터를 재구성해야 하는 서버 측에서 혼란이 발생할 수 있다.
2. 패킷의 누락: 일부 패킷이 도중에 손실되더라도 서버는 이를 알 수 없다. 단지 "안 왔다"고만 인식할 뿐이다.

더욱이, 서버에서 통신하는 애플리케이션이 여러 개라면 IP 주소만으로는 어떤 애플리케이션과 소통해야 하는지 알 수 없다. IP는 컴퓨터의 주소를 나타낼 뿐, 그 내부에서 실행 중인 개별 애플리케이션을 식별하지 못한다. 따라서 IP만으로 모든 애플리케이션에 데이터를 전송하고 에러를 발생시키는 것은 비효율적이며, 서버 입장에서 큰 혼란을 초래할 수 있다.

TCP의 등장

TCP는 이러한 IP의 단점들을 극복시켜 준다. 인터넷 프로토콜 스택의 4계층은 아래와 같다.

IP위에 TCP의 과정이 존재함을 확인할 수 있다.

위의 과정으로 네트워크 통신의 예를 볼 수 있다. Hello, world! 라는 데이터를 HTTP 통신에 맞는 형식으로 소켓에 HTTP 패킷을 전달하면 소켓은 OS로 이를 전달하며 OS는 TCP패킷을 생성 -> IP패킷을 생성하고 최종적으로 LAN장비를 이용하여 인터넷 망으로 도착지를 찾아 패킷은 떠나게 된다.

TCP/IP 패킷 정보

IP 패킷안에 감싸져있는 TCP 세그먼트에는 출발지 PORT, 도착지 PORT와 전송제어, 순서, 검증정보등이 들어있다.

TCP의 특징

TCP 3 way handshake라는 방법을 통해 연결을 확인한다.(IP만 이용했을 때의 문제를 극복한다.) 데이터 전달을 보증하며 순서를 보장한다.

TCP 3 way handshake

TCP는 통신 이전 서로의 연결을 확인할 수 있는 방법을 제시한다 그것이 바로 TCP 3 way handshake이다. 클라이언트에서 서버로 SYN(접속 요청)을 보내고 그것을 받은 서버는 클라이언트에게 SYN(접속 요청) + ACK(요청 수락)를 보낸다. 다시 클라이언트는 서버에게 ACK(요청 수락)을 보낸다. 이로써 본격적인 통신전에 서로의 연결을 확인한다. 이 과정은 논리적인 절차일 뿐 실제로 패킷이 노드를 지나는 과정에서 노드들은 이 사실을 알지는 못한다.

  • 데이터 전달 보증 : TCP는 데이터를 전송할 때 수신자로부터 확인 응답(ACK)을 받는다. 송신자는 데이터를 전송한 후, 수신자로부터 해당 데이터가 성공적으로 도착했다는 확인 응답을 받기 전까지는 데이터를 전송한 것으로 간주하지 않는다. 만약 일정 시간 내에 확인 응답을 받지 못하면, 송신자는 해당 데이터를 다시 전송한다.

  • 순서 보장 : 서버로 여러 패킷이 들어올 때 서버에서 받는 패킷의 순서가 틀리다면 서버는 클라이언트에게 순서가 틀린 패킷부터 패킷을 다시보내라고 요청한다.

UDP(User Datagram Protocol)

UDP는 흔히 하얀 도화지에 비유된다. TCPIP의 보완적인 성격을 가지는 반면, UDPIP와 큰 차이가 없으며, 단지 Port체크섬 정도의 추가 기능만 제공한다. 즉, UDP는 추가 작업이 필요한 원초적인 통신 방식이다.

이러한 이유로, HTTP 통신을 사용하는 대부분의 개발자들은 기존에 TCP 기반 통신을 주로 활용해 왔다. 하지만, 최근 들어 UDP 사용이 증가하고 있다. 이는 UDP가 TCP의 3-way handshake와 같은 복잡한 과정을 거치지 않으므로 속도와 비용 면에서 더 우수하기 때문이다. 특히, 극한의 성능을 요구하는 애플리케이션에서 UDP가 선택되는 사례가 늘어나고 있다.

Port

IP는 흔히 집 주소에 비유되지만, 사실 더 넓은 범위를 나타내는 아파트 동에 가깝다. 포트동 내의 호수와 같아, 여러 애플리케이션(호)이 동시에 같은 IP 주소(동)를 사용할 수 있도록 한다. 이를 통해 서로 다른 네트워크 서비스가 동일한 물리적 네트워크 연결을 통해 통신할 수 있다.


포트와 IP 패킷

  • 포트 정보TCP 패킷에 담기며, IP 주소는 이를 감싸는 IP 패킷에 담긴다.
  • 포트 번호는 0부터 65535까지의 숫자로 구성되며, 세 가지 주요 범주로 나뉜다.

포트 범주

  1. Well-Known Ports (0-1023)

    • 표준 서비스 및 프로토콜에 할당된 포트.
    • 예: HTTP(80), HTTPS(443), FTP(21), SSH(22).
    • 표준 서비스를 위해 예약된 포트이므로 프로그래머가 직접 사용하지 않는 것이 좋다.
  2. Registered Ports (1024-49151)

    • 특정 애플리케이션과 관련된 포트.
    • 예: MySQL(3306), PostgreSQL(5432).
    • 주로 애플리케이션과 관련된 서비스에 사용된다.
  3. Dynamic or Private Ports (49152-65535)

    • 임시적인 연결에 사용되는 포트.
    • 클라이언트가 서버에 연결할 때 주로 사용되며, 연결이 종료되면 포트가 해제된다.

이처럼 IP와 포트는 함께 동작하여 네트워크에서의 세부적이고 유연한 통신을 가능하게 한다.

DNS


IP는 변경 가능성이 존재하며, 인간이 기억하기 어렵다. 특히, IPv6는 숫자가 길고 복잡한 구조를 가지며, 심지어 IPv4조차도 "랜덤한 숫자들의 배열"처럼 보이기 때문에 직관적이지 않다. 반면, www.google.com과 같은 도메인 주소는 서비스의 성격을 쉽게 파악할 수 있어 사용자 친화적이다.

또한, IP는 변경될 수 있다. 만약 IP가 변경된다면, 요청을 보내는 클라이언트는 여전히 이전 IP(변경 전 주소)와 포트로 데이터를 보내게 되어 연결이 실패할 것이다.

이러한 IP의 불편함변동성을 해결하기 위해 DNS(Domain Name System)가 존재한다.
DNS는 IP와 도메인 이름을 매핑하는 역할을 하는 중개자로 동작한다.
만약 서버의 IP가 변경되더라도, 서버는 자신의 변경된 IP 정보를 DNS 서버에 업데이트하고, 클라이언트는 도메인 이름(예: google.com)만으로 요청을 보낸다.


DNS의 장점

  1. IP 변경의 영향을 받지 않음
    클라이언트는 도메인 이름을 통해 서버와 통신하므로, 서버 IP가 변경되더라도 중단 없이 연결 가능하다.

  2. 가독성과 직관성
    도메인 이름을 사용하면 IP만 사용할 때보다 서버나 서비스의 성격을 명확히 표현할 수 있다. 예: www.google.com.


DNS를 통해 IP 주소의 까다로움변경 가능성으로 인한 문제를 효율적으로 해결할 수 있다.

profile
자바집사의 거북이 수련법

0개의 댓글