[HTTP/Network] 인터넷 네트워크

dk.han·2022년 10월 7일
0
post-thumbnail

인터넷 통신

1. 컴퓨터끼리 인터넷 상에서 어떻게 통신하지?

간단히 말하면 인터넷망을 통해서 통신을 하게 되는데, 인터넷망이 단순하지는 않다.
인터넷망에 해저 광케이블, 인공위성 등등... 수많은 종류의 노드(네트워크를 중간에서 연결해 주는 서버)들이 존재하고 이를 통해 통신을 하게 된다.
그럼 어떤 규칙에 따라 통신이 이루어 질까? 바로 IP를 이해해야 한다.

IP (Internet Protocol)

복잡한 인터넷망에서 미국에 있는 친구에게 메시지를 보낸다고 하자. 그럼 최소한의 규칙이 필요한데 그게 바로 IP 주소라는 것을 통해 가능하다.

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

패킷에는 출발지 IP, 목적지 IP, 기타 옵션 등의 정보가 담겨 있다.
친구에게 보낼 메시지에 패킷 정보를 씌워 인터넷망에 던지게 되면, 목적지 IP에 도착 가능한 서버(노드)들을 찾아 이동하여 메세지가 도착하게 된다. 요청과 응답 두 가지 모두 같은 방식으로 동작한다.
하지만 인터넷망이 복잡하기 때문에 요청과 응답이 서로 같은 노드를 타고 이동하는 것은 아니다.

IP의 한계

  1. 비연결성

    패킷을 받을 대상이 존재하지 않거나, 서비스 불능 상태여도 패킷을 전송한다. 대상 서버가 활성화돼있는지를 모르는 상태여도 무조건 패킷을 전송한다는 의미.

  2. 비신뢰성

    중간에 서버(노드)에 문제가 생겨 패킷이 유실되어도 알 수 없다. 또한 패킷 1, 2를 순서대로 전송하고 목적지에서도 순서대로 받고 싶지만, 이를 보장할 수 없다. 패킷이 어떤 노드를 선택해서 가냐에 따라 순서는 달라질 수 있기 때문이다.

  3. 프로그램 구분

    같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면 어느 곳에서 보내고자 하는 패킷인지를 구별할 수 없다.

위의 문제들을 해결해 주는 것이 바로 TCP 프로토콜이다.

TCP (Transmission Control Protocol)

IP의 한계에서 발생한 문제점 들은 TCP(전송 제어 프로토콜) 정보를 생성하여 메시지(데이터), IP 패킷과 결합시켜 보내주게 되면 해결된다.
TCP 정보에는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보.. 등이 포함된다.

TCP 특징

  1. 연결 지향 - TCP 3 way handshake

    • SYN: 접속요청 메세지 , ACK: 요청수락 메세지.

    • 클라이언트에서 서버로 SYN 메세지를 보내면,

    • 서버에서 클라이언트로 SYN + ACK 메세지를 보낸다

    • 그러면 클라이언트에서 ACK를 보낸다

    • 위 과정을 통해 클라이언트와 서버가 논리적인 연결이 되었다 보고 데이터 전송을 시작한다

  2. 데이터 전달 보증

    IP와는 달리 TCP에서는 데이터를 전송하고 서버가 받으면 잘 받았다는 메시지를 보내주게 된다. 이를 통해 메시지를 받지 못하면 데이터가 유실된 것이라 인지할 수 있다.

  3. 순서 보장

    • 클라이언트가 서버에게 패킷 1, 2, 3을 순서대로 전송 했는데
    • 서버에 패킷 1, 3 ,2 순서로 도착하게 됬다면
    • 서버는 클라이언트에게 패킷 2부터 다시 보내라고 메세지를 전달함.
    • 이를 통해 데이터의 도착 순서를 보증할 수 있게 됨.
  4. PORT를 통해 어플리케이션을 구분

    PC에서 게임, 화상 통화, 웹 브라우저 요청 3가지를 하고 있다고 하자. 그럼 패킷들을 보내고 받을 때 어떤 어플리케이션에 필요한 패킷인지는 PORT를 통해 구분한다.
    IP는 서버를 찾는 것이고, 서버 안에서 돌아가는 애플리케이션을 구분하는 것은 PORT이다.
    IP가 아파트 단지라고 하면 PORT는 몇 동 몇 호 라고 비유할 수 있다.

    • 0 ~ 65535 할당 가능.
    • 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋다.
    • FTP - 20, 21, TELNET - 23, HTTP - 80, HTTPS - 443
  5. DNS

    IP는 기억하기가 어렵고, 변경이 될 수 있다. 때문에 연락처와 비슷한 기능을 하는 DNS를 사용한다. Domain Name System의 줄임말이며 도메인 명을 IP 주소로 변환 시켜준다.

    1. 클라이언트에서 DNS 서버에 접속하고자 하는 도메인 명을 요청으로 보내면
    2. DNS 서버가 응답으로 IP를 보내주게 된다.
    3. 클라이언트에서는 받은 IP로 접속한다.

