2 분 소요

1. 데이터 전송?

  • 수 많은 노드로 연결된 인터넷 망에서 IP라는 주소를 통해 데이터를 전달
  • 데이터는 패킷이라는 단위로 전송됨
  • IP만을 가지고 데이터를 전송하게 되면 발생하는 문제들이 있음
    • 주소가 잘못 됐으면? 받을 사람이 상태가 이상해서 못받으면? 중간에 패킷이 사라지거나 순서대로 안오면? ip에 갔더니 서비스가 여러개라 어느 서비스랑 통신해야하는지 모르겠으면?

2. TCP, UDP

  • 인터넷 프로토콜 스택 중 전송 계층
  • IP 패킷을을 TCP 세그먼트로 한번 더 감쌈
  • TCP (Transmission Control Protocol)
    • TCP 세그먼트에는 ‘연결’, ‘전달’, ‘순서’에 대한 정보가 있음
    • 연결 보장 - TCP 3 way handshake( syn - syn+ack - ack ). 즉, 사전에 연결작업을 통해 수신하는 곳을 확인한 후 전송 (신 - 신에크 - 에크로 연결 확인 후 데이터를 보내지만, 요즘은 최적화하여 세 번째 에크에 같이 보내는 경우가 많음)
    • 전달 보증 - 연결 보장에서 나오는 신뢰성
    • 순서 보장 - 패킷 순서가 바뀌어 도착하면 잘못된 순서부터 다시 보내라고 요청함
  • UDP (User Datagram Protocol)
    • IP 패킷에 PORTChecksum 정도만 추가됨.
    • 때문에 연결보장 및 순서보장이 되지 않지만, 그만큼 사용자가 여러가지 최적화 기능을 구현할 여지가 있음

3. PORT

  • IP에서 각 어플리케이션을 특정하게 해주는 연결주소
  • 0~65535 까지 있지만, 0~1023은 컨벤션들이 있기 때문에 거의 사용하지 않음
    • FTP : 20, 21
    • TELNET : 23
    • HTTP : 80
    • HTTPS : 443

4. DNS

  • IP 주소를 대체해서 문자로 사용하게 해주는 서비스 혹은 시스템
  • DNS 서버가 있고, 거기에는 도메인과 IP 관계가 매핑 된 테이블이 있음.
  • 즉, google.com을 인터넷 주소창에 치면 DNS 서버에서 IP주소를 찾아서 가게 됨.
  • 좋은 점 1 : 기억하기 쉽다
  • 좋은 점 2 : 연결에 있어서 한 단계를 더 두기 때문에 IP주소 변경에도 훨씬 유리하다 (DNS 서버 테이블 값만 바꿔주면 된다!)

5. URI

  • Uniform Resource Identifier. 리소스(Resource)를 통일된 방식(Uniform)으로 식별하게 해주는 식별자(Identifier)
  • 즉, 식별해 주는 것을 말하기 때문에 URL, URN은 이 안의 개념이라고 할 수 있다.
  • 식별자의 개념으로 L (Locator)는 위치를 지정하고, N(Name)은 이름을 부여한다. 이에 따라 쓰이는 곳이 달라질 수 있다.
  • 현재는 URN은 거의 쓰지 않기 때문에 URI와 URL을 거의 혼용해서 사용해도 크게 무리가 없다.

URL

  • URL의 구성

    scheme://[userinfo@]host[:port][/path][?query][#fragment]
    https://www.google.com:443/search?q=hello&hl=ko
    
    1. 프로토콜
      • http, https, ftp 등
    2. 유저정보
      • 요즘은 사용 안함
    3. 호스트
      • 도메인명 또는 IP주소
    4. 포트
      • http는 80, https는 443을 주로 사용하며, 포트는 생략 가능
    5. path
      • 리소스 경로. 계층적 구조. 우리에게 익숙한 윈도우 폴더 형태로 리소스에 접근함.
    6. query (= query parameter, query string 으로 불림)
      • ?로 시작하고 &로 체이닝 가능
      • key=value 형태
    7. fragment
      • html 내부 북마크 등에 사용하며, 서버에 전송하는 정보는 아님

6. 웹 브라우저의 요청흐름

  1. 웹 브라우저 주소창에 https://www.google.com/search?q=hello&hl=ko를 작성하고 Enter

  2. 웹 브라우저는 HTTP 메시지를 만든다.

    GET /search?q=hello&hl=ko HTTP/1.1
    HOST: www.google.com
    
  3. SOCKET 라이브러리를 통해 OS로 전달된다.

  4. TCP/IP 패킷이 생성되고 그 안에 HTTP 메시지가 담긴다.

  5. 해당 패킷이 네트워크 인터페이스를 통해 인터넷으로 보내진다.

  6. 요청을 받은 호스트가 패킷을 까서 HTTP 메시지를 확인하여 작업을 처리한다.

  7. 처리한 후 위 과정처럼 TCP/IP 패킷을 생성하고 그 안에 응답 HTTP 메시지를 담아서 인터넷으로 보낸다.

  8. 해당 패킷이 다시 나에게 도착한다.


마지막 수정일시: 2022-12-16 14:44

카테고리:

업데이트:

댓글남기기