CS/Network

[HTTP] 인터넷 네트워크

pipes0512 2024. 5. 14. 00:24

IP(Internet Protocol)

역할

  • 지정한 IP 주소(IP Address)에 데이터 전달
  • 패킷(Packet: Package + bucket)이라는 통신 단위로 데이터 전달
    : IP 패킷 정보에는 출발지 IP, 목적지 IP 등이 들어있다.

한계

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
      : 정확히 패킷이 전달되었는지 알 수 없다.
  • 비신뢰성
    • 중간에 패킷이 사라지면? (중간에 어떤 노드에서 패킷이 소실된다면?)
      : 정확히 패킷이 전달되었는지 알 수 없다.
    • 패킷이 순서대로 안오면?
      : 패킷을 먼저보낸다고 먼저 받는 것이 아닐 수 있는데(이동하는 경로가 다를 수 있기 때문), 이때 패킷을 받는 입장에서 순서를 알 수 없다.

TCP, UDP

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

높은 계층에서 낮은 계층 순서
  1. 애플리케이션 계층(Application Layer) - HTTP, FTP
  2. 전송 계층(Transport Layer) - TCP, UDP
  3. 인터넷 계층 - IP
  4. 네트워크 인터페이스 계층 - 랜카드, 랜드라이버
메시지 통신과정 예시
  1. 웹 브라우저나 게임과같은 애플리케이션에서 메시지를 생성하고소켓 라이브러리를 통해서 TCP계층에 메시지를 전달한다.
  2. TCP 계층에서 TCP 정보를 생성하고 앞서 받은 메시지 데이터를 포함하는 TCP 세그먼트를 IP 계층에 전달한다.
  3. IP 계층에서 TCP 세그먼트를 포함한 IP 패킷을 생성하여 네트워크 인터페이스(LAN 카드)에 전달한다.
  4. 네트워크 인터페이스에서 패킷을 Ethernet frame으로 감싸서 인터넷을 통해 서버로 전달한다.
  • 최종적으로 보내지는 wrapper의 형태는 가장 바깥쪽부터 Ethernet frame - IP 패킷 - TCP 세그먼트 - HTTP 메시지 이다.

TCP/IP 패킷 정보

  • TCP 세그먼트에는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 있다.
  • TCP 세그먼트는 출발지 IP, 목적지 IP 등의 정보를 가지고 있는 IP 패킷으로 감싸져있다.

TCP 특징

: 전송 제어 프로토콜(Transmission Control Protocol)

  • 연결 지향 - TCP 3 way handshake (가상 연결)
  • 데이터 전달 보증
  • 순서 보장

TCP 3 way handshake

  1. SYN
    : 클라이언트가 서버에 SYN 패킷을 보내 연결 요청을 한다.
    (데이터 전송을 시작하기 원하는 클라이언트의 초기 시퀀스 번호)
  2. SYN + ACK
    : 서버가 클라이언트의 SYN 패킷을 받고 연결을 수락하는 SYN-ACK 패킷으로 응답한다.
    (서버의 초기 시퀀스 번호, 클라이언트의 시퀀스 번호+1)
  3. ACK
    : 클라이언트는 서버의 SYN-ACK에 대한 ACK 패킷을 보내 연결확인을 완료한다.
    (서버의 시퀀스 번호+1)
  • 위 과정으로 연결여부 확인
  • cf) 최근에는 최적화되어 ACK를 보낼 때 데이터를 보낸다.

데이터 전달 보증

  • 클라이언트가 보낸 데이터가 서버에 잘 도착했을 경우 서버는 클라이언트에 데이터를 잘 받았다는 응답을 다시 보낸다.

순서 보장

  • 클라이언트가 패킷1, 패킷2, 패킷3 순서로 전송했는데, 서버거 패킷1, 패킷3, 패킷2 순서로 도착했을 경우, 서버는 클라이언트에게 패킷2부터 다시 보내라는 응답을 보낸다.

UDP 특징

: 사용자 데이터그램 프로토콜(User Datagram Protocol)

  • 하얀 도화지에 비유(기능이 거의 없음)
  • TCP에 존재하는 연결지향, 데이터 전달 보증, 순서 보장 기능이 없음
  • 단순하고 빠름
  • IP와 거의 비슷하며 PORT와 체크섬 정도만 추가된다.
  • 애플리케이션에서 추가 작업 필요
    • TCP는 수정이 불가하므로 최근에는 UDP를 최적화하여 http3에 사용하는 중이다.

PORT

  • 앞서 TCP 세그먼트에서 출발지 PORT, 목적지 PORT를 포함한다고 했었다.
  • 만약 내 컴퓨터에서 게임과 웹서핑을 같이 하고있다면 이를 PORT로 구분한다.
    • IP가 아파트라면 PORT는 몇호인지를 나타낸다고 보면됨
  • 0 ~ 65535 할당가능
  • 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
    • FTP - 20, 21
    • TELNET - 23
    • HTTP - 80
    • HTTPS - 443

DNS

: 도메인 네임 시스템(Domain Name System)

  • IP는 기억하기도 어렵고 변경될 수 있다.
  • 나만의 도메인 명 (ex: google.com)을 DNS서버에 등록해두면, 클라이언트가 도메인 명을 입력하면 나의 IP로 접속한다.
    • IP가 변경될 경우 변경된 나의 IP를 원래 도메인에 등록해두면 된다.

 

공부자료: 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한

'CS > Network' 카테고리의 다른 글

[HTTP] URI와 웹 브라우저 요청 흐름  (0) 2024.05.16