UDP (User Datagram Protocol)

TCP의 특징들인 3-way-handshake, 데이터 전달 보증, 순서 보장들이 하나도 없다. 기능이 거의 없기 때문에 하얀 도화지에 비유된다. IP 패킷과 거의 비슷하나 PORT와 체크섬 정도만 추가된다.
그럼 이건 어디에 쓸까? TCP는 기능은 많지만 여러 정보가 담기다 보니 데이터의 크기도 커지고, 때문에 전송 속도도 빠르게 만들기 어려워 최적화에 어려움이 있다. 때문에 최적화를 위해서 UDP를 이용하는데 최근에는 많이 연구되고 쓰이고 있다.

URI와 웹 브라우저의 요청 흐름

URI(Uniform Resource Identifier)

통합 자원 식별자로써 인터넷에 있는 자원을 나타내는 유일한 주소다. URI의 하위 개념으로는 URL, URN이 있다.

  • URL(Uniform Resource Location)

    일반적으로 우리가 웹 브라우저에서 적는 주소를 말하며 네트워크 상에서 리소스가 어디에 있는지 알려주기 위한 규약이다.

  • URN(Uniform Resource Name)

    리소스의 이름을 부여하여 찾는 방법이지만, 실제로 URN 이름만으로 찾을 수 있는 방법이 보편화되지 않았다.

  • 때문에 URI와 URL을 같은 의미로 봐도 무방하다.

https://www.google.com/search?q=hello&hl=ko 이 URL을 분석해 보자면
scheme://host[:port][path][?query]로 이루어져 있다

  • scheme에는 주로 프로토콜이 쓰이며 https 프로토콜이 사용되었다.
  • host에는 www.google.com
  • port는 https이므로 443이지만 일반적으로 생략된다.
  • path는 리소스 경로이며, 계층적 구조로 쓰인다. 여기서는 /search 가 사용 되었다.
  • query parameter 또는 query string으로 불리며 (q=hello&hl=ko)가 사용 되었다.

웹 브라우저 요청 흐름

웹 브라우저에서 https://www.google.com:443/search?q=hello&hl=ko를 검색한다고 하자.

  1. www.google.com을 DNS 서버에 요청을 보내 IP를 받고, 포트정보를 찾아옴.
  2. 웹 브라우저가 HTTP 요청 메세지를 생성하고,
  3. Socket 라이브러리를 통해 전달한다 ( TCP/IP 연결(IP, PORT), 데이터 )
  4. 전달 받은 정보를 통해 TCP/IP 패킷을 생성하고 HTTP 메세지, 데이터를 포함 시킨다.
  5. 인터넷 노드들을 통해 요청 패킷이 구글 서버에 전달 되면,
  6. 서버에서 HTTP 요청 메세지를 해석해서 보내줄 데이터와 HTTP 응답 메세지를 생성한다.
  7. 응답 패킷을 웹 브라우저로 전달하면, HTPP 응답 메세지를 받아 렌더링 하게 된다.

0개의 댓글