ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP 웹 기본 지식 1편
    CS/네트워크 2024. 12. 1. 13:44

    출처: https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

    IP 프로토콜

    • 클라이언트와 서버는 각 IP를 갖는다.
    • 클라이언트와 서버가 통신하기 위해서 중간에 노드를 거쳐서 간다. 
    • 즉, IP 프로토콜이란 지정한 IP 주소에 데이터를 전달한다. 
      • 여기서 IP주소는 네트워크 상에서 특정 호스트(컴퓨터)를 식별하는 데 사용된다.

    IP 프로토콜의 한계

    • 10년전에 살던 친구의 집 주소만 알았을 때, 친구한테 편지를 보낸다고 생각해보자.
    • 그 친구가 아직도 거기 살고 있다고 보장할 수 있는가? 
    • 편지가 친구네 주소로 이동하고 있는 과정에서 우체국 아저씨 가방에서 빠져서 잃어버렸다. 
    • IP 프로토콜도 마찬가지이다. 
      • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다. -> 비연결성
        • 여기서 패킷은 편지를 보내기 위해 보내는이, 받는이의 주소가 있을 거 아니냐? 그 데이터를 모아둔 거라고 생각하자.
      • 중간에 패킷이 사라지면? 패킷의 용량이 커서 패킷을 나누어 보낼때, 패킷이 순서대로 오지 않으면? -> 비신뢰성
        • 예를 들어, 패킷들이 다른 노드들를 타서 각자 이동할 수도 있다. 그러다 보면 패킷의 순서를 보장할 수 없지 않겠는가?
      • 프로그램 구분:
        • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면?
        • 쉽게 말해 IP 주소는 네트워크 상에서 특정 호스트를 식별하는 데 사용된다. 그러나, 한 호스트 내에서 실행 중인 여러 애플리케이션을 구분하지 못한다. 
          • 예를 들어, 친구네 아파트를 찾아가야 하는 데 101동이라는 것만 알려주고, 호수를 안알려주면 어떻게 찾아갈거냐 ?

    TCP / UDP

    • TCP는 IP 프로토콜의 한계를 해결해준다. 
    • 어떻게???
      • IP 패킷에 출발지, 도착지 IP가 들어가고 IP 프로토콜의 한계였던 같은 서버의 여러 프로그램이 돌아갈 때 문제 등을 TCP 세그먼트 안의 내용으로 해결할 수 있다.
        • TCP 세그먼트: 그냥 TCP 패킷이라 생각하자. 그 안에 출발/목적지 PORT 가 있는 데 같은 서버내의 주소를 구분할 수 있다고 생각하자.
          • IP : 101동, PORT: 101호 
    • TCP 특징
      • 전송 제어 프로토콜(Transmisson Control Protocol)
        • 연결 지향: TCP 3 way handshake(가상연결)
          • 연결을 하고 메시지를 보낸다는 뜻이다. -> 비연결성 문제를 해결할 수 있다. 
          • 클라이언트가 서버로 SYN(접속요청) 을 보낸다. 
          • 서버는 SYN + ACK (요청수락) 을 클라이언트에게 보낸다.
            • 만약 이 답장이 안오면 클라이언트는 아 서버 꺼졌나 보다 하겠지
          • 클라이언트는 서버에게 다시 ACK을 보낸다. 
          • 그리고 데이터를 전송한다.
          • cf) 요즘은 ACK와 함께 데이터 전송이 가능하다 한다.
          • 논리적 연결이다. 중간에 수많은 서버들 생각하지 말고 개념적으로 연결되었구나 생각하자.
        • 데이터 전달 보증, 순서 보증
          • 중간에 메시지를 받지 못하면 내가(클라이언트) 알 수 있다.
            • 예를 들어, 하나의 패킷이 너무 커서 이걸 3개로 나눈다. 패킷1, 패킷2, 패킷3으로 나누었다. 그리고 이걸 보냈는 데, 도착 순서가 패킷 1 -> 패킷3 -> 패킷 2 로 도착했다. 그러면 이제 패킷 1 이후로 다시 보내 !!! 그러면 이제 다시 보내는 거임. (물론 최적화 기법에 따라 로직이 다를 수도 있겠다) 

    따라서 TCP/IP 프로토콜을 보면 신뢰할 수 있고 현재는 대부분 TCP를 사용한다. 


    UDP(User Datagram Protocol)

    • 하얀 도화지에 비유 (기능이 거의 없음)
    • 연결 지향 x
    • 데이터 전달 보증, 순서 보장 x
    • 단순하고 빠름
    • IP 하고 거의 같다. UDP는 PORT와 체크섬 정도만 추가되었다. 따라서 애플리케이션에서 추가 작업이 필요하다.

    DNS(Domain Name System)

    맨 위에 클라이언트와 서버의 IP 주소 올리지 말고 기억해봐라. 아마 안 날 것이다. 그럼 우리가 실제로 쓸 데 IP 주소를 입력해야 된다고 생각해보자. 매우 힘들다. 뿐만 아니라 IP는 변경될 수 있다. 어후 더 힘들어진다. 

     

    따라서 우리는(클라이언트) DNS 서버에 도메인명(google.com)을 요청하고 DNS서버는 그에 해당하는 IP주소를 넘겨준다. 그리고 클라이언트는 넘겨 받은 주소로 서버에 접속하면 되는 것이다. 

     

    2편 바로가기

    'CS > 네트워크' 카테고리의 다른 글

    HTTP 웹 기본 지식 4편  (2) 2024.12.02
    HTTP 웹 기본 지식 3편  (0) 2024.12.01
    HTTP 웹 기본 지식 2편  (2) 2024.12.01
    [네트워크] 클라이언트 - 서버 모델  (2) 2024.10.31
    Socket, Port, TCP connection 개념  (0) 2024.05.22
Designed by Tistory.