IP(Internet Protocol) 및 TCP/UDP

Xonic·2021년 8월 17일
1

HTTP

목록 보기
1/6
post-thumbnail

해당 시리즈는 김영한님 강의를 보고 정리한 시리즈입니다.

IP

목차

  1. IP (인터넷 프로토콜)
  2. TCP/UDP
  3. 웹브라우저 요청 흐름
    참조

1. IP (인터넷 프로토콜)

  • 지정한 IP 주소에 데이터 전달
  • 패킷이라는 통신 단위로 데이터 전달

ex) 100.100.100.1 → 200.200.200.2 로 request, response 행위를 할 때, 지정된 규약에 의해서 전달된다.

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
  • 비신뢰성
    • 중간에 패킷이 사라지면?
    • 패킷이 순서대로 안오면?
  • 프로그램 구분
    • 같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 둘 이상이면?
  • 패킷 전달 순서 문제
    • 일정 용량 이상의 패킷을 전송할 때, 끊어서 보내게 되는데 순서대로 가지 않는다.

1. 인터넷 프로토콜 스택의 4계층

인터넷 프로토콜 스택

계층프로토콜
애플리케이션 계층HTTP , FTP
전송 계층TCP, UDP
인터넷 계층IP
네트워크 인터페이스 계층Ethernet, ARP

2. 네트워크 순서

  1. Socket 라이브러리를 이용해 OS 계층에 메시지 전달
  2. 메시지에다가 TCP 정보를 씌운다.
  3. IP에 관련된 데이터를 얹는다
  4. Ethernet frame 정보를 얹는다. (MAC 주소 같은)

2. TCP/UDP

1. TCP 특징

  • 전송 제어 프로토콜 (Transmission Control Protocol)
    1. 연결 지향 - TCP 3 way handshake (가상 연결)
      1. client → server (SYN : 접속 요청)
      2. client ↔ server (SYN + ACK)
      3. clinet → server (ACK : 요청 수락)
        1. ACK와 함께 데이터 전송 가능하다.
    2. 데이터 전달 보증
    3. 순서 보장
    4. 신뢰할 수 있는 프로토콜
    5. 현재는 대부분 TCP로 통신이 이루어진다.

2. TCP/IP 패킷 정보

3. UDP 특징

  • User Datagram Protocol
  • 하얀 도화지에 비유 (기능이 거의 없음)
  • 연결지향 - TCP 3 way handshake X
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
  • 정리
    • IP와 거의 같다. + PORT + 체크섬 정도만 추가
    • 애플리케이션에서 추가 작업 필요
    • 요즘 HTTP 3가 나오면서 굉장히 뜨고 있다.

IP는 목적지 정보, PORT는 목적지 서버의 애플리케이션 구분자라고 보면 된다.

ex) IP를 아파트, PORT를 동호수라 한다.

4. PORT

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

5. DNS

  • 전화번호부
  • 도메인 명을 IP주소로 변환.

6. URI (Uniform Resource Identifier)

  • Uniform : 리소스 식별하는 통일된 방식
  • Resource : 자원, URI로 식별할 수 있는 모든 것 (제한없음)
  • Identifier : 다른 항목과 구분하는데 필요한 정보
  • URL : Uniform Resource Locator
  • URN : Uniform Resource Name

결론 : URI와 URL은 비슷한 의미이다.

7. URL 전체 문법

  1. scheme
    • 주로 프로토콜 사용
    • 프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙
      • 예) http, https, ftp 등
    • http는 80포트, https는 443 포트를 주로 사용, 포트는 생략 가능
    • https는 http에 보안 추가 (HTTP Secure)
  2. [userinfo@]
    • URL에 사용자 정보를 포함해서 인증
    • 거의 사용하지 않음
  3. host
    • 호스트명
    • 도메인명 또는 IP 주소를 직접 사용 가능
  4. [:port]
    • 접속 포트
    • 일반적으로 생략, 생략시 http는 80, https는 443
  5. [path]
    • 리소스 경로(path), 계층적 구조
  6. [?query]
    • key = value 형태
    • ?로 시작, &로 추가 가능
    • query parameter, query string 등으로 불림, 웹서버에 제공하는 파라미터, 문자 형태
  7. [#fragment]
    • fragment
    • html 내부 북마크 등에 사용
    • 서버에 전송하는 정보 아님

3. 웹브라우저 요청 흐름

  1. 웹브라우저가 DNS를 조회 (브라우저 캐시, hosts 파일 먼저 참조)

  2. IP와 포트 정보를 찾아냄

  3. HTTP 요청 메시지 생성

    • GET /search?q=hello&hl=ko HTTP/1.1
      Host: www.google.com
  4. SOCKET 라이브러리를 통해 전달

    • A : TCP/IP 연결(IP, PORT) → SYN, SYN ACK, ACK
    • B : 데이터 전달
  5. TCP/IP 패킷 생성, HTTP 메시지 포함

  6. 호스트 서버에서 HTTP 응답메시지 생성.

  7. 클라이언트 브라우저에서 HTTP 렌더링

참조

profile
공부 한 것을 공유하는 블로그입니다.

0개의 댓글