HTTP 통신을 이해해보자 -1

박가현·2023년 3월 22일
7

HTTP

목록 보기
1/8
post-thumbnail

인터넷 네트워크

( 인터넷 통신, ip, tcp udp , port , dns)

인터넷 프로토콜(IP)은 데이터 패킷이 네트워크를 통해 이동하고 올바른 대상에 도착할 수 있도록 데이터 패킷
을 라우팅하고 주소를 지정하기 위한 프로토콜
또는 규칙의 집합입니다.

IP ( 인터넷 프로토콜)

인터넷 프로토콜이란?

데이터 패킷이 네트워크를 통해서 이동하고 올바른 대상에 도착할 수 있도록 데이터 패킷을 라우팅하고 주소를 지정하기 위한 규칙

인터넷 프로토콜은 지정한 ip 주소에 패킷이라는 통신 단위로 데이터를 전달한다

ex)

Untitled

ip주소가 100.100.100.1 인 클라이언트는 ip주소가 200.200.200.2인 서버에게 데이터를 전달하려 한다. 이때 패킷이라는 통신 단위로 데이터를 전달하는데 아래와 같이 전송 데이터에다가 출발지 ip, 목적지 ip와 같은 정보들을 감싸서 전달한다

Untitled

이렇게 감싸진 패킷은 노드에게 전달되고 노드들끼리 패킷을 전달하면서 최종적으로 서버에게 전달된다 ( 이때 노드는 네트워크에 연결되어 있는 1개의 기계를 의미한다)

서버가 클라이언트에게 보내는 데이터 패킷도 마찬가지이다.

하지만 이런 ip 프로토콜의 한계도 존재한다

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능상태여도 패킷 전송이 가능하다
    • 위 예시를 들어서 서버가 꺼져있어도 이를 확인하지 않고 데이터 패킷을 보낸다
  • 비신뢰성
    • 중간 노드에서 문제가 생겨서 내가 보낸 패킷이 유실될 수도 있다
    • 또한 패킷 용량이 크면 끊어서 패킷을 끊어서 보낸다( ex. hello 패킷을 보내고 world 패킷을 보낸다) 이때 패킷 순서가 뒤바뀔 수도 있다 ( hello 이후 world가 도착해야 하는데 world 패킷 도착 후 hello가 도착)
  • 프로그램 구분
    • ip주소는 네트워크 환경 내에서 컴퓨터의 주소이다. 이는 컴퓨터 주소를 뜻하지만 컴퓨터 내의 프로그램 주소를 뜻하지 않는다
    • 이러면 ip 주소 100.100.100.2인 컴퓨터에서 데이터를 보냈을 때 이 컴퓨터의 어떤 애플리케이션이 데이터를 전송했는지 알 수 없다 ( 음악 애플리케이션에서 전송했는지 동영상 애플리케이션에서 전송했는지 )

⏩ 그래서 이런 ip 주소의 문제를 해결하기 위해 tcp , udp 가 등장하였다 !


TCP , UDP

프로토콜 계층

Untitled

실제 데이터가 전송될때 과정을 살펴보자

프로그램( 애플리케이션) 에서 hello, world 라는 메시지를 생성한다 이 메시지를 socket 라이브러리를 통해서 전달한다 ( 이때 socket 라이브러리는 데이터를 내보내거나 데이터를 받기 위한 창구라고 생각하자) 이 메세지에다가 tcp 정보를 씌우고 tcp 정보에다가 ip 정보를 씌워서 패킷을 생성하고 물리적 전송을 한다 ( 이 부분에 대해서는 네트워크 공부가 더 필요)

Untitled

(위 그림은 tcp , ip 패킷 정보이다)

  • TCP 정의 ( Transmission Control Protocol)

    TCP는 서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜으로 ip 프로토콜의 신뢰성을 보안하기 위해 만들어졌다

TCP 역할

  • 연결지향 3way handshake

    • 연결을 하기 전에 클라이언트에서 서버로 연결 요청을 하는 syn이라는 메시지를 보낸다
    • 이후 메시지를 잘 받았다면 서버에서 클라이언트에게 요청수락(ack라는 메시지)와 더불어 연결 요청(syn) 메시지를 보낸다
    • 그리고 클라이언트는 서버에게 요청수락이라는 메시지를 보낸 후 데이터를 전달한다 ( 요즘에는 ack 보낼때 같이 데이터도 보냄)
    • 하지만 이것은 논리적으로만 연결된거지 물리적으로 연결된 것은 아니다 (가상연결)
    • https://www.inflearn.com/questions/309074/tcp-3way-handshake에-대해서
  • 데이터 전달보증

    • 클라이언트에서 데이터를 전송하면 데이터를 잘 받았는지 보내주기에 인증이 가능하다
  • 순서보장

    • tcp는 ip 와 다르게 순서를 보장한다 예를 들어 a,b,c 순서로 도착해야 한다고 가정.
    • a,c,b로 서버에 도착 그러면 잘못된 부분부터 다 버리고 c번부터 다시 보내라고 명령한다
    • 물론 서버에서 최적화할 수도 있겠지만 기본적으로는 위와 같은 방식으로 순서를 보장

이런 검증정보들이 tcp에 존재하기에 가능하다

UDP

  • UDP란 ? ( User Datagram Protocol )
    • ip랑 거의 같고 port와 체크섬( 이 메시지에 대해 제대로 맞는 지 검증해주는 데이터) 정도만 추가된 것이다
    • tcp 3way handshake , 데이터 전달 보증 , 순서 보장도 안하지만 UDP를 사용하는 이유는?
      • TCP처럼 신뢰성을 보장하진 않지만 빠른 전송 속도를 제공하여 신뢰성 보장보다 연속성과 성능이 더욱 중요시되는 서비스에는 UDP를 사용

PORT

정의

  • 클라이언트 입장에서 서버 안에서 작동하는 여러 개의 프로세스를 구별하기 위한 식별자

DNS

ip 주소의 단점

  • 기억하기 어렵다
  • ip 주소는 바뀌는 경우가 많다

⏩ 그래서 dns 서버에 도메인을 사서 도메인 명을 등록한다.

그래서 클라이언트에서 google.com이라는 도메인명을 DNS 서버에 전달하면 이에 해당하는 ip주소를 응답한다 이 ip 주소를 가지고 서버에 접속한다


위 내용은 김영한 - 모든 개발자를 위한 HTTP 웹 기본 강의를 바탕으로 작성되었습니다.

profile
프론트엔드 공부일지

1개의 댓글

comment-user-thumbnail
2023년 3월 22일

좋은 글 잘 보고 갑니다!^^

답글 달기